- create base folder to the server
- copy thoose 4 files above
- docker-compose up -d
- clone any laravel / php project in folder ./www/
- jump to app service, you can install laravel, git, mysql access, etc by simple command :
docker-compose exec app bash
# ./nginx/conf.d/app.conf | |
server { | |
listen 80; | |
index index.php index.html; | |
error_log /var/log/nginx/error.log; | |
access_log /var/log/nginx/access.log; | |
server_name ~^(www\.)?(?<sname>.+?).localhost$; | |
root /var/www/$sname/public; | |
location ~ \.php$ { | |
try_files $uri =404; | |
fastcgi_split_path_info ^(.+\.php)(/.+)$; | |
fastcgi_pass app:9000; | |
fastcgi_index index.php; | |
include fastcgi_params; | |
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; | |
fastcgi_param PATH_INFO $fastcgi_path_info; | |
} | |
location / { | |
try_files $uri $uri/ /index.php?$query_string; | |
gzip_static on; | |
} | |
} | |
version: '3' | |
services: | |
nginx-proxy: | |
image: jwilder/nginx-proxy | |
container_name: proxy | |
ports: | |
- "80:80" | |
volumes: | |
- /var/run/docker.sock:/tmp/docker.sock:ro | |
networks: | |
- app-network | |
#PHP Service | |
app: | |
build: | |
context: . | |
dockerfile: Dockerfile | |
image: digitalocean.com/php | |
container_name: app | |
restart: unless-stopped | |
tty: true | |
environment: | |
SERVICE_NAME: app | |
SERVICE_TAGS: dev | |
working_dir: /var/www | |
volumes: | |
- ./www/:/var/www | |
- ./php/local.ini:/usr/local/etc/php/conf.d/local.ini | |
networks: | |
- app-network | |
#Nginx Service | |
webserver: | |
image: nginx:alpine | |
container_name: webserver | |
restart: unless-stopped | |
tty: true | |
expose: | |
- 80 | |
volumes: | |
- ./www/:/var/www | |
- ./nginx/conf.d/:/etc/nginx/conf.d/ | |
networks: | |
- app-network | |
environment: | |
- VIRTUAL_HOST=*.localhost | |
#MySQL Service | |
db: | |
image: mysql:5.7.22 | |
container_name: db | |
restart: unless-stopped | |
tty: true | |
ports: | |
- "3306:3306" | |
environment: | |
MYSQL_DATABASE: laravel | |
MYSQL_ROOT_PASSWORD: root | |
SERVICE_TAGS: dev | |
SERVICE_NAME: mysql | |
volumes: | |
- dbdata:/var/lib/mysql/ | |
- ./mysql/my.cnf:/etc/mysql/my.cnf | |
networks: | |
- app-network | |
#Docker Networks | |
networks: | |
app-network: | |
driver: bridge | |
#Volumes | |
volumes: | |
dbdata: | |
driver: local |
FROM php:7.2-fpm | |
# Set working directory | |
WORKDIR /var/www | |
# Install dependencies | |
RUN apt-get update && apt-get install -y \ | |
build-essential \ | |
mariadb-client \ | |
libpng-dev \ | |
libjpeg62-turbo-dev \ | |
libfreetype6-dev \ | |
locales \ | |
zip \ | |
jpegoptim optipng pngquant gifsicle \ | |
vim \ | |
unzip \ | |
git \ | |
curl | |
# Clear cache | |
RUN apt-get clean && rm -rf /var/lib/apt/lists/* | |
# Install extensions | |
RUN docker-php-ext-install pdo_mysql mbstring zip exif pcntl mysqli | |
RUN docker-php-ext-configure gd --with-gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ --with-png-dir=/usr/include/ | |
RUN docker-php-ext-install gd | |
# Install imagick | |
RUN export CFLAGS="$PHP_CFLAGS" CPPFLAGS="$PHP_CPPFLAGS" LDFLAGS="$PHP_LDFLAGS" \ | |
&& apt-get update \ | |
&& apt-get install -y --no-install-recommends \ | |
libmagickwand-dev \ | |
&& rm -rf /var/lib/apt/lists/* \ | |
&& pecl install imagick-3.4.3 \ | |
&& docker-php-ext-enable imagick | |
# Install composer | |
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer | |
# Add user for laravel application | |
RUN groupadd -g 1000 www | |
RUN useradd -u 1000 -ms /bin/bash -g www www | |
# Copy existing application directory contents | |
COPY ./www /var/www | |
# Copy existing application directory permissions | |
COPY --chown=www:www ./www /var/www | |
# Change current user to www | |
USER www | |
# Expose port 9000 and start php-fpm server | |
EXPOSE 9000 | |
CMD ["php-fpm"] | |
# ./mysql/my.cnf | |
[mysqld] | |
general_log = 1 | |
general_log_file = /var/lib/mysql/general.log |