-
-
Save abdegenius/ea88cd5b54681dafb13edcfe0b9c17c2 to your computer and use it in GitHub Desktop.
Laravel Docker Setup (NGINX, PHP-FPM, Queue Worker, Scheduler, Reverb)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # Stage 1: Build | |
| FROM php:8.4-cli AS build | |
| # Setup build root | |
| WORKDIR /app | |
| # Install dependencies | |
| RUN apt-get update && apt-get install -y \ | |
| git \ | |
| unzip \ | |
| zip \ | |
| curl \ | |
| && rm -rf /var/lib/apt/lists/* | |
| # Install Composer | |
| RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer | |
| # Copy composer files | |
| COPY composer.json composer.lock ./ | |
| # Install PHP dependencies | |
| RUN composer install --prefer-dist --no-ansi --no-dev --no-interaction --no-plugins --no-progress --no-scripts --optimize-autoloader --ignore-platform-reqs \ | |
| && composer clear-cache | |
| # Copy app source | |
| COPY . . | |
| # Dump autoload | |
| RUN composer dump-autoload --optimize | |
| # Stage 2: Runtime | |
| FROM php:8.4-fpm | |
| # Install dependencies | |
| RUN apt-get update && apt-get install -y \ | |
| git unzip libpq-dev libpng-dev libonig-dev libxml2-dev libicu-dev libuv1-dev \ | |
| curl supervisor nginx \ | |
| && docker-php-ext-install pdo_pgsql mbstring bcmath pcntl gd exif intl \ | |
| && pecl install redis \ | |
| && pecl install uv-beta \ | |
| && docker-php-ext-enable redis uv \ | |
| && curl -fsSL https://deb.nodesource.com/setup_23.x | bash - \ | |
| && apt-get install -y nodejs \ | |
| && npm install -g npm \ | |
| && rm -rf /var/lib/apt/lists/* | |
| # Setup application root | |
| WORKDIR /var/www/html | |
| # Copy application | |
| COPY --from=build /app ./ | |
| # Copy configs | |
| COPY .docker/nginx.conf /etc/nginx/nginx.conf | |
| COPY .docker/php.ini /usr/local/etc/php/conf.d/user-php.ini | |
| COPY .docker/supervisord.conf /etc/supervisor/conf.d/supervisord.conf | |
| COPY .docker/run.sh /usr/local/bin/run.sh | |
| # Expose NGINX | |
| EXPOSE 80 | |
| # Start container | |
| RUN chmod +x /usr/local/bin/run.sh | |
| ENTRYPOINT ["/usr/local/bin/run.sh"] |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| user www-data; | |
| worker_processes auto; | |
| pid /run/nginx.pid; | |
| worker_rlimit_nofile 50000; | |
| include /etc/nginx/modules-enabled/*.conf; | |
| events { | |
| worker_connections 50000; | |
| multi_accept on; | |
| } | |
| http { | |
| include /etc/nginx/mime.types; | |
| default_type application/octet-stream; | |
| sendfile on; | |
| keepalive_timeout 65; | |
| access_log /dev/stdout; | |
| error_log /dev/stderr; | |
| server { | |
| listen 80; | |
| index index.php; | |
| root /var/www/html/public; | |
| charset utf-8; | |
| client_max_body_size 200M; | |
| location = /favicon.ico { access_log off; log_not_found off; } | |
| location = /robots.txt { access_log off; log_not_found off; } | |
| location / { | |
| try_files $uri $uri/ /index.php?$query_string; | |
| } | |
| # START REVERB | |
| location /app/ { | |
| proxy_pass http://127.0.0.1:8080; | |
| proxy_http_version 1.1; | |
| proxy_set_header Host $host; | |
| proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; | |
| proxy_set_header X-Forwarded-Proto $scheme; | |
| proxy_set_header X-Forwarded-Port $server_port; | |
| proxy_set_header Upgrade $http_upgrade; | |
| proxy_set_header Connection "Upgrade"; | |
| } | |
| location /apps/ { | |
| proxy_pass http://127.0.0.1:8080; | |
| proxy_set_header Host $host; | |
| } | |
| # END REVERB | |
| location ~ \.php$ { | |
| include fastcgi_params; | |
| fastcgi_pass 127.0.0.1:9000; | |
| fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; | |
| fastcgi_index index.php; | |
| fastcgi_hide_header X-Powered-By; | |
| } | |
| location ~ /\.(?!well-known).* { | |
| deny all; | |
| } | |
| } | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| upload_max_filesize = 200M | |
| post_max_size = 200M | |
| memory_limit = 512M | |
| max_execution_time = 300 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/bin/bash | |
| # Exit on error | |
| set -eux | |
| # Set permissions | |
| chown -R www-data:www-data /var/www/html/storage /var/www/html/bootstrap/cache | |
| # Link storage | |
| php artisan storage:link | |
| # Run database migrations | |
| php artisan migrate --force | |
| # Clear Laravel caches | |
| php artisan optimize:clear | |
| # Rebuild Laravel caches | |
| php artisan optimize | |
| # Install NPM dependencies | |
| npm ci | |
| # Build frontend assets | |
| npm run build | |
| # Start supervisor | |
| exec /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| [supervisord] | |
| nodaemon=true | |
| minfds=50000 | |
| [program:php-fpm] | |
| command=php-fpm -F | |
| autostart=true | |
| autorestart=true | |
| priority=5 | |
| stdout_logfile=/dev/stdout | |
| stdout_logfile_maxbytes=0 | |
| stderr_logfile=/dev/stderr | |
| stderr_logfile_maxbytes=0 | |
| [program:nginx] | |
| command=nginx -g "daemon off;" | |
| autostart=true | |
| autorestart=true | |
| priority=10 | |
| stdout_logfile=/dev/stdout | |
| stdout_logfile_maxbytes=0 | |
| stderr_logfile=/dev/stderr | |
| stderr_logfile_maxbytes=0 | |
| [program:queue-worker] | |
| command=php artisan queue:work --sleep=3 --tries=3 --max-time=3600 | |
| directory=/var/www/html | |
| user=www-data | |
| autostart=true | |
| autorestart=true | |
| priority=15 | |
| stdout_logfile=/dev/stdout | |
| stdout_logfile_maxbytes=0 | |
| stderr_logfile=/dev/stderr | |
| stderr_logfile_maxbytes=0 | |
| [program:scheduler] | |
| command=php artisan schedule:work --run-output-file=/dev/stdout | |
| user=www-data | |
| autostart=true | |
| autorestart=true | |
| priority=15 | |
| stdout_logfile=/dev/stdout | |
| stdout_logfile_maxbytes=0 | |
| stderr_logfile=/dev/stderr | |
| stderr_logfile_maxbytes=0 | |
| [program:reverb] | |
| command=php artisan reverb:start --host=127.0.0.1 --port=8080 | |
| directory=/var/www/html | |
| user=www-data | |
| autostart=true | |
| autorestart=true | |
| priority=15 | |
| stdout_logfile=/dev/stdout | |
| stdout_logfile_maxbytes=0 | |
| stderr_logfile=/dev/stderr | |
| stderr_logfile_maxbytes=0 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment