← DEVOPSVĂN LONG
SỐ 01 — ĐÔNG 2023
Biểu tượng GitLab màu cam được cài vào máy chủ Ubuntu trên nền tối
CÂU CHUYỆN TRANG BÌA — DEVOPS

GitlabPhần 1: Cài đặt Gitlab Trên Ubuntu 22.04

VĂN LONG·22.01.2023·2 phút
CUỘN ĐỂ ĐỌC ↓
BÀI & ẢNH — VĂN LONGDEVOPS22.01.2023 · 2 phút

Hướng dẫn từng bước cài GitLab CE trên Ubuntu 22.04 bằng Linux Package (Omnibus), từ chuẩn bị domain, SSL, SMTP đến đăng nhập root và cấu hình sau cài đặt.

CHƯƠNGI

Prerequisite

Trước khi bắt tay vào cài đặt, cần chuẩn bị sẵn một số thứ sau để quá trình cài đặt và vận hành GitLab về sau suôn sẻ:

  • Domain trỏ về public IP của gitlab-server: ví dụ gitlab.example.com, tạo bản ghi A trỏ về IP public của server. Domain này được dùng làm external_url khi cài đặt.
  • External SMTP/API để gửi mail: GitLab cần gửi mail cho các tác vụ như xác nhận tài khoản, reset password, thông báo pipeline, merge request... Có thể dùng SMTP của Gmail, Amazon SES, SendGrid, Mailgun...
  • Domain cho registry: nếu dùng GitLab Container Registry thì nên có một domain riêng, ví dụ registry.example.com, cũng trỏ về IP của gitlab-server.
  • SSL (nếu có): có thể dùng chứng chỉ SSL có sẵn của công ty, hoặc để GitLab tự xin chứng chỉ miễn phí từ Let's Encrypt (yêu cầu domain đã trỏ đúng và port 80, 443 được mở ra Internet).

Về cấu hình phần cứng, theo khuyến nghị của GitLab, server tối thiểu nên có 4 CPU core và 4 GB RAM (đủ cho khoảng 20 user). Thực tế nên để 8 GB RAM trở lên cho thoải mái, nhất là khi bật thêm Registry, CI/CD.

CHƯƠNGII

Các phương thức cài đặt

GitLab hỗ trợ khá nhiều cách cài đặt, tùy vào hạ tầng và mục đích sử dụng:

  • Docker/Docker Compose: chạy GitLab dưới dạng container, tiện cho lab, test hoặc khi hạ tầng đã chuẩn hóa theo container.
  • Linux Package (Omnibus): cách được GitLab khuyến nghị cho phần lớn trường hợp. Một package đóng gói đầy đủ các thành phần (Nginx, PostgreSQL, Redis, Puma, Sidekiq, Gitaly...), dễ cài, dễ nâng cấp.
  • Helm chart (k8s): triển khai GitLab trên Kubernetes, phù hợp với hệ thống lớn, cần scale từng thành phần.
  • GitLab Operator (k8s): quản lý vòng đời GitLab trên Kubernetes/OpenShift thông qua Operator.
  • Build from source code: tự build từ source, linh hoạt nhất nhưng cũng phức tạp và tốn công bảo trì nhất. Chỉ nên dùng khi thực sự có nhu cầu đặc biệt.

Trong bài này mình sẽ dùng cách Linux Package (Omnibus) vì đơn giản, ổn định và phù hợp với đa số nhu cầu self-host.

CHƯƠNGIII

Cài đặt GitLab CE Server qua Package (Omnibus Method)

Bước 1: Cập nhật hệ thống

Trước tiên, cập nhật lại danh sách package và nâng cấp hệ thống:

Bash
1sudo apt update && sudo apt upgrade -y

Bước 2: Install dependencies

Cài các package cần thiết:

Bash
1sudo apt install -y curl openssh-server ca-certificates tzdata perl

Nếu server có firewall (UFW) đang bật thì mở các port cần thiết cho SSH, HTTP và HTTPS:

Bash
1sudo ufw allow OpenSSH
2sudo ufw allow http
3sudo ufw allow https

Bước 3: Cài đặt Postfix (tùy chọn)

Nếu muốn gửi mail trực tiếp từ server thì có thể cài Postfix:

Bash
1sudo apt install -y postfix

Trong quá trình cài, chọn Internet Site và nhập domain của server. Tuy nhiên, như đã nói ở phần Prerequisite, mình khuyến khích dùng External SMTP cho ổn định và tránh bị đánh dấu spam. Nếu dùng External SMTP thì có thể bỏ qua bước này và cấu hình SMTP sau khi cài xong.

Bước 4: Thêm GitLab package repository

Chạy script của GitLab để thêm repository chính thức vào hệ thống:

Bash
1curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash

Bước 5: Cài đặt GitLab CE

