[Tuto] Installer Glitchtip pour votre gestion d’erreur

par | Jan 4, 2023

Installation de Glitchtip

Cet article est une procédure détaillée pour installer un serveur Glitchtip de zéro, sans passer par des conteneurs Docker

GlitchTip est une alternative Open Source à Sentry. La partie frontend est en nodejs, le backend en python basé sur le gestionnaire de dépendance poetry et il est exécuté avec le serveur HTTP gunicorn. Quand à la gestion des tâches, elle est déléguée à celery.

La version de Glitchtip choisie est la 2.0.7, au delà des erreurs de dépendances NodeJS sont présentes

NB : les valeurs suivantes sont à remplacer : <DOMAIN> / <PGSQL_PASSWORD> / <SECRET_KEY>

Prérequis

Installation

Ajout du repo : nodejs (LTS)

CF : https://github.com/nodesource/distributions/blob/master/README.md

curl -fsSL https://deb.nodesource.com/setup_lts.x | bash -

Installation des paquets systèmes

apt update
apt install -y acl build-essential libpq-dev libsasl2-dev libssl-dev nginx nodejs postgresql python3-pip python3-venv python3.9 python3.9-dev redis-server

Configuration de la base de données postgresql

root@:~# su - postgres
postgres@:~$ psql
postgres=# CREATE DATABASE glitchtip;
postgres=# CREATE USER glitchtip WITH ENCRYPTED PASSWORD '<PGSQL_PASSWORD>';
postgres=# GRANT ALL PRIVILEGES ON DATABASE glitchtip TO glitchtip;

Installation de glitchtip

Création d’un utilisateur & d’un dossier dédié

useradd -m -s /bin/bash glitchtip
mkdir /opt/glitchtip
chown glitchtip:glitchtip /opt/glitchtip

NB : toutes les commandes suivantes sont exécutées avec l’utilisateur glitchtip, i.e. : su - glitchtip

Définition de l’environnement

cat << EOF >> ${HOME}/.bashrc
export DATABASE_URL="postgres://glitchtip:<PGSQL_PASSWORD>@127.0.0.1:5432/glitchtip"
export SECRET_KEY="<SECRET_KEY>"
export REDIS_HOST="127.0.0.1"
export DEFAULT_FROM_EMAIL="glitchtip@<DOMAIN>"
export GLITCHTIP_DOMAIN="http://<DOMAIN>"
## Utilisation d'un serveur mail sortant local
export EMAIL_HOST="127.0.0.1"
export EMAIL_PORT=25
EOF

. ${HOME}/.bashrc

Création d’un virtualenv python

python3.9 -m venv ${HOME}/venv_gt
${HOME}/venv_gt/bin/pip install --upgrade setuptools pip wheel cython poetry

Installation : frontend (nodejs)

cd /opt/glitchtip
wget https://gitlab.com/glitchtip/glitchtip-frontend/-/archive/v2.0.7/glitchtip-frontend-v2.0.7.tar.gz
tar xzvf glitchtip-frontend-v2.0.7.tar.gz
ln -sfn /opt/glitchtip/glitchtip-frontend-v2.0.7 /opt/glitchtip/glitchtip-frontend
cd /opt/glitchtip/glitchtip-frontend
npm install
npm run build-prod

Installation : backend (python)

cd /opt/glitchtip
wget https://gitlab.com/glitchtip/glitchtip-backend/-/archive/v2.0.7/glitchtip-backend-v2.0.7.tar.gz
tar xzvf glitchtip-backend-v2.0.7.tar.gz
ln -sfn /opt/glitchtip/glitchtip-backend-v2.0.7 /opt/glitchtip/glitchtip-backend
cd /opt/glitchtip/glitchtip-backend
ln -sfn /opt/glitchtip/glitchtip-frontend/dist/glitchtip-frontend dist
VIRTUAL_ENV=${HOME}/venv_gt ${HOME}/venv_gt/bin/poetry install
VIRTUAL_ENV=${HOME}/venv_gt ${HOME}/venv_gt/bin/poetry remove uWSGI
VIRTUAL_ENV=${HOME}/venv_gt ${HOME}/venv_gt/bin/poetry add gunicorn
${HOME}/venv_gt/bin/python /opt/glitchtip/glitchtip-backend/manage.py migrate

mkdir /opt/glitchtip/glitchtip-backend/{static,media}
${HOME}/venv_gt/bin/python /opt/glitchtip/glitchtip-backend/manage.py collectstatic

Création du compte admin

NB : La commande suivante va demander d’entrer le mot de passe administrateur

${HOME}/venv_gt/bin/python /opt/glitchtip/glitchtip-backend/manage.py createsuperuser --email "${DEFAULT_FROM_EMAIL}"

Création des démons systèmes

NB : toutes les commandes suivantes sont exécutées en root

Création des dossiers de logs & runs

mkdir /var/log/glitchtip /var/lib/glitchtip
setfacl -m user:glitchtip:rwx /var/log/glitchtip /var/lib/glitchtip

Ficher d’environnement pour les démons systèmes

cat << EOF > /etc/default/glitchtip
PYTHONUNBUFFERED=TRUE
DATABASE_URL="postgres://glitchtip:<PGSQL_PASSWORD>@127.0.0.1:5432/glitchtip"
SECRET_KEY="<SECRET_KEY>"
REDIS_HOST="127.0.0.1"
DEFAULT_FROM_EMAIL="glitchtip@<DOMAIN>"
GLITCHTIP_DOMAIN="http://<DOMAIN>"
EMAIL_HOST="127.0.0.1"
EMAIL_PORT=25
ENABLE_USER_REGISTRATION=False ## Optionnel. Force la création de compte via l'interface d'administration
EOF

