Déploiement Alwaysdata
Difficulté : Facile | Coût : ~10 €/mois
Alwaysdata est une plateforme d'hébergement managé qui simplifie le déploiement. Elle gère le serveur web, la base de données PostgreSQL et les certificats SSL automatiquement.
Alwaysdata ne propose pas Redis — Suddenly bascule automatiquement sur le cache base de données si
REDIS_URLest absent. Celery tourne en mode synchrone (CELERY_TASK_ALWAYS_EAGER=True).
1. Créer les ressources dans le panel
- Base de données PostgreSQL — noter l'hôte, le port, le nom, l'utilisateur et le mot de passe
- Site Python WSGI — créer un site (voir configuration à l'étape 6)
2. Cloner le dépôt en SSH
ssh user@ssh-user.alwaysdata.net
cd /home/<user>/www/
git clone https://github.com/RebelliousSmile/suddenly.git soudainement
3. Installer les dépendances
cd /home/<user>/www/soudainement
python3.12 -m venv venv
source venv/bin/activate
pip install --upgrade pip
pip install -e ".[federation]"
4. Clés ActivityPub
Rien à faire : Suddenly génère lui-même les clés d'instance (keys/private.pem, keys/public.pem) au premier besoin, et une paire RSA par acteur à sa création. Assurez-vous seulement que le processus a le droit d'écrire dans le répertoire du projet.
5. Initialiser la base de données
Les variables d'environnement du panel ne sont pas disponibles en SSH. Il faut les exporter manuellement :
export DJANGO_SETTINGS_MODULE=config.settings.production
export SECRET_KEY="votre-cle-secrete"
export DOMAIN=soudainement.fr
export ALLOWED_HOSTS=soudainement.fr,www.soudainement.fr
export DATABASE_URL="postgresql://user:password_encodé@host:5432/dbname"
Important : encoder les caractères spéciaux du mot de passe :
python3 -c "from urllib.parse import quote_plus; print(quote_plus('mot_de_passe'))"
cd /home/<user>/www/soudainement
source venv/bin/activate
python manage.py migrate
python manage.py createcachetable
python manage.py collectstatic --noinput
python manage.py createsuperuser
6. Configurer le site dans le panel
| Champ | Valeur |
|---|---|
| Chemin de l'application | www/soudainement/suddenly/wsgi.py |
| Répertoire de travail | www/soudainement/ |
| Version Python | 3.12 |
| Répertoire du virtualenv | www/soudainement/venv |
| Chemins statiques | /static/ staticfiles/ et /media/ media/ |
Pièges :
- Le fichier WSGI est
suddenly/wsgi.py, pasconfig/wsgi.py- Les chemins statiques sont relatifs au répertoire de travail (ne pas mettre le chemin absolu)
DATABASE_URL: encoder les caractères spéciaux du mot de passe
Variables d'environnement (format FOO=bar, sans export)
DJANGO_SETTINGS_MODULE=config.settings.production
SECRET_KEY=votre-cle-generee
DOMAIN=soudainement.fr
ALLOWED_HOSTS=soudainement.fr,www.soudainement.fr
DATABASE_URL=postgresql://user:password_encodé@host:5432/dbname
7. SSL
Activer Let's Encrypt via le panel Alwaysdata pour le domaine.
8. Tâches planifiées
Dans le panel → Tâches planifiées. Renseigner les variables d'environnement dans chaque tâche (même format que le site).
Nettoyage des sessions (quotidien à 3h) :
Fréquence : 0 3 * * *
Commande : /home/<user>/www/soudainement/venv/bin/python /home/<user>/www/soudainement/manage.py clearsessions
Nettoyage des citations éphémères (toutes les heures) :
Fréquence : 0 * * * *
Commande : /home/<user>/www/soudainement/venv/bin/python /home/<user>/www/soudainement/manage.py shell -c "from suddenly.activitypub.tasks import cleanup_expired_quotes; cleanup_expired_quotes()"
Rafraîchissement des acteurs distants (quotidien) :
Fréquence : 30 4 * * *
Commande : /home/<user>/www/soudainement/venv/bin/python /home/<user>/www/soudainement/manage.py shell -c "from suddenly.activitypub.tasks import refresh_remote_actors; refresh_remote_actors()"
Ces deux tâches sont normalement planifiées par Celery Beat. Sans Redis, Celery tourne en mode synchrone et Beat ne tourne pas : ces tâches planifiées sont le seul moyen de les exécuter.
Mise à jour
Le dépôt fournit un script qui fait tout (dépendances, migrations, table de cache, statiques, redémarrage) :
cd /home/<user>/www/soudainement
git pull
./scripts/deploy-alwaysdata.sh
Il suppose un virtualenv en venv/ et un .env à la racine du projet. Le redémarrage se fait par un touch suddenly/wsgi.py — inutile de passer par le panel.
À la main, si vous préférez :
cd /home/<user>/www/soudainement
git pull
source venv/bin/activate
python manage.py migrate
python manage.py collectstatic --noinput
Puis redémarrer le site depuis le panel Alwaysdata.
Checklist post-déploiement
[ ] https://votre-domaine.fr répond
[ ] https://votre-domaine.fr/.well-known/webfinger?resource=acct:admin@votre-domaine.fr
[ ] https://votre-domaine.fr/.well-known/nodeinfo
[ ] Création de compte fonctionne
[ ] Upload de média fonctionne
[ ] Fédération testée avec une autre instance