GitLab على NAS


إذا كان لديك NAS يعمل مع عامل إرساء ، فإن تثبيت Gitlab ليس صعبًا للغاية.


هذه المقالة هي مجرد مثال جيد في دورة NAS pro. ويوضح مدى سهولة التعامل مع الخدمات ، على منصة منتهية بالفعل ، حتى يتم بناؤها بشكل مستقل ، بدون فريق تطوير ، ونظام تشغيل ومتاجر تطبيقات مصممة خصيصًا.


لماذا جيت لاب؟


هناك العديد من الأنظمة لإدارة مستودعات Git.


من هذه ، ناضجة بما فيه الكفاية ...
  • Bitbucket هو نظام مدفوع ومغلق ، على الرغم من شعبيته في قطاع الشركات. يفترض التكامل مع منتجات Atlassian الأخرى التي لا أستخدمها. نفذت في جاوة. ليس حلاً مناسبًا بشكل خاص ، خاصة بالنظر إلى السياسة التي يجب عليك دفعها لكل شيء ، حتى بالنسبة للمكونات الإضافية (على الرغم من وجود برامج مجانية أيضًا).
  • Gogs هو نظام مشابه لـ Gitlab. نفذت على الذهاب. عندما نظرت آخر مرة إلى قدراتها ، لم يكن هناك أي إمكانية لمراجعة التعليمات البرمجية. نعم ، وبصفة عامة فإنه يتخلف عن وظيفة Gitlab ، لأنه النظام أحدث بكثير:
    • خفيف الوزن.
    • الواجهة مشابهة لـ Github.
    • إدارة المستخدم.
    • تعقب الأخطاء.
    • ويكي
    • لا مراجعة الكود.
    • دعم خطافات البوابة.
    • الوصول عبر HTTPS / SSH.
    • نفذت على الذهاب.
    • هناك شوكة من Gitea .
    • هناك مكون إضافي لـ LDAP.
  • Gitea - شوكة يأجوج. لديه ما هو مفقود في جوجس:
    • مراجعة الكود.
    • تخزين الملفات الكبيرة.
    • العلامات.
    • البحث المكرر.
    • مهام التقدم مع مربعات الاختيار.
    • LDAP مدعوم أيضًا.
  • كاليثيا - شوكة RhodeCode.
    • إدارة متقدمة للمستخدم والمجموعة.
    • التزامن مع المستودعات البعيدة.
    • تعقب الأخطاء.
    • ويكي
    • هناك مراجعة قانون.
    • دعم خطافات البوابة.
    • الوصول عبر HTTPS / SSH.
    • نفذت في بيثون.
    • يتكامل مع LDAP.
    • هناك صورة Docker.
  • Phacility هو نظام من Facebook. الوظيفة واسعة ، ليس هناك مراجعة فحسب ، بل حتى نظام إدارة المهام والمشاريع. لم أعتبره بالتفصيل.
  • Gerrit - تم تصميمه بشكل أساسي للمناقشة ومراجعة التعليمات البرمجية ، مع بعض الوظائف لإدارة المستودعات.
  • الأب - موصى به في التعليقات . يبدو أن الوظيفة واسعة للغاية. لكن النظام لا يزال قيد التطوير النشط.

لقد عملت مع Gitlab قبل ذلك ، بالإضافة إلى أنه يحتوي على وظيفة CI مدمجة ، والتي ستكون مفيدة في المستقبل. النظام ناضج ، وهناك الكثير من التوثيق عليه ، وعلى مدى سنوات التطوير ، اكتسبت Gitlab الكثير من الفرص. لذلك اخترت ذلك.


الإعدادات العامة


