---
title: "Déployer vos applications Symfony avec Ansible sur un Cloudways"
excerpt: "Découvrez comment déployer vos applications Symfony simplement avec Ansible sur Cloudways."
publishDate: 2024-10-25T00:00:00.000Z
tags: ["symfony", "vps", "ansible", "cloudways"]
canonical: "https://yoandev.co/cloudways-ansible-symfony"
---

<YouTube id="DLmCObenYtQ" />

> Publication en <u>partenariat commercial</u> avec [Cloudways](https://www.cloudways.com/en/?id=966246).

## Introduction

Mettre une application Symfony en production est un processus qui peut impressionner si vous n'êtes pas familier avec la gestion de l'infrastructure.

Vous avez besoin de déployer vos applications en production, mais vous vous sentez bloqué•e sur la gestion de votre infrastructure, dans cet article, je vais vous expliquer comment déployer vos applications Symfony simplement avec Ansible sur Cloudways en quelques minutes.

La promesse de [Cloudways](https://www.cloudways.com/en/?id=966246) est de vous offrir une solution simple et rapide pour déployer vos applications Symfony sans avoir à gérer la configuration de votre serveur. En gros, [Cloudways](https://www.cloudways.com/en/?id=966246) vous offre une solution packagée tout en vous offrant la possibilité de personnaliser la configuration de votre serveur.

## Pré-requis

- Pour cette démo, nous allons utiliser l'outil [Ansible](https://www.ansible.com/) pour automatiser le déploiement de notre application Symfony sur Cloudways, il faut donc installer Ansible sur votre machine. Pour installer Ansible, vous pouvez suivre les instructions de la [documentation officielle](https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html).
- Un compte [Cloudways](https://www.cloudways.com/en/?id=966246).

## Commander un serveur chez Cloudways

Dans votre console [Cloudways](https://www.cloudways.com/en/?id=966246), rendez-vous dans le menu "My Servers" et cliquez sur "Launch Now".

Pour la démo nous choisirons la configuration suivante :

- PHP : Custom App
- Application Name: Demo
- Server Name: Demo
- Project Name: Demo
- Server provider: DigitalOcean
- Server Size: 4 GB RAM, 80 GB NVMe Disk, 4 TB Transfer, 2 Core Processor
- Location: London

![](./img/2024-10-18-23-20-19.png)

En quelques minutes votre serveur va être créé et vous devriez pouvoir vous connecter à l'interface de gestion de votre serveur Cloudways.

## Réglage de votre serveur Cloudways

### Ajouter votre clé SSH

Pour pouvoir se connecter à votre serveur Cloudways, vous devez ajouter votre clé SSH **public** à l'interface de gestion de votre serveur Cloudways (je vous invite à ne pas utiliser l'option par login/mot de passe).

* Copier-coller votre clé SSH **public** dans votre terminal. (Souvent elle ce sera disponible dans le fichier `~/.ssh/id_rsa.pub`)

![](./img/2024-10-18-23-33-01.png)

Et tester la connexion SSH :

```bash
ssh master_username@123.123.123.123
```

Si vous avez bien configuré votre clé SSH, vous devriez être connecté à votre serveur Cloudways ✨ !

### Changer la version de PHP

Tant qu'a déployer une application Symfony, autant profiter de la dernière version de PHP disponible sur Cloudways.

![](./img/2024-10-18-23-37-08.png)

### Changer le `webroot` et désactiver Varnish

Le `webroot` est le répertoire qui sera serci par le serveur web, il est donc important de configurer le `webroot` avec le repertoire `public` de votre projet Symfony.

Au passage, on désactive Varnish (qui est un cache HTTP), la configuration de base etant un peu capricieuse.

![](./img/2024-10-18-23-43-37.png)

## Une Application Symfony de démo

Nous allons créer une application Symfony ultra minimaliste pour tester notre serveur Cloudways.

* Créons un nouveau projet Symfony :

```bash
symfony new Demo
cd Demo
symfony serve -d
```

* Installons les packages nécessaires :

```bash
composer require symfony/maker-bundle --dev
```

* Créons un contrôleur :

```bash
symfony console make:controller Demo
```

* Modifiez le contrôleur pour qu'il "réponde" à la route "/" et affiche un message json :

```php
<?php

namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\Routing\Attribute\Route;

class DemoController extends AbstractController
{
    #[Route('/', name: 'app_demo')]
    public function index(): JsonResponse
    {
        return $this->json([
            'message' => 'Ceci est une API Symfony 🚀',
        ]);
    }
}
```

## Configurer Ansible et déployer notre application Symfony

Voila le moment que vous attendez ! Vous avez tout prêt pour déployer votre application Symfony sur Cloudways, et vous allez voir c'est HYPER simple !

### Création des fichiers Ansible

* Créons un fichier `playbook.yml` à la racine de notre projet Symfony. Ce fichier va contenir toutes les tâches que nous allons exécuter :
  * Vider le contenu du répertoire de destination
  * Copier le projet actuel sans les dossier et fichiers `vendor`, `.git`, `var` et `.env`
  * Exécuter `composer install`

> Dans `dest_dir`, vous devez remplacer `{webroot}` par le nom du repertoire de votre application chez Cloudways.

```yml
---
- name: Déployer le projet sur le serveur distant
  hosts: cloudways
  vars:
    dest_dir: /home/master/applications/{webroot}/public_html
  tasks:
    - name: Vider le contenu du répertoire de destination
      ansible.builtin.command:
        cmd: rm -rf {{ dest_dir }}/*

    - name: Copier le projet actuel
      synchronize:
        src: "./"
        dest: "{{ dest_dir }}"
        rsync_opts:
          - "--exclude=vendor"
          - "--exclude=.git"
          - "--exclude=var"
          - "--no-times"
          - "--no-p"

    - name: Exécuter composer install
      ansible.builtin.command:
        cmd: composer install
        chdir: "{{ dest_dir }}"
```

* Créons un fichier `hosts.yaml` à la racine de notre projet Symfony. Ce fichier va contenir les informations de connexion à notre serveur Cloudways :

> Remplacer `master_username` par le nom de votre utilisateur Cloudways, `123.123.123.123` par l'adresse IP de votre serveur Cloudways.

```yml
all:
  hosts:
    cloudways:
      ansible_host: 123.123.123.123
      ansible_user: master_username
      ansible_ssh_private_key_file: ~/.ssh/id_rsa
```

* Et pour nous simplifier la vie nous nous créons un fichier `Makefile` pour lancer les commandes encore plus simplement :

```makefile
deploy:
	ansible-playbook -i hosts.yaml playbook.yml
```

### Déployer notre application Symfony sur Cloudways

Le grand moment est arrivé, nous pouvons déployer notre application Symfony sur Cloudways !

Et quand je vous avez dit que c'était HYPER simple, c'est vrai, la preuve, vous n'avez plus qu'à lancer la commande suivante :

```bash
make deploy
```

Et voilà, votre application Symfony est déployée sur Cloudways 💫 !

## Conclusion

J'espère que cette démo vous a permis d'apercevoir comment déployer une application Symfony simplement avec Ansible sur Cloudways.

Evidement, pour le cadre de la démo nous n'avons pas abordé un certain nombre de sujets pour rendre l'explications simples et compréhensibles.

Nous avons vu comment déployer une application Symfony sur Cloudways, et nous avons vu comment configurer Ansible pour automatiser le déploiement de notre application Symfony. C'est une solution élégante je trouve et c'est une bonne solution pour débuter dans l'automatisation de la mise en production de vos applications Symfony.

> Publication en <u>partenariat commercial</u> avec [Cloudways](https://www.cloudways.com/en/?id=966246).
