Phase 4.5 — Harbor
Provisionnement de la VM via OpenTofu, configuration via Ansible.
Vue d'ensemble
Harbor stocke les images Docker des applications Python (FastAPI, Streamlit, Flask).
| Rôle | Valeur |
|---|---|
| VM | 201 — harbor (192.168.1.30) |
| Nœud Proxmox | pve02 |
| Groupe Ansible | harbor |
| URL | https://harbor.mounik.ovh |
| Stockage | 80 Go |
| Auth | OIDC via Keycloak |
1. Provisionnement OpenTofu
# harbor.tf — appel au module vm
module "harbor" {
source = "./modules/vm"
name = "harbor"
target_node = "pve02"
vmid = 201
cores = 2
memory = 4096
balloon = 2048
disk_size = "80G"
ip = "192.168.1.30"
ssh_key = local.ssh_key
depends_on = [module.gitlab]
}
Exécution :
cd homelab-proxmox/opentofu
tofu plan -target=module.harbor -out=tfplan
tofu apply tfplan
2. Configuration Ansible
Le playbook ansible/playbooks/05-harbor.yml applique le rôle harbor :
ansible-playbook -i inventory/homelab.yml playbooks/05-harbor.yml
Le rôle harbor :
1. Installe Docker et docker-compose-v2
2. Télécharge et extrait l'installeur offline Harbor
3. Déploie harbor.yml (template Jinja2 — OIDC Keycloak, base de données)
4. Lance install.sh --with-trivy
Variables sensibles : harbor_admin_password, harbor_db_password, harbor_oidc_secret (via Vault).
3. Projets
| Projet | Type | Description |
|---|---|---|
fastapi |
Privé | Images FastAPI |
streamlit |
Privé | Images Streamlit |
flask |
Privé | Images Flask |
4. Vérification
docker login harbor.mounik.ovh -u admin
docker pull hello-world
docker tag hello-world harbor.mounik.ovh/library/hello-world
docker push harbor.mounik.ovh/library/hello-world
Livrable : Harbor déployé avec Trivy, OIDC Keycloak, projets créés.
Pour aller plus loin
- Phase 2 — OpenTofu — provisioning de toutes les VMs
- Phase 4.6 — Monitoring — Prometheus, Grafana, Loki
- Playbooks Ansible — dans
ansible/du dépôt