Aller au contenu

autohebergement

Forum et mastodon.barrmath.ovh

Mastodon était un test perso. Voir si le pi pouvait supporter la charge.

Il le peut. Mais ça me mange 25 % de mon CPU à lui tout seul.

Je voudrais avoir un truc qui permet de faire des échanges de manière légère et pas trop gourmande en ressources, je préfère ouvrir un forum.

Pour l'instant, je trouve que Flarum à l'air pas trop mal. Je teste pour l'instant en local (avec podman et des conteneurs). Je filerais bien sur les fichiers source (Dockerfile docker-compose et autre), ainsi que la méthode pour appliquer ça.

MAJ du 25/08/2025: rajout d'un lien vers le forum. Il a l'air assez stable et ne mange pas trop de ressource. Je teste donc Flarum en selfhosting.

Je verrait pour faire un article disant comment le mettre en place sur le site.

media social/forum

J'ai envie de faire en sorte d'avoir un espace où l'on peut s'exprimer librement sans la crainte de se faire censurer. Peu importe ses idées, ses envies, le sujet.

J'ai essayé Mastodon. Ça marche sur une petite machine en auto-hébergement. Mais la limite de caractères et l'aspect twitter/X bof. (Mais ça reste un excellent réseau social, juste pas ce que je veux.) Je pense passer sur discourse dans une semaine voir si celui là convient à l'auto hébergement.

Pour la mise en place de Mastodon, vous avez besoin de :

Commencez par avoir un site hello world en https avec certbot et nginx. (un simple fichier html qui dit bonjour suffit.)

Une fois le https fait avec certbot, on attaque la partie modification pour Mastodon.

fichier /etc/nginx.conf ou fichier dans /etc/nginx/sites-enables ou etc/nginx/sites-available :

server {
    server_name votre_nom_de_domaine.Pouet;
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    #ici normalement c'est certbot qui à tout écrit
    ssl_certificate /etc/letsencrypt/live/liens_vers_votre_certif.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/lien_vers_votre_certif_priv.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    location / {
    # ligne à modifier pour mastodon
      proxy_pass http://127.0.0.1:4080; # adresse localhost sur le port 4080 pour mastodon
      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;
    }
    location /system/ {
      alias /home/tux/mastodon/public/system/;
      expires max;
      add_header Cache-Control public;
      access_log off;    
    }
}

Tips

Modifiez le nom de domaine et le couple adresse IP/port en fonction de votre projet.

Le fichier podman-compose.yml :

version: '3.8'

services:
  db:
    restart: always
    image: docker.io/postgres:latest
    shm_size: 256mb
    networks:
      - internal_network
    healthcheck:
      test: ['CMD', 'pg_isready', '-U', 'postgres']
    volumes:
      - ./postgres14:/var/lib/postgresql/data
    environment:
      POSTGRES_PASSWORD: votre_mot_de_passe_postgres
      POSTGRES_DB: mastodon_production
      POSTGRES_USER: mastodon

  redis:
    restart: always
    image: docker.io/redis:latest
    networks:
      - internal_network
    healthcheck:
      test: ['CMD', 'redis-cli', 'ping']
    volumes:
      - ./redis:/data

  web:
    image: docker.io/tootsuite/mastodon:latest
    restart: always
    env_file: .env
    command: bash -c "rm -f /mastodon/tmp/pids/server.pid; bundle exec rails s -p 3000"
    networks:
      - external_network
      - internal_network
    ports:
      - "4080:3000"
    depends_on:
      - db
      - redis
    volumes:
      - ./public/system:/mastodon/public/system
    healthcheck:
      test: ['CMD-SHELL', 'wget -q --spider --proxy=off localhost:3000/health || exit 1']

  streaming:
    image: docker.io/tootsuite/mastodon:latest
    restart: always
    env_file: .env
    command: node ./streaming
    networks:
      - external_network
      - internal_network
    depends_on:
      - db
      - redis
    healthcheck:
      test: ['CMD-SHELL', 'wget -q --spider --proxy=off localhost:4000/api/v1/streaming/health || exit 1']

  sidekiq:
    image: docker.io/tootsuite/mastodon:latest
    restart: always
    env_file: .env
    command: bundle exec sidekiq
    depends_on:
      - db
      - redis
    networks:
      - external_network
      - internal_network
    volumes:
      - ./public/system:/mastodon/public/system
    healthcheck:
      test: ['CMD-SHELL', "ps aux | grep '[s]idekiq\ 6' || false"]
networks:
  external_network:
  internal_network:
    internal: true

Tips

Changez le mot de passe, nom et user de la base de données et le port du serveur web si besoin.

Un gros fichier environnement doit être fourni: fichier .env

LOCAL_DOMAIN=votre_domaine
SINGLE_USER_MODE=false

DB_HOST=db
DB_USER=mastodon
DB_NAME=mastodon_production
DB_PASS=votre_mot_de_passe_postgres
DB_PORT=5432

SMTP_SERVER=smtp.mail.fr
SMTP_PORT=PortSmtp
SMTP_LOGIN=LoginMail
SMTP_PASSWORD=password_mail
SMTP_FROM_ADDRESS=adresse_mail
SMTP_DOMAIN=adresse_mail
SMTP_DELIVERY_METHOD=smtp
SMTP_AUTH=login
SMTP_ENABLE_STARTTLS_AUTO=true
SMTP_OPENSSL_VERIFY_MODE=none


CLOSED_REGISTRATIONS=false

REDIS_HOST=redis
REDIS_PORT=6379

SECRET_KEY_BASE=Clé_secrete
OTP_SECRET=Clé_secrete

PAPERCLIP_SECRET=Clé_secrete
ACTIVE_RECORD_ENCRYPTION_DETERMINISTIC_KEY=Clé_secrete
ACTIVE_RECORD_ENCRYPTION_KEY_DERIVATION_SALT=Clé_secrete
ACTIVE_RECORD_ENCRYPTION_PRIMARY_KEY=Clé_secrete

Tips

Pensez à recopier les valeurs de la db (mpd, nom ,etc) et mettre des clés secretes.
La commande podman-compose run --rm web rails secret peut vous aider à générer des clés secretes.
Sinon vous pouvez utilisez un generateur de cle : [https://www.tirage-au-sort.net/generateur-clef-aleatoire](https://www.tirage-au-sort.net/generateur-clef-aleatoire){target="_blank"}

Vous pouvez maintenant démarrer Mastodon :

podman-compose up -d

Mettez en place le site et la base de données :

podman-compose run --rm --no-deps web rails db:setup
podman-compose run --rm --no-deps web rails assets:precompile
podman-compose run --rm web rails db:migrate

crée un compte user Dans votre Mastodon.

Maintenant vous donnez les droits admin/owner via la console ruby:

podman-compose run --rm web bin/tootctl accounts modify username --role Owner

Voilà vous n'avez plus qu'a faire venir des gens et faire de la modération/animation etc ...

Ajoutez un service systemd pour redemarrer Mastodon en cas de reboot serveur :

fichier /etc/systemd/system/mastodon.service

[Unit]
Description=redemarre mastodon
After=network.target

[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/usr/bin/podman-compose --file Chemin_vers_votre_docker-compose.yml up -d
ExecStop=/usr/bin/podman-compose --file Chemin_vers_votre_docker-compose.yml down
User=votre_utilisateur_sur_le_serveur

[Install]
WantedBy=multi-user.target

Tips

Modifiez le chemin d'accès et l'utilisateur

Une fois fait un sudo systemctl enable mastodon.service pour activer le redemarage des containeur en cas de coupure électrique ou reboot serveur.