Gitlab là một ứng dụng mã nguồn mở được sử dụng để lưu trữ các Git repository, với các tính năng liên quan đến phát triển phần mềm như theo dõi, giám sát lỗi. Gitlab được thiết kế để được lưu trữ bằng cơ sở hạ tầng của người dùng và có thể được dùng như một repository nội bộ team developement. Trong bài viết này, cùng Vietnix tìm hiểu cách cài đặt và cấu hình GitLab trên Ubuntu 20.04.
Điều kiện để cài đặt và cấu hình Gitlab trên Ubuntu 20.04
Để làm theo với hướng dẫn này, bạn sẽ cần:
- Ubuntu Server 20.04 với non-root user có quyền
sudo
và firewall. - Cấu hình phần cứng cho máy chủ chạy Gitlab được khuyến nghị sử dụng là: 4 core CPU và 4GB RAM (Có thể bạn dùng swap RAM, nhưng việc này không được khuyến khích).
- Một tên miền trỏ vào server của bạn. Hướng dẫn này sẽ sử dụng tên
your_domain
làm ví dụ, nhưng bạn hãy nên thay thế bằng tên miền của bạn.
Nếu cấu hình máy chủ không đáp ứng được yêu cầu trên hoặc bạn chưa có tên miền thì có thể tham khảo sử dụng các gói VPS, tên miền tại Vietnix. Hiện tại, Vietnix đang cung cấp nhiều gói dịch vụ VPS đa dạng cấu hình và mức giá, nhiều tên miền trong nước và quốc tế phù hợp theo nhu cầu sử dụng của người dùng. Liên hệ với đội ngũ Vietnix để nhận tư vấn chi tiết và hoàn toàn miễn phí.
Bước 1: Cài đặt các dependency cho Ubuntu
Trước tiên, tiến hành cập nhật apt
, đây là repository mặc định của Ubuntu:
sudo apt update
Sau đó cài đặt các dependency bằng lệnh:
sudo apt install ca-certificates curl openssh-server postfix tzdata perl
Bạn có thể đã cài đặt một số phần mềm này rồi. Đối với cài đặt postfix
, chọn Internet site khi màn hình hiện thông báo. Tiếp theo là hãy nhập domain name của bạn để cấu hình hệ thống gửi email.
Bước 2: Cài đặt Gitlab
Với các dependency có ở bước 1, bạn sẽ tiến hành cài đặt Gitlab. Quá trình cài đặt này tận dụng tập lệnh cài đặt để cấu hình hệ thống của bạn với các repository Gitlab.
Đầu tiên, ta sẽ di chuyển sang thư mục làm việc với /tmp
:
cd /tmp
Sau đó ta sẽ tiến hành tải script cài đặt:
curl -LO https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh
Bạn có thể tự kiểm tra lại script đã tải xuống để đảm bảo rằng các hành động mà script sẽ thực hiện đều ổn. Bạn cũng có thể tìm thấy phiên bản của script vừa rồi trên trang giới thiệu của Gitlab:
less /tmp/script.deb.sh
Khi bạn hài lòng với script, hãy chạy trình cài đặt:
sudo bash /tmp/script.deb.sh
Script sẽ thiết lập server của bạn sử dụng repository Gitlab. Điều này cho phép bạn quản lý Gitlab với cùng một công cụ quản lý gói (package management tools) mà bạn sử dụng cho các system package khác của mình. Sau đó, bạn có thể cài đặt ứng dụng Gitlab với apt
:
sudo apt install gitlab-ce
Lệnh này sẽ cài đặt các thành phần cần thiết trên hệ thống và có thể mất một lúc để hoàn thành.
Bước 3: Thiết lập các rule của firewall
Trước khi bạn cấu hình Gitlab, bạn cần đảm bảo rằng các rule của firewall cho phép lưu lượng truy cập web. Bạn cần bật ufw
cho firewall.
Xem trạng thái hiện tại của firewall hoạt động của bạn bằng lệnh:
sudo ufw status
Output
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Các rule hiện tại cho phép lưu lượng SSH đi qua nhưng quyền truy cập vào các dịch vụ khác còn bị hạn chế. GitLab là một ứng dụng web nên bạn cần cho phép truy cập HTTP. Bởi vì bạn sẽ tận dụng khả năng của GitLab để yêu cầu và kích hoạt chứng chỉ TLS/SSL miễn phí từ Let’s Encrypt, đồng thời cho phép truy cập HTTPS.
Giao thức để mapping các port cho HTTP và HTTPS ở trong file /etc/services
. Vì vậy bạn có thể cho phép lưu lượng truy cập đó theo tên riêng. Trường hợp chưa bật OpenSSH, bạn chạy lệnh:
sudo ufw allow http
sudo ufw allow https
sudo ufw allow OpenSSH
Bạn có thể kiểm tra lại bằng lệnh ufw status
để đảm bảo rằng đã cấp quyền truy cập vào ít nhất hai dịch vụ sau:
sudo ufw status
Output
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
80/tcp ALLOW Anywhere
443/tcp ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
80/tcp (v6) ALLOW Anywhere (v6)
443/tcp (v6) ALLOW Anywhere (v6)
Output này chỉ ra rằng giao diện web GitLab hiện có thể truy cập được sau khi bạn cấu hình xong.
Bước 4: Chỉnh sửa file cấu hình của GitLab
Trước khi bạn sử dụng ứng dụng, hãy update file cấu hình và chạy lệnh cấu hình lại. Trước tiên, hãy mở file cấu hình của GitLab:
sudo nano /etc/gitlab/gitlab.rb
Tìm dòng external_url
. Tiến hành chỉnh sửa để phù hợp với domain của bạn và đảm bảo thay đổi http
thành https
để tự động chuyển hướng người dùng đến trang web được bảo vệ bởi chứng chỉ Let’s Encrypt:
...
## GitLab URL
##! 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
##!
##! Note: During installation/upgrades, the value of the environment variable
##! EXTERNAL_URL will be used to populate/replace this value.
##! On AWS EC2 instances, we also attempt to fetch the public hostname/IP
##! address from AWS. For more details, see:
##! https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-retrieval.html
external_url 'https://your_domain'
...
Tiếp theo, tìm dòng cài đặt letencrypt['contact_emails']
. Nếu bạn đang sử dụng nano
có thể tìm nhanh bằng cách nhấn CTRL+W
.
Viết letsencrypt['contact_emails']
vào console, sau đó nhấn ENTER
. Cài đặt này sẽ xác định danh sách các địa chỉ email mà Let’s Encrypt có thể sử dụng để liên hệ với bạn nếu có vấn đề với domain. Bạn nên bỏ comment và điền vào phần này để hệ thống thông báo khi xảy ra sự cố nào:
letsencrypt['contact_emails'] = ['sammy@example.com']
Sau khi bạn thực hiện xong các thay đổi, hãy lưu và đóng tệp. Nếu bạn đang sử dụng nano có thể nhấn CTRL+X
, rồi nhấn Y
và ENTER
.
Dùng lệnh sau để chạy lại cấu hình cho GitLab:
sudo gitlab-ctl reconfigure
Thao tác này sẽ khởi tạo GitLab bằng thông tin có thể tìm thấy về server của bạn. Đây là một quá trình hoàn toàn tự động, vì vậy bạn sẽ không cần làm gì. Quá trình này cũng sẽ cấu hình chứng chỉ Let’s Encrypt cho domain của bạn.
Bước 5: Thực hiện cấu hình ban đầu qua giao diện web
Khi GitLab đang chạy, bạn có thể thực hiện cấu hình ban đầu cho ứng dụng thông qua giao diện web.
Đăng nhập lần đầu tiên
Truy cập tên miền của server GitLab trong trình duyệt web của bạn:
https://your_domain
Trong lần truy cập đầu tiên, bạn sẽ thấy trang đăng nhập như sau:
GitLab đã khởi tạo một mật khẩu an toàn ban đầu cho bạn. Mật khẩu ấy được lưu trữ trong một thư mục mà bạn có thể truy cập với tư cách là user có quyền sudo
:
sudo nano /etc/gitlab/initial_root_password
# WARNING: This value is valid only in the following conditions
# 1. If provided manually (either via `GITLAB_ROOT_PASSWORD` environment variable or via `gitlab_rails['initial_root_password']` setting in `gitlab.rb`, it was provided before database was seeded for the firs$
# 2. Password hasn't been changed manually, either via UI or via command line.
#
# If the password shown here doesn't work, you must reset the admin password following https://docs.gitlab.com/ee/security/reset_user_password.html#reset-your-root-password.
Password: YOUR_PASSWORD
# NOTE: This file will be automatically deleted in the first reconfigure run after 24 hours.
Quay trở lại màn hình Login, ta sẽ nhập:
- Username: root
- Password: password được ghi trong
/etc/gitlab/initial_root_password
]
Sau khi nhập các thông tin này rồi nhấn vào nút Sign in, bạn sẽ đăng nhập vào ứng dụng và được đưa đến trang đích, nơi đây bạn sẽ thêm các project của mình:
Giờ đây bạn có thể tùy chỉnh thêm cho GitLab của mình.
Thay đổi mật khẩu
Một trong những điều đầu tiên bạn nên làm sau khi đăng nhập đó là thay đổi mật khẩu của mình. Để thực hiện, hãy nhấp vào biểu tượng ở góc trên bên phải của thanh điều hướng và chọn Edit profile:
Sau đó, bạn sẽ vào trang User setting. Trên thanh điều hướng bên trái, chọn Password để thay đổi mật khẩu, sau đó nhấp vào nút Save password khi bạn hoàn tất các cập nhật của mình:
Bạn sẽ được đưa trở lại màn hình đăng nhập với thông báo rằng mật khẩu của bạn đã được thay đổi. Nhập mật khẩu mới của bạn để đăng nhập lại vào GitLab:
Tùy chỉnh Profile Settings
GitLab đã tự thiết lập một số cài đặt mặc định nhưng chúng thường không phù hợp khi bạn bắt đầu sử dụng phần mềm. Để thực hiện các sửa đổi cần thiết, hãy nhấp vào biểu tượng người dùng ở góc trên bên phải của thanh điều hướng và chọn Edit profile.
Bạn có thể điều chỉnh Name và địa chỉ Email từ “Administrator” và “admin@example.com” thành tên mà bạn muốn. Tên bạn chọn sẽ được hiển thị cho những người dùng khác, trong khi email sẽ được sử dụng để đặt hình đại diện, thông báo, thao tác với Git thông qua giao diện và còn nhiều thứ nữa.
Nhấn vào nút Update profile Setting ở dưới cùng khi bạn hoàn tất các chỉnh sửa của mình. Bạn sẽ được nhắc nhập mật khẩu của mình để xác nhận các thay đổi. Một email xác nhận sẽ được gửi đến địa chỉ email bạn đã cung cấp. Làm theo hướng dẫn trong email để xác nhận tài khoản của bạn để bạn có thể bắt đầu sử dụng tài khoản đó với GitLab.
Thay đổi Account name
Tiếp theo, chọn Account trong thanh điều hướng bên trái:
Tại đây, bạn có thể bật xác thực hai yếu tố và thay đổi username của mình. Theo mặc định, tài khoản quản trị đầu tiên được đặt tên là root. Vì đây là tài khoản mặc định nên việc thay đổi thành một tên khác sẽ an toàn hơn. Các đặc quyền vẫn sẽ được giữ nguyên như cũ.. Thay thế tên root bằng tên khác mà bạn muốn:
Nhấp vào nút Update username để thực hiện thay đổi. Bạn sẽ được nhắc xác nhận thay đổi sau đó. Lần tới khi đăng nhập vào GitLab, hãy nhớ sử dụng tên người dùng mới của bạn.
Tạo SSH key cho tài khoản
Bạn có sử dụng tính năng SSH key bằng Git để tương tác với các dự án GitLab của mình. Để thực hiện việc này, bạn cần thêm khóa công khai (public key) SSH vào tài khoản GitLab của mình.
Trong thanh điều hướng bên trái, chọn SSH Keys:
Nếu bạn đã có cặp khóa SSH trên máy tính của mình thì có thể xem public key bằng cách nhập:
cat ~/.ssh/id_rsa.pub
Output
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDMuyMtMl6aWwqBCvQx7YXvZd7bCFVDsyln3yh5/8Pu23LW88VXfJgsBvhZZ9W0rPBGYyzE/TDzwwITvVQcKrwQrvQlYxTVbqZQDlmsC41HnwDfGFXg+QouZemQ2YgMeHfBzy+w26/gg480nC2PPNd0OG79+e7gFVrTL79JA/MyePBugvYqOAbl30h7M1a7EHP3IV5DQUQg4YUq49v4d3AvM0aia4EUowJs0P/j83nsZt8yiE2JEYR03kDgT/qziPK7LnVFqpFDSPC3MR3b8B354E9Af4C/JHgvglv2tsxOyvKupyZonbyr68CqSorO2rAwY/jWFEiArIaVuDiR9YM5 sammy@mydesktop
Sao chép đoạn text này và nhập vào phần Key trong phần thiết lập key trên GitLab của bạn.
Còn nếu dùng lệnh cat ~/.ssh/id_rsa.pub
, sau đó nhận được một thông báo khác thì có nghĩa là bạn chưa cấu hình cặp khóa SSH trên máy tính:
Output
cat: /home/sammy/.ssh/id_rsa.pub: No such file or directory
Lúc này, bạn có thể tạo một cặp khóa SSH bằng lệnh sau:
ssh-keygen
Output
Generating public/private rsa key pair.
Enter file in which to save the key (/home/sammy/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/sammy/.ssh/id_rsa.
Your public key has been saved in /home/sammy/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:I8v5/M5xOicZRZq/XRcSBNxTQV2BZszjlWaIHi5chc0 sammy@gitlab.docsthat.work
The key's randomart image is:
+---[RSA 2048]----+
| ..%o==B|
| *.E =.|
| . ++= B |
| ooo.o . |
| . S .o . .|
| . + .. . o|
| + .o.o ..|
| o .++o . |
| oo=+ |
+----[SHA256]-----+
Nếu muốn hiển thị public key, chạy lệnh:
cat ~/.ssh/id_rsa.pub
Output
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDMuyMtMl6aWwqBCvQx7YXvZd7bCFVDsyln3yh5/8Pu23LW88VXfJgsBvhZZ9W0rPBGYyzE/TDzwwITvVQcKrwQrvQlYxTVbqZQDlmsC41HnwDfGFXg+QouZemQ2YgMeHfBzy+w26/gg480nC2PPNd0OG79+e7gFVrTL79JA/MyePBugvYqOAbl30h7M1a7EHP3IV5DQUQg4YUq49v4d3AvM0aia4EUowJs0P/j83nsZt8yiE2JEYR03kDgT/qziPK7LnVFqpFDSPC3MR3b8B354E9Af4C/JHgvglv2tsxOyvKupyZonbyr68CqSorO2rAwY/jWFEiArIaVuDiR9YM5 sammy@mydesktop
Tiến hành copy và dán public key này vào bên trong phần thiết lập Key của GitLab. Sau đó, đặt tiêu đề để mô tả khóa và nhấn vào nút Add key.
Giờ đây, bạn có thể quản lý các project và repository trên GitLab của mình mà không cần phải đăng nhập tài khoản.
Bước 6: Hạn chế hoặc vô hiệu hóa Public Sign-ups
Với thiết lập hiện tại, bất kỳ ai cũng có thể đăng ký tài khoản truy cập trang đích GitLab của bạn. Đây là điều khá tốt trong trường hợp bạn đang tìm cách tổ chức một dự án chung và công khai. Tuy nhiên, ở một số trường hợp khác thì việc cài đặt hạn chế nên được thực hiện.
Để bắt đầu thiết lập, hãy đến khu vực quản trị bằng cách nhấp vào menu trong thanh điều hướng trên cùng và chọn Admin từ trình đơn thả xuống:
Chọn Setting từ thanh điều hướng bên trái:
Bạn sẽ được đưa đến cài đặt chung cho phiên bản GitLab của mình. Tại đây, bạn có thể quy định quyền đăng ký và truy cập của user mới. Cụ thể:
Tắt tính năng Sign-ups
Nếu bạn muốn tắt hoàn toàn tính năng Sign-ups, hãy cuộn đến phần Sign-up Restriction và nhấn Expand để xem các tùy chọn. Sau đó bỏ chọn ở hộp kiểm Sign-up enable:
Hãy nhớ bấm nút Save changes để lưu các thay đổi. Như vậy, phần Sign-up đã bị xóa khỏi trang đích GitLab.
Hạn chế Sign-ups theo tên miền
Nếu đang sử dụng GitLab bằng địa chỉ email được liên kết với miền của công ty hoặc tổ chức thì bạn có thể hạn chế đăng ký theo miền thay vì vô hiệu hóa hoàn toàn. Cụ thể:
Trong phần Sign-up Restrictions, tích chọn vào ô Send confirmation email on sign-up. Mục này sẽ cho phép người dùng chỉ đăng nhập sau khi họ đã xác nhận email của mình.
Tiếp theo, bạn có thể thêm domain của mình vào mục Whitelisted domains for sign-ups, một tên miền trên mỗi dòng. Bạn có thể sử dụng dấu hoa thị “*” để chỉ định các miền đại diện:
Khi bạn hoàn tất, hãy nhấp vào nút Save changes.
Hạn chế việc tạo mới Project
Theo mặc định, người dùng mới có thể tạo tối đa 10 project. Nếu muốn cho phép người dùng mới từ bên ngoài có thể thấy và tham gia nhưng hạn chế quyền tạo dự án mới thì bạn có thể cài đặt trong phần Account and Limit Settings.
Tại đây, bạn có thể thay đổi Default projects limit thành 0 để vô hiệu hóa hoàn toàn người dùng mới tạo dự án:
Người dùng mới vẫn có thể được thêm vào project theo cách thủ công và có quyền truy cập vào các project nội bộ hoặc công khai do người dùng khác tạo.
Sau khi cập nhật, hãy nhớ nhấp vào nút Save changes. Giờ đây, user có thể tạo tài khoản nhưng không thể tạo project.
Gia hạn chứng chỉ Let’s Encrypt
Theo mặc định, GitLab có một tác vụ theo lịch trình được thiết lập để gia hạn chứng chỉ Let’s Encrypt sau mỗi 4 ngày, với thời gian chính xác dựa trên external_url
của bạn. Bạn có thể sửa đổi các cài đặt này trong tệp /etc/gitlab/gitlab.rb
.
Ví dụ: Nếu muốn gia hạn vào lúc 12:30 ngày thứ 7 hàng tuần, bạn có thể định cấu hình để làm như vậy. Đầu tiên, điều hướng đến file cấu hình:
sudo nano /etc/gitlab/gitlab.rb
Tìm các dòng sau trong tệp và xóa #
, sau đó cập nhật lại với lệnh:
...
################################################################################
# Let's Encrypt integration
################################################################################
# letsencrypt['enable'] = nil
letsencrypt['contact_emails'] = ['sammy@digitalocean'] # This should be an array of email addresses to add as contacts
# letsencrypt['group'] = 'root'
# letsencrypt['key_size'] = 2048
# letsencrypt['owner'] = 'root'
# letsencrypt['wwwroot'] = '/var/opt/gitlab/nginx/www'
# See http://docs.gitlab.com/omnibus/settings/ssl.html#automatic-renewal for more on these settings
letsencrypt['auto_renew'] = true
letsencrypt['auto_renew_hour'] = "12"
letsencrypt['auto_renew_minute'] = "30"
letsencrypt['auto_renew_day_of_month'] = "*/7"
...
Bạn cũng có thể tắt tính năng tự động gia hạn bằng cách đặt letsencrypt['auto_renew']
thành false
:
...
letsencrypt['auto_renew'] = false
...
Với tính năng tự động gia hạn, bạn không cần phải lo lắng về việc gián đoạn dịch vụ.
Lời kết
Bây giờ bạn đã sở hữu một phiên bản GitLab hoạt động trên server của riêng mình. Bạn có thể bắt đầu nhập hoặc tạo dự án mới và cấu hình quyền truy cập phù hợp cho những người trong nhóm. GitLab thường xuyên bổ sung các tính năng và thực hiện cập nhật cho nền tảng của họ, vì vậy hãy đảm bảo kiểm tra trang chủ của dự án để cập nhật những thông tin hoặc thông báo quan trọng.