Article
Docker Symfony 8.4 Avec Frankennphp Sur Asustor Adm 5.0
Un container Docker pour Symfony 8.0 sur Asustor ADM 5.0 avec FRANKENPHP
Installer Symfony 8.0.* avec FRANKENPHP sur un Nas Asustor(ADM 5.0), simplifie énormément le stack en intégrant le serveur web directement au binaire PHP via GO, éliminant ainsi le besoin de Nginx ou PHP-FPM séparés.
Voici une configuration optimisée pour Asustor ADM 5.0 et docker installé.
1. Structure du projet
Créez un dossier pour votre projet sur votre NAS (ex: /volume1/Docker/symfony-app) avec l'arborescence suivante :
-
docker-compose.yml -
docker
-
frp
-
Dockerfile -
Caddyfile
-
-
2. Le Dockerfile
Ce fichier utilise l'image officielle de FrankenPHP. Il installe les extensions nécessaires pour Symfony 8.
à l'intérieur de ce dossier nous allons créer l'arborescence suivante en intégrand composer dès le début.
FROM dunglas/frankenphp:1-php8.3-bookworm
# 1. Installation des dépendances système
RUN apt-get update && apt-get install -y \
libzip-dev \
unzip \
libpng-dev \
libicu-dev \
&& rm -rf /var/lib/apt/lists/*
# 2. Extensions PHP (Ajout de apcu pour les performances Symfony)
RUN install-php-extensions \
pdo_mysql \
gd \
intl \
zip \
opcache \
apcu
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
WORKDIR /app
# 3. Copie du Caddyfile (Assurez-vous que le chemin correspond à votre projet)
COPY docker/frp/Caddyfile /etc/caddy/Caddyfile
RUN setcap CAP_NET_BIND_SERVICE=+eip /usr/local/bin/frankenphp
# On s'assure que Symfony peut écrire (ajustez selon votre besoin)
RUN chown -R www-data:www-data /app
CMD ["frankenphp", "run", "--config", "/etc/caddy/Caddyfile"]
3. Le Caddyfile
FrankenPHP utilise Caddy en interne. Ce fichier définit comment le trafic est géré.
{
# Active l'intégration FrankenPHP
frankenphp
# Définit l'ordre des modules pour s'assurer que PHP traite la requête avant le serveur de fichiers
order php_server before file_server
}
:80 {
# Dossier racine où se trouve l'index.php (à l'intérieur du conteneur)
root * /app/public
# Compression pour de meilleures performances
encode zstd gzip
# RÉÉCRITURE DES URLS :
# Si le fichier demandé n'existe pas physiquement sur le NAS,
# on envoie la requête à index.php (le point d'entrée de Symfony)
try_files {path} {path}/ /index.php?{query}
# Configuration du serveur PHP
php_server {
index index.php
}
# Permet de servir les fichiers statiques (images, css, js) s'ils existent
file_server
}
4. Le docker-compose.yml
Sur ADM 5.0, assurez-vous d'avoir installé l'application "Docker" (ou Portainer) via l'App Central.
services:
php:
build:
context: .
dockerfile: docker/frp/Dockerfile
container_name: symfony_app
restart: unless-stopped
ports:
- "8080:80"
- "8443:443"
- "8443:443/udp"
volumes:
- ./app:/app
- ./docker/frp/Caddyfile:/etc/caddy/Caddyfile
- caddy_data:/data
- caddy_config:/config
environment:
- SERVER_NAME=:80
- APP_ENV=dev
- APP_SECRET=${APP_SECRET:-votremotsecretbiencompliqué}
- DATABASE_URL=mysql://db_user:db_password@db:3306/symfony_db?serverVersion=8.0.32&charset=utf8mb4
depends_on:
db:
condition: service_healthy # Attendre que la DB soit vraiment prête
db:
image: mysql:8.0
container_name: symfony_db
restart: unless-stopped
# Utile pour la compatibilité, mais vérifiez selon votre version de PDO
command: --default-authentication-plugin=mysql_native_password
environment:
MYSQL_DATABASE: symfony_db
MYSQL_USER: db_user
MYSQL_PASSWORD: db_password
MYSQL_ROOT_PASSWORD: root_password
volumes:
- db_data:/var/lib/mysql
healthcheck: # Ajout d'un test de santé pour la DB
test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
timeout: 5s
retries: 5
ports:
- "3306:3306"
volumes:
caddy_data:
caddy_config:
db_data:
5. Déploiement sur Asustor ADM
-
Connexion SSH : Connectez-vous à votre NAS en SSH.
-
Initialisation : Si vous n'avez pas encore de projet Symfony dans
src, vous pouvez le créer avec :docker compose run --rm php composer create-project symfony/skeleton .
Lancement :
docker compose up -d --build
Points d'attention pour Asustor :
-
Permissions : ADM utilise des permissions spécifiques. Si vous avez des erreurs d'écriture dans
var/cache, exécutezchmod -R 777 var/(en développement uniquement). -
Ports : Si le port 80 ou 443 est déjà utilisé par l'interface d'administration d'Asustor, modifiez la section
portsdudocker-compose.yml(ex:8080:80). -
Version PHP : Symfony 8 requiert PHP 8.2 au minimum. L'image
dunglas/frankenphp:latestutilise actuellement PHP 8.3/8.4, ce qui est parfait.