GitLab di NAS


Jika Anda memiliki NAS yang berfungsi dengan buruh pelabuhan , menginstal Gitlab tidak terlalu sulit.


Artikel ini hanyalah contoh yang bagus dalam siklus pro NAS. Dan itu menunjukkan betapa mudahnya memanipulasi layanan pada platform yang sudah selesai, bahkan dibangun secara mandiri, tanpa tim pengembangan, OS yang dirancang khusus dan toko aplikasi.


Kenapa gitlab?


Ada beberapa sistem untuk mengelola repositori Git.


Dari jumlah tersebut, cukup dewasa adalah ...
  • Bitbucket adalah sistem berbayar dan tertutup, meskipun populer di sektor korporasi. Ini mengasumsikan integrasi dengan produk Atlassian lain yang tidak saya gunakan. Diimplementasikan di Jawa. Bukan solusi yang sangat cocok, terutama mengingat kebijakan bahwa Anda harus membayar semuanya, bahkan untuk plugin (walaupun ada juga yang gratis).
  • Gogs adalah sistem yang mirip dengan Gitlab. Diimplementasikan saat Go. Ketika saya terakhir melihat kemampuannya, tidak ada kemungkinan peninjauan kode. Ya, dan secara umum ia tertinggal fungsi Gitlab, karena sistemnya jauh lebih baru:
    • Ringan
    • Antarmukanya mirip dengan Github.
    • Manajemen pengguna.
    • Pelacak bug.
    • Wiki
    • Tidak ada review kode.
    • Dukungan untuk kait git.
    • Akses melalui HTTPS / SSH.
    • Diimplementasikan saat Go.
    • Ada garpu Gitea .
    • Ada plugin LDAP.
  • Gitea - garpu Gogs. Memiliki apa yang hilang di Gogs:
    • Ulasan kode.
    • Penyimpanan untuk file besar.
    • Tag.
    • Pencarian yang disempurnakan.
    • Tugas kemajuan dengan kotak centang.
    • LDAP juga didukung.
  • Kallithea - fork dari RhodeCode.
    • Manajemen pengguna dan grup yang sangat canggih.
    • Sinkronisasi dengan repositori jarak jauh.
    • Pelacak bug.
    • Wiki
    • Ada ulasan kode.
    • Dukungan untuk kait git.
    • Akses melalui HTTPS / SSH.
    • Diimplementasikan dengan Python.
    • Terintegrasi dengan LDAP.
    • Ada gambar Docker.
  • Phacility adalah sistem dari Facebook. Fungsionalitasnya luas, tidak hanya ada ulasan, tetapi bahkan tugas dan sistem manajemen proyek. Saya tidak mempertimbangkannya secara rinci.
  • Gerrit - dirancang terutama untuk diskusi dan tinjauan kode, dengan beberapa fungsi untuk mengelola repositori.
  • Sr.ht - direkomendasikan dalam komentar . Ternyata, fungsinya cukup luas. Namun sistem ini masih dalam pengembangan aktif.

Saya bekerja dengan Gitlab sebelum itu, di samping itu, ia memiliki fungsi CI bawaan, yang akan berguna di masa depan. Sistem ini matang, ada banyak dokumentasi di dalamnya, dan selama bertahun-tahun pengembangan, Gitlab telah memperoleh banyak peluang. Karena itu, saya memilihnya.


Pengaturan umum


