HomePage

Come eseguire la tua applicazione Phoenix o Elixir usando Systemd

Le applicazioni Elixir ed Erlang girano dentro Beam VM che è una ottima virtual machine per la tolleranza agli errori. Tirare giù VM è piuttosto difficile e per lo più accade per motivi esterni, riavviando il server o anche usando ports per integrarsi con il mondo esterno.

Quando cadi devi rialzarti, non importa quanto ti faccia male - Banana quote of the day.

Quindi, una volta che l’esecuzione di /path_to_release/phoenix_app daemon non è sufficiente, iniziamo a impostare la nostra applicazione phoenix o elixir in Systemd. Dovrebbe aiutarci a gestire e riavviare la nostra applicazione se qualcosa va storto.

E la procedura per farlo è molto semplice! Basta creare un nuovo file come root all’interno della cartella /etc/systemd/system/ puoi chiamarlo come preferisci. Per questo esempio lo chiamerò semplicemente lol.service e scriverò dentro questa configurazione:

/etc/systemd/system/lol.service

[Unit]
Description=Linear Regression is My Profession
ConditionPathExists=/path_to_release
After=network.target

[Service]
Environment="HOME=/path_to_release"
ExecStart=/path_to_release/bin/phoenix_app start
ExecStop=/path_to_release/bin/phoenix_app stop
Restart=always
RemainAfterExit=yes
RestartSec=5
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=phoenix_app

[Install]
WantedBy=multi-user.target

Dopo di che esegui systemctl daemon-reload per apportare modifiche e avvia il tuo nuovo servizio con systemctl start lol. Controlla se tutto funziona con systemctl status lol.

File di ambiente in systemd

Gut, ora qualche parola sulle variabili d’ambiente. Prima di tutto se usi il file d’ambiente per la tua applicazione, cambia semplicemente la riga con Environment= in EnvironmentFile=/path_to_your_file/.env e non dimenticare di aggiungere la variabile Home= e anche RELX_REPLACE_OS_VARS=true altrimenti la tua applicazione non si avvia più.

HOME=/path_to_release
RELX_REPLACE_OS_VARS=true

# your other keys  

Inoltre, se tu come me hai uno script di shell che imposta alcuni config prima di avviare la tua app, cambia semplicemente la riga ExecStart=/path_to_release/bin/phoenix_app start in -> ExecStart=/bin/bash /home /boot.sh

Let’s encrypt

Se hai installato certbot fornendo il certificato SSL per la tua applicazione phoenix, cambia all’interno /etc/letsencrypt/renewal/mywebsite.com.conf pre_hook e post_hook:

post_hook = systemctl start phoenix_app
pre_hook = systemctl stop phoenix_app

Come trattare i log

Per finire questo veloce tour aggiungerò anche qualche parola sui log. Normalmente, una volta eseguito il release, tutti i log andranno in file nella cartella del release /path_to_release/tmp/log/erlang.log. ma una volta sotto Systemd andranno nel journal di sistema, quindi per poter leggerli bisogna utilizzare il comando: $ journalctl -u con il nome che hai impostato come SyslogIdentifier all’interno del file .service (es: journalctl - u phoenix_app).

2022-03-28
Aggiungi certificato SSL gratuito alla tua applicazione web

In questa piccola guida cercherò di mostrare come aggiungere certificato ssl gratuito alla tua phoenix web app con rinnovo automatico e senza complicarti troppo la vita.Learn more