Search for a command to run...
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.
Avant de commencer, assurez-vous d’avoir installé :
Ce dépôt contient tous les fichiers nécessaires à la configuration de mon environnement.
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.
git clone https://github.com/kraaakilo/self-hosted.git
cd self-hosted
Pour chaque application, rendez-vous dans son dossier, configurez les variables d’environnement, puis lancez :
docker-compose up -d
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.
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é.
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.
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é :
- 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
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.).
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 !
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!