GitLab no NAS


Se você tem um NAS funcionando com uma janela de encaixe , a instalação do Gitlab não é muito difícil.


Este artigo é apenas um bom exemplo no Pro Ciclo NAS. E mostra como é fácil manipular serviços, em uma plataforma já concluída, construída mesmo independentemente, sem uma equipe de desenvolvimento, sistemas operacionais e lojas de aplicativos especialmente adaptados.


Por que gitlab?


Existem vários sistemas para gerenciar repositórios Git.


Destes, maduros o suficiente são ...
  • Bitbucket é um sistema pago e fechado, embora popular no setor corporativo. Ele pressupõe a integração com outros produtos Atlassian que eu não uso. Implementado em Java. Não é uma solução particularmente adequada, especialmente considerando a política de que você precisa pagar tudo, mesmo para plugins (embora também existam outros gratuitos).
  • Gogs é um sistema semelhante ao Gitlab. Implementado em movimento. Quando eu olhei pela última vez para seus recursos, não havia possibilidade de revisão de código. Sim, e em geral fica atrás da funcionalidade do Gitlab, porque o sistema é muito mais recente:
    • Leve.
    • A interface é semelhante ao Github.
    • Gerenciamento de usuários.
    • Rastreador de bugs.
    • Wiki
    • Nenhuma revisão de código.
    • Suporte para ganchos git.
    • Acesso por HTTPS / SSH.
    • Implementado em movimento.
    • Há um garfo de Gitea .
    • Existe um plug-in LDAP.
  • Gitea - garfo dos Gogs. Tem o que está faltando em Gogs:
    • Revisão de código.
    • Armazenamento para arquivos grandes.
    • Tags.
    • Pesquisa refinada.
    • Progredir tarefas com caixas de seleção.
    • LDAP também é suportado.
  • Kallithea - fork do RhodeCode.
    • Gerenciamento muito avançado de usuários e grupos.
    • Sincronização com repositórios remotos.
    • Rastreador de bugs.
    • Wiki
    • Há uma revisão de código.
    • Suporte para ganchos git.
    • Acesso por HTTPS / SSH.
    • Implementado em Python.
    • Integra-se ao LDAP.
    • Há uma imagem do Docker.
  • Facilidade é um sistema do Facebook. A funcionalidade é ampla, não há apenas uma revisão, mas também um sistema de gerenciamento de tarefas e projetos. Não o considerei em detalhes.
  • Gerrit - projetado principalmente para discussão e revisão de código, com algumas funcionalidades para gerenciar repositórios.
  • Sr.ht - recomendado nos comentários . Aparentemente, a funcionalidade é bastante ampla. Mas o sistema ainda está em desenvolvimento ativo.

Eu trabalhei com o Gitlab antes disso, além disso, ele possui a funcionalidade integrada de IC, que será útil no futuro. O sistema está maduro, há muita documentação e, ao longo dos anos de desenvolvimento, o Gitlab ganhou muitas oportunidades. Portanto, eu escolhi.


Configurações gerais


Estou usando uma imagem do Gitlab de sameersbn .
No docker-compose.yml (o arquivo também está listado no final do artigo), você precisa alterar as seguintes variáveis:


  • DB_PASS - senha para o banco de dados Gitlab. Deve corresponder à senha no contêiner postgresql .
  • GITLAB_SECRETS_DB_KEY_BASE , GITLAB_SECRETS_SECRET_KEY_BASE , GITLAB_SECRETS_OTP_KEY_BASE - valores básicos para gerar chaves.
  • GITLAB_ROOT_EMAIL - email do administrador.
  • GITLAB_ROOT_PASSWORD - senha de administrador padrão, que pode ser alterada posteriormente na interface da Web.
  • GITLAB_EMAIL , GITLAB_EMAIL_REPLY_TO , GITLAB_INCOMING_EMAIL_ADDRESS - endereços para alertas por email.
  • SMTP_HOST , SMTP_PORT , SMTP_USER , SMTP_PASS - configurações de SMTP para alertas de email.
  • IMAP_HOST , IMAP_PORT , IMAP_USER , IMAP_PASS - O Gitlab pode não apenas enviar e-mails, mas também atender via IMAP. É possível que ele faça solicitações por e-mail.

Configuração LDAP


Para que os usuários do NAS possam efetuar login no Gitlab, eles precisam receber um servidor LDAP como um provedor de autorização.


Observe que, quando o LDAP estiver configurado, haverá duas guias ao entrar no Gitlab: LDAP e Standard.


O administrador poderá efetuar login apenas na guia Padrão, porque ele está registrado localmente e os usuários somente na guia LDAP.


O registro do administrador local é útil caso a conexão com o servidor LDAP seja perdida.


Login no Gitlab


Isso é feito facilmente, definindo variáveis ​​no arquivo de configuração do docker-compose:


  • LDAP_ENABLED=true - ative a autorização LDAP.
  • LDAP_HOST=172.21.0.1 - endereço do servidor LDAP.
  • LDAP_PORT=389 - porta.
  • LDAP_METHOD=plain - método de acesso sem criptografia, porque Servidor LDAP dentro da rede host. Também é possível usar o StartTLS.
  • LDAP_UID=uid - campo UID do usuário. No caso do OpenLDAP, a configuração que foi configurada é uid .
  • LDAP_BIND_DN=cn=admin,dc=nas,dc=nas - usuário e domínio sob o qual o Gitlab está autorizado no servidor LDAP.
  • LDAP_PASS=<LDAP_PASSWORD> - senha do usuário LDAP, sob a qual o Gitlab está autorizado no servidor LDAP.
  • LDAP_BLOCK_AUTO_CREATED_USERS=false - o usuário LDAP aparecerá no Gitlab após seu primeiro login. Se true definido aqui, ele será bloqueado. O administrador poderá desbloqueá-lo.
  • LDAP_BASE=ou=users,dc=nas,dc=nas é o endereço base no qual as contas de usuário estão localizadas.
  • LDAP_USER_FILTER=memberOf=cn=users_code,ou=groups,dc=nas,dc=nas - filter. Isso indica que eu quero receber apenas membros do grupo users_code .
  • LDAP_ALLOW_USERNAME_OR_EMAIL_LOGIN=true - permite que o usuário insira não apenas pelo UID, mas também por email.

Preste atenção ao parâmetro LDAP_USER_FILTER . Em um artigo anterior , os grupos de usuários foram introduzidos no LDAP, e essa opção permite apenas que os usuários do grupo users_code users_code .


Gitlab ci


A configuração do IC foi descrita em detalhes nos artigos e na documentação do Gitlab . Não faz sentido repetir.


Em resumo, tudo o que você precisa fazer:




O registro é realizado pelo seguinte comando:


 docker-compose exec gitlab-runner /entrypoint register 

Sobre o que os agentes estão no Gitlab, você pode ler a documentação .


Não ativei o Docker Registry, porque não preciso dele. Leia sobre o que é e por que você precisa no site do Gitlab .


Abaixo do spoiler, está o arquivo de configuração do Gitlab, que também está disponível no repositório .


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


All Articles