Compare commits

...

17 Commits

Author SHA1 Message Date
5190da831a remove containers names from docker-compose
to void conflict while scalling using the scale command
2016-05-08 13:39:43 +03:00
fdaa983e77 update readme, put requirements in table 2016-05-08 11:25:43 +03:00
e52f8f5613 update readme file, add more details on linux 2016-05-08 10:54:10 +03:00
f9c13090c6 general updates to the readme file 2016-05-07 19:59:59 +03:00
bfa0d54b5a add features list to the readme file 2016-05-07 19:51:45 +03:00
7f80888fc1 add more info to the readme file 2016-05-07 18:48:27 +03:00
31793a3cc9 general updates to the readme file 2016-05-07 05:58:20 +03:00
5d84c6481f revers the dependancies between php and the db
to prevent running all the db engines when php is running
2016-05-07 05:29:48 +03:00
26229e150d Merge pull request #35 from benmag/master
link postgres service to php service
2016-05-07 05:14:01 +03:00
2b98b0b82e update the readme, include supported containers 2016-05-07 05:10:57 +03:00
457c5d4b1b update the readme file
Support selecting your own containers in the docker compose command.
2016-05-07 05:03:07 +03:00
cd97ac0aa6 link postgres service to php service 2016-05-07 11:55:00 +10:00
22f11e03ee Merge pull request #34 from benmag/master
Add support for postgres
2016-05-07 04:34:27 +03:00
5d62ec1e67 Add support for postgres 2016-05-07 11:16:06 +10:00
daa5ed981f Merge pull request #32 from LaraDock/develop
Major Updates
2016-05-06 18:55:57 +03:00
9ac7541dc9 upgrade the readme.md to reflect the last changes 2016-05-06 18:33:09 +03:00
05a83d383f Major updates.
- upgrade docker compose to v2
- build images locally instead of pulling them from the registry
- separate php container form nginx container
- support all the php versions including php 7.0
- remove beanstalked container to be optionally added later by the user
2016-05-06 17:04:02 +03:00
13 changed files with 474 additions and 172 deletions

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
/logs

344
README.md
View File