Khi cài, khai báo luôn biến EXTERNAL_URL là domain đã chuẩn bị. Nếu dùng https://, GitLab sẽ tự động xin chứng chỉ SSL từ Let's Encrypt:

Bash
1sudo EXTERNAL_URL="https://gitlab.example.com" apt install gitlab-ce
!
Domain và port phải sẵn sàng trướcĐể Let's Encrypt cấp chứng chỉ thành công, domain phải trỏ đúng về IP server và port 80, 443 phải truy cập được từ Internet. Nếu chưa, quá trình reconfigure sẽ báo lỗi ở bước xin chứng chỉ.

Có thể chỉ định phiên bản cụ thể nếu cần. Xem danh sách phiên bản có trong repository bằng apt-cache madison gitlab-ce, sau đó cài theo dạng:

Bash
1sudo EXTERNAL_URL="https://gitlab.example.com" apt install gitlab-ce=16.0.0-ce.0
Lưu ý — Thay 17.0.0-ce.0 bằng phiên bản bạn muốn cài

Quá trình cài sẽ mất vài phút tùy cấu hình server. Khi hoàn tất, GitLab sẽ tự chạy gitlab-ctl reconfigure để khởi tạo các service.

Bước 6: Lấy mật khẩu root và đăng nhập

Sau khi cài xong, GitLab sinh ngẫu nhiên mật khẩu cho tài khoản root và lưu trong file:

Bash
1sudo cat /etc/gitlab/initial_root_password
‼
File mật khẩu tự xóa sau 24 giờFile này sẽ tự động bị xóa sau 24 giờ (ở lần chạy reconfigure đầu tiên sau 24h). Nên đăng nhập và đổi mật khẩu root ngay.

Truy cập https://gitlab.example.com, đăng nhập với user root và mật khẩu vừa lấy được, sau đó vào Edit profile → Password để đổi mật khẩu.

Bước 7: Kiểm tra trạng thái các service

Kiểm tra các thành phần của GitLab đã chạy đầy đủ chưa:

Bash
1sudo gitlab-ctl status

Một số lệnh hay dùng khi vận hành:

  • sudo gitlab-ctl reconfigure: áp dụng lại cấu hình sau khi sửa file /etc/gitlab/gitlab.rb.
  • sudo gitlab-ctl restart: restart toàn bộ service.
  • sudo gitlab-ctl tail: xem log realtime của các service.
  • sudo gitlab-rake gitlab:check SANITIZE=true: kiểm tra tổng thể cấu hình GitLab.

Bước 8: Một số cấu hình sau cài đặt

Mọi cấu hình của GitLab Omnibus đều nằm trong file /etc/gitlab/gitlab.rb. Sau mỗi lần chỉnh sửa, nhớ chạy sudo gitlab-ctl reconfigure.

Cấu hình External SMTP, ví dụ với Gmail:

Ruby/etc/gitlab/gitlab.rb
1gitlab_rails['smtp_enable'] = true
2gitlab_rails['smtp_address'] = "smtp.gmail.com"
3gitlab_rails['smtp_port'] = 587
4gitlab_rails['smtp_domain'] = "smtp.gmail.com"
5gitlab_rails['smtp_user_name'] = "your.email@gmail.com"
6gitlab_rails['smtp_password'] = "your-app-password"
7gitlab_rails['smtp_authentication'] = "login"
8gitlab_rails['smtp_enable_starttls_auto'] = true
9gitlab_rails['smtp_tls'] = false
10gitlab_rails['smtp_openssl_verify_mode'] = 'peer'
11
12gitlab_rails['gitlab_email_from'] = "your.email@gmail.com"
13gitlab_rails['gitlab_email_reply_to'] = "your.email@gmail.com"
i
Dùng App Password cho GmailGmail không cho đăng nhập SMTP bằng mật khẩu thường. Hãy bật xác minh 2 bước cho tài khoản và tạo App Password để điền vào smtp_password.

Áp dụng cấu hình:

Bash
1sudo gitlab-ctl reconfigure

Sau đó gửi thử một email từ Rails console để kiểm tra:

Bash
1sudo gitlab-rails console
2Notify.test_email('you@example.com', 'GitLab test', 'Hello from GitLab').deliver_now
HẾTBài & ảnh: Văn Long · DEVOPS
Văn Long
VIẾT BỞIVăn LongPlatform Engineer · Quảng Ninh · Viết từ 2017

Mình làm hệ thống phân tán ban ngày và đi bụi vào cuối tuần. Blog này là nơi ghi lại cả hai — đơn giản là chia sẻ những gì mình học được.

THẢO LUẬN

Bình luận (0)

BĐ
Hãy lịch sự và tôn trọng nhau 🙏
Nhận bài mới mỗi tháng
Một bài kỹ thuật, một chuyến đi. Không spam, huỷ bất cứ lúc nào.