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