Article

Docker container symfony 8.0 sur Asustor ADM 5.0

Docker Symfony 8.4 Avec Frankennphp Sur Asustor Adm 5.0

deveops
2.57min to read
10-01-2026

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

  1. Connexion SSH : Connectez-vous à votre NAS en SSH.

  2. 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écutez chmod -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 ports du docker-compose.yml (ex: 8080:80).

  • Version PHP : Symfony 8 requiert PHP 8.2 au minimum. L'image dunglas/frankenphp:latest utilise actuellement PHP 8.3/8.4, ce qui est parfait.

liste des articles