kraaakilo

Command Palette

Search for a command to run...

Blog mon-setup-self-hosting
sysadminDECEMBER 23, 2024

Mon Setup Self-Hosting

sysadmin

Introduction

Bienvenue dans cet article où je détaille la mise en place et la configuration d’une collection d’applications auto-hébergées via Docker, ainsi que des scripts utiles pour Proxmox et d’autres configurations dynamiques. Mon objectif est de créer un environnement sécurisé, accessible et facilement gérable pour mes applications favorites.

Prérequis

Avant de commencer, assurez-vous d’avoir installé :

  • Docker avec Docker Compose
  • Proxmox (plateforme de virtualisation)
  • Ansible (outil d’automatisation)

Configuration et Scripts

Ce dépôt contient tous les fichiers nécessaires à la configuration de mon environnement.

GitHub

Aperçu des services dans le homelab

Proxmox Virtual Environment (Proxmox VE ou PVE) est une plateforme libre de virtualisation basée sur KVM, proposant également des conteneurs LXC. Elle est maintenue par Proxmox Server Solutions GmbH.
Source : Wikipedia.

Vue d’ensemble du homelab


Instructions de Configuration

1. Cloner le dépôt

sh

git clone https://github.com/kraaakilo/self-hosted.git
cd self-hosted

2. Configurer et lancer les conteneurs

Pour chaque application, rendez-vous dans son dossier, configurez les variables d’environnement, puis lancez :

sh

docker-compose up -d

Architecture

Chaque application est organisée dans un dossier contenant un fichier compose.yml et un fichier de variables d’environnement. Cette organisation facilite le déploiement et la gestion indépendante de chaque service via Docker Compose.


Réseau et Proxy

J’ai acquis le domaine t3a.space. Pour obtenir un certificat SSL valide, j’utilise le challenge DNS de Let's Encrypt via l’API Cloudflare, ce qui évite de manipuler directement les fichiers sur le serveur.

J’ai configuré Nginx Proxy Manager pour automatiser la gestion des certificats et intégré la résolution DNS dans mon réseau local via Pi-hole, qui redirige *.t3a.space vers mes machines internes.

Cette approche permet d’avoir un certificat SSL valide pour le domaine et un contrôle complet de la résolution DNS en local, garantissant sécurité et flexibilité.

Nginx Proxy Manager


Sécurité

  • Utilisation de UFW pour filtrer les accès réseau.
  • Chiffrement SSL sur toutes les communications.
  • Ouverture uniquement du port UDP 1194 pour OpenVPN, permettant un accès sécurisé au réseau interne depuis l’extérieur.
  • Mise à jour dynamique du DNS public via un script DDNS interfacé avec Cloudflare, exécuté en tâche cron sur Proxmox.

Exemple de mapping de ports OpenVPN

Mapping des ports


Infrastructure Proxmox

J’utilise Proxmox pour virtualiser mes services en conteneurs. Les volumes sont partagés via des bind mounts.

Pour résoudre les problèmes de permissions sur ces volumes, j’ai mis en place un serveur NFS sur Proxmox accessible par d’autres machines du réseau. Les conteneurs Docker utilisent des UID/GID fixes (1000) pour assurer une cohérence des permissions sur les disques partagés.


Gestion des certificats SSL

Certains conteneurs ne sont pas gérés par Nginx Proxy Manager et ne bénéficient pas de la mise à jour automatique des certificats.

Pour cela, j’utilise Ansible pour extraire régulièrement les certificats SSL wildcard de NPM et les déployer dans ces conteneurs (Gitea, Portainer).

Voici un extrait du playbook Ansible utilisé :

yaml

- name: Get Let's Encrypt Certificate
  hosts: ssl_producer
  tasks:
    - name: Fetch fullchain.pem
      ansible.builtin.fetch:
        src: /var/apps/nginx-proxy-manager/letsencrypt/live/npm-1/fullchain.pem
        dest: ./ssl/
        flat: yes

    - name: Fetch privkey.pem
      ansible.builtin.fetch:
        src: /var/apps/nginx-proxy-manager/letsencrypt/live/npm-1/privkey.pem
        dest: ./ssl/
        flat: yes

- name: Deploy SSL to Gitea
  hosts: gitea
  tasks:
    - name: Copy fullchain.pem
      ansible.builtin.copy:
        src: ./ssl/fullchain.pem
        dest: /etc/nginx/ssl/gitea/fullchain.pem

    - name: Copy privkey.pem
      ansible.builtin.copy:
        src: ./ssl/privkey.pem
        dest: /etc/nginx/ssl/gitea/privkey.pem

- name: Deploy SSL to Portainer
  hosts: portainer
  tasks:
    - name: Copy fullchain.pem
      ansible.builtin.copy:
        src: ./ssl/fullchain.pem
        dest: /home/portainer/certs/fullchain.pem

    - name: Copy privkey.pem
      ansible.builtin.copy:
        src: ./ssl/privkey.pem
        dest: /home/portainer/certs/privkey.pem

Monitoring

J’ai déployé un système de supervision basé sur Grafana, Prometheus et node_exporter pour monitorer les ressources critiques de mes conteneurs (CPU, RAM, etc.).

Grafana dashboard


Sauvegarde et restauration

Des scripts dédiés, inclus dans le dépôt, automatisent les sauvegardes et restaurations des volumes Proxmox, simplifiant la maintenance et la récupération des données.


J’espère que ce retour d’expérience sur mon setup self-hosting vous sera utile !

Let's connect

Stay in the loop with my latest projects and insights! Follow me on Twitter to catch all the updates as they happen. Don't miss out on the journey – let's connect and explore the world of tech together. Click to follow now!