Saya menggunakan gambar Gitlab dari sameersbn .
Di docker-compose.yml (file ini juga terdaftar di akhir artikel), Anda perlu mengubah variabel berikut:


  • DB_PASS - kata sandi untuk basis data Gitlab. Harus cocok dengan kata sandi dalam wadah postgresql .
  • GITLAB_SECRETS_DB_KEY_BASE , GITLAB_SECRETS_SECRET_KEY_BASE , GITLAB_SECRETS_OTP_KEY_BASE - nilai-nilai dasar untuk menghasilkan kunci.
  • GITLAB_ROOT_EMAIL - email administrator.
  • GITLAB_ROOT_PASSWORD - kata sandi administrator default, yang nantinya dapat diubah dari antarmuka Web.
  • GITLAB_EMAIL , GITLAB_EMAIL_REPLY_TO , GITLAB_INCOMING_EMAIL_ADDRESS - alamat untuk peringatan email.
  • SMTP_HOST , SMTP_PORT , SMTP_USER , SMTP_PASS - Pengaturan SMTP untuk peringatan email.
  • IMAP_HOST , IMAP_PORT , IMAP_USER , IMAP_PASS - Gitlab tidak hanya dapat mengirim email, tetapi juga mengambil melalui IMAP. Mungkin baginya untuk membuat permintaan melalui email.

Penyiapan LDAP


Agar pengguna NAS dapat masuk ke Gitlab, mereka harus diberi server LDAP sebagai penyedia otorisasi.


Perhatikan bahwa ketika LDAP dikonfigurasikan, akan ada dua tab saat memasuki Gitlab: LDAP dan Standar.


Administrator akan dapat masuk hanya pada tab Standar, karena ia terdaftar secara lokal, dan pengguna hanya pada tab LDAP.


Registrasi administrator lokal berguna jika koneksi dengan server LDAP terputus.


Login Gitlab


Ini mudah dilakukan dengan mengatur variabel di file konfigurasi docker-compose:


  • LDAP_ENABLED=true - aktifkan otorisasi LDAP.
  • LDAP_HOST=172.21.0.1 - alamat server LDAP.
  • LDAP_PORT=389 - port.
  • LDAP_METHOD=plain metode akses LDAP_METHOD=plain tanpa enkripsi, karena Server LDAP di dalam jaringan host. Dimungkinkan juga untuk menggunakan StartTLS.
  • LDAP_UID=uid - bidang UID pengguna. Dalam kasus OpenLDAP, konfigurasi yang dikonfigurasikan adalah uid .
  • LDAP_BIND_DN=cn=admin,dc=nas,dc=nas - pengguna dan domain tempat Gitlab diotorisasi di server LDAP.
  • LDAP_PASS=<LDAP_PASSWORD> - kata sandi untuk pengguna LDAP, di mana Gitlab diotorisasi di server LDAP.
  • LDAP_BLOCK_AUTO_CREATED_USERS=false - pengguna LDAP akan muncul di Gitlab setelah login pertamanya. Jika true disetel di sini, itu akan diblokir. Administrator akan dapat membukanya.
  • LDAP_BASE=ou=users,dc=nas,dc=nas adalah alamat dasar tempat akun pengguna berada.
  • LDAP_USER_FILTER=memberOf=cn=users_code,ou=groups,dc=nas,dc=nas -filter. Ini menunjukkan bahwa saya hanya ingin menerima anggota grup users_code .
  • LDAP_ALLOW_USERNAME_OR_EMAIL_LOGIN=true - memungkinkan pengguna untuk masuk tidak hanya oleh UID, tetapi juga melalui email.

Perhatikan parameter LDAP_USER_FILTER . Dalam artikel sebelumnya , grup pengguna diperkenalkan di LDAP, dan opsi ini hanya memungkinkan pengguna dalam grup users_code untuk users_code .


Gitlab ci


Mengkonfigurasi CI telah dijelaskan secara rinci dalam artikel dan dokumentasi Gitlab . Tidak ada gunanya mengulangi.


Singkatnya, semua yang perlu Anda lakukan:




Pendaftaran dilakukan dengan perintah berikut:


 docker-compose exec gitlab-runner /entrypoint register 

Tentang agen apa yang ada di Gitlab, Anda dapat membaca di dokumentasi .


Saya tidak mengaktifkan Docker Registry, karena saya tidak membutuhkannya. Baca tentang apa itu dan mengapa Anda membutuhkannya di situs web Gitlab .


Di bawah spoiler adalah file konfigurasi untuk Gitlab, yang juga tersedia di repositori .


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


All Articles