diff --git a/.gitignore b/.gitignore index df1a13b2..b152f57d 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ -/logs \ No newline at end of file +/logs +.env \ No newline at end of file diff --git a/README.md b/README.md index a5934b2a..cc55b3f4 100644 --- a/README.md +++ b/README.md @@ -40,6 +40,7 @@ It's like Laravel Homestead but for Docker instead of Vagrant. - [Install Laravel from a Docker Container](#Install-Laravel) - [Run Artisan Commands](#Run-Artisan-Commands) - [Use Redis](#Use-Redis) + - [Use Mongo](#Use-Mongo) - [PHP](#PHP) - [Install PHP Extensions](#Install-PHP-Extensions) - [Change the PHP-FPM Version](#Change-the-PHP-FPM-Version) @@ -48,6 +49,7 @@ It's like Laravel Homestead but for Docker instead of Vagrant. - [Run a Docker Virtual Host](#Run-Docker-Virtual-Host) - [Find your Docker IP Address](#Find-Docker-IP-Address) - [Use custom Domain](#Use-custom-Domain) + - [Debugging](#debugging) - [Help & Questions](#Help) @@ -91,6 +93,7 @@ docker-compose up nginx mysql redis - PostgreSQL - MariaDB - Neo4j +- MongoDB - Redis - Memcached - Beanstalkd @@ -188,15 +191,14 @@ git clone https://github.com/LaraDock/laradock.git 1 - For **Windows & MAC** users only: If you are not using the native Docker-Engine `Beta`, make sure you have a running Docker Virtual Host on your machine. +[How to run a Docker Virtual Host?](#Run-Docker-Virtual-Host) (**Linux** users don't need a Virtual Host, so skip this step). -[How to run a Docker Virtual Host?](#Run-Docker-Virtual-Host) -
-2 - Run the Containers, (you can select the containers that you wish to run) -
-*Make sure you are in the `laradock` folder before running the `docker-compose` command.* +2 - Run some Containers: *(Make sure you are in the `laradock` folder before running the `docker-compose` commands).* + + **Example:** Running NGINX and MySQL: @@ -204,10 +206,14 @@ git clone https://github.com/LaraDock/laradock.git docker-compose up -d nginx mysql ``` -*Note: the PHP-FPM, Workspace, Application and Data Containers will automatically run.* +You can select your own combination of container form this list: + +`nginx`, `mysql`, `redis`, `postgres`, `mariadb`, `neo4j`, `mongo`, `memcached`, `beanstalkd`, `beanstalkd-console`, `workspace`, `data`, `php-fpm`, `application`. + + +**Note**: `workspace`, `data`, `php-fpm` and `application` will run automatically in most of the cases. -Supported Containers: `nginx`, `mysql`, `redis`, `postgres`, `mariadb`, `neo4j`, `memcached`, `beanstalkd`, `beanstalkd-console`, `workspace`, `data`, `php-fpm`, `application`. @@ -215,7 +221,7 @@ Supported Containers: `nginx`, `mysql`, `redis`, `postgres`, `mariadb`, `neo4j`, 3 - Enter the Workspace container, to execute commands like (Artisan, Composer, PHPUnit, Gulp, ...). ```bash -docker exec -it {Workspace-Container-Name} bash +docker-compose run workspace bash ``` Replace `{Workspace-Container-Name}` with your Workspace container name.
@@ -242,15 +248,11 @@ DB_HOST=xxx.xxx.xxx.xxx 5 - Open your browser and visit your `{Docker-IP}` address (`http://xxx.xxx.xxx.xxx`). -
-**Debugging**: in case you faced an error here, run this command from the Laravel root directory: - -```bash -sudo chmod -R 777 storage bootstrap/cache -```
-If you have any problem, or need a special support. Feel free to contact me, more details in the [Help & Questions](#Help) secion. +**Debugging**: if you are facing any problem here check the [Debugging](#debugging) section. + +If you need a special support. Contact me, more details in the [Help & Questions](#Help) section.
@@ -321,7 +323,7 @@ docker-compose down 2 - enter any container using: ```bash -docker exec -it {container-name} bash +docker-compose run {container-name} bash ``` 3 - to exit a container, type `exit`. @@ -492,19 +494,13 @@ You can run artisan commands and many other Terminal commands from the Workspace docker-compose up -d workspace // ..and all your other containers ``` -2 - Find the Workspace container name: +2 - Enter the Workspace container: ```bash -docker-compose ps +docker-compose run workspace /bin/bash ``` -3 - Enter the Workspace container: - -```bash -docker exec -it {workspace-container-name} bash -``` - -4 - Run anything you want :) +3 - Run anything you want :) ```bash php artisan @@ -515,22 +511,16 @@ Composer update ```bash phpunit ``` -```bash -laravel new blog -``` - - - - - - -
### Use Redis -1 - First make sure you run the Redis Container with the `docker-compose` command. +1 - First make sure you run the Redis Container (`redis`) with the `docker-compose up` command. + +```bash +docker-compose up -d redis +``` 2 - Open your Laravel's `.env` file and set the `REDIS_HOST` to your `Docker-IP` instead of the default `127.0.0.1` IP. @@ -558,7 +548,7 @@ CACHE_DRIVER=redis SESSION_DRIVER=redis ``` -4 - Finally make sure you have the `predis/predis` package `(~1.0)` installed via Composer first. +4 - Finally make sure you have the `predis/predis` package `(~1.0)` installed via Composer: ```bash composer require predis/predis:^1.0 @@ -574,6 +564,59 @@ composer require predis/predis:^1.0 +
+ +### Use Mongo + +1 - First make sure you run the MongoDB Container (`mongo`) with the `docker-compose up` command. + +```bash +docker-compose up -d mongo +``` + + +2 - Add the MongoDB configurations to the `config/database.php` config file: + +```php +'connections' => [ + + 'mongodb' => [ + 'driver' => 'mongodb', + 'host' => env('DB_HOST', 'localhost'), + 'port' => env('DB_PORT', 27017), + 'database' => env('DB_DATABASE', 'database'), + 'username' => '', + 'password' => '', + 'options' => [ + 'database' => '', + ] + ], + + // ... + +], +``` + +3 - Open your Laravel's `.env` file and update the following variables: + +- set the `DB_HOST` to your `Docker-IP`. +- set the `DB_PORT` to `27017`. +- set the `DB_DATABASE` to `database`. + + +4 - Finally make sure you have the `jenssegers/mongodb` package installed via Composer and its Service Provider is added. + +```bash +composer require jenssegers/mongodb +``` +More details about this [here](https://github.com/jenssegers/laravel-mongodb#installation). + +5 - Test it: + +- First let your Models extend from the Mongo Eloquent Model. Check the [documentation](https://github.com/jenssegers/laravel-mongodb#eloquent). +- Enter the Workspace Continer `docker-compose run workspace bash`. +- Migrate the Database `php artisan migrate`. + @@ -773,6 +816,24 @@ server_name laravel.dev; ``` +
+ +### Debugging + +*Here's a list of the common problems you might face, and the possible solutions.* + +#### + I see a blank (white) page instead of the Laravel 'Welcome' page! + +run this command from the Laravel root directory: + +```bash +sudo chmod -R 777 storage bootstrap/cache +``` + +#### + I see "Welcome to nginx" instead of the Laravel App! + +use `http://127.0.0.1` instead of `http://localhost` in your browser. + @@ -786,30 +847,21 @@ server_name laravel.dev; This little project was built by one man who has a full time job and many responsibilities, so if you like this project and you find that it needs a bug fix or support for new software or upgrade any container, or anything else.. Do not hesitate to contribute, you are more than welcome :) -## Support - -To suggest a features or report a bug, open a new [Issue](https://github.com/laradock/laradock/issues). - - ## Help & Questions -If you need help with anything related to this project, shedule a live call with me on [Codementor](https://www.codementor.io/mahmoudz), I'd love to help. +If you need any help with Docker and Laravel, you can schedule a live call with the creator of this project at [Codementor.io](https://www.codementor.io/mahmoudz), He would love to help. -If you have a short question, send me a direct message on LaraChat, my username is `mahmoud_zalt`. Or send me an email on `mahmoud@zalt.me`. +For general questions you can open [Issues](https://github.com/laradock/laradock/issues) here on Github (We will label them as questions). + +Additionally, you can contact Mahmoud Zalt (the creator of this project) via a direct message on LaraChat, (his username is `mahmoud_zalt`). Or send him an email (`mahmoud@zalt.me`). ## Credits -[![Mahmoud Zalt](https://img.shields.io/badge/Author-Mahmoud%20Zalt-orange.svg)](http://www.zalt.me) - -Twitter: [@Mahmoud_Zalt](https://twitter.com/Mahmoud_Zalt) -
-Website: [http://zalt.me](http://zalt.me) -
-Email: `mahmoud@zalt.me` - +- [Mahmoud Zalt](https://github.com/Mahmoudz) (Twitter [@Mahmoud_Zalt](https://twitter.com/Mahmoud_Zalt)) +- [Awesome list of contributors](https://github.com/LaraDock/laradock/graphs/contributors) ## License diff --git a/docker-compose.yml b/docker-compose.yml index dd3ad77d..087cea3d 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -27,12 +27,13 @@ services: data: build: ./data volumes: - - /var/lib/mysql - - /var/lib/postgres - - /var/lib/mariadb - - /var/lib/redis - - /var/lib/memcached - - /var/lib/neo4j/data + - /var/lib/mysql:/var/lib/mysql + - /var/lib/postgres:/var/lib/postgres + - /var/lib/mariadb:/var/lib/mariadb + - /var/lib/memcached:/var/lib/memcached + - /var/lib/redis:/data + - /var/lib/neo4j:/var/lib/neo4j/data + - /var/lib/mongo:/data/db ### Nginx Server Container ################################## @@ -77,7 +78,7 @@ services: ### MariaDB Container ####################################### - mariadb: + mariadb: build: ./mariadb volumes_from: - data @@ -101,6 +102,15 @@ services: volumes_from: - data +### MongoDB Container ####################################### + + mongo: + build: ./mongo + ports: + - "27017:27017" + volumes_from: + - data + ### Redis Container ######################################### redis: @@ -143,7 +153,10 @@ services: ### Workspace Utilities Container ########################### workspace: - build: ./workspace + build: + context: ./workspace + args: + INSTALL_PRESTISSIMO: ${INSTALL_PRESTISSIMO} volumes_from: - application tty: true diff --git a/mongo/Dockerfile b/mongo/Dockerfile new file mode 100644 index 00000000..897e6f06 --- /dev/null +++ b/mongo/Dockerfile @@ -0,0 +1,12 @@ +FROM mongo:latest + +MAINTAINER Mahmoud Zalt + +#COPY mongo.conf /usr/local/etc/mongo/mongo.conf + +VOLUME /data/db /data/configdb + +CMD ["mongod"] + +EXPOSE 27017 + diff --git a/php-fpm/Dockerfile-55 b/php-fpm/Dockerfile-55 index 93d82c52..ae4dbdb3 100644 --- a/php-fpm/Dockerfile-55 +++ b/php-fpm/Dockerfile-55 @@ -8,17 +8,34 @@ ADD ./laravel.pool.conf /usr/local/etc/php-fpm.d/ RUN apt-get update && apt-get install -y \ libpq-dev \ libmemcached-dev \ - curl + curl \ + libpng12-dev \ + libfreetype6-dev \ + --no-install-recommends \ + && rm -r /var/lib/apt/lists/* + +# configure gd library +RUN docker-php-ext-configure gd \ + --enable-gd-native-ttf \ + --with-freetype-dir=/usr/include/freetype2 # Install extensions using the helper script provided by the base image RUN docker-php-ext-install \ pdo_mysql \ - pdo_pgsql + pdo_pgsql \ + gd -#Install memcached +# Install memcached RUN pecl install memcached \ && docker-php-ext-enable memcached +# Install xdebug +RUN pecl install xdebug \ + && docker-php-ext-enable xdebug + +# Install mongodb driver +RUN pecl install mongodb + RUN usermod -u 1000 www-data WORKDIR /var/www/laravel diff --git a/php-fpm/Dockerfile-56 b/php-fpm/Dockerfile-56 index 5da34488..f14a16f4 100644 --- a/php-fpm/Dockerfile-56 +++ b/php-fpm/Dockerfile-56 @@ -8,17 +8,34 @@ ADD ./laravel.pool.conf /usr/local/etc/php-fpm.d/ RUN apt-get update && apt-get install -y \ libpq-dev \ libmemcached-dev \ - curl + curl \ + libpng12-dev \ + libfreetype6-dev \ + --no-install-recommends \ + && rm -r /var/lib/apt/lists/* + +# configure gd library +RUN docker-php-ext-configure gd \ + --enable-gd-native-ttf \ + --with-freetype-dir=/usr/include/freetype2 # Install extensions using the helper script provided by the base image RUN docker-php-ext-install \ pdo_mysql \ - pdo_pgsql + pdo_pgsql \ + gd -#Install memcached +# Install memcached RUN pecl install memcached \ && docker-php-ext-enable memcached +# Install xdebug +RUN pecl install xdebug \ + && docker-php-ext-enable xdebug + +# Install mongodb driver +RUN pecl install mongodb + RUN usermod -u 1000 www-data WORKDIR /var/www/laravel diff --git a/php-fpm/Dockerfile-70 b/php-fpm/Dockerfile-70 index 61f21d07..d046d278 100644 --- a/php-fpm/Dockerfile-70 +++ b/php-fpm/Dockerfile-70 @@ -8,12 +8,22 @@ ADD ./laravel.pool.conf /usr/local/etc/php-fpm.d/ RUN apt-get update && apt-get install -y \ libpq-dev \ libmemcached-dev \ - curl + curl \ + libpng12-dev \ + libfreetype6-dev \ + --no-install-recommends \ + && rm -r /var/lib/apt/lists/* + +# configure gd library +RUN docker-php-ext-configure gd \ + --enable-gd-native-ttf \ + --with-freetype-dir=/usr/include/freetype2 # Install extensions using the helper script provided by the base image RUN docker-php-ext-install \ pdo_mysql \ - pdo_pgsql + pdo_pgsql \ + gd # Install Memcached for php 7 RUN curl -L -o /tmp/memcached.tar.gz "https://github.com/php-memcached-dev/php-memcached/archive/php7.tar.gz" \ @@ -23,6 +33,13 @@ RUN curl -L -o /tmp/memcached.tar.gz "https://github.com/php-memcached-dev/php-m && docker-php-ext-install memcached \ && rm /tmp/memcached.tar.gz +# Install xdebug +RUN pecl install xdebug \ + && docker-php-ext-enable xdebug + +# Install mongodb driver +RUN pecl install mongodb + RUN usermod -u 1000 www-data WORKDIR /var/www/laravel diff --git a/php-fpm/laravel.ini b/php-fpm/laravel.ini index 3580140c..b31c55b7 100644 --- a/php-fpm/laravel.ini +++ b/php-fpm/laravel.ini @@ -1,3 +1,4 @@ -date.timezone = UTC -display_errors = Off -log_errors = On \ No newline at end of file +date.timezone=UTC +display_errors=Off +log_errors=On +extension=mongodb.so diff --git a/redis/Dockerfile b/redis/Dockerfile index 35e4e97b..e8fedab3 100644 --- a/redis/Dockerfile +++ b/redis/Dockerfile @@ -4,8 +4,8 @@ MAINTAINER Mahmoud Zalt #COPY redis.conf /usr/local/etc/redis/redis.conf -VOLUME /var/lib/redis - -CMD [ "redis-server" ] +VOLUME /data EXPOSE 6379 + +CMD ["redis-server"] diff --git a/workspace/Dockerfile b/workspace/Dockerfile index 451cd76e..9e12b10b 100644 --- a/workspace/Dockerfile +++ b/workspace/Dockerfile @@ -20,7 +20,7 @@ RUN add-apt-repository -y \ ppa:ondrej/php # Install PHP-CLI 7, some PHP extentions and some useful Tools with APT -RUN apt-get update && apt-get install -y \ +RUN apt-get update && apt-get install -y --force-yes \ php7.0-cli \ php7.0-common \ php7.0-curl \ @@ -34,34 +34,52 @@ RUN apt-get update && apt-get install -y \ php7.0-sqlite3 \ php7.0-zip \ php7.0-memcached \ + php7.0-gd \ + php7.0-xdebug \ + php-dev \ + libcurl4-openssl-dev \ + libedit-dev \ + libssl-dev \ + libxml2-dev \ + xz-utils \ sqlite3 \ libsqlite3-dev \ git \ curl \ vim \ - nano \ - nodejs \ - nodejs-dev \ - npm + nano # Clean up, to free some space RUN apt-get clean -# Install gulp and bower with NPM -RUN npm install -g \ - gulp \ - bower +# remove load xdebug extension (only load on phpunit command) +RUN sed -i 's/^/;/g' /etc/php/7.0/cli/conf.d/20-xdebug.ini -# Add a symbolic link for Node -RUN ln -s /usr/bin/nodejs /usr/bin/node - -# Add an alias for PHPUnit -RUN echo "alias phpunit='./vendor/bin/phpunit'" >> ~/.bashrc +# Add bin folder of composer to PATH. +RUN echo "export PATH=${PATH}:/var/www/laravel/vendor/bin" >> ~/.bashrc # Install Composer RUN curl -s http://getcomposer.org/installer | php \ - && mv composer.phar /usr/local/bin/ \ - && echo "alias composer='/usr/local/bin/composer.phar'" >> ~/.bashrc + && mv composer.phar /usr/local/bin/composer + +# Load xdebug Zend extension with phpunit command +RUN echo "alias phpunit='php -dzend_extension=xdebug.so /var/www/laravel/vendor/bin/phpunit'" >> ~/.bashrc + +# Install mongodb extension +RUN pecl install mongodb +RUN echo "extension=mongodb.so" >> /etc/php/7.0/cli/php.ini + +# Install nvm (Node Version Manager) +RUN curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.31.1/install.sh | bash + +ENV NVM_DIR=/root/.nvm + +# Install stable node +RUN . ~/.nvm/nvm.sh \ + && nvm install stable \ + && nvm use stable \ + && nvm alias stable \ + && npm install -g gulp bower # Source the bash RUN . ~/.bashrc @@ -70,3 +88,9 @@ RUN . ~/.bashrc RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* WORKDIR /var/www/laravel + +# Install optional software +ARG INSTALL_PRESTISSIMO=false +RUN if [ "$INSTALL_PRESTISSIMO" = true ] ; then \ + composer global require "hirak/prestissimo:^0.3"; \ + fi \ No newline at end of file