NAS上的GitLab


如果您的NAS可以使用 docker运行,则安装Gitlab并不是很困难。


本文只是NAS专业版中的一个很好的例子。 它显示了在没有开发团队,特别定制的OS和应用程序商店的情况下,在已经完成的平台上操作服务(甚至是独立构建)是多么容易。


为什么选择gitlab?


有几种用于管理Git存储库的系统。


其中,足够成熟的...
  • Bitbucket是一种收费的封闭式系统,尽管在企业界很流行。 它假定与我不使用的其他Atlassian产品集成。 用Java实现。 这不是一个特别合适的解决方案,特别是考虑到您必须支付所有费用的政策,即使是对于插件(尽管也有免费的)。
  • Gogs是一个类似于Gitlab的系统。 在Go上实施。 当我上次查看它的功能时,不可能进行代码审查。 是的,通常它落后于Gitlab的功能,因为 该系统更新得多:
    • 轻巧。
    • 界面类似于Github。
    • 用户管理。
    • 错误跟踪器。
    • 维基
    • 没有代码审查。
    • 支持git hooks。
    • 通过HTTPS / SSH访问。
    • 在Go上实施。
    • 有Gitea的叉子
    • 有一个LDAP插件。
  • Gitea -Gogs的叉子。 在Gogs中缺少什么:
    • 代码审查。
    • 大文件存储。
    • 标签。
    • 精致的搜索。
    • 使用复选框进度任务。
    • 还支持LDAP。
  • Kallithea -RhodeCode的分支。
    • 非常先进的用户和组管理。
    • 与远程存储库同步。
    • 错误跟踪器。
    • 维基
    • 有一个代码审查。
    • 支持git hooks。
    • 通过HTTPS / SSH访问。
    • 用Python实现。
    • 与LDAP集成。
    • 有一个Docker映像。
  • Phacility是Facebook的系统。 功能广泛,不仅有审查,而且还有任务和项目管理系统。 我没有详细考虑它。
  • Gerrit-主要用于讨论和代码审查,具有一些用于管理存储库的功能。
  • Sr.ht- 在评论中推荐。 显然,功能非常广泛。 但是该系统仍在积极开发中。

在此之前,我曾与Gitlab合作,它具有内置的CI功能,将来会派上用场。 该系统很成熟,上面有很多文档,并且在多年来的开发中,Gitlab获得了很多机会。 因此,我选择了它。


常规设置


我正在使用来自sameersbn的Gitlab图像
docker-compose.yml (本文结尾处也提供了该文件)中,必须更改以下变量:


  • DB_PASS -Gitlab数据库的密码。 必须与postgresql容器中的密码匹配。
  • GITLAB_SECRETS_DB_KEY_BASEGITLAB_SECRETS_SECRET_KEY_BASEGITLAB_SECRETS_OTP_KEY_BASE用于生成密钥的基本值。
  • GITLAB_ROOT_EMAIL管理员电子邮件。
  • GITLAB_ROOT_PASSWORD默认管理员密码,以后可以从Web界面更改。
  • GITLAB_EMAILGITLAB_EMAIL_REPLY_TOGITLAB_INCOMING_EMAIL_ADDRESS邮件警报的地址。
  • SMTP_HOSTSMTP_PORTSMTP_USERSMTP_PASS邮件警报的SMTP设置。
  • IMAP_HOSTIMAP_PORTIMAP_USERIMAP_PASS -Gitlab不仅可以发送邮件,还可以通过IMAP提取邮件。 他可以通过电子邮件提出请求。

LDAP设定


为了使NAS用户能够登录Gitlab,需要为他们提供LDAP服务器作为授权提供者。


请注意,配置LDAP后,进入Gitlab时将有两个选项卡:LDAP和Standard。


管理员将只能在“标准”选项卡上登录,因为他是在本地注册的,而用户只能在“ LDAP”选项卡上登录。


如果与LDAP服务器的连接丢失,则本地管理员注册非常有用。


Gitlab登录


这可以通过在docker-compose配置文件中设置变量来轻松完成:


  • LDAP_ENABLED=true启用LDAP授权。
  • LDAP_HOST=172.21.0.1 -LDAP服务器的地址。
  • LDAP_PORT=389端口。
  • LDAP_METHOD=plain -不加密的访问方法,因为 主机网络中的LDAP服务器。 也可以使用StartTLS。
  • LDAP_UID=uid用户UID字段。 对于OpenLDAP,配置的配置为uid
  • LDAP_BIND_DN=cn=admin,dc=nas,dc=nas nas-在LDAP服务器上授权Gitlab的用户和域。
  • LDAP_PASS=<LDAP_PASSWORD>用户的密码,根据该密码在LDAP服务器上授权Gitlab。
  • LDAP_BLOCK_AUTO_CREATED_USERS=false -LDAP用户在首次登录后将出现在Gitlab中。 如果在此处设置为true ,它将被阻止。 管理员将能够解锁它。
  • LDAP_BASE=ou=users,dc=nas,dc=nas是用户帐户所在的基地址。
  • LDAP_USER_FILTER=memberOf=cn=users_code,ou=groups,dc=nas,dc=nas过滤器。 这表明我只希望接收users_code组的成员。
  • LDAP_ALLOW_USERNAME_OR_EMAIL_LOGIN=true允许用户不仅通过UID输入,还可以通过电子邮件输入。

请注意LDAP_USER_FILTER参数。 在上一篇文章中 ,LDAP中引入了用户组,该选项仅允许users_code组中的用户users_code


吉它实验室


Gitlab 文章文档中已详细介绍了配置CI。 重复是没有意义的。


简而言之,您需要做的所有事情:




通过以下命令执行注册:


 docker-compose exec gitlab-runner /entrypoint register 

关于Gitlab中的代理,您可以阅读文档


我没有启用Docker Registry,因为我不需要它。 在Gitlab网站上了解它是什么以及为什么需要它。


扰流板下方是Gitlab的配置文件,该文件也可在存储库中找到


/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/zh-CN418883/


All Articles