أنا أستخدم صورة Gitlab من sameersbn .
في docker-compose.yml (الملف مدرج أيضًا في نهاية المقالة) ، تحتاج إلى تغيير المتغيرات التالية:


  • DB_PASS - كلمة المرور لقاعدة بيانات Gitlab. يجب أن تتطابق مع كلمة المرور في حاوية postgresql .
  • GITLAB_SECRETS_DB_KEY_BASE ، GITLAB_SECRETS_SECRET_KEY_BASE ، GITLAB_SECRETS_OTP_KEY_BASE - القيم الأساسية لتوليد المفاتيح.
  • GITLAB_ROOT_EMAIL - البريد الإلكتروني للمشرف.
  • GITLAB_ROOT_PASSWORD - كلمة مرور المسؤول الافتراضية ، والتي يمكن تغييرها لاحقًا من واجهة الويب.
  • GITLAB_EMAIL ، GITLAB_EMAIL_REPLY_TO ، GITLAB_INCOMING_EMAIL_ADDRESS - عناوين تنبيهات البريد.
  • SMTP_HOST ، SMTP_PORT ، SMTP_USER ، SMTP_PASS - إعدادات SMTP لتنبيهات البريد.
  • IMAP_HOST ، IMAP_PORT ، IMAP_USER ، IMAP_PASS - لا يستطيع Gitlab إرسال البريد فقط ، بل يمكنه أيضًا الاستلام عبر IMAP. يمكن له أن يقدم طلبات عبر البريد الإلكتروني.

إعداد LDAP


لكي يتمكن مستخدمو NAS من تسجيل الدخول إلى Gitlab ، يلزم تزويدهم بخادم LDAP كموفر التفويض.


لاحظ أنه عند تهيئة LDAP ، ستكون هناك علامتا تبويب عند الدخول إلى Gitlab: LDAP و Standard.


سيتمكن المشرف من تسجيل الدخول فقط في علامة التبويب القياسية ، لأنه مسجل محليًا والمستخدمين فقط في علامة التبويب LDAP.


يُعد تسجيل المسؤول المحلي مفيدًا في حالة فقد الاتصال بخادم LDAP.


تسجيل الدخول إلى Gitlab


يتم ذلك بسهولة عن طريق تعيين المتغيرات في ملف تكوين إنشاء عامل الميناء:


  • LDAP_ENABLED=true - تمكين تفويض LDAP.
  • LDAP_HOST=172.21.0.1 - عنوان خادم LDAP.
  • LDAP_PORT=389 - منفذ.
  • LDAP_METHOD=plain طريقة الوصول LDAP_METHOD=plain بدون تشفير ، لأن خادم LDAP داخل الشبكة المضيفة. من الممكن أيضًا استخدام StartTLS.
  • LDAP_UID=uid - حقل UID للمستخدم. في حالة OpenLDAP ، يكون التكوين الذي تم تكوينه هو uid .
  • LDAP_BIND_DN=cn=admin,dc=nas,dc=nas - المستخدم والمجال الذي يتم بموجبه ترخيص Gitlab على خادم LDAP.
  • LDAP_PASS=<LDAP_PASSWORD> - كلمة المرور لمستخدم LDAP ، والتي يتم بموجبها ترخيص Gitlab على خادم LDAP.
  • LDAP_BLOCK_AUTO_CREATED_USERS=false - سيظهر مستخدم LDAP في Gitlab بعد تسجيل دخوله الأول. إذا true تعيين true هنا ، فسيتم حظره. سيتمكن المسؤول من فتحه.
  • LDAP_BASE=ou=users,dc=nas,dc=nas هو العنوان الأساسي الذي توجد عليه حسابات المستخدمين.
  • LDAP_USER_FILTER=memberOf=cn=users_code,ou=groups,dc=nas,dc=nas - filter. يشير هذا إلى أنني أريد تلقي أعضاء فقط في مجموعة users_code .
  • LDAP_ALLOW_USERNAME_OR_EMAIL_LOGIN=true - اسمح للمستخدم بالدخول ليس فقط عن طريق UID ، ولكن أيضًا عبر البريد الإلكتروني.

انتبه إلى معلمة LDAP_USER_FILTER . في مقالة سابقة ، تم تقديم مجموعات المستخدمين في LDAP ، وهذا الخيار يسمح فقط للمستخدمين في مجموعة المستخدمين_ رمز users_code إلى users_code .


جيتلاب سي


تم وصف تكوين CI بالتفصيل في مقالات ووثائق Gitlab . لا فائدة من التكرار.


باختصار ، كل ما عليك القيام به:




يتم التسجيل عن طريق الأمر التالي:


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


All Articles