- 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 |