5.2 KiB
5.2 KiB
Guide de Déploiement - PKI API
Déploiement Local (Développement)
Mode MemoryStore (en mémoire)
export STORAGE_TYPE=memory
export PORT=8080
export JWT_SECRET_KEY=dev-key-change-in-prod
go build -o pkiapi ./cmd/main.go
./pkiapi
L'API démarre sur http://localhost:8080
Mode MongoDB Local
- Démarrer MongoDB (via Docker):
docker run -d -p 27017:27017 \
-e MONGO_INITDB_ROOT_USERNAME=admin \
-e MONGO_INITDB_ROOT_PASSWORD=password \
--name pkiapi-mongo \
mongo:latest
- Configurer les variables d'environnement:
export STORAGE_TYPE=mongodb
export MONGO_URI=mongodb://admin:password@localhost:27017
export MONGO_DB=pkiapi
export JWT_SECRET_KEY=super-secret-key
- Lancer l'API:
go build -o pkiapi ./cmd/main.go
./pkiapi
Déploiement Docker Compose (Recommandé)
Prérequis
- Docker et Docker Compose installés
- Port 8080 et 27017 libres
Lancer le déploiement complet
# Copier la configuration d'exemple
cp .env.example .env
# Éditer .env si nécessaire
nano .env
# Lancer les services
docker compose up -d
# Vérifier l'état
docker compose ps
# Voir les logs de l'API
docker compose logs api -f
# Voir les logs de MongoDB
docker compose logs mongo -f
Arrêter les services
docker compose down
# Avec suppression du volume MongoDB
docker compose down -v
Vérifier le déploiement
1. Vérifier que l'API est accessible
curl http://localhost:8080/api/v1/login \
-H "Content-Type: application/json" \
-d '{"username":"admin","password":"admin"}'
Réponse attendue:
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"expires_in": 86400
}
2. Obtenir un token et tester un endpoint protégé
# Obtenir le token
TOKEN=$(curl -s -X POST http://localhost:8080/api/v1/login \
-H "Content-Type: application/json" \
-d '{"username":"admin","password":"admin"}' | jq -r '.token')
# Lister les certificats (endpoint protégé)
curl -H "Authorization: Bearer $TOKEN" \
http://localhost:8080/api/v1/certificates
3. Créer une CA et un certificat signé
# Obtenir le token
TOKEN=$(curl -s -X POST http://localhost:8080/api/v1/login \
-H "Content-Type: application/json" \
-d '{"username":"admin","password":"admin"}' | jq -r '.token')
# Créer une CA root
CA_ID=$(curl -s -X POST http://localhost:8080/api/v1/ca \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"subject":"CN=Root CA","validityDays":3650}' | jq -r '.id')
echo "CA créée: $CA_ID"
# Créer un certificat signé par la CA
curl -X POST http://localhost:8080/api/v1/certificates/sign \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d "{\"caId\":\"$CA_ID\",\"subject\":\"CN=test.example.com\",\"validityDays\":365}" | jq .
Configuration de Production
Variables d'environnement recommandées
# Sécurité
JWT_SECRET_KEY=<générer-une-clé-forte-aléatoire>
# MongoDB
MONGO_URI=mongodb://<user>:<password>@<host>:27017
MONGO_DB=pkiapi-prod
# API
PORT=8080
STORAGE_TYPE=mongodb
# Gin
GIN_MODE=release
Recommandations de sécurité
-
MongoDB:
- Utiliser MongoDB Atlas ou un cluster MongoDB géré
- Activer l'authentification avec credentials forts
- Utiliser SSL/TLS pour les connexions
- Restreindre les accès par IP
-
API:
- Générer une clé JWT forte et aléatoire
- Utiliser HTTPS en production
- Placer derrière un reverse proxy (nginx, Apache)
- Configurer les CORS si nécessaire
- Utiliser un WAF (Web Application Firewall)
-
Infrastructure:
- Exécuter dans un conteneur avec ressources limitées
- Utiliser des secrets manager (Vault, AWS Secrets Manager)
- Configurer les logs centralisés
- Mettre en place la surveillance et alertes
Troubleshooting
Docker Compose ne démarre pas
# Vérifier les erreurs de build
docker compose build --no-cache
# Voir les logs détaillés
docker compose up --abort-on-container-exit
Erreur de connexion MongoDB
# Vérifier que MongoDB est accessible
docker compose exec mongo mongosh --authenticationDatabase admin -u admin -p password
# Vérifier la connectivité réseau
docker compose exec api ping mongo
API retourne erreur d'authentification
# Vérifier le token JWT
curl -X POST http://localhost:8080/api/v1/login \
-H "Content-Type: application/json" \
-d '{"username":"admin","password":"admin"}'
# Ajouter le token dans les headers
curl -H "Authorization: Bearer <token>" http://localhost:8080/api/v1/certificates
Performance et Scaling
- MemoryStore: Idéal pour développement et tests (single instance)
- MongoStore: Adapté pour production avec replica set MongoDB
- Scaling horizontal: Lancer plusieurs instances de l'API derrière un load balancer
Maintenance
Sauvegarde MongoDB
docker compose exec mongo mongodump --authenticationDatabase admin -u admin -p password -o /dump
Restauration MongoDB
docker compose exec mongo mongorestore --authenticationDatabase admin -u admin -p password /dump
Nettoyage des volumes
docker compose down -v # ⚠️ Supprime TOUS les données !