
Wenn Sie ein funktionierendes NAS mit einem Docker haben , ist die Installation von Gitlab nicht sehr schwierig.
Dieser Artikel ist nur ein gutes Beispiel im NAS Pro-Zyklus. Und es zeigt, wie einfach es ist, Dienste auf einer bereits fertiggestellten Plattform zu manipulieren, die selbstständig erstellt wurde, ohne ein Entwicklungsteam, speziell zugeschnittene Betriebssystem- und Anwendungsspeicher.
Warum Gitlab?
Es gibt verschiedene Systeme zum Verwalten von Git-Repositorys.
Von diesen sind reif genug ...- Bitbucket ist ein kostenpflichtiges und geschlossenes System, obwohl es im Unternehmenssektor beliebt ist. Es setzt die Integration mit anderen Atlassian-Produkten voraus, die ich nicht verwende. In Java implementiert. Keine besonders geeignete Lösung, insbesondere angesichts der Tatsache, dass Sie alles bezahlen müssen, auch für Plugins (obwohl es auch kostenlose gibt).
- Gogs ist ein System ähnlich wie Gitlab. On Go implementiert. Als ich mir das letzte Mal die Funktionen angesehen habe, gab es keine Möglichkeit zur Codeüberprüfung. Ja, und im Allgemeinen bleibt es hinter der Funktionalität von Gitlab zurück, weil Das System ist viel neuer:
- Leicht.
- Die Schnittstelle ähnelt Github.
- Benutzerverwaltung.
- Bug Tracker.
- Wiki
- Keine Codeüberprüfung.
- Unterstützung für Git-Haken.
- Zugriff über HTTPS / SSH.
- On Go implementiert.
- Es gibt eine Gabelung von Gitea .
- Es gibt ein LDAP-Plugin.
- Gitea - Gabel der Gogs. Hat was in Gogs fehlt:
- Codeüberprüfung.
- Speicher für große Dateien.
- Tags.
- Verfeinerte Suche.
- Fortschrittsaufgaben mit Kontrollkästchen.
- LDAP wird ebenfalls unterstützt.
- Kallithea - Gabel von RhodeCode.
- Sehr fortschrittliche Benutzer- und Gruppenverwaltung.
- Synchronisation mit Remote-Repositorys.
- Bug Tracker.
- Wiki
- Es gibt eine Codeüberprüfung.
- Unterstützung für Git-Haken.
- Zugriff über HTTPS / SSH.
- In Python implementiert.
- Integriert in LDAP.
- Es gibt ein Docker-Image.
- Phacility ist ein System von Facebook. Die Funktionalität ist breit, es gibt nicht nur eine Überprüfung, sondern auch ein Aufgaben- und Projektmanagementsystem. Ich habe es nicht im Detail betrachtet.
- Gerrit - wurde hauptsächlich für Diskussionen und Codeüberprüfungen entwickelt und bietet einige Funktionen zum Verwalten von Repositorys.
- Sr.ht - in den Kommentaren empfohlen. Anscheinend ist die Funktionalität ziemlich breit. Das System befindet sich jedoch noch in der aktiven Entwicklung.
Ich habe zuvor mit Gitlab gearbeitet, außerdem verfügt es über eine integrierte CI-Funktionalität, die sich in Zukunft als nützlich erweisen wird. Das System ist ausgereift, es gibt viele Dokumentationen und im Laufe der Jahre der Entwicklung hat Gitlab viele Möglichkeiten gewonnen. Deshalb habe ich es gewählt.
Allgemeine Einstellungen
Ich verwende ein Gitlab-Bild von sameersbn .
In docker-compose.yml
(die Datei befindet sich auch am Ende des Artikels) müssen die folgenden Variablen geändert werden:
DB_PASS
- Passwort für die Gitlab-Datenbank. Muss mit dem Passwort im postgresql
Container postgresql
.GITLAB_SECRETS_DB_KEY_BASE
, GITLAB_SECRETS_SECRET_KEY_BASE
, GITLAB_SECRETS_OTP_KEY_BASE
- Grundwerte zum Generieren von Schlüsseln.GITLAB_ROOT_EMAIL
- Administrator-E-Mail.GITLAB_ROOT_PASSWORD
- Standardadministratorkennwort, das später über die Weboberfläche geändert werden kann.GITLAB_EMAIL
, GITLAB_EMAIL_REPLY_TO
, GITLAB_INCOMING_EMAIL_ADDRESS
- Adressen für E-Mail-Benachrichtigungen.SMTP_HOST
, SMTP_PORT
, SMTP_USER
, SMTP_PASS
- SMTP-Einstellungen für E-Mail-Benachrichtigungen.IMAP_HOST
, IMAP_PORT
, IMAP_USER
, IMAP_PASS
- Gitlab kann nicht nur E-Mails senden, sondern auch über IMAP abholen. Es ist ihm möglich, Anfragen per E-Mail zu stellen.
LDAP-Setup
Damit sich NAS-Benutzer bei Gitlab anmelden können, muss ihnen ein LDAP-Server als Autorisierungsanbieter zur Verfügung gestellt werden.
Beachten Sie, dass bei der Konfiguration von LDAP bei der Eingabe von Gitlab zwei Registerkarten angezeigt werden: LDAP und Standard.
Der Administrator kann sich nur auf der Registerkarte Standard anmelden, da er lokal registriert ist, und Benutzer nur auf der Registerkarte LDAP.
Die Registrierung eines lokalen Administrators ist nützlich, wenn die Verbindung zum LDAP-Server unterbrochen wird.

