---
# System prepended metadata

title: Deployer Decidim sur un serveur ubuntu 22.04 LTS

---

---
title: Installer Decidim sur un serveur ubuntu 22.04
tags: Decidim,Democraty, Civic Tech, Flutter, Dart
description: View the slide with "Slide Mode".
---


# Déployer Decidim sur un serveur ubuntu 22.04 LTS


---
## Qu'est-ce que Decidim?
Decidim est une plateforme open source de démocratie participative crée à la base par la Maire de la ville de Barcelone.
Elle permet à toute organisation de mettre en place une plateforme participative pour la prise de décision, la gestion des processus, l'organisation des conférences ou la création d'un réseau politique de démocratie participative.


---
## Installation
À cette étape, vous devez avoir un vps ubuntu 22.04 bien configuré avec un utilisateur nommé **decidim**

#### Pré-requis
Decidim a été développé en Ruby on Rails et est disponible package gem. 
Pour faire tourner Decidim vous devez installer ces applications

*     Git 2.x+
*     PostgreSQL 14.5+
*     Ruby 3.0.2
*     NodeJS 18.x
*     Npm 9.x
*     ImageMagick

---

#### Installation de Ruby
Pour installer Ruby nous utiliserons la gestion de version ***rbenv***. Vous avez la possibilité d'utiliser ***rvm*** ou ***asdf***

        
        sudo apt update
        sudo apt upgrade
        sudo apt install -y build-essential curl git libssl-dev zlib1g-dev
        git clone https://github.com/rbenv/rbenv.git ~/.rbenv
        echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
        echo 'eval "$(rbenv init -)"' >> ~/.bashrc
        source ~/.bashrc
        git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
        rbenv install 3.0.2
        rbenv global 3.0.2

Nous venons d'installer la version 3.0.2 de Ruby. Nous pouvons vérifier notre installation avec la commande: `ruby --version`
La commande doit afficher ceci:
`ruby 3.0.2p107 (2021-07-07 revision 0db68f0233) [x86_64-linux]`

---

#### Installation de PostgreSQL

        sudo apt install -y postgresql libpq-dev
        sudo -u postgres psql -c "CREATE USER decidim WITH SUPERUSER CREATEDB NOCREATEROLE PASSWORD 'monsuperpass'"
        
Nous venons d'installer PostgreSQl et créer l'utilisateur ***decidim*** avec le mot de passe ***monsuperpass*** . Nous vous recommandons de remplacer le mot de passe avec un autre plus sécurisé.

### Installation de NodeJS
Pour installer NodeJS nous utiliserons le gestionnaire de paquet snapd.
    
        sudo apt update
        sudo apt install snapd
        sudo snap install node --classic --channel=18
        node --verion
        v18.17.1
        npm --version
        9.6.7
        
NodeJS et Npm sont fonctionnels

### Installation de ImageMagick
    
    sudo apt install -y libicu-dev imagemagick
    

### Installation de decidim et création de notre application

    
    gem install decidim
    decidim toona
    

Nous venons d'installer Decidim et de créer notre application nommée toona. Pour pouvoir utiliser notre application nous allons créer une base de données et faire quelques configurations.
Vous pouvez éditer directement le fichier `config/database.yml`
Nous vous recommandons l'utilisation d'un gestionnaire d'environnement. Nous allons utiliser `rbenv-vars`. 

    git clone https://github.com/rbenv/rbenv-vars.git "$(rbenv root)"/plugins/rbenv-vars
    
    nano .rbenv-vars
    
    DATABASE_HOST=localhost
    DATABASE_USERNAME=decidim
    DATABASE_PASSWORD=monsuperpass
    
    
### Initialisation de l'application pour le test en local
Nous allons créer la base de données et charger les données de test.

    cd toona
    bin/rails db:create db:migrate
    bin/rails db:seed
    
Ceci va créer automatiquement la base donnée et enregistrer des données pour le test.
Nous allons lancer le serveur de developpement,mais il faut d'abord autoriser le port 3000 sur votre par-feu
    
    sudo ufw allow 3000
    
Le serveur peut être lancé.
    
    bin/rails s -b 0.0.0.0
    
Maintenant votre application est accessible au port 3000 de votre adresse IP. Vous devez avoir un écran