Démon web (gunicorn)

# Socket web

cat << EOF > /lib/systemd/system/glitchtip.socket
[Unit]
Description=gunicorn socket

[Socket]
ListenStream=/var/lib/glitchtip/glitchtip.sock
SocketUser=www-data

[Install]
WantedBy=sockets.target
EOF

# Démon gunicorn

cat << EOF > /lib/systemd/system/glitchtip.service
[Unit]
Description=Gunicorn daemon to glitchtip
Requires=glitchtip.socket
After=network.target

[Service]
EnvironmentFile=/etc/default/glitchtip
Type=notify
User=glitchtip
Group=glitchtip
RuntimeDirectory=gunicorn
WorkingDirectory=/opt/glitchtip/glitchtip-backend
ExecStart=/home/glitchtip/venv_gt/bin/gunicorn "glitchtip.wsgi" --workers 4 --capture-output
ExecReload=/bin/kill -s HUP $MAINPID
KillMode=mixed
TimeoutStopSec=5
PrivateTmp=true
StandardOutput=append:/var/log/glitchtip/gunicorn-access.log
StandardError=append:/var/log/glitchtip/gunicorn-error.log

[Install]
WantedBy=multi-user.target
EOF

Celery executor

# Beat

cat << EOF > /lib/systemd/system/glitchtip-celery-beat.service
[Unit]
Description=glitchtip celery beat
After=network.target

[Service]
EnvironmentFile=/etc/default/glitchtip
User=glitchtip
Group=glitchtip
RuntimeDirectory=glitchtip
WorkingDirectory=/opt/glitchtip/glitchtip-backend
ExecStart=/home/glitchtip/venv_gt/bin/celery --app "glitchtip" beat --loglevel info --pidfile=/var/lib/glitchtip/celery-beat.pid --logfile=/var/log/glitchtip/celery-beat.log --schedule /var/lib/glitchtip/celerybeat-schedule
PrivateTmp=true
Restart=always

[Install]
WantedBy=multi-user.target
EOF

# Worker

cat << EOF > /lib/systemd/system/glitchtip-celery-worker.service
[Unit]
Description=glitchtip celery worker
After=network.target

[Service]
EnvironmentFile=/etc/default/glitchtip
User=glitchtip
Group=glitchtip
RuntimeDirectory=glitchtip
WorkingDirectory=/opt/glitchtip/glitchtip-backend
ExecStart=/home/glitchtip/venv_gt/bin/celery --app "glitchtip" worker --loglevel info --pidfile=/var/lib/glitchtip/celery-worker.pid --logfile=/var/log/glitchtip/celery-worker.log
PrivateTmp=true
Restart=always

[Install]
WantedBy=multi-user.target
EOF

Lancement des démons systèmes

systemctl daemon-reload
systemctl enable glitchtip-celery-beat.service glitchtip-celery-worker.service glitchtip.service glitchtip.socket
systemctl start glitchtip-celery-beat.service glitchtip-celery-worker.service glitchtip.service glitchtip.socket

Création de la configuration logrotate

cat << EOF > /etc/logrotate.d/glitchtip
/var/log/glitchtip/gunicorn-*.log {
        daily
        rotate 14
        compress
        delaycompress
        notifempty
        copytruncate
        create 644 root root
}

/var/log/glitchtip/celery-*.log {
        daily
        rotate 14
        compress
        delaycompress
        notifempty
        copytruncate
        create 644 glitchtip glitchtip
}
EOF

Configuration de nginx en reverse proxy

Création de la configuration

# Suppression de la configuration de base

unlink /etc/nginx/sites-enabled/default

# Création de la configuration nginx

cat << EOF > /etc/nginx/sites-available/reverse-proxy.conf
server {
    listen 80;
    listen [::]:80;
    server_name <DOMAIN>;
    access_log /var/log/nginx/reverse-access.log;
    error_log /var/log/nginx/reverse-error.log;
    
    add_header Strict-Transport-Security max-age=15768000;
    
    location ~ /\.git {
        deny all;
    }

    location / {
        proxy_pass http://unix:/var/lib/glitchtip/glitchtip.sock;
        proxy_set_header Host \$host;
        proxy_set_header X-Real-IP \$remote_addr;
        proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto \$scheme;
    }
}
EOF
ln -s /etc/nginx/sites-available/reverse-proxy.conf /etc/nginx/sites-enabled/reverse-proxy.conf

# Validation de la configuration et relance du démon

nginx -t && systemctl restart nginx.service

Ajout d’un SSL

Optionnel. CF : https://www.nginx.com/blog/using-free-ssltls-certificates-from-lets-encrypt-with-nginx/

Accessibilité

Le site sera ainsi disponible sous l’url : http://<DOMAIN>, ou https://<DOMAIN> si un certificat SSL a été déployé

De même les logs applicatifs seront disponibles aux chemins suivants :

  • /var/log/glitchtip/celery-beat.log
  • /var/log/glitchtip/celery-worker.log
  • /var/log/glitchtip/gunicorn-access.log
  • /var/log/glitchtip/gunicorn-error.log
  • /var/log/nginx/reverse-access.log
  • /var/log/nginx/reverse-error.log
article datavisualisation et superset executer procedure stockee par Mindbaz

A lire : Comment exécuter une procédure stockée sur Superset

Coder dans sa newsletter

A lire : Coder dans sa Newsletter