├── docker-compose.yml └── docker ├── nginx ├── Dockerfile └── conf.d │ └── default.conf ├── php-cli.docker └── php-fpm ├── Dockerfile └── conf.d └── security.ini /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3.2' 2 | services: 3 | nginx: 4 | build: 5 | context: ./docker/nginx 6 | dockerfile: Dockerfile 7 | volumes: 8 | - ./:/var/www 9 | environment: 10 | - "DB_PORT=3306" 11 | - "DB_HOST=mysql" 12 | - "XDG_CONFIG_HOME=/app" 13 | ports: 14 | - "8080:80" 15 | links: 16 | - php-fpm 17 | - node 18 | 19 | php-fpm: 20 | build: 21 | context: ./docker/php-fpm 22 | dockerfile: Dockerfile 23 | volumes: 24 | - ./:/var/www 25 | environment: 26 | - "DB_PORT=3306" 27 | - "DB_HOST=mysql" 28 | - "REDIS_PORT=6379" 29 | - "REDIS_HOST=redis" 30 | links: 31 | - mysql 32 | - node 33 | 34 | php-cli: 35 | build: 36 | context: ./ 37 | dockerfile: docker/php-cli.docker 38 | volumes: 39 | - ./:/var/www 40 | environment: 41 | - "DB_PORT=3306" 42 | - "DB_HOST=mysql" 43 | - "COMPOSER_MEMORY_LIMIT=-1" 44 | links: 45 | - mysql 46 | tty: true 47 | 48 | mysql: 49 | image: mysql:8.0 50 | volumes: 51 | - database:/var/lib/mysql 52 | environment: 53 | - "MYSQL_ROOT_PASSWORD=secret" 54 | - "MYSQL_USER=user" 55 | - "MYSQL_PASSWORD=secret" 56 | - "MYSQL_DATABASE=laravel" 57 | ports: 58 | - "33061:3306" 59 | phpmyadmin: 60 | image: phpmyadmin/phpmyadmin 61 | container_name: phpmyadmin 62 | environment: 63 | - PMA_HOST=mysql 64 | - PMA_USER=user 65 | - PMA_PASSWORD=secret 66 | - UPLOAD_LIMIT=64M 67 | restart: always 68 | ports: 69 | - 8081:80 70 | node: 71 | image: node:18-alpine 72 | ports: 73 | - "3000:3000" 74 | volumes: 75 | - ./:/var/www 76 | working_dir: /var/www 77 | tty: true 78 | 79 | volumes: 80 | database: 81 | -------------------------------------------------------------------------------- /docker/nginx/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM nginx:latest 2 | 3 | COPY ./conf.d/ /etc/nginx/conf.d/ 4 | 5 | WORKDIR /var/www -------------------------------------------------------------------------------- /docker/nginx/conf.d/default.conf: -------------------------------------------------------------------------------- 1 | server { 2 | listen 80; 3 | index index.php; 4 | root /var/www/public; 5 | 6 | add_header Strict-Transport-Security "max-age=31536000"; 7 | add_header Content-Security-Policy "block-all-mixed-content"; 8 | 9 | location / { 10 | try_files $uri /index.php?$args; 11 | } 12 | 13 | location /docs { 14 | try_files $uri $uri/; 15 | } 16 | 17 | location ~ \.php$ { 18 | fastcgi_split_path_info ^(.+\.php)(/.+)$; 19 | fastcgi_pass php-fpm:9000; 20 | fastcgi_index index.php; 21 | include fastcgi_params; 22 | fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 23 | fastcgi_param PATH_INFO $fastcgi_path_info; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /docker/php-cli.docker: -------------------------------------------------------------------------------- 1 | FROM php:8.1-cli 2 | 3 | RUN apt-get update && apt-get install -y libmcrypt-dev mariadb-client \ 4 | && docker-php-ext-install pdo_mysql pcntl 5 | 6 | 7 | 8 | RUN docker-php-ext-configure exif 9 | RUN docker-php-ext-install exif 10 | RUN docker-php-ext-enable exif 11 | 12 | 13 | RUN apt-get install -y wget unzip curl 14 | RUN curl -sS https://getcomposer.org/installer |php 15 | RUN mv composer.phar /usr/local/bin/composer 16 | 17 | RUN apt-get install -y cron 18 | 19 | USER 1000:1000 20 | 21 | WORKDIR /var/www 22 | -------------------------------------------------------------------------------- /docker/php-fpm/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM php:8.1-fpm 2 | 3 | RUN apt-get update && apt-get install -y libmcrypt-dev libpng-dev mariadb-client \ 4 | libpng-dev \ 5 | libjpeg-dev \ 6 | libfreetype6-dev \ 7 | libjpeg62-turbo-dev \ 8 | libgd-dev \ 9 | && docker-php-ext-install pdo_mysql 10 | 11 | RUN docker-php-ext-configure exif 12 | RUN docker-php-ext-install exif 13 | RUN docker-php-ext-enable exif 14 | 15 | RUN docker-php-ext-configure gd --with-freetype=/usr/include/ --with-webp=/usr/include/ --with-jpeg=/usr/include/ 16 | RUN docker-php-ext-install -j$(nproc) gd 17 | 18 | RUN apt install jpegoptim optipng pngquant gifsicle libavif-bin -y 19 | 20 | RUN apt-get install -y wget unzip curl 21 | RUN curl -sS https://getcomposer.org/installer |php 22 | RUN mv composer.phar /usr/local/bin/composer 23 | 24 | COPY ./conf.d /usr/local/etc/php/conf.d/ 25 | 26 | WORKDIR /var/www 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /docker/php-fpm/conf.d/security.ini: -------------------------------------------------------------------------------- 1 | expose_php=off --------------------------------------------------------------------------------