Infrastructure as Code pour un serveur bare metal Scaleway (Debian 13, Docker, Traefik, Authentik).
- Terraform >= 1.5
- Ansible >= 2.14
- Un serveur bare metal Scaleway existant (EM-A116X-SSD, fr-par-2)
- Un domaine avec accès aux DNS
terraform/ — provisioning du serveur (import uniquement, pas de création)
ansible/ — configuration du serveur (Docker, Traefik, Authentik, Dockhand…)
Makefile — commandes principales
Copier et renseigner les secrets :
cp terraform/secret.tfvars.example terraform/secret.tfvarsRenseigner dans terraform/secret.tfvars :
scw_access_key/scw_secret_key— clés API Scalewayssh_key_id— ID de la clé SSH dans l'interface Scalewaybaremetal_server_id— ID du serveur (visible dans l'URL de la console Scaleway)
Le serveur doit être créé manuellement via la console Scaleway. Terraform gère l'état uniquement via import.
Importer le serveur dans l'état Terraform :
make init
make provision # applique l'import block dans main.tfAprès un make provision réussi : supprimer le bloc import {} de terraform/main.tf.
Inventory :
cp ansible/inventory.ini.example ansible/inventory.iniRemplacer <YOUR_SERVER_IP> par l'IP du serveur (make provision affiche server_ip).
Variables secrètes (vault) :
cp ansible/group_vars/all/vault.yml.example ansible/group_vars/all/vault.ymlRenseigner traefik_dashboard_users avec un hash htpasswd :
htpasswd -nb admin <MON_MOT_DE_PASSE>Chiffrer le fichier :
ansible-vault encrypt ansible/group_vars/all/vault.ymlDéploiement :
make configure
# ou avec vault chiffré :
cd ansible && ansible-playbook main.yml --ask-vault-passPointer les enregistrements A suivants vers l'IP du serveur :
| Domaine | Service |
|---|---|
traefik.<domain> |
Dashboard Traefik |
auth.<domain> |
Authentik SSO |
stacks.<domain> |
Dockhand |
make init # initialise Terraform
make plan # prévisualise les changements Terraform
make provision # applique Terraform
make configure # lance le playbook Ansible
make deploy # plan + provision + configure
make ping # vérifie la connectivité Ansible| Fichier | Contenu |
|---|---|
terraform/secret.tfvars |
Clés API Scaleway, IDs |
terraform/terraform.tfvars |
IDs OS, zone |
ansible/inventory.ini |
IP du serveur |
ansible/group_vars/all/vault.yml |
Hash htpasswd Traefik |