Dies ist einfach durch Festlegen von Variablen in der Docker-Compose-Konfigurationsdatei möglich:
LDAP_ENABLED=true
- LDAP-Autorisierung aktivieren.LDAP_HOST=172.21.0.1
- Adresse des LDAP-Servers.LDAP_PORT=389
- Port.LDAP_METHOD=plain
Zugriffsmethode ohne Verschlüsselung, weil LDAP-Server im Host-Netzwerk. Es ist auch möglich, StartTLS zu verwenden.LDAP_UID=uid
- Benutzer-UID-Feld. Im Fall von OpenLDAP ist die konfigurierte Konfiguration uid
.LDAP_BIND_DN=cn=admin,dc=nas,dc=nas
- Benutzer und Domäne, unter der Gitlab auf dem LDAP-Server autorisiert ist.LDAP_PASS=<LDAP_PASSWORD>
- Kennwort für den LDAP-Benutzer, unter dem Gitlab auf dem LDAP-Server autorisiert ist.LDAP_BLOCK_AUTO_CREATED_USERS=false
- Der LDAP-Benutzer wird nach seiner ersten Anmeldung in Gitlab angezeigt. Wenn hier true
gesetzt ist, wird es blockiert. Der Administrator kann es entsperren.LDAP_BASE=ou=users,dc=nas,dc=nas
ist die Basisadresse, unter der sich Benutzerkonten befinden.LDAP_USER_FILTER=memberOf=cn=users_code,ou=groups,dc=nas,dc=nas
- Filter. Dies zeigt an, dass ich nur Mitglieder der Gruppe users_code
empfangen users_code
.LDAP_ALLOW_USERNAME_OR_EMAIL_LOGIN=true
- LDAP_ALLOW_USERNAME_OR_EMAIL_LOGIN=true
dem Benutzer die Eingabe nicht nur per UID, sondern auch per E-Mail.
LDAP_USER_FILTER
Parameter LDAP_USER_FILTER
. In einem früheren Artikel wurden Benutzergruppen in LDAP eingeführt. Mit dieser Option können nur Benutzer in der Gruppe users_code auf users_code
.
Gitlab ci
Die Konfiguration von CI wurde in den Gitlab- Artikeln und in der Dokumentation ausführlich beschrieben. Es macht keinen Sinn, es zu wiederholen.
Kurz gesagt, alles was Sie tun müssen:
- Gehen Sie zur Seite der Build-Agenten: https://git.NAS.cloudns.cc/admin/runners und kopieren Sie:
- Registrieren Sie einen Agenten. Er wird während des Registrierungsprozesses nach der Adresse und dem Token fragen.
Die Registrierung erfolgt mit folgendem Befehl:
docker-compose exec gitlab-runner /entrypoint register
Informationen zu den Agenten in Gitlab finden Sie in der Dokumentation .
Ich habe die Docker-Registrierung nicht aktiviert, da ich sie nicht benötige. Lesen Sie auf der Gitlab-Website, was es ist und warum Sie es brauchen.
Unter dem Spoiler befindet sich die Konfigurationsdatei für Gitlab, die auch im Repository verfügbar ist .
/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 #