Aller au contenu

Procédure pour déployer votre application Symfony

sur Render

Voici un guide complet, étape par étape, couvrant à la fois la préparation côté Symfony et la configuration côté Render. Comme vous utilisez une base de données MySQL locale, nous aborderons aussi la migration vers une base de données cloud.


1. Préparation côté Symfony

1.1. Configurer l’environnement de production

Fichier .env

  # .env.prod
  APP_ENV=prod
  APP_DEBUG=0

Variables d’environnement pour la base de données

  DATABASE_URL="mysql://test:testd@db_host:3306/bibliotech?serverVersion=8.0"

(Les valeurs réelles seront configurées côté Render.)


1.2. Installer les dépendances de production

Exécutez cette commande pour générer les dépendances optimisées pour la production :

composer install --no-dev --optimize-autoloader

1.3. Configurer les assets

Si vous utilisez des assets (CSS, JS, images), compilez-les pour la production :

npm run build  # Si vous utilisez Webpack Encore

ou

yarn build

1.4. Vérifier la configuration de sécurité

Dans config/packages/security.yaml, assurez-vous que la configuration est adaptée pour la production. Par exemple, désactivez le mode debug pour les firewalls :

firewalls:
  main:
    lazy: true
    provider: app_user_provider
    # ...

1.5. Configurer Doctrine pour la production

Dans config/packages/doctrine.yaml, assurez-vous que la configuration est adaptée :

doctrine:
    dbal:
        url: '%env(resolve:DATABASE_URL)%'
    orm:
        auto_generate_proxy_classes: false  # Désactivé en production
        proxy_dir: '%kernel.build_dir>/doctrine/orm/Proxies'
        query_cache_driver: array
        result_cache_driver: array
        metadata_cache_driver: array

1.6. Créer un script de déploiement (optionnel)

Créez un script deploy.sh pour automatiser certaines tâches :

#!/bin/bash

# Installer les dépendances
composer install --no-dev --optimize-autoloader

# Compiler les assets
npm run build

# Vider le cache
php bin/console cache:clear
php bin/console cache:warmup

Rendez-le exécutable :

chmod +x deploy.sh

Sous Windows, vous pouvez créer un fichier .bat :

@echo off
echo Installation des dépendances...
call composer install --no-dev --optimize-autoloader

echo Compilation des assets...
call npm run build

echo Nettoyage du cache...
call php bin/console cache:clear
call php bin/console cache:warmup

echo Déploiement terminé.
pause

2. Préparation de la base de données

2.1. Exporter votre base de données locale

Exportez votre base de données MySQL locale en utilisant mysqldump :

mysqldump -u [votre_utilisateur] -p[mot_de_passe] [nom_de_votre_base_locale] > bibliotec.sql

2.2. Créer une base de données sur Render


3. Configuration côté Render

3.1. Créer un nouveau service Web

  1. Sur le tableau de bord Render, cliquez sur “New” puis “Web Service”.
  2. Connectez votre dépôt Git (GitHub, GitLab, etc.) où se trouve votre projet Symfony.

3.2. Configurer le service Web

Informations de base

Build Command

composer install --no-dev --optimize-autoloader && npm run build

Start Command

php bin/console doctrine:migrations:migrate --no-interaction && symfony serve --port=$PORT --no-tls

3.3. Configurer les variables d’environnement

Ajoutez les variables d’environnement suivantes dans Render :

Variable Valeur
APP_ENV prod
APP_DEBUG 0
DATABASE_URL mysql://[utilisateur]:[mot_de_passe]@[hôte]:3306/[nom_de_la_base] (fournis par Render)

3.4. Ajouter une base de données MySQL

  1. Dans votre service Web, cliquez sur “Add a Database”.
  2. Choisissez MySQL.
  3. Notez les informations de connexion (elles seront automatiquement ajoutées à vos variables d’environnement).

3.5. Importer votre base de données locale

Une fois votre service déployé, importez votre base de données locale :

mysql -u [utilisateur_render] -p[mot_de_passe_render] -h [hôte_render] [nom_de_la_base_render] < bibliotec.sql

(Vous pouvez le faire via un terminal local en utilisant les informations de connexion fournies par Render.)


3.6. Déployer

  1. Cliquez sur “Create Web Service”.
  2. Render va construire et déployer votre application. Cela peut prendre quelques minutes.

4. Configurer le domaine (optionnel)

Si vous souhaitez utiliser un domaine personnalisé :

  1. Allez dans l’onglet “Custom Domains” de votre service Render.
  2. Ajoutez votre domaine.
  3. Configurez les enregistrements DNS de votre domaine pour pointer vers Render.

5. Vérifications post-déploiement

5.1. Vérifier les logs

Dans l’onglet “Logs” de votre service Render, vérifiez qu’il n’y a pas d’erreurs.


5.2. Tester l’application

Ouvrez l’URL fournie par Render dans votre navigateur et testez les fonctionnalités principales.


5.3. Vérifier la base de données

Connectez-vous à votre base de données sur Render pour vérifier que les données ont bien été importées.


6. Résolution des problèmes courants

6.1. Erreurs de connexion à la base de données


6.2. Problèmes de cache

Si votre application ne se comporte pas comme attendu, videz le cache :

php bin/console cache:clear

6.3. Erreurs 500

Consultez les logs pour identifier la source du problème. Les erreurs courantes incluent :


7. Mise à jour continue

Pour mettre à jour votre application après des modifications :

  1. Poussez vos changements sur la branche connectée à Render.
  2. Render redeploiera automatiquement votre application.

Résumé des étapes clés

Étape Action
Préparation Symfony Configurer .env.prod, installer les dépendances, compiler les assets.
Export de la base de données Utiliser mysqldump pour exporter votre base de données locale.
Création du service Render Choisir “Web Service”, connecter votre dépôt Git.
Configuration du service Définir Build Command et Start Command, ajouter les variables d’environnement.
Base de données Render Créer une base de données MySQL sur Render et importer vos données locales.
Déploiement Lancer le déploiement et vérifier les logs.
Test Tester l’application et la base de données.

Choix du service sur Render

D’après la capture d’écran que vous avez partagée, voici ce que je recommande pour une application Symfony comme Bibliotec :

Type de service Recommandation Pourquoi
Web Service Choisir ce service Idéal pour les applications Symfony (backend + frontend).
Private Service Non nécessaire Utile si vous avez besoin d’un réseau privé, mais pas pour une application standard.
Background Worker Non nécessaire (sauf si vous avez des tâches asynchrones comme des queues de jobs). Pour des tâches longues ou des workers (ex: envoi d’emails en arrière-plan).
Cron Jobs Non nécessaire (sauf si vous avez des tâches planifiées). Pour des tâches périodiques (ex: nettoyage de base de données).
Postgres Choisir MySQL Vous utilisez déjà MySQL localement.
Key Value Non nécessaire Pour du stockage clé-valeur (ex: Redis).

Exemple de render.yaml (optionnel)

Si vous utilisez un fichier render.yaml pour configurer votre service, voici un exemple :

services:
  - type: web
    name: bibliotec
    env: php
    buildCommand: "composer install --no-dev --optimize-autoloader && npm run build"
    startCommand: "php bin/console doctrine:migrations:migrate --no-interaction && symfony serve --port=$PORT --no-tls"
    envVars:
      - key: APP_ENV
        value: prod
      - key: APP_DEBUG
        value: "0"

Conseils supplémentaires