Initial Laravel 12 + Filament 5 + Octane skeleton
- Laravel 12 base - Filament 5 (default admin panel) - Stancl/Tenancy v3 (config + migrations only) - Spatie Permission - Octane FrankenPHP runtime - Sanctum - Dockerfile multi-stage (composer + node + frankenphp:8.4) - Entrypoint runs migrations + caches on boot - .env.example pre-completat cu hosturi interne Coolify - Health endpoint /up Repo init pentru multi-tenant SaaS pe Coolify Hetzner.
This commit is contained in:
+91
@@ -0,0 +1,91 @@
|
||||
# syntax=docker/dockerfile:1.7
|
||||
# AutoCRM — Laravel 12 + Filament + Octane FrankenPHP
|
||||
# Multi-stage: composer install + npm build + runtime
|
||||
|
||||
# ─── Stage 1: Composer dependencies ───────────────────────────
|
||||
FROM composer:2 AS composer
|
||||
WORKDIR /app
|
||||
COPY composer.json composer.lock ./
|
||||
RUN composer install \
|
||||
--no-dev \
|
||||
--no-interaction \
|
||||
--no-progress \
|
||||
--no-scripts \
|
||||
--prefer-dist \
|
||||
--optimize-autoloader
|
||||
|
||||
# ─── Stage 2: Node assets (Vite) ──────────────────────────────
|
||||
FROM node:22-alpine AS node
|
||||
WORKDIR /app
|
||||
COPY package.json package-lock.json* ./
|
||||
RUN if [ -f package-lock.json ]; then npm ci; else npm install; fi
|
||||
COPY resources ./resources
|
||||
COPY vite.config.js ./
|
||||
COPY public ./public
|
||||
RUN npm run build
|
||||
|
||||
# ─── Stage 3: Runtime (FrankenPHP + PHP 8.4) ──────────────────
|
||||
FROM dunglas/frankenphp:latest-php8.4 AS runtime
|
||||
WORKDIR /app
|
||||
|
||||
# Install PHP extensions Laravel needs
|
||||
RUN install-php-extensions \
|
||||
pdo_mysql \
|
||||
pcntl \
|
||||
bcmath \
|
||||
intl \
|
||||
gd \
|
||||
zip \
|
||||
redis \
|
||||
opcache \
|
||||
pcntl \
|
||||
sockets \
|
||||
exif
|
||||
|
||||
# System tools
|
||||
RUN apt-get update && apt-get install -y --no-install-recommends \
|
||||
git \
|
||||
unzip \
|
||||
curl \
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
# Copy application code
|
||||
COPY --link . /app
|
||||
# Composer vendor from stage 1
|
||||
COPY --from=composer --link /app/vendor /app/vendor
|
||||
# Built assets from stage 2
|
||||
COPY --from=node --link /app/public/build /app/public/build
|
||||
|
||||
# Permissions
|
||||
RUN chown -R www-data:www-data storage bootstrap/cache \
|
||||
&& chmod -R 0775 storage bootstrap/cache
|
||||
|
||||
# OPcache production config
|
||||
RUN { \
|
||||
echo "opcache.enable=1"; \
|
||||
echo "opcache.enable_cli=1"; \
|
||||
echo "opcache.jit_buffer_size=128M"; \
|
||||
echo "opcache.jit=tracing"; \
|
||||
echo "opcache.memory_consumption=256"; \
|
||||
echo "opcache.max_accelerated_files=20000"; \
|
||||
echo "opcache.validate_timestamps=0"; \
|
||||
echo "opcache.preload=/app/storage/preload.php"; \
|
||||
echo "opcache.preload_user=www-data"; \
|
||||
} > /usr/local/etc/php/conf.d/opcache.ini
|
||||
|
||||
ENV OCTANE_SERVER=frankenphp \
|
||||
APP_BASE_PATH=/app \
|
||||
SERVER_NAME=":8000"
|
||||
|
||||
EXPOSE 8000
|
||||
|
||||
# Healthcheck
|
||||
HEALTHCHECK --interval=30s --timeout=5s --start-period=20s --retries=3 \
|
||||
CMD curl -fsSL http://localhost:8000/up || exit 1
|
||||
|
||||
# Entrypoint script handles migrations + cache
|
||||
COPY docker/entrypoint.sh /usr/local/bin/entrypoint
|
||||
RUN chmod +x /usr/local/bin/entrypoint
|
||||
|
||||
ENTRYPOINT ["/usr/local/bin/entrypoint"]
|
||||
CMD ["php", "artisan", "octane:start", "--server=frankenphp", "--host=0.0.0.0", "--port=8000", "--admin-port=2019", "--workers=auto", "--max-requests=500"]
|
||||
Reference in New Issue
Block a user