< code.RiffZone.net
code.RiffZone.net
> <

Fossil, un VCS allégé

Fossil est un VCS (Version Control System) tout comme Git. Git est né en 2005, Fossil en 2006. Tous deux sont écrits en C. Git bénéficie d'un large écosystème, notamment via github.com racheté par Microsoft en 2018. Fossil a été développé par l'auteur de SQLite pour le suivi du projet, et utilise d'ailleurs SQLite comme conteneur pour le stockage de ses données. On peut dire que Git est plus complet, tandis que Fossil est plus simple d'utilisation et plutôt adapté aux petits projets. Accessoirement ou pas, il dispose nativement de sa propre interface web, d'un wiki, d'un système de tickets et d'un chat.

Installation de l'exécutable

Comme nous voulons utiliser l'interface web intégrée de Fossil, un choix naturel est de l'intégrer à notre environnement Docker, notamment pour la rendre accessible sur le réseau privé Docker derrière Caddy qui s'occupera de la couche TLS.

Première étape, télécharger le binaire de Fossil depuis la section download du site fossil-scm.org puis le placer dans un nouveau dossier "/opt/fossil" du serveur :

On rend le fichier exécutable si ce n'était pas encore le cas :

cd /opt/fossil chmod +x fossil

Cet exécutable posé à cet endroit sera bien pratique pour exécuter diverses commandes Fossil sans devoir se connecter au container Docker, lequel objectivement ne sert qu'à exposer l'interface web.

Construction de l'image Docker

Commençons donc par le Dockerfile décrivant notre future image (on notera l'utilisation de la variable d'environnement $FOSSIL_BASE_URL, qui sera définie dans le fichier docker-compose.yml) :

FROM debian:bookworm-slim RUN mkdir -p /fossil WORKDIR /fossil COPY ./fossil /usr/local/bin/fossil RUN chmod +x /usr/local/bin/fossil CMD ["/bin/sh", "-c", "fossil server --repolist /fossil --port 8080 --baseurl $FOSSIL_BASE_URL"]

Puis on construit l'image sous le nom "fossil" :

docker build -t fossil .

Déploiement du container

On crée un sous-dossier "repositories" pour ranger les dépôts Fossil, et un fichier "docker-compose.yml" pour exploiter notre nouvelle image dans l'écosystème Docker du serveur :

Le "docker-compose.yml" est détaillé ci-dessous, on voit le mapping entre le dossier "repositories" et le chemin "/fossil" dans le futur container, ainsi que la définition de l'URL de l'interface web de Fossil, afin que la couche TLS de Caddy soit renseignée :

services: fossil: container_name: fossil image: fossil restart: always environment: - FOSSIL_BASE_URL=https://fossil.riffzone.net volumes: - ./repositories:/fossil networks: - www_shared_network networks: www_shared_network: name: www_shared_network external: true

Il n'y a plus qu'à déployer le container :

cd /opt/fossil docker compose up -d

Configuration de Caddy pour https

On utilisera ici Caddy comme reverse proxy devant le container Fossil qui écoute sur le port 8080, comme défini dans le Dockerfile. Quelques lignes supplémentaires suffisent pour l'associer au domaine "fossil.riffzone.net" :

fossil.riffzone.net { reverse_proxy fossil:8080 }

En réalité, j'ai mis en place une configuration un peu plus complexe, pour n'autoriser que quelques IPs à se connecter, sur le modèle suivant :

fossil.riffzone.net { @allowed remote_ip XX.XX.XX.XX YY.YY.YY.YY ZZ.ZZ.ZZ.ZZ handle @allowed { reverse_proxy fossil:8080 } handle { header Content-Type text/html; charset=utf-8 respond "Accès restreint, désolé" 403 } }

On relance Caddy, et normalement notre nouveau domaine "fossil.riffzone.net" devrait être accessible :

docker restart caddy

Enfin, il faudra créer les dépôts dans le dossier "repositories", reportez-vous à la documentation de l'outil, cette page avait surtout vocation à détailler l'installation.

Finalement, Fossil ne m'a pas vraiment convaincu au niveau de la simplicité face à GitHub, j'ai fermé le service en attendant de peut-être y revenir plus tard.

> <
Cette page et quelques autres sont propulsées par Index
>