
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.

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 #