GitLab en NAS


Si tiene un NAS que funciona con una ventana acoplable , instalar Gitlab no es muy difícil.


Este artículo es solo un buen ejemplo en el ciclo NAS Pro. Y muestra lo fácil que es manipular los servicios en una plataforma ya terminada, incluso construida de forma independiente, sin un equipo de desarrollo, un SO especialmente diseñado y tiendas de aplicaciones.


¿Por qué gitlab?


Existen varios sistemas para administrar los repositorios de Git.


De estos, lo suficientemente maduros son ...
  • Bitbucket es un sistema pagado y cerrado, aunque popular en el sector corporativo. Asume la integración con otros productos Atlassian que no uso. Implementado en Java. No es una solución particularmente adecuada, especialmente teniendo en cuenta la política de que tiene que pagar todo, incluso los complementos (aunque también hay gratuitos).
  • Gogs es un sistema similar a Gitlab. Implementado en Go. La última vez que examiné sus capacidades, no había posibilidad de revisión de código. Sí, y en general va a la zaga de la funcionalidad de Gitlab, porque El sistema es mucho más nuevo:
    • Ligero
    • La interfaz es similar a Github.
    • Gestión de usuarios.
    • Rastreador de errores.
    • Wiki
    • Sin revisión de código.
    • Soporte para ganchos git.
    • Acceso a través de HTTPS / SSH.
    • Implementado en Go.
    • Hay un tenedor de Gitea .
    • Hay un complemento LDAP.
  • Gitea - tenedor de los Gogs. Tiene lo que falta en Gogs:
    • Revisión de código.
    • Almacenamiento para archivos grandes.
    • Etiquetas
    • Búsqueda refinada.
    • Progreso de tareas con casillas de verificación.
    • LDAP también es compatible.
  • Kallithea - tenedor de RhodeCode.
    • Gestión muy avanzada de usuarios y grupos.
    • Sincronización con repositorios remotos.
    • Rastreador de errores.
    • Wiki
    • Hay una revisión de código.
    • Soporte para ganchos git.
    • Acceso a través de HTTPS / SSH.
    • Implementado en Python.
    • Se integra con LDAP.
    • Hay una imagen de Docker.
  • Phacility es un sistema de Facebook. La funcionalidad es amplia, no solo hay una revisión, sino incluso un sistema de gestión de tareas y proyectos. No lo consideré en detalle.
  • Gerrit : diseñado principalmente para discusión y revisión de código, con algunas funcionalidades para administrar repositorios.
  • Sr.ht : recomendado en los comentarios . Aparentemente, la funcionalidad es bastante amplia. Pero el sistema todavía está en desarrollo activo.

Trabajé con Gitlab antes de eso, además, tiene una funcionalidad CI integrada, que será útil en el futuro. El sistema es maduro, hay mucha documentación y, a lo largo de los años de desarrollo, Gitlab ha ganado muchas oportunidades. Por lo tanto, lo elegí.


Configuraciones generales


Estoy usando una imagen de Gitlab de sameersbn .
En docker-compose.yml (el archivo también aparece al final del artículo), debe cambiar las siguientes variables:


  • DB_PASS : contraseña para la base de datos de Gitlab. Debe coincidir con la contraseña en el contenedor postgresql .
  • GITLAB_SECRETS_DB_KEY_BASE , GITLAB_SECRETS_SECRET_KEY_BASE , GITLAB_SECRETS_OTP_KEY_BASE : valores básicos para generar claves.
  • GITLAB_ROOT_EMAIL : correo electrónico del administrador.
  • GITLAB_ROOT_PASSWORD : contraseña de administrador predeterminada, que luego se puede cambiar desde la interfaz web.
  • GITLAB_EMAIL , GITLAB_EMAIL_REPLY_TO , GITLAB_INCOMING_EMAIL_ADDRESS : direcciones para alertas de correo.
  • SMTP_HOST , SMTP_PORT , SMTP_USER , SMTP_PASS : configuración de SMTP para alertas de correo.
  • IMAP_HOST , IMAP_PORT , IMAP_USER , IMAP_PASS : Gitlab no solo puede enviar correo, sino también recogerlo a través de IMAP. Es posible que él haga solicitudes por correo electrónico.

Configuración LDAP


Para que los usuarios de NAS puedan iniciar sesión en Gitlab, se les debe proporcionar un servidor LDAP como proveedor de autorización.


Tenga en cuenta que cuando LDAP está configurado, habrá dos pestañas al ingresar a Gitlab: LDAP y Estándar.


El administrador podrá iniciar sesión solo en la pestaña Estándar, porque está registrado localmente, y los usuarios solo en la pestaña LDAP.


El registro del administrador local es útil en caso de que se pierda la conexión con el servidor LDAP.


Inicio de sesión de Gitlab


Esto se hace fácilmente configurando variables en el archivo de configuración docker-compose:


  • LDAP_ENABLED=true : habilita la autorización LDAP.
  • LDAP_HOST=172.21.0.1 - dirección del servidor LDAP.
  • LDAP_PORT=389 - puerto.
  • LDAP_METHOD=plain - método de acceso sin cifrado, porque Servidor LDAP dentro de la red host. También es posible usar StartTLS.
  • LDAP_UID=uid : campo UID del usuario. En el caso de OpenLDAP, la configuración que se configuró es uid .
  • LDAP_BIND_DN=cn=admin,dc=nas,dc=nas - usuario y dominio bajo el cual Gitlab está autorizado en el servidor LDAP.
  • LDAP_PASS=<LDAP_PASSWORD> : contraseña para el usuario LDAP, bajo la cual Gitlab está autorizado en el servidor LDAP.
  • LDAP_BLOCK_AUTO_CREATED_USERS=false : el usuario LDAP aparecerá en Gitlab después de su primer inicio de sesión. Si true establece aquí, se bloqueará. El administrador podrá desbloquearlo.
  • LDAP_BASE=ou=users,dc=nas,dc=nas es la dirección base en la que se encuentran las cuentas de usuario.
  • LDAP_USER_FILTER=memberOf=cn=users_code,ou=groups,dc=nas,dc=nas - filter. Esto indica que quiero recibir solo miembros del grupo users_code .
  • LDAP_ALLOW_USERNAME_OR_EMAIL_LOGIN=true : permite que el usuario ingrese no solo por UID, sino también por correo electrónico.

Preste atención al parámetro LDAP_USER_FILTER . En un artículo anterior , se introdujeron grupos de usuarios en LDAP, y esta opción solo permite a los usuarios del grupo users_code users_code .


Gitlab ci


La configuración de CI se ha descrito en detalle en los artículos y la documentación de Gitlab . No tiene sentido repetir.


En resumen, todo lo que necesitas hacer:




El registro se realiza mediante el siguiente comando:


 docker-compose exec gitlab-runner /entrypoint register 

Sobre qué agentes hay en Gitlab, puede leer la documentación .


No habilité Docker Registry porque no lo necesito. Lea sobre qué es y por qué lo necesita en el sitio web de Gitlab .


Debajo del spoiler está el archivo de configuración de Gitlab, que también está disponible en el repositorio .


/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/es418883/


All Articles