GitLab sur NAS


Si vous avez un NAS fonctionnel avec un docker , l'installation de Gitlab n'est pas très difficile.


Cet article n'est qu'un bon exemple dans le cycle pro du NAS. Et cela montre à quel point il est facile de manipuler des services, sur une plate-forme déjà terminée, même construite indépendamment, sans équipe de développement, sans OS et magasins d'applications spécialement adaptés.


Pourquoi gitlab?


Il existe plusieurs systèmes de gestion des référentiels Git.


Parmi ceux-ci, assez matures sont ...
  • Bitbucket est un système payant et fermé, bien que populaire dans le secteur des entreprises. Il suppose l'intégration avec d'autres produits Atlassian que je n'utilise pas. Implémenté en Java. Pas une solution particulièrement appropriée, surtout compte tenu de la politique selon laquelle vous devez tout payer, même pour les plugins (bien qu'il y en ait aussi des gratuits).
  • Gogs est un système similaire à Gitlab. Mis en œuvre sur Go. La dernière fois que j'ai examiné ses capacités, il n'y avait aucune possibilité de révision du code. Oui, et en général, il est en retard sur les fonctionnalités de Gitlab, car le système est beaucoup plus récent:
    • Léger.
    • L'interface est similaire à Github.
    • Gestion des utilisateurs.
    • Suivi des bogues.
    • Wiki
    • Pas de révision de code.
    • Support pour git hooks.
    • Accès via HTTPS / SSH.
    • Mis en œuvre sur Go.
    • Il y a une fourchette de Gitea .
    • Il existe un plugin LDAP.
  • Gitea - fourche des Gogs. A ce qui manque dans Gogs:
    • Révision du code.
    • Stockage de gros fichiers.
    • Tags.
    • Recherche raffinée.
    • Progressez les tâches avec des cases à cocher.
    • LDAP est également pris en charge.
  • Kallithea - fork de RhodeCode.
    • Gestion très avancée des utilisateurs et des groupes.
    • Synchronisation avec les référentiels distants.
    • Suivi des bogues.
    • Wiki
    • Il y a une révision du code.
    • Support pour git hooks.
    • Accès via HTTPS / SSH.
    • Implémenté en Python.
    • S'intègre à LDAP.
    • Il y a une image Docker.
  • Phacility est un système de Facebook. La fonctionnalité est large, il n'y a pas seulement un examen, mais même un système de gestion des tâches et des projets. Je ne l'ai pas examiné en détail.
  • Gerrit - conçu principalement pour la discussion et la révision de code, avec quelques fonctionnalités pour gérer les référentiels.
  • Sr.ht - recommandé dans les commentaires . Apparemment, la fonctionnalité est assez large. Mais le système est toujours en développement actif.

J'ai travaillé avec Gitlab avant cela, en plus, il a une fonctionnalité CI intégrée, qui sera utile à l'avenir. Le système est mature, il y a beaucoup de documentation dessus et au fil des années de développement, Gitlab a gagné beaucoup d'opportunités. Par conséquent, je l'ai choisi.


Paramètres généraux


