Gitlab Community Edition (Gitlab CE) adalah salah satu tool open source untuk git repository hosting, code review, issue tracking, dan continous integration yang dapat kita pasang/install pada server kita sendiri secara bebas. Sebenarnya sudah ada pemaketan Gitlab pada OBS di openSUSE tetapi cara mengkonfigurasinya tidaklah terlalu mudah. Gitlab merupakan suatu tools yang cukup kompleks di mana dalam pemasangannya membutuhkan Ruby, sidekiq, nginx, postgresql, redis dan unicorn.
Cara termudah untuk memasang Gitlab pada server mungkin adalah dengan menggunakan image docker dari docker-hub. Tetapi di sini kita akan membahas pemasangan Omnibus Gitlab yang juga sudah menyediakan pemaketan untuk openSUSE. Omnibus Gitlab akan membentuk suatu lingkungan kerja (environment) tersendiri di mana akan secara otomatis memasang komponen-komponen yang dibutuhkan oleh Gitlab, termasuk semua yang sudah disebutkan di atas. Bagi anda yang pernah melakukan pemrograman dengan Ruby atau Python pasti memahami bahwa menjalankan aplikasi Ruby atau Python termudah adalah dengan menggunakan environment tersendiri. Omnibus Gitlab telah memaketkan semua dependensi dan lingkungan Ruby yang dibutuhkan untuk memasang dan menjalankan Gitlab CE. Perlu diketahui bahwa YaST dikembangkan menggunakan Ruby, python, dan C++ tetapi hampir semua fungsinya dipanggil lewat Ruby melalui yast-ruby-bindings. Hindari mencoba melakukan instalasi manual terhadap rubygem (kalau anda tidak mengerti apa yang anda lakukan) karena dapat mempengaruhi fungsionalitas dari YaST 🙂
Berikut adalah langkah-langkahnya yang sudah dicoba pada openSUSE Leap 42.2.
Pastikan anda sudah menginstall paket curl, openssh, dan postfix (instalasi standar minimal server harusnya sudah mengikutkan semua paket itu). Selanjutnya pastikan openssh dan postfix dipanggil saat boot, harusnya sudah tapi jika tidak anda dapat menjankan perintah
1 2 3 4 | systemctl enable postfix.service systemctl start postfix.service systemctl enable sshd.service systemctl start sshd.service |
Pastikan bahwa port tcp 22, 25, 80, 443, 465, 587 dibuka di SuSEfirewall2. Periksa pengaturan SuSEfirewall2 anda pada file /etc/sysconfig/SuSEfirewall2.
Download paket gitlab-ce dari repository gitlab untuk openSUSE 42.1. Saat tulisan ini dibuat baru ada gitlab-ce utk openSUSE 42.1 tapi saya sudah menggunakannya di 42.2 dan tetap berfungsi dengan baik
1 2 | zypper ar 'https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/config_file.repo?os=opensuse&dist=42.1&source=script' zypper in gitlab-ce |
atau dengan mengikuti cara di gitlab.com
1 2 | curl -s https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash zypper install gitlab-ce-8.16.2-ce.0.sles42.x86_64 |
File konfigurasi gitlab terdapat pada /etc/gitlab/gitlab.rb . Jika server anda hanya menjalankan service gitlab maka proses pemasangan dengan cara di atas sudah cukup. Tetapi jika anda menggunakan server anda untuk beberapa web service maka penggunaan nginx external sangat dibutuhkan. Juga jika anda ingin lebih fleksibel dalam mengelola data, maka penggunaan database postgresql external juga disarankan.
Jika penggunaan nginx bawaan dari paket omnibus gitlab sudah cukup maka anda tidak perlu melakukan konfigurasi lain, anda cukup memastikan bahwa pada file /etc/gitlab/gitlab.rb nama server anda sudah dikonfigur dengan benar, misalnya
1 2 3 4 5 6 7 8 9 10 | ## Configuration options with # in front are not active and they were ## valid at install time. Updating the package does not update this file ## automatically. ## Latest options listed at: ## https://gitlab.com/gitlab-org/omnibus-gitlab/blob/master/files/gitlab-config-template/gitlab.rb.template ## URL on which GitLab will be reachable. ## For more details on configuring external_url see: ## https://docs.gitlab.com/omnibus/settings/configuration.html#configuring-the-external-url-for-gitlab external_url 'http://gitlab.opensuse.id' |
selanjutnya jalankan perintah
gitlab-ctl reconfigure |
buka browser anda dan arahkan ke url sesuai url server gitlab anda.
Untuk penggunaan nginx eksternal akan kita bahas pada bagian selanjutnya. Sedangkan untuk menggunakan postgresql eksternal silakan anda mencobanya sendiri dengan menggunakan panduan dari gitlab
Menggunakan nginx eksternal untuk Omnibus Gitlab
Jika server anda juga digunakan untuk virtual host lain maka penggunaan nginx (atau web server lain misalnya apache) eksternal menjadi kebutuhan. Hal ini dapat dilakukan dengan sedikit memodifikasi /etc/gitlab/gitlab.rb dan membuat vhost untuk gitlab melalui nginx. Berikut langkah-langkahnya.
Pastikan anda menginstall nginx.
1 2 3 | zypper in nginx systemctl enable nginx.service systemctl start nginx.service |
Jika anda menggunakan https, catatlah lokasi anda menyimpan sertifikat dan key karena nanti akan dipanggil melalui konfigurasi nginx. Misalkan anda membuat vhost untuk url https://gitlab.opensuse.id maka anda harus membuat sebuah konfigurasi di /etc/nginx/vhost.d/gitlab.opensuse.id.conf. Bukalah editor dan buatlah sebuah konfigurasi seperti contoh di bawah (silakan disesuaikan dengan implementasi anda)
upstream gitlab-workhorse { server unix:/var/opt/gitlab/gitlab-workhorse/socket fail_timeout=0; } map $http_upgrade $connection_upgrade_gitlab_ssl { default upgrade; '' close; } server { listen *:80; server_name gitlab.opensuse.id; server_tokens off; return 301 https://$host$request_uri; access_log /var/log/nginx/gitlab_opensuse_id_access.log; error_log /var/log/nginx/gitlab_opensuse_id_error.log; } server { listen *:443 ssl; server_name gitlab.opensuse.id; server_tokens off; access_log /var/log/nginx/gitlab_opensuse_id_access.log; error_log /var/log/nginx/gitlab_opensuse_id_error.log; ssl on; ssl_certificate /etc/certbot/live/gitlab.opensuse.id/fullchain.pem; ssl_certificate_key /etc/certbot/live/gitlab.opensuse.id/privkey.pem; ssl_dhparam /etc/ssl/dhparams.pem; ssl_session_timeout 5m; ssl_session_cache shared:SSL:10m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA'; add_header Strict-Transport-Security "max-age=31536000"; location / { client_max_body_size 0; gzip off; proxy_read_timeout 300; proxy_connect_timeout 300; proxy_redirect off; proxy_http_version 1.1; proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Ssl on; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade_gitlab_ssl; proxy_pass http://gitlab-workhorse; } error_page 404 /404.html; error_page 422 /422.html; error_page 500 /500.html; error_page 502 /502.html; error_page 503 /503.html; location ~ ^/(404|422|500|502|503)\.html$ { root /opt/gitlab/embedded/service/gitlab-rails/public; internal; } } |
Selanjutnya bukalah file /etc/gitlab/gitlab.rb dan lakukan beberapa penyesuaian konfigurasi sebagai berikut:
Sesuaikan url anda ke https
## URL on which GitLab will be reachable. ## For more details on configuring external_url see: ## https://docs.gitlab.com/omnibus/settings/configuration.html#configuring-the-external-url-for-gitlab external_url 'https://gitlab.opensuse.id' nginx['redirect_http_to_https'] = true |
Pada bagian gitlab.yml configuration, isilah ip address trusted_proxies dengan ip address server di mana nginx berjalan (tuliskan setiap ip address dari mesin tersebut)
############################ # gitlab.yml configuration # ############################ .... gitlab_rails['trusted_proxies'] = [ '139.0.6.173' ] |
Pada bagian Gitlab Web server masukkan nama user yang menjalankan nginx. Pada openSUSE nginx dijalankan oleh user nginx
##################### # GitLab Web server # ##################### ... web_server['external_users'] = ['nginx'] |
Catatan:
instalasi paket gitlab dilakukan ke direcktori /opt/gitlab dan /var/opt/gitlab yang ownershipnya dipegang oleh root:root. Menurut dokumentasi gitlab, instalasi gitlab akan membuat group gitlab-www untuk menjalankan webserver bawaan (nginx). Jika ada masalah dalam pengaksesan ketika menggunakan nginx eksternal kemungkinan besar masalahnya adalah dalam ownership atau group. Karena itu sebaiknya user nginx dan root dimasukkan ke dalam group gitlab-www. Jalankan pada konsole/terminal perintah berikut utk menambahkan user nginx dan root ke dalam group gitlab-www
usermod -aG gitlab-www nginx usermod -aG gitlab-www root |
Kembali ke file /etc/gitlab/gitlab.rb, carilah bagian Gitlab Nginx dan pastikan nginx bawaan tidak digunakan (false) serta jangan lupa untuk mensetup XFF untuk header nginx agar tidak bermasalah dengan https. Bukalah editor anda dan lakukan perubahan sebagai berikut
################ # GitLab Nginx # ################ ... nginx['enable'] = false ... nginx['proxy_set_headers'] = { "Host" => "$http_host", "X-Real-IP" => "$remote_addr", "X-Forwarded-For" => "$proxy_add_x_forwarded_for", "X-Forwarded-Proto" => "https", "X-Forwarded-Ssl" => "on", "Upgrade" => "$http_upgrade", "Connection" => "$connection_upgrade" } |
Selanjutnya tinggal merestart service nginx dan gitlab. Berdoalah semoga semua lancar-lancar saja :-).
gitlab-ctl reconfigure gitlab-ctl restart systemctl restart nginx.service |
Bukalah browser dan arahkan ke alamat web gitlab server anda. Saat pertama kali diakses maka gitlab memberikan default user=root dengan password=password. Segera login dan gantilah password tersebut.
Semoga tulisan ini bermanfaat.
Tambahan:
Sekiranya anda melakukan update terhadap paket gitlab, misalnya anda melakukan zypper up dan gitlab ikut terupdate. Bisa jadi gitlab tidak mau direstart. Jangan panik, coba lakukan langkah di bawah ini. Gitlab harusnya beroperasi normal kembali:-)
1 2 3 4 5 6 7 8 9 10 | sudo ln -sf \ /opt/gitlab/bin/gitlab-ctl \ /opt/gitlab/bin/gitlab-rake \ /opt/gitlab/bin/gitlab-rails \ /opt/gitlab/bin/gitlab-ci-rake \ /opt/gitlab/bin/gitlab-ci-rails \ /usr/bin/ gitlab-ctl reconfigure gitlab-ctl restart systemctl restart nginx.service |
No Comments