Laravel
Instalacja
Laravel z Filament 5 uruchamiany w kontenerze Docker i publikowany przez Caddy pod subdomeną laravel-eim.fulc.ro.
Założenia konfiguracyjne:
- Compose:
/srv/docker/compose/laravel-eim - Kod aplikacji:
/srv/docker/projects/laravel-eim - Dane aplikacji:
/srv/docker/data/laravel-eim/storage - Sekrety:
/srv/docker/secrets/laravel-eim/app.env - Sieci Docker:
proxy,internal - Panel Filament:
/admin - Reverse proxy: Caddy
Dostęp do sieci Docker
Aplikacja wymaga dostępu do sieci proxy i internal w celu komunikacji z reverse proxy i bazą danych.
Tworzenie katalogów
Tworzymy katalogi wymagane przez aplikację i kontenery.
sudo mkdir -p /srv/docker/compose/laravel-eim
sudo mkdir -p /srv/docker/projects/laravel-eim
sudo mkdir -p /srv/docker/data/laravel-eim/storage/{app/public,framework/{cache,sessions,testing,views},logs}
sudo mkdir -p /srv/docker/secrets/laravel-eim
Nadajemy właściciela katalogów.
sudo chown -R "$USER:$USER" /srv/docker/compose/laravel-eim
sudo chown -R "$USER:$USER" /srv/docker/secrets/laravel-eim
sudo chown -R 33:33 /srv/docker/projects/laravel-eim
sudo chown -R 33:33 /srv/docker/data/laravel-eim
Tworzenie projektu Laravel
Tworzymy projekt Laravel bez instalacji PHP na hoście.
docker run --rm \
-u 33:33 \
-v /srv/docker/projects/laravel-eim:/app \
-w /app \
composer:2 \
composer create-project laravel/laravel .
Budowa obrazu PHP
Instalujemy rozszerzenie intl wymagane przez Laravel i Filament.
cd /srv/docker/compose/laravel-eim
micro Dockerfile
FROM serversideup/php:8.4-fpm-nginx-bookworm
USER root
RUN install-php-extensions intl
USER www-data
Konfiguracja
Tworzenie pliku app.env
Plik zawiera konfigurację aplikacji i dane dostępowe.
micro /srv/docker/secrets/laravel-eim/app.env
APP_NAME=EIM
APP_ENV=production
APP_KEY=
APP_DEBUG=false
APP_URL=https://eim.fulc.ro
APP_TIMEZONE=Europe/Warsaw
APP_LOCALE=pl
LOG_CHANNEL=stderr
LOG_LEVEL=info
DB_CONNECTION=mysql
DB_HOST=mariadb
DB_PORT=3306
DB_DATABASE=laravel-eim
DB_USERNAME=laravel-eim
DB_PASSWORD=SILNE_HASLO_BEZ_$
CACHE_STORE=file
SESSION_DRIVER=file
QUEUE_CONNECTION=database
Konfiguracja Docker Compose
Definiujemy usługę aplikacji oraz sieci.
micro compose.yaml
services:
app:
build:
context: /srv/docker/compose/laravel-eim
dockerfile: Dockerfile
container_name: laravel-eim-app
restart: unless-stopped
env_file:
- /srv/docker/secrets/laravel-eim/app.env
volumes:
- /srv/docker/projects/laravel-eim:/var/www/html
- /srv/docker/data/laravel-eim/storage:/var/www/html/storage
networks:
- proxy
- internal
networks:
proxy:
external: true
internal:
external: true
Uruchomienie kontenera
Budujemy obraz i uruchamiamy aplikację.
docker compose up -d --build
Generowanie klucza aplikacji
Laravel wymaga klucza szyfrującego.
docker compose run --rm app php artisan key:generate --show
Wklejamy do app.env:
APP_KEY=base64:...
Restartujemy kontener:
docker compose up -d
Instalacja Filament
Instalujemy panel administracyjny Filament 5.
docker compose run --rm app composer require filament/filament:^5.4
docker compose run --rm app php artisan filament:install --panels
docker compose run --rm app php artisan migrate --force
docker compose run --rm app php artisan storage:link
Naprawa dostępu do panelu (błąd 403)
Dodajemy implementację interfejsu FilamentUser w modelu użytkownika.
micro /srv/docker/projects/laravel-eim/app/Models/User.php
use Filament\Models\Contracts\FilamentUser;
use Filament\Panel;
class User extends Authenticatable implements FilamentUser
{
public function canAccessPanel(Panel $panel): bool
{
return true;
}
}
Naprawa HTTPS (błąd assetów CSS i JS)
Konfigurujemy zaufanie do proxy dla poprawnego wykrywania HTTPS.
micro /srv/docker/projects/laravel-eim/bootstrap/app.php
use Illuminate\Http\Request;
->withMiddleware(function (Middleware $middleware): void {
$middleware->trustProxies(
at: '*',
headers: Request::HEADER_X_FORWARDED_FOR |
Request::HEADER_X_FORWARDED_HOST |
Request::HEADER_X_FORWARDED_PORT |
Request::HEADER_X_FORWARDED_PROTO |
Request::HEADER_X_FORWARDED_AWS_ELB,
);
})
Budowanie zasobów frontend
Budujemy zasoby Vite w środowisku kontenera Node.js.
docker run --rm \
-u 33:33 \
-e HOME=/tmp \
-e npm_config_cache=/tmp/.npm \
-v /srv/docker/projects/laravel-eim:/app \
-w /app \
node:24-bookworm-slim \
npm install
docker run --rm \
-u 33:33 \
-e HOME=/tmp \
-e npm_config_cache=/tmp/.npm \
-v /srv/docker/projects/laravel-eim:/app \
-w /app \
node:24-bookworm-slim \
npm run build
Optymalizacja
Optymalizujemy konfigurację i cache aplikacji.
docker compose run --rm app php artisan optimize:clear
docker compose run --rm app php artisan optimize
docker compose run --rm app php artisan filament:optimize
Konfiguracja reverse proxy
Publikujemy aplikację przez Caddy.
eim.fulc.ro {
redir / /admin/login 302
reverse_proxy laravel-eim:8080 {
header_up X-Forwarded-Proto {scheme}
header_up X-Forwarded-Host {host}
header_up X-Forwarded-For {remote_host}
}
}
docker compose exec caddy caddy reload --config /etc/caddy/Caddyfile
Test działania
Sprawdzamy dostęp do panelu administracyjnego.
https://eim.fulc.ro/admin/login
Podgląd logów
Sprawdzamy logi aplikacji.
docker logs -f laravel-eim-app
Uwagi utrzymaniowe
- Aktualizacje wykonujemy w katalogu projektu
- Po zmianach uruchamiamy
optimizeifilament:optimize - Po zmianie
app.envrestartujemy kontener - Backup obejmuje katalog
dataorazsecrets
Tworzenie użytkownika
Tworzenie użytkownika Filament
Tworzymy konto administratora panelu.
docker compose run --rm app php artisan make:filament-user