From e57e6d34134a2ea7cae25bde3997b6f92fcfb6f5 Mon Sep 17 00:00:00 2001 From: Jp Date: Thu, 19 Feb 2026 16:33:03 +0800 Subject: [PATCH] feat(docker): add standalone Docker setup and remove docker-compose - Replace Laravel Sail docker-compose with a single-container Dockerfile - Configure nginx and PHP-FPM via supervisor for production-like environment - Include optimized PHP extensions and Redis support - Simplify deployment by removing multi-service orchestration --- Dockerfile | 25 ++++++++++++++++++ docker-compose.yml | 58 ----------------------------------------- docker/nginx.conf | 24 +++++++++++++++++ docker/supervisord.conf | 12 +++++++++ 4 files changed, 61 insertions(+), 58 deletions(-) create mode 100644 Dockerfile delete mode 100644 docker-compose.yml create mode 100644 docker/nginx.conf create mode 100644 docker/supervisord.conf diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..4260b97 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,25 @@ +FROM php:8.4-fpm + +WORKDIR /var/www + +RUN apt-get update && apt-get install -y \ + git curl zip unzip libpng-dev libonig-dev \ + libxml2-dev nginx supervisor \ + && docker-php-ext-install pdo pdo_mysql mbstring exif pcntl bcmath gd + +RUN pecl install redis && docker-php-ext-enable redis + +COPY --from=composer:latest /usr/bin/composer /usr/bin/composer + +COPY . . + +RUN composer install --no-dev --optimize-autoloader + +COPY docker/nginx.conf /etc/nginx/nginx.conf +COPY docker/supervisord.conf /etc/supervisor/conf.d/supervisord.conf + +RUN chown -R www-data:www-data /var/www/storage /var/www/bootstrap/cache +RUN chmod -R 775 /var/www/storage /var/www/bootstrap/cache + +EXPOSE 80 +CMD ["/usr/bin/supervisord"] \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml deleted file mode 100644 index 31bd586..0000000 --- a/docker-compose.yml +++ /dev/null @@ -1,58 +0,0 @@ -services: - laravel.test: - build: - context: ./vendor/laravel/sail/runtimes/8.3 - dockerfile: Dockerfile - args: - WWWGROUP: '${WWWGROUP}' - image: sail-8.3/app - extra_hosts: - - 'host.docker.internal:host-gateway' - ports: - - '${APP_PORT:-80}:80' - - '${VITE_PORT:-5173}:${VITE_PORT:-5173}' - environment: - WWWUSER: '${WWWUSER}' - LARAVEL_SAIL: 1 - XDEBUG_MODE: '${SAIL_XDEBUG_MODE:-off}' - XDEBUG_CONFIG: '${SAIL_XDEBUG_CONFIG:-client_host=host.docker.internal}' - IGNITION_LOCAL_SITES_PATH: '${PWD}' - SUPERVISOR_PHP_COMMAND: "/usr/bin/php -d variables_order=EGPCS /var/www/html/artisan octane:start --server=frankenphp --host=0.0.0.0 --admin-port=2019 --port=80" - XDG_CONFIG_HOME: /var/www/html/config - XDG_DATA_HOME: /var/www/html/data - volumes: - - '.:/var/www/html' - networks: - - sail - depends_on: - - mysql - mysql: - image: 'mysql/mysql-server:8.0' - ports: - - '${FORWARD_DB_PORT:-3306}:3306' - environment: - MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}' - MYSQL_ROOT_HOST: '%' - MYSQL_DATABASE: '${DB_DATABASE}' - MYSQL_USER: '${DB_USERNAME}' - MYSQL_PASSWORD: '${DB_PASSWORD}' - MYSQL_ALLOW_EMPTY_PASSWORD: 1 - volumes: - - 'sail-mysql:/var/lib/mysql' - - './vendor/laravel/sail/database/mysql/create-testing-database.sh:/docker-entrypoint-initdb.d/10-create-testing-database.sh' - networks: - - sail - healthcheck: - test: - - CMD - - mysqladmin - - ping - - '-p${DB_PASSWORD}' - retries: 3 - timeout: 5s -networks: - sail: - driver: bridge -volumes: - sail-mysql: - driver: local diff --git a/docker/nginx.conf b/docker/nginx.conf new file mode 100644 index 0000000..56642a2 --- /dev/null +++ b/docker/nginx.conf @@ -0,0 +1,24 @@ +events {} + +http { + include mime.types; + server { + listen 80; + root /var/www/public; + index index.php; + + location / { + try_files $uri $uri/ /index.php?$query_string; + } + + location ~ \.php$ { + fastcgi_pass 127.0.0.1:9000; + fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; + include fastcgi_params; + } + + location ~ /\.ht { + deny all; + } + } +} \ No newline at end of file diff --git a/docker/supervisord.conf b/docker/supervisord.conf new file mode 100644 index 0000000..b2455ad --- /dev/null +++ b/docker/supervisord.conf @@ -0,0 +1,12 @@ +[supervisord] +nodaemon=true + +[program:php-fpm] +command=php-fpm +autostart=true +autorestart=true + +[program:nginx] +command=nginx -g 'daemon off;' +autostart=true +autorestart=true \ No newline at end of file