J'utilise une image Gitlab de sameersbn .
Dans docker-compose.yml (le fichier est également répertorié à la fin de l'article), vous devez modifier les variables suivantes:


  • DB_PASS - mot de passe pour la base de données Gitlab. Doit correspondre au mot de passe dans le conteneur postgresql .
  • GITLAB_SECRETS_DB_KEY_BASE , GITLAB_SECRETS_SECRET_KEY_BASE , GITLAB_SECRETS_OTP_KEY_BASE - valeurs de base pour la génération de clés.
  • GITLAB_ROOT_EMAIL - e-mail de l'administrateur.
  • GITLAB_ROOT_PASSWORD - mot de passe administrateur par défaut, qui peut être modifié ultérieurement à partir de l'interface Web.
  • GITLAB_EMAIL , GITLAB_EMAIL_REPLY_TO , GITLAB_INCOMING_EMAIL_ADDRESS - adresses pour les alertes par courrier.
  • SMTP_HOST , SMTP_PORT , SMTP_USER , SMTP_PASS - Paramètres SMTP pour les alertes par courrier électronique.
  • IMAP_HOST , IMAP_PORT , IMAP_USER , IMAP_PASS - Gitlab peut non seulement envoyer du courrier, mais aussi le récupérer via IMAP. Il lui est possible de faire des demandes par e-mail.

Configuration LDAP


Pour que les utilisateurs du NAS puissent se connecter à Gitlab, ils doivent disposer d'un serveur LDAP en tant que fournisseur d'autorisation.


Notez que lorsque LDAP est configuré, il y aura deux onglets lors de la saisie de Gitlab: LDAP et Standard.


L'administrateur ne pourra se connecter que sur l'onglet Standard, car il est enregistré localement, et les utilisateurs uniquement sur l'onglet LDAP.


L'enregistrement d'administrateur local est utile en cas de perte de connexion avec le serveur LDAP.


Connexion à Gitlab


Cela se fait facilement en définissant des variables dans le fichier de configuration docker-compose:


  • LDAP_ENABLED=true - LDAP_ENABLED=true autorisation LDAP.
  • LDAP_HOST=172.21.0.1 - adresse du serveur LDAP.
  • LDAP_PORT=389 - port.
  • LDAP_METHOD=plain - méthode d'accès sans chiffrement, car Serveur LDAP à l'intérieur du réseau hôte. Il est également possible d'utiliser StartTLS.
  • LDAP_UID=uid - champ UID utilisateur. Dans le cas d'OpenLDAP, la configuration qui a été configurée est uid .
  • LDAP_BIND_DN=cn=admin,dc=nas,dc=nas - utilisateur et domaine sous lequel Gitlab est autorisé sur le serveur LDAP.
  • LDAP_PASS=<LDAP_PASSWORD> - mot de passe pour l'utilisateur LDAP, sous lequel Gitlab est autorisé sur le serveur LDAP.
  • LDAP_BLOCK_AUTO_CREATED_USERS=false - l'utilisateur LDAP apparaîtra dans Gitlab après sa première connexion. Si true défini ici, il sera bloqué. L'administrateur pourra le déverrouiller.
  • LDAP_BASE=ou=users,dc=nas,dc=nas est l'adresse de base à laquelle se trouvent les comptes d'utilisateurs.
  • LDAP_USER_FILTER=memberOf=cn=users_code,ou=groups,dc=nas,dc=nas - filtre. Cela indique que je souhaite recevoir uniquement les membres du groupe users_code .
  • LDAP_ALLOW_USERNAME_OR_EMAIL_LOGIN=true - permet à l'utilisateur d'entrer non seulement par UID, mais aussi par e-mail.

Faites attention au paramètre LDAP_USER_FILTER . Dans un article précédent , les groupes d'utilisateurs ont été introduits dans LDAP, et cette option permet uniquement aux utilisateurs du groupe users_code d' users_code .


Gitlab ci


La configuration de CI a été décrite en détail dans les articles et la documentation de Gitlab . Il est inutile de répéter.


Bref, tout ce que vous devez faire:




L'enregistrement est effectué par la commande suivante:


 docker-compose exec gitlab-runner /entrypoint register 

À propos des agents dans Gitlab, vous pouvez lire dans la documentation .


Je n'ai pas activé Docker Registry, car je n'en ai pas besoin. Découvrez ce que c'est et pourquoi vous en avez besoin sur le site Web de Gitlab .


Sous le spoiler se trouve le fichier de configuration de Gitlab, qui est également disponible dans le référentiel .


/tank0/docker/services/gitlab/docker-compose.yml
 # https://github.com/sameersbn/docker-gitlab version: '2' networks: gitlab: docker0: external: name: docker0 services: redis: restart: always image: sameersbn/redis:latest command: - --loglevel warning networks: - gitlab volumes: - /tank0/apps/gitlab/redis:/var/lib/redis:Z postgresql: restart: always image: sameersbn/postgresql:9.6-2 volumes: - /tank0/apps/gitlab/postgresql:/var/lib/postgresql:Z networks: - gitlab environment: - DB_USER=gitlab - DB_PASS=<DB_PASSWORD> - DB_NAME=gitlabhq_production - DB_EXTENSION=pg_trgm # plantuml: # restart: always # image: plantuml/plantuml-server # image: plantuml/plantuml-server:jetty # ports: # - "127.0.0.1:9542:8080" # ports: # - "plantuml:8080:8080" # expose: # - 8080 # networks: # - gitlab gitlab: restart: always image: sameersbn/gitlab:10.6.3 depends_on: - redis - postgresql ports: - "11022:22" expose: - 443 - 80 - 22 volumes: - /tank0/apps/repos:/home/git/data/repositories:Z - /tank0/apps/repos/system/backup:/home/git/data/backups:Z - /tank0/apps/repos/system/builds:/home/git/data/builds:Z - /tank0/apps/repos/system/lfs-objects:/home/git/data/shared/lfs-objects:Z - /tank0/apps/repos/system/public:/uploads/-/system:Z - /tank0/apps/gitlab/logs:/var/log/gitlab - /tank0/apps/gitlab/gitlab:/home/git/data:Z networks: - gitlab - docker0 environment: - "VIRTUAL_HOST=git.*,gitlab.*" - VIRTUAL_PORT=443 - VIRTUAL_PROTO=https - CERT_NAME=NAS.cloudns.cc - DEBUG=false # Default: 1 - NGINX_WORKERS=2 # Default: 3 - UNICORN_WORKERS=3 # Default: 25 - SIDEKIQ_CONCURRENCY=10 - DB_ADAPTER=postgresql - DB_HOST=postgresql - DB_PORT=5432 - DB_USER=gitlab - DB_PASS=<DB_PASS> - DB_NAME=gitlabhq_production - REDIS_HOST=redis - REDIS_PORT=6379 - TZ=Europe/Moscow - GITLAB_TIMEZONE=Moscow - GITLAB_HTTPS=true - SSL_SELF_SIGNED=true #- SSL_VERIFY_CLIENT=true - NGINX_HSTS_MAXAGE=2592000 - GITLAB_HOST=git.NAS.cloudns.cc #- GITLAB_PORT=11443 - GITLAB_SSH_PORT=11022 - GITLAB_RELATIVE_URL_ROOT= - GITLAB_SECRETS_DB_KEY_BASE=<DB_KEY_BASE> - GITLAB_SECRETS_SECRET_KEY_BASE=<SC_KEY_BASE> - GITLAB_SECRETS_OTP_KEY_BASE=<OTP_KEY_BASE> - GITLAB_SIGNUP_ENABLED=false # Defaults to 5iveL!fe. - GITLAB_ROOT_PASSWORD= - GITLAB_ROOT_EMAIL=root@gmail.com - GITLAB_NOTIFY_ON_BROKEN_BUILDS=true - GITLAB_NOTIFY_PUSHER=false - GITLAB_EMAIL=GITLAB@yandex.ru - GITLAB_EMAIL_REPLY_TO=noreply@yandex.ru - GITLAB_INCOMING_EMAIL_ADDRESS=GITLAB@yandex.ru - GITLAB_BACKUP_SCHEDULE=daily - GITLAB_BACKUP_TIME=01:00 - GITLAB_MATTERMOST_ENABLED=true - GITLAB_MATTERMOST_URL="" - SMTP_ENABLED=true - SMTP_DOMAIN=www.example.com - SMTP_HOST=smtp.yandex.ru - SMTP_PORT=25 - SMTP_USER=GITLAB@yandex.ru - SMTP_PASS=<SMTP_PASSWORD> - SMTP_STARTTLS=true - SMTP_AUTHENTICATION=login - IMAP_ENABLED=true - IMAP_HOST=imap.yandex.ru - IMAP_PORT=993 - IMAP_USER=GITLAB@yandex.ru - IMAP_PASS=<IMAP_PASSWORD> - IMAP_SSL=true - IMAP_STARTTLS=false - OAUTH_ENABLED=false - OAUTH_AUTO_SIGN_IN_WITH_PROVIDER= - OAUTH_ALLOW_SSO= - OAUTH_BLOCK_AUTO_CREATED_USERS=true - OAUTH_AUTO_LINK_LDAP_USER=false - OAUTH_AUTO_LINK_SAML_USER=false - OAUTH_EXTERNAL_PROVIDERS= - OAUTH_CAS3_LABEL=cas3 - OAUTH_CAS3_SERVER= - OAUTH_CAS3_DISABLE_SSL_VERIFICATION=false - OAUTH_CAS3_LOGIN_URL=/cas/login - OAUTH_CAS3_VALIDATE_URL=/cas/p3/serviceValidate - OAUTH_CAS3_LOGOUT_URL=/cas/logout - OAUTH_GOOGLE_API_KEY= - OAUTH_GOOGLE_APP_SECRET= - OAUTH_GOOGLE_RESTRICT_DOMAIN= - OAUTH_FACEBOOK_API_KEY= - OAUTH_FACEBOOK_APP_SECRET= - OAUTH_TWITTER_API_KEY= - OAUTH_TWITTER_APP_SECRET= - OAUTH_GITHUB_API_KEY= - OAUTH_GITHUB_APP_SECRET= - OAUTH_GITHUB_URL= - OAUTH_GITHUB_VERIFY_SSL= - OAUTH_GITLAB_API_KEY= - OAUTH_GITLAB_APP_SECRET= - OAUTH_BITBUCKET_API_KEY= - OAUTH_BITBUCKET_APP_SECRET= - OAUTH_SAML_ASSERTION_CONSUMER_SERVICE_URL= - OAUTH_SAML_IDP_CERT_FINGERPRINT= - OAUTH_SAML_IDP_SSO_TARGET_URL= - OAUTH_SAML_ISSUER= - OAUTH_SAML_LABEL="Our SAML Provider" - OAUTH_SAML_NAME_IDENTIFIER_FORMAT=urn:oasis:names:tc:SAML:2.0:nameid-format:transient - OAUTH_SAML_GROUPS_ATTRIBUTE= - OAUTH_SAML_EXTERNAL_GROUPS= - OAUTH_SAML_ATTRIBUTE_STATEMENTS_EMAIL= - OAUTH_SAML_ATTRIBUTE_STATEMENTS_NAME= - OAUTH_SAML_ATTRIBUTE_STATEMENTS_FIRST_NAME= - OAUTH_SAML_ATTRIBUTE_STATEMENTS_LAST_NAME= - OAUTH_CROWD_SERVER_URL= - OAUTH_CROWD_APP_NAME= - OAUTH_CROWD_APP_PASSWORD= - OAUTH_AUTH0_CLIENT_ID= - OAUTH_AUTH0_CLIENT_SECRET= - OAUTH_AUTH0_DOMAIN= - OAUTH_AZURE_API_KEY= - OAUTH_AZURE_API_SECRET= - OAUTH_AZURE_TENANT_ID= - LDAP_ENABLED=true #- LDAP_LABEL=nas - LDAP_HOST=172.21.0.1 - LDAP_PORT=389 #- LDAP_METHOD=start_tls - LDAP_METHOD=plain - LDAP_UID=uid - LDAP_BIND_DN=cn=admin,dc=nas,dc=nas - LDAP_PASS=<LDAP_PASSWORD> #- LDAP_CA_FILE= # Default: false. #- LDAP_BLOCK_AUTO_CREATED_USERS=true - LDAP_BASE=ou=users,dc=nas,dc=nas - LDAP_ACTIVE_DIRECTORY=false #- LDAP_USER_FILTER=(givenName=) - LDAP_USER_FILTER=memberOf=cn=users_code,ou=groups,dc=nas,dc=nas - LDAP_ALLOW_USERNAME_OR_EMAIL_LOGIN=true gitlab-runner: container_name: gitlab-runner image: gitlab/gitlab-runner:latest networks: - gitlab volumes: - /tank0/apps/gitlab/gitlab-runner/data:/home/gitlab_ci_multi_runner/data - /tank0/apps/gitlab/gitlab-runner/config:/etc/gitlab-runner environment: - CI_SERVER_URL=https://gitlab.NAS.cloudns.cc restart: always # registry: # container_name: docker-registry # restart: always # image: registry:2.4.1 # volumes: # - /srv/gitlab/shared/registry:/registry # - /srv/certs:/certs # environment: # - REGISTRY_LOG_LEVEL=info # - REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY=/registry # - REGISTRY_AUTH_TOKEN_REALM=http://git.labs.lc:10080/jwt/auth # - REGISTRY_AUTH_TOKEN_SERVICE=container_registry # - REGISTRY_AUTH_TOKEN_ISSUER=gitlab-issuer # - REGISTRY_AUTH_TOKEN_ROOTCERTBUNDLE=/certs/registry-auth.crt # - REGISTRY_STORAGE_DELETE_ENABLED=true # - REGISTRY_HTTP_TLS_CERTIFICATE=/certs/registry.crt # - REGISTRY_HTTP_TLS_KEY=/certs/registry.key # ports: # - "0.0.0.0:5000:5000" # networks: # mynet: # aliases: # - registry.git.labs.lc # 

Source: https://habr.com/ru/post/fr418883/


All Articles