Aller au contenu

Blog

Alors c'est pour vous raconter mes idées ,raler et troller.

Car c'est bon de raler et troller aussi.

Le but de ce blog : la motivation, et ne pas perdre mes idées.

Bienvenue dans mon bordel.

Trixie et apt manquant

Il arrive de Debian ne mets pas de source apt avec Trixie. Si lorsque vous faites :

sudo apt update

Aucun dépôt n'apparaît, il y a de fortes chances que vos dépôts n'ont pas été configurés. Par chance, Debian fournit un exemple de configuration : /usr/share/doc/apt/examples/debian.sources

## Debian distribution repository
##
## The following settings can be adjusted to configure which packages to use from Debian.
## Mirror your choices (except for URIs and Suites) in the security section below to
## ensure timely security updates.
##
## Types: Append deb-src to enable the fetching of source package.
## URIs: A URL to the repository (you may add multiple URLs)
## Suites: The following additional suites can be configured
##   <name>-updates   - Urgent bug fix updates produced after the final release of the
##                      distribution.
##   <name>-backports - software from this repository may not have been tested as
##                      extensively as that contained in the main release, although it includes
##                      newer versions of some applications which may provide useful features.
##                      Also, please note that software in backports WILL NOT receive any review
##                      or updates from the Debian security team.
## Components: Aside from main, the following components can be added to the list
##   contrib           - Free software that may require non-free software to run.
##   non-free-firmware - Firmware that is non-free
##   non-free          - Software that is not under a free license. There may be restrictions
##                       on use or modification.
##
## See the sources.list(5) manual page for further settings.
Types: deb
URIs: http://deb.debian.org/debian
Suites: trixie trixie-updates
Components: main contrib non-free non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg

## Debian security updates. Aside from URIs and Suites,
## this should mirror your choices in the previous section.
Types: deb
URIs: http://deb.debian.org/debian-security
Suites: trixie-security
Components: main contrib non-free non-free-firmware
Signed-By: /usr/share/keyrings/debian-archive-keyring.gpg

Vous pouvez utiliser ce fichier directement dans apt.

sudo cp /usr/share/doc/apt/examples/debian.sources /etc/apt/sources.list.d/debian.sources 

Puis vous pouvez faire vos mises à jour :

sudo apt update
sudo apt upgrade

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.

Passage en www

Je vais avoir besoin de sous-domaine pour différents services donc je modifie la configuration de nginx. Je passe d'un gros fichier à :

  • un fichier /etc/nginx.conf pour la configuration générale
  • un fichier proxy.conf pour la config du proxy
  • un fichier par sous domaine.

Et on fait ça avec la commande include.

Jenkins crown et systemd

Pour faire simple : Dès que je veux faire un truc repetifs quelque part je le fous sur Jenkins. Un seul outil pour tout faire. Mise à jour du site internet => Jenkins via un appel par script Mise à jours des PC => mise à jours via un trigger quotidien.

Et en plus, il fait le suivi en cas de soucis. J'aime bien cet outil.

Systemd me permet lui de gérer mes coupures électriques qui font redémarrer mon serveur. (un onduleur avec batterie, ça coûte cher)

Il suffit de rajouter un fichier dans le dossier /etc/systemd/system :

cd /etc/systemd/system
nano truc.service

Exemple jenkins.service :

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

[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/usr/bin/podman-compose --file /home/foo/jenkins_docker/docker-compose.yml up -d
ExecStop=/usr/bin/podman-compose --file /home/foo/jenkins_docker/docker-compose.yml down
User=foo

[Install]
WantedBy=multi-user.target

Et zou, on redémarre le ou les containeurs au démarrage. Bref une sorte de combo gagnant.

DNS menteur et censure

L'état français censure de plus en plus internet via les DNS des FAI et il fait aussi pression sur google et d'autres fournisseurs alternatifs. Sebsauvage propose une liste de fournisseur alternatif Mais il y a aussi pour surveiller la censure le site de ooni.org

Vous pouvez utiliser leur ooniprobe pour vérifier votre censure internet, et ainsi participer à l'observation de celle-ci. (Attention aux risques en fonction de votre pays).