![Screenshot 2023-11-16 at 11.50.55](https://hackmd.io/_uploads/rkvEmKQET.png)

Nous allons ensuite déployer l'application en production.
Pour ce faire nous allons effectuer quelques modifications.
Editons le fichier `Gemfile`

    
    nano Gemfile
    
Nous ajouterons les gem `figaro` `passenger` `daemons` et `delayed_job_active_record`. Votre Gemfile doit ressembler à ceci maintenant.

![Screenshot 2023-11-16 at 12.22.55](https://hackmd.io/_uploads/HkxbitQV6.png)

A cette étape, il faut installer les gems et faire 
    
    bundle install
    

Maintenant il est temps de créer le fichier de configuration avec nos valeurs personnalisées. Nous avons déjà les identifiants de la base de données (nous avons créé l'utilisateur auparavant) et nous avons besoin d'une chaîne aléatoire qui sera utilisée par Decidim pour crypter les cookies et d'autres éléments de sécurité. 

    
    
    
    rake secret
    7b12495978f3c495a7e584951a44dd88c677481792fba21bdd33a8f3cf7f0bc6052abc0f2eed4467279a6921fcf03d1e0f0c2eedbe7c271e3113ad7a7b24bb4b
    
Nous allons ajouter la clé générée et les informations de la base de données dans le fichier `config/application.yml` que nous allons créer

    
    nano config/application.yml
    
    DATABASE_URL: postgres://decidim:monsuperpass@localhost/decidim_prod
    SECRET_KEY_BASE: 7b12495978f3c495a7e584951a44dd88c677481792fba21bdd33a8f3cf7f0bc6052abc0f2eed4467279a6921fcf03d1e0f0c2eedbe7c271e3113ad7a7b24bb4b
    
Tout est prêt pour créer notre base de données de production 

    
    bin/rails db:create RAILS_ENV=production
    bin/rails assets:precompile db:migrate RAILS_ENV=production
    

Maintenant que tout est prêt on va installer `Nginx` et `fusion passenger`

    
    sudo apt -y install nginx
    sudo ufw allow http
    sudo ufw allow https
    
    sudo apt-get install -y dirmngr gnupg apt-transport-https ca-certificates
    curl https://oss-binaries.phusionpassenger.com/auto-software-signing-gpg-key.txt | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/phusion.gpg >/dev/null
    sudo sh -c 'echo deb https://oss-binaries.phusionpassenger.com/apt/passenger jammy main > /etc/apt/sources.list.d/passenger.list'
    
    sudo apt-get update
    sudo apt-get install -y libnginx-mod-http-passenger
    if [ ! -f /etc/nginx/modules-enabled/50-mod-http-passenger.conf ]; then sudo ln -s /usr/share/nginx/modules-available/mod-http-passenger.load /etc/nginx/modules-enabled/50-mod-http-passenger.conf ; fi
    sudo ls /etc/nginx/conf.d/mod-http-passenger.conf
    sudo service nginx restart
    passenger-config validate-install
    

Nous venons d'installer `Nginx` et `passenger` ainsi que le module passenger de nginx. La dernière commande nous permet de verifier si tout est correct. Nous devons avoir ceci comme retour
    
    What would you like to validate?
    Use <space> to select.
    If the menu doesn't display correctly, press '!'

     ‣ ⬢  Passenger itself
       ⬡  Apache

    -------------------------------------------------------------------------

     * Checking whether this Passenger install is in PATH... ✓
     * Checking whether there are no other Passenger installations... ✓

    Everything looks good. :-)
    

Nous allons configurer passenger en éditant le fichier `/etc/nginx/conf.d/mod-http-passenger.conf` 
    
    ### Begin automatically installed Phusion Passenger config snippet ###
    passenger_root /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini;
    passenger_ruby /home/decidim/.rbenv/shims/ruby;

    passenger_user_switching on;
    passenger_user decidim;
    passenger_group decidim;
    ### End automatically installed Phusion Passenger config snippet ###
    
Après ceci nous allons configurer nginx pour qu'il dirige les requêtes http(s) vers notre copie de Decidim. Pour ce faire, nous devons créer un fichier de configuration Nginx et configurer un nouvel hôte virtuel avec notre domaine (ie : example.com) 

    sudo nano /etc/nginx/site-enable/decidim.conf
    

    server {
            listen 80;

            server_name example.com;
            client_max_body_size 32M;

            passenger_enabled on;
            passenger_ruby /home/decidim/.rbenv/shims/ruby;

            rails_env    production;
            root         /home/decidim/toona/public;
    }
    
    

Redémarons nginx
    
    sudo service nginx restart

Pour que le site soit fonctionnel nous avons besoin du SSL. Nous allons installer certbot pour générer le certificat de sécurité

    sudo snap install --classic certbot
    sudo ln -s /snap/bin/certbot /usr/bin/certbot
    
    sudo certbot --nginx -d example.com -d www.example.com 
    
    sudo service nginx restart
    
Tout est bon maintenant, il suffit de créer un utilisateur system pour utiliser l'application
    
    cd toona
    bin/rails console -e production
    
    Loading production environment (Rails 6.1.6)
    irb(main):001:0>
    email = "system@example.com"
    password = "password"
    user = Decidim::System::Admin.new(email: email, password:     password, password_confirmation: password)
    user.save!


Vous pouvez visiter votre adresse web (ie: example.com).L'application est prête pour la configuration.


![IMG_8890](https://hackmd.io/_uploads/HkMmyQprel.jpg)



```
    sudo nano /etc/nginx/site-enable/decidim.conf
    

    server {
            listen 80;

            server_name example.com;
            client_max_body_size 32M;

            passenger_enabled on;
            passenger_ruby /home/decidim/.rbenv/shims/ruby;

            rails_env    production;
            root         /home/decidim/toona/public;
    }
```


```ruby
def code
    puts "em"
end
    
```