Il y a 2-3 ans l’envie m’a pris de me config un serveur perso, j’ai vu le prix des Syno et cinquante euros plus tard, j’avais récupéré une vieille tour type bureautique des années 2010 mais le temps, la motivation et les connaissances me manquant (j’en étais a la moitié de mes études) la tour a fini par prendre la poussière dans un coin de ma chambre… Jusqu’à ce que je trouve récemment un logement qui me plaise vraiment et qui me pousse à m’intéresser plus sérieusement à la domotique et donc a passer un coup de Swiffer sur la vieille tour ! N’ayant pas encore tous le matériel pour connecter ma maison, j’ai décidé de démarrer ce petit side-project, tant l’envie de faire joujou avec mon serveur me brulait les doigts. Et quel meilleur premier article que celui qui explique comment j’ai monté ce site ?
NB : Je travaille sous MacOS
Prérequis
Avoir une machine sous UnraidOS
Posséder un compte Dockerhub
Config du NAS :
- Intel Core i3-6100 @3.70GHz
- 16 GB de RAM DDR4
- 1 clé USB de 16 Go (2 giga minimum recommandé par Unraid)
- 1 disque dur de 500GO
On y va !
J’ai zappé l’installation d’Unraid, car elle est vraiment simple, c’est une clé USB à graver et à booter sur la machine, le reste se fait tout seul.
Setup Hugo
Hugo est un générateur de site statique, c’est à dire qu’il va générer des fichiers HTML, CSS, JS, etc. à partir de fichiers markdown, puis servir ces fichiers statiques sur un serveur web.
On commence par installer hugo :
brew install hugo
puis on initialise le site :
hugo new site mon_blog
cd quickstart
git init
git submodule add https://github.com/theNewDynamic/gohugo-theme-ananke.git themes/ananke
echo "theme = 'ananke'" >> hugo.toml
⚠️ Attention, ici on ajoute le theme ananke, bien que le tuto officiel l’ajoute sous forme de submodule git, il est possible de passer par les modules hugo, mais comme je suis passé par la première solution je ne vais pas m’étendre sur le sujet. Retenez simplement qu’il y aura une subtilité plus tard. Si vous voulez tenter l’approche module hugo, vous pouvez vous référer au repo ananke
Dockerfile
Maintenant que le site est initialisé, le but va être de le faire tourner dans un container docker sur le NAS. Il va donc nous falloir un Dockerfile.
FROM caddy:latest
WORKDIR /srv
COPY ./public /srv/public
EXPOSE 80
COPY Caddyfile /etc/caddy/Caddyfile
CMD ["caddy", "run", "--config", "/etc/caddy/Caddyfile", "--adapter", "caddyfile"]
Ainsi le container lancera un serveur Caddy et servira les fichiers statiques générés par hugo dans public/
.
Pour tester le container en local, on peut lancer les commandes suivantes pour build et run l’image :
hugo
docker build -t <dockerhub_username>/<image_name> .
docker run -p 1313:80 phransswa/hugo-server
et ainsi accéder au site sur localhost:1313
. On notera que j’ai redirigé le port 80 du container vers le port 1313 de ma machine, c’est parce que le port 80 est déjà utilisé par unraid pour exposer son dashboard GUI.
Github action
Pour que le site se mette à jour on va creer une action github qui va build le site, puis build l’image docker et enfin la push sur dockerhub.
vous allez tous d’abord devoir créer un token dockerhub, pour cela rendez vous sur cette page et cliquez sur “New Access Token”, puis copiez le token et ajoutez le parmis les secrets de votre repo github en tant que DOCKERHUB_TOKEN
, et rajoutez votre pseudo dockerhub en tant que DOCKERHUB_USERNAME
.
name: Docker Build and Push
on:
push:
branches:
- main
jobs:
build-and-push:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
submodules: 'true'
- name: Login to DockerHub
uses: docker/login-action@v3
with:
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Setup Hugo
uses: peaceiris/actions-hugo@v2
with:
hugo-version: 'latest'
- name: Build Hugo
run: hugo --minify
- name: Build and push Docker image
run: |
docker build -t ${{ secrets.DOCKERHUB_USERNAME }}/hugo-server .
docker push ${{ secrets.DOCKERHUB_USERNAME }}/hugo-server
env:
DOCKER_BUILDKIT: 1
Pull l’image Docker sur Unraid
Maintenant que l’image est build et push sur dockerhub, il faut la pull sur le NAS. Unraid intègre déjà un plugin pour pull des images docker, rendez vous dans l’onglet Docker
puis Docker Containers
et cliquez sur Add Container
. Remplissez les champs comme ci-dessous :
puis appliquez les changements et lancez le container.
votre site est maintenant accessible sur http://<ip_du_nas>:1313
depuis votre réseau local.
Exposer le site sur internet
Pour exposer le site sur internet, je vais faire simple dans un premier temps et ouvrir le port 1313 au paquet à destination de l’ip du NAS.
J’adresserai la question du nom de domaine plus tard, peut-être en même temps que celle du design.
Conclusion
Et voilà ! Vous avez maintenant un site statique qui tourne sur votre NAS, et qui se met à jour automatiquement à chaque push sur le repo github. Vous pouvez maintenant vous amuser à le personnaliser, à ajouter des articles, des pages etc.