Journal de bord 05 janvier 2021
Compilation correcte des binaires de GoHarbor.
Ce soir, on va déterminer quels binaires doivent être compilés pour faire fonctionner GoHarbor.
Nous voulons uniquement ceux de Goharbor et pas des dépendances externes.
Les dépendances externes (Redis, nginx, postgres) ont ou auront leurs propres projets.
Premier travail de ce soir, déployer GoHarbor avec l’installer officiel pour déterminer quels containers sont créés et quels sont les fichiers de configuration générés.
On va donc tester ça dans un vagrant en local.
Le script nécessite sudo partout. C’est terrible dans un environnement de prod.
Bien sûr, ne pas oublier de faire tout ça dans un sous-répertoire de /vagrant
sinon on perd tout au prochain vagrant destroy
.
Après avoir générer les certificats TLS comme indiqué ici :
Harbor - Configure HTTPS Access to Harbor
et mis tout ça dans les bons répertoires, le script sudo ./prepare --with-notary --with-trivy --with-clair --with-chartmuseum
semble fonctionner :
prepare base dir is set to /vagrant/harbor-test/harbor
Generated configuration file: /config/portal/nginx.conf
Generated configuration file: /config/log/logrotate.conf
Generated configuration file: /config/log/rsyslog_docker.conf
Generated configuration file: /config/nginx/nginx.conf
Generated configuration file: /config/core/env
Generated configuration file: /config/core/app.conf
Generated configuration file: /config/registry/config.yml
Generated configuration file: /config/registryctl/env
Generated configuration file: /config/registryctl/config.yml
Generated configuration file: /config/db/env
Generated configuration file: /config/jobservice/env
Generated configuration file: /config/jobservice/config.yml
loaded secret from file: /data/secret/keys/secretkey
Copying nginx configuration file for notary
Generated configuration file: /config/nginx/conf.d/notary.upstream.conf
Generated configuration file: /config/nginx/conf.d/notary.server.conf
Generated configuration file: /config/notary/server-config.postgres.json
Generated configuration file: /config/notary/server_env
loaded secret from file: /data/secret/keys/defaultalias
Generated configuration file: /config/notary/signer_env
Generated configuration file: /config/notary/signer-config.postgres.json
Generated configuration file: /config/clair/postgres_env
Generated configuration file: /config/clair/config.yaml
Generated configuration file: /config/clair/clair_env
Generated configuration file: /config/clair-adapter/env
Generated configuration file: /config/trivy-adapter/env
Generated configuration file: /config/chartserver/env
Generated configuration file: /compose_location/docker-compose.yml
Clean up the input dir
Du coup on tente l’install.
L’install est très instable mais elle donne un docker-compose.yml et une liste de containers et de configurations. Le but est de réduire le scope des containers propres à GoHarbor et d’évacuer les containers des services associés vers leurs propres projets (redis, postgres et éventuellement notary, clair, etc…).
En fouillant dans les projets officiels, je trouve des surprises. Notary, par exemple, n’a pas de release depuis quasiment 2 ans :
Publish a release · Issue #1583 · theupdateframework/notary
Pour chartmuseum, on est à quasiment 1 an :
Release ChartMuseum v0.12.0 · helm/chartmuseum
Kubernetes et donc Helm/Chart (vu qu’on veut faire du Gitops) ne sont pour le moment pas dans le scope du projet de forge logicielle, donc chartmuseum sera réévalué plus tard.
Au final, on a 3 binaires :
- harbor_core
- harbor_jobservice
- harbor_registryctl
Et un package nodejs : portal
On a deux helpers à compiler aussi :
- migrate-patch
- standalone-db-migrator
Du coup, la story va consister à créer les containers harbor_core, harbor_jobservice, harbor_registryctl, un container init (avec les migrate) et le container portal.
On va faire communiquer tout ça ensemble avec les containers officiels postgres, redis et nginx.
On va appliquer des features cucumber et un profil Inspec là-dessus.
Puis, dans un second temps, on va ajouter les scanners et notary.
Tout ça pour ce projet de forge logicielle.