@ -15,23 +15,28 @@ It's like Laravel Homestead but for Docker instead of Vagrant.
- [Intro](#Intro) - [Intro](#Intro)
- [Supported Software (Docker Images)](#Supported-Software) - [Features](#features)
- [What is Docker](#what-is-docker)
- [What is Laravel](#what-is-laravel)
- [Why Docker not Vagrant](#why-docker-not-vagrant)
- [LaraDock VS Homestead](#laradock-vs-homestead)
- [Supported Containers](#Supported-Containers)
- [Requirements](#Requirements) - [Requirements](#Requirements)
- [Screencast Tutorial](https://www.youtube.com/watch?v=jGkyO6Is_aI)
- [Installation](#Installation) - [Installation](#Installation)
- [Usage](#Usage) - [Usage](#Usage)
- [Documentation](#Documentation) - [Documentation](#Documentation)
- [List current running Containers](#List-current-running-Containers) - [List current running Containers](#List-current-running-Containers)
- [Close all running Containers](#Close-all-running-Containers) - [Close all running Containers](#Close-all-running-Containers)
- [Delete all existing Containers](#Delete-all-existing-Containers) - [Delete all existing Containers](#Delete-all-existing-Containers)
- [Use Redis in Laravel](#Use-Redis-in-Laravel) - [Build/Re-build Containers](#Build-Re-build-Containers)
- [Use custom Domain](Use-custom-Domain) - [Use Redis](#Use-Redis)
- [Change the PHP Version](#Change-the-PHP-Version) - [Change the PHP Version](#Change-the-PHP-Version)
- [Add/Remove a Docker Container](#AddRemove-a-Docker-Container) - [Add/Remove a Docker Container](#AddRemove-a-Docker-Container)
- [Add Docker Images](#Add-Docker-Images) - [Add more Software's (Docker Images)](#Add-Docker-Images)
- [Edit a Docker Container](#Edit-a-Docker-Container) - [Edit default container configuration](#Edit-Container)
- [Use custom Domain](Use-custom-Domain)
- [View the Log files](#View-the-Log-files) - [View the Log files](#View-the-Log-files)
- [Upgrade the Docker Images](#Upgrade-the-Docker-Images) - [Enter a Container (SSH into a running Container)](#Enter-Container)
- [Edit a Docker Image](#Edit-a-Docker-Image) - [Edit a Docker Image](#Edit-a-Docker-Image)
- [Run a Docker Virtual Host](#Run-Docker-Virtual-Host) - [Run a Docker Virtual Host](#Run-Docker-Virtual-Host)
- [Find your Docker IP Address](#Find-Docker-IP-Address) - [Find your Docker IP Address](#Find-Docker-IP-Address)
@ -47,53 +52,87 @@ LaraDock strives to make the development experience easier.
It contains pre-packaged Docker Images that provides you a wonderful development environment without requiring you to install PHP, NGINX, MySQL, REDIS, and any other software on your local machine. It contains pre-packaged Docker Images that provides you a wonderful development environment without requiring you to install PHP, NGINX, MySQL, REDIS, and any other software on your local machine.
<a name="features"></a>
### Features
- Easy switch between PHP versions: 7.0 - 5.6 - 5.5 - ...
- Choose your favorite database engine: MySQL - Postgres - Redis - ...
- Run your own combination of software's: PHP - NGINX - MySQL - ...
- Every software runs on a separate container: PHP - NGINX - ...
- Easy to customize any container, with simple edit to the `dockerfile`.
- All Images extends from an official base Image. (Trusted base Images).
- Pre-configured Nginx for Laravel. And very easy to update.
- Using of a Data container, to keep the Data safe and accessible at anytime.
- Easy to apply configurations inside containers.
- Clean and well structured Dockerfiles (`dockerfile`).
- Latest version of the Docker Compose file (`docker-compose`).
- Everything is visible and editable.
- Best practices everywhere.
<a name="what-is-docker"></a>
### What is Docker? ### What is Docker?
[Docker](https://www.docker.com) is an open-source project that automates the deployment of applications inside software containers, by providing an additional layer of abstraction and automation of [operating-system-level virtualization](https://en.wikipedia.org/wiki/Operating-system-level_virtualization) on Linux, Mac OS and Windows. [Docker](https://www.docker.com) is an open-source project that automates the deployment of applications inside software containers, by providing an additional layer of abstraction and automation of [operating-system-level virtualization](https://en.wikipedia.org/wiki/Operating-system-level_virtualization) on Linux, Mac OS and Windows.
<a name="what-is-laravel"></a>
### What is Laravel? ### What is Laravel?
Seriously!!! Seriously!!!
<a name="why-docker-not-vagrant"></a>
### Why Docker not Vagrant!? ### Why Docker not Vagrant!?
[Vagrant](https://www.vagrantup.com) gives you Virtual Machines in minutes while Docker gives you Virtual Containers in seconds.
[Vagrant](https://www.vagrantup.com) creates Virtual Machines in minutes while Docker creates Virtual Containers in seconds.
Instead of providing a full Virtual Machines, like you get with Vagrant, Docker provides you **lightweight** Virtual Containers, that share the same kernel and allow to safely execute independent processes. Instead of providing a full Virtual Machines, like you get with Vagrant, Docker provides you **lightweight** Virtual Containers, that share the same kernel and allow to safely execute independent processes.
In addition to the speed, Docker gives tens of features that cannot be achieved with Vagrant.
<a name="Supported-Software"></a> Most importantly Docker can run on Development and on Production (same environment everywhere). While Vagrant is designed for Development only, (so you have to re-provision your server on Production every time).
## Supported Software (Docker Images)
- PHP 5.6 / NGINX
- PHP 5.5 / NGINX <a name="laradock-vs-homestead"></a>
### LaraDock VS Homestead
LaraDock and [Homestead](https://laravel.com/docs/master/homestead) both gives you a complete virtual development environments. (Without the need to install and configure every single software on your own Operating System).
- Homestead is a tool that controls Vagrant for you (using Homestead special commands). And Vagrant manages your Virtual Machine.
- LaraDock is a tool that controls Docker for you (using Docker Compose official commands). And Docker manages you Virtual Containers.
Running a virtual Container is much faster than running a full virtual Machine.
<br>Thus **LaraDock is much faster than Homestead**.
<a name="Supported-Containers"></a>
## Supported Containers
- PHP (7.0 - 5.6 - 5.5)
- NGINX
- MySQL - MySQL
- PostgreSQL
- Redis - Redis
- Data Volume (for MySQL & Redis) - Data Volume
- Beanstalked
Cannot find your container! we would love to have it as well. Consider contributing your container and adding it to this list.
The Images links on [Github](https://github.com/LaraDock)
<br>
The Images links on [Docker Hub](https://hub.docker.com/u/laradock/)
<a name="Requirements"></a> <a name="Requirements"></a>
## Requirements ## Requirements
- Laravel ([Download](https://laravel.com/docs/master/installation))
- Docker Toolbox ([Download](https://www.docker.com/toolbox)) | Linux | Windows & MAC |
- Git ([Download](https://git-scm.com/downloads)) |-----------------------------------------------------------------------------------------|---------------------------------------------------------|
- Composer ([Download](https://getcomposer.org/download/)) | [Laravel](https://laravel.com/docs/master/installation) | [Laravel](https://laravel.com/docs/master/installation) |
| [Git](https://git-scm.com/downloads) | [Git](https://git-scm.com/downloads) |
| [Docker Engine](https://docs.docker.com/engine/installation/linux/ubuntulinux/#install) | [Docker Toolbox](https://www.docker.com/toolbox) |
| [Docker Compose](https://docs.docker.com/compose/install) | |
<a name="Installation"></a> <a name="Installation"></a>
## Installation ## Installation
What is better than watching a video tutorial!!
<br>
If you prefer watch this [screencast](https://www.youtube.com/watch?v=jGkyO6Is_aI), for how to install and use this tool.
<br>
1 - Clone the `LaraDock` repository, in any of your `Laravel` projects: 1 - Clone the `LaraDock` repository, in any of your `Laravel` projects:
```bash ```bash
@ -109,12 +148,15 @@ git submodule add https://github.com/LaraDock/laradock.git docker
>These commands should create a `docker` folder, on the root directory of your Laravel project. >These commands should create a `docker` folder, on the root directory of your Laravel project.
<a name="Usage"></a> <a name="Usage"></a>
## Usage ## Usage
>**(Windows & MAC users)** Make sure you have a running Docker Virtual Host on your machine first. 0 - For **Windows & MAC** users only: make sure you have a running Docker Virtual Host on your machine.
><br> (**Linux** users don't need a Virtual Host, so skip this step)
>[How to run a Docker Virtual Host?](#Run-Docker-Virtual-Host) <br>
[How to run a Docker Virtual Host?](#Run-Docker-Virtual-Host)
<br> <br>
@ -126,23 +168,36 @@ DB_HOST=xxx.xxx.xxx.xxx
[How to find my Docker IP Address?](#Find-Docker-IP-Address) [How to find my Docker IP Address?](#Find-Docker-IP-Address)
<br> <br>
2 - Run the containers: 2 - Run the Containers, (you can select the software's (containers) that you wish to run)
<br> <br>
*(Make sure you are in the `docker` folder before running this command)* *Make sure you are in the `docker` folder before running the `docker-compose` command.*
> Running PHP, NGINX and MySQL:
```bash ```bash
docker-compose up -d docker-compose up -d php nginx mysql
``` ```
>*Only the first time you run this command, it will take up to 5 minutes (depend on your connection speed) to download the Docker Images on your local machine.* Note: you can choose your own combination of software's (containers), another example:
> Running PHP, NGINX, Postgres and Redis:
```bash
docker-compose up -d php nginx postgres redis
```
Supported Containers: `php`, `nginx`, `mysql`, `postgres`, `redis`, `data`.
<br> <br>
3 - Open your browser and visit your `{Docker-IP}` address (`http://xxx.xxx.xxx.xxx`). 3 - 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: <br>
> <br> **Debugging**: in case you faced an error here, run this command from the Laravel root directory:
> `sudo chmod -R 777 storage && sudo chmod -R 777 bootstrap/cache`
```bash
sudo chmod -R 777 storage && sudo chmod -R 777 bootstrap/cache
```
<br> <br>
@ -169,6 +224,13 @@ docker ps
docker-compose stop docker-compose stop
``` ```
To stop single container do:
```bash
docker-compose stop {container-name}
```
<br> <br>
<a name="Delete-all-existing-Containers"></a> <a name="Delete-all-existing-Containers"></a>
@ -179,21 +241,38 @@ docker-compose rm -f
*Note: Careful with this command as it will delete your Data Volume Container as well. (if you want to keep your Database data than you should stop each container by itself as follow):* *Note: Careful with this command as it will delete your Data Volume Container as well. (if you want to keep your Database data than you should stop each container by itself as follow):*
`docker stop {container-name}`
<br> <br>
<a name="Use-Redis-in-Laravel"></a> <a name="Build-Re-build-Containers"></a>
#### Use Redis in Laravel #### Build/Re-build Containers
Open your Laravel's `.env` file and set the `REDIS_HOST` to your `Docker-IP` instead of the default `127.0.0.1`. If you do any change to any `dockerfile` make sure you run this command, for the changes to take effect:
```bash
docker-compose build
```
Optionally you can specify which container to rebuild (instead of rebuilding all the containers):
```bash
docker-compose build {container-name}
```
<br>
<a name="Use-Redis"></a>
#### Use Redis
1 - First make sure you run the Redis Container with the `docker-compose` command.
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.
```env ```env
REDIS_HOST=xxx.xxx.xxx.xxx REDIS_HOST=xxx.xxx.xxx.xxx
``` ```
If you don't find the `REDIS_HOST` variable in your `.env` file. Go to the database config file `config/database.php` and replace the `127.0.0.1` with your `Docker-IP` for Redis like this: If you don't find the `REDIS_HOST` variable in your `.env` file. Go to the database config file `config/database.php` and replace the default `127.0.0.1` IP with your `Docker-IP` for Redis like this:
```php ```php
'redis' => [ 'redis' => [
@ -206,19 +285,87 @@ If you don't find the `REDIS_HOST` variable in your `.env` file. Go to the datab
], ],
``` ```
To enable Redis Caching and/or for Sessions Management. Also from the `.env` file set `CACHE_DRIVER` and `SESSION_DRIVER` to `redis` instead of the default `file`. 3 - To enable Redis Caching and/or for Sessions Management. Also from the `.env` file set `CACHE_DRIVER` and `SESSION_DRIVER` to `redis` instead of the default `file`.
```env ```env
CACHE_DRIVER=redis CACHE_DRIVER=redis
SESSION_DRIVER=redis SESSION_DRIVER=redis
``` ```
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 first.
```shell ```bash
composer require predis/predis:^1.0 composer require predis/predis:^1.0
``` ```
5 - You can manually test it from Laravel with this code:
```php
\Cache::store('redis')->put('LaraDock', 'Awesome', 10);
```
<br>
<a name="Change-the-PHP-Version"></a>
#### Change the PHP Version
By default **PHP 7.0** is running.
<br>
To change the default PHP version:
1 - Open the `dockerfile` of the `php` folder.
2 - Change the PHP version number in the first line,
```txt
FROM php:7.0-fpm
```
Supported Versions:
- For (PHP 7.0.*) use `php:7.0-fpm`
- For (PHP 5.6.*) use `php:5.6-fpm`
- For (PHP 5.5.*) use `php:5.5-fpm`
For more details visit the [official PHP docker images](https://hub.docker.com/_/php/).
3 - Finally rebuild the container
```bash
docker-compose build php
```
<br>
<a name="Add-Docker-Images"></a>
#### Add more Software's (Docker Images)
To add an image (software), just edit the `docker-compose.yml` and add your container details, to do so you need to be familiar with the [docker compose file syntax](https://docs.docker.com/compose/compose-file/).
<br>
<a name="Edit-Container"></a>
#### Edit default container configuration
Open the `docker-compose.yml` and change anything you want.
Examples:
Change MySQL Database Name:
```yml
environment:
MYSQL_DATABASE: laradock
```
Change Redis defaut port to 1111:
```yml
ports:
- "1111:6379"
```
<br> <br>
<a name="Use-custom-Domain"></a> <a name="Use-custom-Domain"></a>
@ -240,68 +387,16 @@ Example:
DB_HOST=xxx.xxx.xxx.xxx DB_HOST=xxx.xxx.xxx.xxx
``` ```
3 - Open the nginx config file `docker/settings/nginx/default` and add this in the `server`: 3 - Open your browser and visit `{http://laravel.dev}`
Optionally you can define the server name in the nginx config file, like this:
``` ```
server_name laravel.dev; server_name laravel.dev;
``` ```
4 - Open your browser and visit `{http://laravel.dev}`
>In case you faced any problem, try this additional step:
>
>Open the `docker-compose.yml` and add the following to `php-nginx:`
>
>```yaml
> extra_hosts:
> - "laravel.dev:xxx.xxx.xxx.xxx"
>```
<br>
<a name="Change-the-PHP-Version"></a>
#### Change the PHP Version
By default **PHP 5.6** is running.
<br>
To change the default PHP version, simply open your `docker-compose.yml` file and edit this line:
```yaml
image: laradock/php56nginx:latest
```
Supported versions:
- (PHP 5.5.*) laradock/php55nginx:latest
- (PHP 5.6.*) laradock/php56nginx:latest
**Note:** If you use this `laradock/phpnginx` image, it will pull from `laradock/php56nginx`.
<br>
<a name="Add-Docker-Images"></a>
#### Add Docker Images
*(add a software to run with other Containers)*
<br>
To add an image (software), just edit the `docker-compose.yml` and add your container details, to do so you need to be familiar with the [docker compose file syntax](https://docs.docker.com/compose/yml/).
<br>
<a name="Edit-a-Docker-Container"></a>
#### Edit a Docker Container (change Ports or Volumes)
To modify a container you can simply open the `docker-compose.yml` and change everything you want.
Example: if you want to set the MySQL port to 3333, just replace the default port with yours:
```yml
ports:
- "3333:3306"
```
@ -314,15 +409,25 @@ The Log files are stored in the `docker/logs` directory.
<br> <br>
<a name="Upgrade-the-Docker-Images"></a> <a name="Enter-Container"></a>
#### Upgrade the Docker Images #### Enter a Container (SSH into a running Container)
By default `docker-compose.yml` is configured to use the latest stable version of the image (latest stable realease `tag`). 1 - first list the current running containers with `docker ps`
2 - enter any container with:
Example: enter the `php` container
```bash
docker exec -it php bash
```
Example: enter the `nginx` container
```bash
docker exec -it nginx bash
```
To use the latest build you can edit the `docker-compose.yml` file and replace the version number at the end of every image name with `:latest`
<br>
Example: change `image: laradock/mysql:0.1.0` to `image: laradock/mysql:latest`
<br> <br>
@ -332,16 +437,22 @@ To prevent a container (software) from running, open the `docker-compose.yml` fi
<br> <br>
<a name="Edit-a-Docker-Image"></a> <a name="Edit-a-Docker-Image"></a>
#### Edit a Docker Image (change some configuration in the image) #### Edit a Docker Image
To edit an image, and take full control of it:
1. Clone any Image from [https://github.com/LaraDock](https://github.com/LaraDock) 1 - Find the `dockerfile` of the image you want to edit,
2. Modify the `Dockfile` <br>
3. Run `docker build -t {your-image-name} .` example for `php` it will be `docker/php/dockerfile`.
All the images are open source and hosted on the [Docker Hub](https://hub.docker.com/u/laradock/). 2 - Edit the file the way you want.
3 - Re-build the container:
```bash
docker-compose build
```
*If you find any bug or you have and suggestion that can improve the performance of any image, please consider contributing. Thanks in advance.* *If you find any bug or you have and suggestion that can improve the performance of any image, please consider contributing. Thanks in advance.*
@ -407,9 +518,8 @@ All Docker Images can be found at [https://github.com/LaraDock](https://github.c
#### Questions? ### Questions?
[![Join the chat at https://gitter.im/LaraDock/laradock](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/LaraDock/laradock?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) If you have any question, send me a direct message on LaraChat, my username is `mahmoud_zalt`.
## Credits ## Credits

5
data/Dockerfile Normal file
View File

@ -0,0 +1,5 @@
FROM debian:jessie
MAINTAINER Mahmoud Zalt <mahmoud@zalt.me>
CMD ["true"]

View File

@ -1,58 +1,76 @@
# PHP + NGINX Container #---------------------------------- version: '2'
php-nginx: services:
image: laradock/php56nginx:0.1.0
container_name: php-nginx
ports:
- "80:80"
volumes:
- ./settings/nginx:/etc/nginx/sites-available
- ../:/var/www
- ./logs/nginx:/var/log/nginx
links:
- mysql
- redis
privileged: true
# MySQL Container #---------------------------------------- ### Nginx Server Container ##################################
mysql:
image: laradock/mysql:0.1.0
container_name: mysql
ports:
- "3306:3306"
volumes_from:
- data
environment:
MYSQL_DATABASE: homestead
MYSQL_USER: homestead
MYSQL_PASSWORD: secret
privileged: true
# Redis Container #---------------------------------------- nginx:
redis: build: ./nginx
image: laradock/redis:0.1.0 volumes_from:
container_name: redis - php
ports: volumes:
- "6379:6379" - ./logs/nginx/:/var/log/nginx
volumes_from: ports:
- data - "80:80"
volumes: links:
- ./logs/redis:/var/log/redis - php
privileged: true
# Data Volume Container #---------------------------------- ### PHP Container ###########################################
data:
image: laradock/data:0.1.0
container_name: data
volumes:
- /var/lib/mysql
- /var/lib/redis
# Beanstalkd Container #----------------------------------- php:
# beanstalkd: build: ./php
# image: laradock/beanstalkd:0.1.0 volumes:
# container_name: beanstalkd - ../:/var/www/laravel
# ports: - ./logs/php/:/usr/local/var/log
# - "11300:11300" expose:
# privileged: true - "9000"
#---------------------------------------------------------- ### DATA Container ##########################################
data:
build: ./data
volumes:
- /var/lib/mysql
- /var/lib/postgresql/data
- /var/lib/redis
### MySQL Container #########################################
mysql:
build: ./mysql
volumes_from:
- data
ports:
- "3306:3306"
environment:
MYSQL_DATABASE: homestead
MYSQL_USER: homestead
MYSQL_PASSWORD: secret
MYSQL_ROOT_PASSWORD: root
links:
- php
### PostgreSQL Container ####################################
postgres:
build: ./postgres
volumes_from:
- data
ports:
- "5432:5432"
environment:
POSTGRES_DB: homestead
POSTGRES_USER: homestead
POSTGRES_PASSWORD: secret
links:
- php
### Redis Container #########################################
redis:
build: ./redis
volumes_from:
- data
ports:
- "6379:6379"
### Add more Containers below ###############################

9
mysql/Dockerfile Normal file
View File

@ -0,0 +1,9 @@
FROM mysql:latest
MAINTAINER Mahmoud Zalt <mahmoud@zalt.me>
VOLUME /var/lib/mysql
CMD ["mysqld"]
EXPOSE 3306

14
nginx/Dockerfile Normal file
View File

@ -0,0 +1,14 @@
FROM nginx:latest
MAINTAINER Mahmoud Zalt <mahmoud@zalt.me>
ADD nginx.conf /etc/nginx/
ADD laravel.conf /etc/nginx/sites-available/
RUN echo "upstream php-upstream { server php:9000; }" > /etc/nginx/conf.d/upstream.conf
RUN usermod -u 1000 www-data
CMD ["nginx"]
EXPOSE 80 443

View File

@ -2,7 +2,7 @@ server {
listen 80 default_server; listen 80 default_server;
listen [::]:80 default_server ipv6only=on; listen [::]:80 default_server ipv6only=on;
root /var/www/public; root /var/www/laravel/public;
index index.php index.html index.htm; index index.php index.html index.htm;
location / { location / {
@ -11,7 +11,7 @@ server {
location ~ \.php$ { location ~ \.php$ {
try_files $uri /index.php =404; try_files $uri /index.php =404;
fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_pass php-upstream;
fastcgi_index index.php; fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params; include fastcgi_params;
@ -21,3 +21,6 @@ server {
deny all; deny all;
} }
} }

29
nginx/nginx.conf Normal file
View File

@ -0,0 +1,29 @@
user www-data;
worker_processes 4;
pid /run/nginx.pid;
events {
worker_connections 2048;
multi_accept on;
use epoll;
}
http {
server_tokens off;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 15;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
access_log off;
error_log off;
gzip on;
gzip_disable "msie6";
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-available/*;
open_file_cache max=100;
}
daemon off;

16
php/Dockerfile Normal file
View File

@ -0,0 +1,16 @@
FROM php:7.0-fpm
MAINTAINER Mahmoud Zalt <mahmoud@zalt.me>
ADD ./laravel.ini /usr/local/etc/php/conf.d
ADD ./laravel.pool.conf /usr/local/etc/php-fpm.d/
# Install extensions using the helper script provided by the base image
RUN docker-php-ext-install \
pdo_mysql
RUN usermod -u 1000 www-data
CMD ["php-fpm"]
EXPOSE 9000

3
php/laravel.ini Normal file
View File

@ -0,0 +1,3 @@
date.timezone = UTC
display_errors = Off
log_errors = On

76
php/laravel.pool.conf Normal file
View File

@ -0,0 +1,76 @@
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
; will be used.
user = www-data
group = www-data
; The address on which to accept FastCGI requests.
; Valid syntaxes are:
; 'ip.add.re.ss:port' - to listen on a TCP socket to a specific address on
; a specific port;
; 'port' - to listen on a TCP socket to all addresses on a
; specific port;
; '/path/to/unix/socket' - to listen on a unix socket.
; Note: This value is mandatory.
listen = 0.0.0.0:9000
; Choose how the process manager will control the number of child processes.
; Possible Values:
; static - a fixed number (pm.max_children) of child processes;
; dynamic - the number of child processes are set dynamically based on the
; following directives. With this process management, there will be
; always at least 1 children.
; pm.max_children - the maximum number of children that can
; be alive at the same time.
; pm.start_servers - the number of children created on startup.
; pm.min_spare_servers - the minimum number of children in 'idle'
; state (waiting to process). If the number
; of 'idle' processes is less than this
; number then some children will be created.
; pm.max_spare_servers - the maximum number of children in 'idle'
; state (waiting to process). If the number
; of 'idle' processes is greater than this
; number then some children will be killed.
; ondemand - no children are created at startup. Children will be forked when
; new requests will connect. The following parameter are used:
; pm.max_children - the maximum number of children that
; can be alive at the same time.
; pm.process_idle_timeout - The number of seconds after which
; an idle process will be killed.
; Note: This value is mandatory.
pm = dynamic
; The number of child processes to be created when pm is set to 'static' and the
; maximum number of child processes when pm is set to 'dynamic' or 'ondemand'.
; This value sets the limit on the number of simultaneous requests that will be
; served. Equivalent to the ApacheMaxClients directive with mpm_prefork.
; Equivalent to the PHP_FCGI_CHILDREN environment variable in the original PHP
; CGI. The below defaults are based on a server without much resources. Don't
; forget to tweak pm.* to fit your needs.
; Note: Used when pm is set to 'static', 'dynamic' or 'ondemand'
; Note: This value is mandatory.
pm.max_children = 20
; The number of child processes created on startup.
; Note: Used only when pm is set to 'dynamic'
; Default Value: min_spare_servers + (max_spare_servers - min_spare_servers) / 2
pm.start_servers = 2
; The desired minimum number of idle server processes.
; Note: Used only when pm is set to 'dynamic'
; Note: Mandatory when pm is set to 'dynamic'
pm.min_spare_servers = 1
; The desired maximum number of idle server processes.
; Note: Used only when pm is set to 'dynamic'
; Note: Mandatory when pm is set to 'dynamic'
pm.max_spare_servers = 3
;---------------------
; Make specific Docker environment variables available to PHP
env[DB_1_ENV_MYSQL_DATABASE] = $DB_1_ENV_MYSQL_DATABASE
env[DB_1_ENV_MYSQL_USER] = $DB_1_ENV_MYSQL_USER
env[DB_1_ENV_MYSQL_PASSWORD] = $DB_1_ENV_MYSQL_PASSWORD
catch_workers_output = yes

9
postgres/Dockerfile Normal file
View File

@ -0,0 +1,9 @@
FROM postgres:latest
MAINTAINER Ben M <git@bmagg.com>
VOLUME /var/lib/postgresql/data
CMD ["postgres"]
EXPOSE 5432

9
redis/Dockerfile Normal file
View File

@ -0,0 +1,9 @@
FROM redis:latest
MAINTAINER Mahmoud Zalt <mahmoud@zalt.me>
#COPY redis.conf /usr/local/etc/redis/redis.conf
CMD [ "redis-server" ]
EXPOSE 6379