---
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

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.

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.

```
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
```