Installation de Decidim sur un serveur Ubuntu 22.04
J'ai utilisé ces deux liens comme base documentaire que j'ai repris dans la majorité de ce tutoriel , n'hésitez pas à les parcourir :
J'ai également été sur le channel Matrix de Decidim https://matrix.to/#/#decidimdevs:matrix.org pour avoir de l'aide. N'hésitez pas à y faire un tour!
Ces instructions devraient fonctionner sur n'importe quelle installation propre d'Ubuntu 22.04. Mais je promets rien! J'ai essayé de lister toute les difficultés que j'ai rencontrées dans ce parcours du combattant donc j'espère que cela sera exhaustif. Après j'avoue que si vous avez déjà des notions de Ruby et Webpack, c'est un gros plus! Vous galérerez moins que moi
Des bases saines
Tout d'abord, mettons notre système à jour :
sudo apt update
sudo apt upgrade
sudo apt autoremove
Maintenant, configurons le bon fuseau horaire pour notre serveur :
sudo dpkg-reconfigure tzdata
Ensuite, installons quelques paquets nécessaires :
sudo apt install autoconf bison build-essential libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm-dev
Installons rbenv
git clone https://github.com/rbenv/rbenv.git ~/.rbenv
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
source ~/.bashrc
Puis installons ruby-build :
git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build
Nous allons utiliser la version 3.1.1 de Ruby pour Decidim 0.28 :
rbenv install 3.1.1
rbenv global 3.1.1
Ensuite, nous devons configurer Gem, le gestionnaire de paquets pour Ruby, après quoi nous serons prêts à installer Decidim. Pour configurer Gem, exécutons
echo "gem : --no-document" > ~/.gemrc
gem install bundler
Bien, maintenant que nous avons la configuration de base du serveur en place, la prochaine étape c'est d'installer Decidim.
Installation de Decidim
Decidim utilise Postgresql comme base de données SQL, nous allons donc l'installer. Même si votre base Postgre se trouve sur un autre serveur, il faut installer le paquet libpq-dev pour que Decidim fonctionne
sudo apt install -y postgresql libpq-dev
Nous avons également besoin d'imageMagick:
sudo apt install -y imagemagick libicu-dev
Decidim 0.28 nécessite NodeJS 18.17.xx , pour me faciliter l'installation de la version voulue j'ai utilisé Nodemanager
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash
source ~/.bashrc
nvm install 18.17
Pour finir on installe Yarn (version >=1 et ⇐4, dans les dépôts d'Ubuntu 22.04 c'est une version 0.9x donc je passe par npm)
npm install --global yarn
yarn --version
On passe enfin à Decidim. Installez la gem Decidim (c'est long, c'est normal ) :
gem install decidim
Maintenant, lancez le générateur pour créer notre application :
decidim decidim-app
> Note : Si comme moi ce n'est pas votre premier essai, il se peut que la commande ci-dessus vous retourne une erreur du type “NameError: uninitialized constant Gem::BundlerVersionFinder”. Dans ce cas, faites “gem update –system” puis relancez la génération de l'application Decidim.
A ce stade, nous avons créé un nouveau dossier dans ~/decidim-app avec notre code. Nous devons maintenant configurer la base de données.
Pour ce faire, nous devons d'abord créer l'utilisateur et le mot de passe dans la base de données :
sudo -u postgres psql -c "CREATE USER decidim_app WITH SUPERUSER CREATEDB NOCREATEROLE PASSWORD 'TonbeaumotDEpasse'"
Une fois l'utilisateur créé, il est temps de configurer Decidim pour qu'il utilise ces informations d'identification.
Parce que nous ne voulons pas stocker directement ces données sensibles dans le code lui-même, nous allons utiliser un fichier YAML supplémentaire qui stockera tous les secrets en un seul endroit.
Afin de traduire ce fichier dans le système de configuration de Decidim, nous allons inclure la gemme Ruby “figaro” dans notre application pour s'en occuper.
Tout d'abord, allons dans le dossier de Decidim :
cd ~/decidim-app
Ensuite, éditons le fichier Gemfile :
nano Gemfile
Nous allons modifier ce fichier pour ajouter une section “production” avec nos gemmes supplémentaires, nous ajoutons cette ligne avant la première déclaration de groupe :
gem "figaro"
Et nous allons créer une autre section de groupe avec les paramètres de production qui installera également quelques gemmes supplémentaires nécessaires plus tard.
Ajoutez à la fin du fichier Gemfile :
group :production do
gem "passenger"
gem 'delayed_job_active_record'
gem "daemons"
fin
Après cela, nous devons mettre à jour notre application pour inclure les gemmes supplémentaires, exécutons la commande suivante (dans le dossier de l'application) :
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é.
Générons une chaîne aléatoire en exécutant la commande rake secret dans le dossier de l'application :
cd ~/decidim-app
rake secret
Copions la chaîne générée et créez un nouveau fichier de configuration :
nano ~/decidim-app/config/application.yml
Collons à l'intérieur ce contenu :
DATABASE_URL : postgres://decidim_app:Password1@localhost/decidim_prod
SECRET_KEY_BASE: LaChaineGénéréeJusteAvantAvecLaCommandeRakeSecret
Maintenant, par sécurité, incluons ce fichier dans le fichier .gitignore, au cas où on pousse tout ça sur GIT.
echo "/config/application.yml" >> ~/decidim-app/.gitignore
Il est de temps de créer la base de données.
cd ~/decidim-app
bin/rails db:create RAILS_ENV=production
bin/rails assets:precompile db:migrate RAILS_ENV=production
Note: Ca c'est quand tout va bien car la dernière commande n'a pas fonctionné comme attendu pour moi. Je n'avais pas la bonne version de Yarn (je l'ai déjà mentionné avant au moment de l'installation de Node) et ensuite j'ai du passer la commande : bin/rails decidim:upgrade
J'ai refait à nouveau la commande
bin/rails assets:precompile db:migrate RAILS_ENV=production
Et une nouvelle erreur de compilation Webpack est survenue “Error: No PostCSS config found”. J'ai donc crée un fichier postcss.config.js
nano ~/decidim-app/postcss.config.js
Et j'ai mis ça dans le fichier postcss.config.js.
module.exports = {
syntax: 'postcss-scss',
plugins: [
// postcss-import must be the very first plugin https://tailwindcss.com/docs/using-with-preprocessors#build-time-imports
require('postcss-import'),
require('tailwindcss'),
require('postcss-flexbugs-fixes'),
require('postcss-preset-env')({
autoprefixer: {
flexbox: 'no-2009'
},
stage: 3
}),
require('autoprefixer')
]
}
Finalement, la commande est bien passé cette fois
bin/rails assets:precompile db:migrate RAILS_ENV=production
Il est temps de créer maintenant un admin en base de donnée, pour cela on utilise la console Decidim Rails
bin/rails console -e production
Un nouveau prompt apparaît, il faut copier ces 4 lignes d'un bloc (en mettant vos valeurs bien sûr) et faisons ensuite “Entrée”.
email = "my-admin@email"
password = "<TonMotDePasse>"
user = Decidim::System::Admin.new(email: email, password: password, password_confirmation: password)
user.save!
Il suffit de taper “quit” pour quitter le prompt.
Installation de Nginx et Passenger
Maintenant que Decidim semble en place, il faut passer au serveur web qu'il faudra installer avec Passenger car Nginx ne prend pas en charge Ruby nativement.
Nginx
C'est la partie simple que vous devez déjà connaître
sudo apt install nginx
Et on autorise le trafic web du firewall
sudo ufw allow http
sudo ufw allow https
Passenger
Vous trouverez plein d'infos ici –> https://www.phusionpassenger.com/library/walkthroughs/deploy/ruby/ownserver/nginx/oss/bionic/install_passenger.html mais pour résumer l'installation se fait avec ces commandes
sudo apt install -y dirmngr gnupg
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 561F9B9CAC40B2F7
sudo apt install -y apt-transport-https ca-certificates
sudo sh -c 'echo deb https://oss-binaries.phusionpassenger.com/apt/passenger focal main > /etc/apt/sources.list.d/passenger.list'
sudo apt update
sudo apt install -y libnginx-mod-http-passenger
Ensuite nous activons Passenger et relançons Nginx
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 service nginx restart
Pour vérifier l'installation de Passenger on passe cette commande:
passenger-config validate-install
On a une réponse avec un warning signalant 2 installations de Passenger comme ceci
ubuntu@ns322222561:~$ passenger-config validate-install
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... (!)
You are currently validating against Phusion Passenger(R) 6.0.20, located in:
/home/ubuntu/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/passenger-6.0.20/bin/passenger
Besides this Passenger installation, the following other
Passenger installations have also been detected:
/usr/bin/passenger
Please uninstall these other Passenger installations to avoid
confusion or conflicts.
Detected 0 error(s), 1 warning(s).
On va donc vérifier que nous utilisons bien la bonne configuration en faisant
sudo nano /etc/nginx/conf.d/mod-http-passenger.conf
Et on vérifie que la ligne passenger_ruby pointe bien vers notre .rbenv dans mon cas ça donne ceci
### Begin automatically installed Phusion Passenger config snippet ###
passenger_root /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini;
passenger_ruby /home/chezmoi/.rbenv/shims/ruby; <<< CETTE LIGNE!!
passenger_instance_registry_dir /var/run/passenger-instreg;
### End automatically installed Phusion Passenger config snippet ###
On fait ensuite un configuration Nginx pour Decidim
sudo nano /etc/nginx/sites-enabled/decidim.conf
Et on colle cette configuration ultra simple qui servira pour tester (qui ne suffira pas pour la production mais c'est pas le but de ce tutoriel )
server {
listen 80;
listen [::]:80 ipv6only=on;
server_name my-chezmoi.org;
client_max_body_size 32M;
passenger_enabled on;
passenger_ruby /home/chezmoi/.rbenv/shims/ruby;
rails_env production;
root /home/chezmoi/decidim-app/public;
}
Un dernier restart de Nginx
sudo service nginx restart
Normalement vous pouvez accéder à Decidim !!
Puis j'ai eu une seconde erreur
Error opening '/home/ubuntu/decidim-app/Passengerfile.json' for reading: Permission denied (errno=13); This error means that the Nginx worker process (PID 41075, running as UID 33) does not have permission to access this file. Please read this page to learn how to fix this problem: https://www.phusionpassenger.com/library/admin/nginx/troubleshooting/?a=upon-accessing-the-web-app-nginx-reports-a-permission-denied-error;
Problème corrigé en donnant les bonnes permissions au dossier pour que le worker Nginx puisse y accéder
sudo chmod g+x,o+x /home/chezmoi/decidim-app
Pour finir j'ai installé Certbot pour avoir du https et voici maintenant mon fichier de configuration Nginx pour Decidim
server {
server_name decidim.craac.org;
client_max_body_size 32M;
passenger_enabled on;
passenger_ruby /home/ubuntu/.rbenv/shims/ruby;
rails_env production;
root /home/ubuntu/decidim-app/public;
listen [::]:443 ssl ipv6only=on; # managed by Certbot
listen 443 ssl; # managed by Certbot
ssl_certificate /etc/letsencrypt/live/decidim.craac.org/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/decidim.craac.org/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
}
server {
if ($host = decidim.craac.org) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
listen [::]:80 ipv6only=on;
server_name decidim.craac.org;
return 404; # managed by Certbot
}
J'ai maintenant accès ENFIN à la page d'administration
C'était dur mais on l'a fait!
installer_decidim_sur_un_serveur_ubuntu_22.04.txt · Dernière modification : 2024/03/24 14:25 de siick