Add production Dockerfile (php-fpm + nginx) for Coolify

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-14 00:03:55 +03:00
co-authored by Claude Opus 4.8
parent a63515cfc6
commit 3f602c61ef
3 changed files with 86 additions and 0 deletions
+17
View File
@@ -0,0 +1,17 @@
.git
.gitignore
.github
node_modules
vendor
public/build
public/hot
.env
.env.*
storage/logs/*
storage/framework/cache/data/*
storage/framework/sessions/*
storage/framework/views/*
tests
.phpunit.result.cache
.DS_Store
README.md
+53
View File
@@ -0,0 +1,53 @@
# syntax=docker/dockerfile:1
# ---------- Stage 1: Frontend assets (Vite + Tailwind) ----------
FROM node:20-alpine AS assets
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci
COPY resources ./resources
COPY vite.config.js ./
COPY public ./public
RUN npm run build
# ---------- Stage 2: PHP runtime (php-fpm + nginx) ----------
FROM serversideup/php:8.3-fpm-nginx AS app
# Install PHP extensions the app needs
USER root
RUN install-php-extensions \
pdo_mysql \
bcmath \
gd \
intl \
zip \
exif \
pcntl \
redis \
opcache
WORKDIR /var/www/html
# Composer dependencies first (better layer caching)
COPY --chown=www-data:www-data composer.json composer.lock ./
RUN composer install \
--no-dev \
--no-scripts \
--no-autoloader \
--prefer-dist \
--no-interaction
# Application source
COPY --chown=www-data:www-data . .
# Compiled frontend assets from stage 1
COPY --chown=www-data:www-data --from=assets /app/public/build ./public/build
# Optimize autoloader
RUN composer dump-autoload --optimize --no-dev --no-interaction
# Runtime init (migrate + cache) runs on container start
COPY --chown=www-data:www-data docker/entrypoint.d/ /etc/entrypoint.d/
RUN chmod +x /etc/entrypoint.d/*.sh
USER www-data
+16
View File
@@ -0,0 +1,16 @@
#!/command/with-contenv bash
# Runs on every container start (after DB/Redis are reachable on the Coolify network).
set -e
cd /var/www/html
# Storage symlink (idempotent)
php artisan storage:link 2>/dev/null || true
# Run pending migrations
php artisan migrate --force --no-interaction || true
# Cache config/routes/views for production speed
php artisan config:cache
php artisan route:cache
php artisan view:cache