Mise en service du serveur¶
Cette page met en place un serveur partagé pour une équipe : le contrôleur (interface web, administration) et le serveur MCP (utilisé par les agents et la CI), sur la même base. Voir deux services, deux rôles.
À la fin, vous disposez :
- d'une interface web où les personnes consultent et trient les rapports ;
- d'un endpoint
/mcp, protégé par des jetons, auquel se connectent les hôtes des développeurs ; - d'un compte
adminpour gérer les utilisateurs, les jetons et les règles.
Trois façons : en ligne de commande (une machine), avec Docker Compose (conteneurs et PostgreSQL) ou avec Kubernetes (cluster et base PostgreSQL existante).
En ligne de commande¶
1. Choisir la base de données¶
Les deux processus doivent utiliser la même base : donnez-leur le même
SECREVIEW_DATABASE_URL (voir Configuration).
- SQLite (par défaut) : uniquement si les deux processus tournent sur la même machine. Donnez un chemin absolu pour qu'ils ouvrent le même fichier quel que soit le répertoire d'où ils sont lancés.
- PostgreSQL : dès qu'ils tournent sur des machines ou des conteneurs différents (extra
postgres).
export SECREVIEW_DATABASE_URL=sqlite:////var/lib/secreview/security_reports.db
# ou : postgresql+psycopg2://secreview:<password>@db.example.internal:5432/secreview
2. Préparer la base et le premier administrateur¶
security-review-controller db upgrade # crée ou migre le schéma
security-review-controller user create admin --group administrators # mot de passe affiché une fois
Conservez le mot de passe : il ouvre l'interface web. Changez-le ensuite depuis Mon compte.
3. Lancer le contrôleur¶
security-review-controller serve --host 127.0.0.1 --port 8080
# interface web : http://127.0.0.1:8080/ui/
Connectez-vous avec le compte admin. Le contrôleur est destiné aux personnes : gardez-le sur
localhost ou sur un réseau interne (voir Architecture et déploiement).
4. Lancer le serveur MCP¶
Sur la machine seule (essai) :
security-review-mcp serve --transport streamable-http --host 127.0.0.1 --port 8000
# endpoint MCP : http://127.0.0.1:8000/mcp
Pour les développeurs et la CI, exposez-le avec TLS, avec un certificat reconnu par leurs postes (voir TLS) :
security-review-mcp serve --transport streamable-http --host 0.0.0.0 --port 8443 \
--tls-certfile /etc/secreview/tls/cert.pem --tls-keyfile /etc/secreview/tls/key.pem
# endpoint MCP : https://secreview.example.internal:8443/mcp
Le serveur MCP refuse de démarrer tant que le schéma n'est pas migré (étape 2).
5. Donner l'accès aux agents¶
Le serveur MCP exige un jeton, même tant qu'aucun n'existe en base (il n'accepte alors que les enrôlements). Créez le premier maintenant :
security-review-controller token create --label alice # jeton mcp, affiché une fois
Serveur ouvert sur localhost
Un serveur qui écoute sur localhost, sans aucun jeton, accepte toutes les requêtes. Ailleurs,
seul SECREVIEW_ALLOW_UNAUTHENTICATED=true l'ouvre (voir
Jetons Bearer).
Ensuite, deux façons de donner un jeton à chaque développeur et à chaque pipeline :
- Jeton personnel (avec l'enrôlement, activé par défaut) : le développeur connecte son hôte
sans jeton, l'agent demande le projet à la première revue et l'envoie vers l'interface web, où
il crée un jeton MCP personnel ; un administrateur valide le projet (écran Projets) et
l'ajoute à son groupe. Définissez
SECREVIEW_WEB_URLpour que l'agent donne le lien : voir Obtenir un jeton. - Créé par l'administrateur :
security-review-controller token create --label <nom>, par exemple pour un pipeline, puis remis à son propriétaire.
6. Vérifier¶
curl http://127.0.0.1:8080/healthz # contrôleur : {"status":"ok"}
curl http://127.0.0.1:8000/healthz # serveur MCP : {"status":"ok"}
Avec Docker Compose¶
Le fichier docker-compose.yml du dépôt réalise les étapes 1 à 4 avec PostgreSQL : base,
migration, contrôleur et serveur MCP. Le compte admin est créé au premier lancement ; définissez
son mot de passe avec la CLI, qui l'affiche une fois :
echo "POSTGRES_PASSWORD=$(openssl rand -hex 24)" > .env
docker compose up -d --build
docker compose exec controller security-review-controller user reset-password admin # mot de passe admin initial
docker compose exec controller security-review-controller token create --label alice
L'interface web répond sur http://127.0.0.1:8080/ui/, l'endpoint MCP sur
http://127.0.0.1:8000/mcp. Les deux ports ne sont publiés que sur 127.0.0.1 : pour les
ouvrir à l'équipe, ajoutez le TLS et renseignez DOCKER_PUBLISH_ADDRESS (voir
Docker Compose avec PostgreSQL).
Avec Kubernetes¶
Le manifeste
examples/kubernetes/security-review.yaml
réalise les étapes 2 à 4 sur une base PostgreSQL existante : un init container migre le schéma,
puis le contrôleur et le serveur MCP démarrent dans deux Deployments. Le compte admin est créé
au premier lancement ; définissez son mot de passe avec la CLI, qui l'affiche une fois.
Avant de l'appliquer, remplacez l'image registry.example.com/security-review-mcp:pg par une
image qui contient le pilote PostgreSQL, par exemple ghcr.io/cyr-ius/security-review-mcp:latest-pg
(voir Installation). Le Secret secreview-controller contient le secret de
signature des sessions web : sans lui, le contrôleur en tire un aléatoire à chaque démarrage et
les sessions se terminent à chaque redémarrage (manifeste du Secret : voir
Kubernetes).
kubectl create namespace secreview
kubectl -n secreview create secret generic secreview-db \
--from-literal=SECREVIEW_DATABASE_URL='postgresql+psycopg2://secreview:<password>@<host>:5432/secreview'
kubectl -n secreview create secret generic secreview-controller \
--from-literal=SECREVIEW_SECRET_KEY="$(openssl rand -hex 32)"
kubectl -n secreview apply -f examples/kubernetes/security-review.yaml
kubectl -n secreview exec deploy/secreview-controller -c controller -- security-review-controller user reset-password admin # mot de passe admin initial
kubectl -n secreview exec deploy/secreview-controller -c controller -- \
security-review-controller token create --label alice
Le contrôleur reste interne : ouvrez l'interface web avec
kubectl -n secreview port-forward svc/secreview-controller 8080:80, puis
http://127.0.0.1:8080/ui/. Exposez le Service secreview-mcp aux développeurs et à la CI par
un Ingress avec TLS, et réglez SECREVIEW_FORWARDED_ALLOW_IPS sur la plage d'adresses des pods
de l'ingress controller. Contenu du manifeste, mise à jour OSV et réplicas multiples : voir
Kubernetes.
Étape suivante¶
Connectez l'hôte de chaque développeur au serveur MCP. Pour aller plus loin : jetons, enrôlement et TLS, connexion OIDC.