Hướng Dẫn Cài Gitea Trên Ubuntu VPS Tự Tạo Git Server Riêng A-Z
Hướng dẫn cài Gitea/Git Server trên Ubuntu VPS là thứ bạn cần nếu muốn một nơi lưu code hoàn toàn thuộc về mình: repo private không giới hạn, dữ liệu nằm hẳn trên máy chủ của bạn, không lo giới hạn dung lượng hay phí thuê bao hằng tháng. Bài viết sẽ đi qua toàn […]
Hướng dẫn cài Gitea/Git Server trên Ubuntu VPS là thứ bạn cần nếu muốn một nơi lưu code hoàn toàn thuộc về mình: repo private không giới hạn, dữ liệu nằm hẳn trên máy chủ của bạn, không lo giới hạn dung lượng hay phí thuê bao hằng tháng. Bài viết sẽ đi qua toàn bộ quy trình từ A đến Z: chuẩn bị VPS, cài Git, cài MariaDB, tải binary Gitea, tạo systemd service rồi hoàn tất cấu hình qua giao diện web. Mọi thao tác đều thực hiện qua SSH, bạn chỉ cần một VPS Ubuntu và quyền sudo là có thể làm theo ngay. Nếu chưa có máy chủ, dịch vụ thuê VPS giá rẻ tại ThueVPSGiaRe.vn là điểm khởi đầu phù hợp cho nhu cầu này.
Gitea Là Gì Và Vì Sao Tự Host Git Server Trên Ubuntu VPS?
Gitea là phần mềm Git server mã nguồn mở, viết bằng ngôn ngữ Go, cung cấp giao diện web để quản lý repository, issue, pull request và thành viên. Điểm nổi bật nhất của Gitea là độ nhẹ hiếm có: chạy mượt trên VPS cấu hình nhỏ, cài đặt nhanh và rất hợp với cá nhân hoặc team nhỏ muốn tự chủ hoàn toàn dữ liệu source code.

Khi cần Git server riêng, bạn thường cân nhắc ba lựa chọn: Gitea, GitLab và GitHub. GitLab mạnh về hệ sinh thái DevOps tích hợp sẵn, đổi lại tiêu tốn tài nguyên máy chủ đáng kể — bài phân tích về GitLab sẽ giúp bạn hình dung rõ khoảng cách này.
GitHub tiện cho dự án công khai và cộng tác viên bên ngoài, còn khi cần kho repo nội bộ kín thì tự host vẫn là hướng tiết kiệm nhất. Workflow hằng ngày như clone, commit, push hay tạo pull request vẫn giống hệt khi làm việc với GitHub, nên team không phải học lại thói quen cũ; các thao tác đó được mô tả chi tiết trong bài hướng dẫn sử dụng GitHub của Fast Byte.
| Tiêu chí | Gitea | GitLab | GitHub |
|---|---|---|---|
| Hình thức | Tự host, mã nguồn mở | Tự host hoặc cloud | Dịch vụ cloud |
| Tài nguyên VPS | Rất nhẹ | Nặng | Không cần VPS riêng |
| Chi phí | Miễn phí, chỉ tốn tiền VPS | Bản free + bản trả phí | Free + gói trả phí |
| Phù hợp | Cá nhân, team nhỏ | Doanh nghiệp cần DevOps | Dự án mở, cộng tác rộng |
- Miễn phí, mã nguồn mở: không có phí bản quyền, toàn bộ chi phí chỉ là VPS vận hành.
- Nhẹ tài nguyên: không cần VPS cấu hình lớn mới chạy được.
- Repo private không giới hạn: code nội bộ nằm trên máy chủ bạn kiểm soát.
- Quản trị qua giao diện web: tạo repo, thêm user, phân quyền đều thao tác bằng chuột.
Tiêu Chuẩn Phần Cứng & Hạ Tầng VPS Cho Gitea Server
Cấu hình VPS chạy Gitea ổn định cho một nhóm phát triển từ 5 đến 50 lập trình viên cần tối thiểu 2 vCPU, 1GB RAM và 20GB dung lượng ổ cứng SSD NVMe trên hệ điều hành Ubuntu LTS. Mức tài nguyên này đảm bảo hệ thống không bị lỗi thiếu bộ nhớ trong các đợt dọn rác cơ sở dữ liệu và xử lý nhiều phiên đẩy code cùng thời điểm.
- Hệ điều hành: Lựa chọn tối ưu là phiên bản phân phối Ubuntu 24.04 LTS hoặc Ubuntu 22.04 LTS để đảm bảo nhận được các bản cập nhật an ninh dài hạn.
- Bộ vi xử lý (CPU): Tối thiểu 2 Cores. Việc trang bị 2 Cores giúp máy chủ duy trì khả năng tiếp nhận yêu cầu phân nhánh, duyệt Merge Request và thực thi tác vụ nền mượt mà.
- Bộ nhớ trong (RAM): Khuyến nghị từ 1GB trở lên. Khi thao tác với các kho chứa mã nguồn lớn, lệnh nén
git gcngầm sẽ tiêu tốn bộ nhớ tạm; dung lượng RAM ổn định sẽ ngăn chặn lỗi OOM (Out Of Memory) làm tắt dịch vụ. - Không gian lưu trữ (Disk): Từ 20GB đến 50GB ổ cứng chuẩn SSD NVMe nhằm đáp ứng số lượng lớn thao tác đọc ghi dữ liệu tập tin nhỏ liên tục.
- Cấu hình mạng & Tên miền: Chuẩn bị sẵn một subdomain nội bộ (chẳng hạn
git.yourcompany.com) và tiến hành trỏ bản ghi tên miền về địa chỉ IP của VPS một cách chính xác trước khi cài đặt.
Chuẩn Bị & Cài Đặt Docker Engine Chuẩn V2 Trên Ubuntu
Việc áp dụng giải pháp ảo hóa tầng ứng dụng với công nghệ đóng gói Docker giúp tách biệt hoàn toàn Gitea khỏi môi trường của hệ điều hành gốc. Điều này mang lại sự an toàn cao, tạo sự thuận tiện khi di dời dữ liệu sang máy chủ mới và đơn giản hóa các tác vụ bảo trì sau này.
Bước 1: Gỡ bỏ các phiên bản gói Docker cũ
Để tránh xung đột thư viện giữa các bản phân phối, bạn nên dọn dẹp các thành phần không chính thức đã từng xuất hiện trên máy:
sudo apt-get remove docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc

Bước 2: Bổ sung kho lưu trữ và xác thực GPG Key chính thức
Cập nhật danh sách phần mềm hệ thống và cài đặt thêm các công cụ truyền dữ liệu cơ bản:
sudo apt-get update sudo apt-get install ca-certificates curl -y

Tiếp theo, tạo thư mục lưu trữ chứng thực khóa và tải khóa ký bảo mật trực tiếp từ Docker:
sudo install -m 0755 -d /etc/apt/keyrings sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc sudo chmod a+r /etc/apt/keyrings/docker.asc
Đăng ký nguồn APT chính thức của Docker vào tệp danh sách nguồn của Ubuntu:
echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \ $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Bước 3: Cài đặt Docker Engine và Docker Compose plugin
Tiến hành cập nhật lại index phần mềm và tải về Docker Engine cùng các tiện ích mở rộng theo quy chuẩn cài đặt Docker Compose trên Ubuntu:
sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y

Kiểm tra phiên bản compose để xác thực môi trường đã hoạt động chính xác:
docker compose version

Triển Khai Gitea & PostgreSQL Bằng Docker Compose
Đối với môi trường vận hành thực tế (Production), việc tích hợp cơ sở dữ liệu PostgreSQL mang lại tính toàn vẹn dữ liệu, khả năng đồng thời lớn và sức chịu tải vượt trội hơn hẳn so với tệp tin nhúng SQLite. Chúng ta sẽ gom cụm ứng dụng Gitea và máy chủ cơ sở dữ liệu PostgreSQL vào chung một cấu hình điều phối.
Bước 1: Thiết lập cấu trúc thư mục dự án
Tạo không gian thư mục chuyên biệt để quản lý tệp cấu hình và phân vùng dữ liệu:
mkdir -p ~/gitea-server cd ~/gitea-server
Bước 2: Xây dựng tệp docker-compose.yml
Khởi tạo và chỉnh sửa tệp kê khai cấu hình bằng trình soạn thảo văn bản:
nano docker-compose.yml
Sao chép nội dung khai báo dịch vụ dưới đây. Chú ý chỉ định cụ thể mật khẩu bảo mật cho tài khoản cơ sở dữ liệu và giữ nguyên cấu hình cổng cho giao thức kết nối điều khiển qua SSH:
services:
server:
image: docker.gitea.com/gitea:1.25.3
container_name: gitea
environment:
- USER_UID=1000
- USER_GID=1000
- GITEA__database__DB_TYPE=postgres
- GITEA__database__HOST=db:5432
- GITEA__database__NAME=gitea
- GITEA__database__USER=gitea
- GITEA__database__PASSWD=YOUR_SECURE_PASSWORD
- GITEA__server__SSH_LISTEN_PORT=22
restart: always
networks:
- gitea
volumes:
- ./gitea_data:/data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
ports:
- "3000:3000"
- "222:22"
depends_on:
- db
db:
image: postgres:14
restart: always
environment:
- POSTGRES_USER=gitea
- POSTGRES_PASSWORD=YOUR_SECURE_PASSWORD
- POSTGRES_DB=gitea
networks:
- gitea
volumes:
- ./postgres_data:/var/lib/postgresql/data
networks:
gitea:
external: false
Nguyên lý kỹ thuật về cổng SSH: Trong môi trường container, nếu bạn đổi trực tiếp SSH Port hiển thị thành 222 mà không chỉ định biến GITEA__server__SSH_LISTEN_PORT=22, bản thân phần mềm Gitea sẽ chuyển cổng lắng nghe nội bộ sang 222. Điều này dẫn tới lỗi mất kết nối vì Docker đang tiến hành forward lưu lượng từ cổng 222 của Host vào cổng 22 của Container. Biến môi trường này giúp giữ cổng nội bộ luôn là 22, đảm bảo luồng định tuyến cổng ngoài 222:22 luôn thông suốt.
Bước 3: Khởi chạy các container nền tảng
Khởi động toàn bộ stack dịch vụ ở chế độ chạy ngầm (detached mode):
docker compose up -d
Kiểm tra trạng thái tiến trình sau khoảng 30 đến 60 giây khởi tạo:
docker compose ps

Cấu Hình Nginx Reverse Proxy Và Cài Đặt SSL Let’s Encrypt
Dù giao diện web Gitea đang phản hồi qua port 3000, việc mở công khai cổng này ra ngoài Internet thiếu an toàn và không tiện lợi cho người dùng. Thiết lập Nginx làm cổng tiếp nhận ngược (Reverse Proxy) kết hợp chứng chỉ SSL giúp lưu lượng truy cập được bảo vệ an toàn qua giao thức HTTPS và tên miền chính thức.
Bước 1: Cài đặt và định cấu hình Nginx
Tải gói phần mềm máy chủ web Nginx từ hệ thống kho ứng dụng Ubuntu:
sudo apt install nginx -y
Tạo tập tin cấu hình Virtual Host riêng cho tên miền Gitea:
sudo nano /etc/nginx/sites-available/gitea
Dán đoạn cấu hình chuyển tiếp lưu lượng vào cổng 3000 (thay đổi giá trị git.yourcompany.com theo tên miền bạn sở hữu):
server {
listen 80;
server_name git.yourcompany.com;
location / {
proxy_pass http://localhost:3000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Tạo liên kết để kích hoạt cấu hình ảo, kiểm tra tính đúng đắn của cú pháp và nạp lại máy chủ Nginx:
sudo ln -s /etc/nginx/sites-available/gitea /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl reload nginx

Bước 2: Cấp chứng chỉ bảo mật SSL miễn phí qua Certbot
Thực hiện cài đặt Certbot qua công cụ đóng gói Snap để kích hoạt chứng chỉ bảo mật Let’s Encrypt cho Nginx, giúp mã hóa toàn bộ dữ liệu khi lập trình viên kết nối:
sudo snap install core; sudo snap refresh core sudo snap install --classic certbot sudo ln -s /snap/bin/certbot /usr/bin/certbot sudo certbot --nginx -d git.yourcompany.com
Hoàn Tất Cài Đặt Qua Giao Diện Web & Lưu Ý Cổng SSH
Sau khi hoàn tất cấu hình Nginx và SSL, hãy mở trình duyệt web và truy cập vào đường dẫn https://git.yourcompany.com. Lúc này, bảng cấu hình ban đầu của Gitea sẽ hiển thị để bạn thiết lập thông số cho máy chủ Git.
- Thiết lập Database (Database Settings): Nhờ các tham số đã khai báo trong tệp Docker Compose từ trước, các trường cấu hình kết nối tới PostgreSQL đã được điền sẵn chính xác; bạn chỉ cần giữ nguyên mặc định.
- Tên ứng dụng & Miền (Application Settings):
- Site Title: Nhập tên đại diện cho hệ thống Git của đội ngũ (ví dụ: DevCenter Git Server).
- Server Domain: Nhập đúng tên miền của bạn:
git.yourcompany.com. - SSH Server Port: Nhập giá trị 222. Giá trị này giúp định hình đường dẫn hiển thị để clone code qua SSH (như
ssh://git@domain:222/repo.git), trong khi cổng kết nối ngầm bên trong container vẫn là cổng 22. - Gitea Base URL: Điền địa chỉ đầy đủ dạng HTTPS và có dấu gạch chéo ở cuối:
https://git.yourcompany.com/.
- Tùy chọn dịch vụ hệ thống: Đánh dấu tích vào ô Disable Self-Registration (Tắt tính năng tự đăng ký tài khoản). Đây là nguyên tắc quan trọng nhằm ngăn chặn người dùng tự do tạo tài khoản trên máy chủ của doanh nghiệp.
- Tạo tài khoản Administrator: Mở rộng mục cấu hình tài khoản quản trị và thiết lập tên đăng nhập cùng mật khẩu bảo mật cao cho người phụ trách hệ thống.
Nhấn vào nút Install Gitea để hệ thống tiến hành khởi tạo cơ sở dữ liệu và hoàn thiện quá trình cài đặt. Khi thành công, trình duyệt sẽ tự động chuyển hướng bạn tới trang quản lý chính của Git Server.
Quy Trình Sao Lưu Dữ Liệu Và Nâng Cấp Hệ Thống Bền Vững
Xây dựng máy chủ mã nguồn nội bộ đồng nghĩa với việc bạn phải chịu trách nhiệm hoàn toàn về sự an toàn của dữ liệu dự án. Thiết lập chiến lược sao lưu định kỳ và quy trình cập nhật chuẩn chỉ giúp máy chủ luôn trong trạng thái sẵn sàng phục vụ đội ngũ phát triển.
Quy trình sao lưu (Backup) toàn vẹn
Toàn bộ dữ liệu của Gitea cùng cơ sở dữ liệu PostgreSQL đã được gắn vào thư mục cục bộ ~/gitea-server trên máy chủ. Bạn có thể áp dụng phương pháp đóng gói sao lưu dữ liệu máy chủ bằng cách nén toàn bộ thư mục này:
cd ~ tar -czvf gitea-backup-$(date +%F).tar.gz gitea-server
Để tự động hóa hoàn toàn, bạn nên thiết lập tác vụ này chạy định kỳ hằng đêm thông qua tiện ích lập lịch Cronjob trên máy chủ Linux, sau đó sử dụng công cụ như rclone để chuyển tiếp gói tin nén sang các hệ thống lưu trữ ngoài như Google Drive hoặc S3.
Quy trình nâng cấp phiên bản Gitea an toàn
Khi nhà phát triển công bố các bản cập nhật tính năng mới hoặc vá lỗ hổng bảo mật, bạn có thể nâng cấp hệ thống mà không làm mất mát dữ liệu theo các bước:
- Chỉnh sửa tệp
docker-compose.ymlvà thay đổi tag phiên bản image (ví dụ cập nhật từ1.25.3sang phiên bản mới hơn). - Tải image mới về máy chủ qua lệnh:
docker compose pull
- Khởi động lại các container để áp dụng bản cập nhật:
docker compose up -d
Docker sẽ tự động cập nhật container dựa trên image mới mà vẫn giữ nguyên vẹn dữ liệu trong các thư mục volume đã được lưu trữ trên ổ đĩa của VPS.
Thông qua bài Hướng dẫn cài Gitea/Git Server trên Ubuntu VPS chi tiết này, bạn đã nắm vững toàn bộ quy trình từ chuẩn bị máy chủ, triển khai container Docker, định tuyến Nginx cho đến tự động hóa sao lưu định kỳ. Việc làm chủ một hệ thống Git Server riêng biệt không chỉ giúp cắt giảm chi phí thuê ngoài mà còn bảo vệ an toàn cho tài sản sở hữu trí tuệ của doanh nghiệp. Hãy bắt đầu chuẩn bị một môi trường máy chủ ổn định để xây dựng kho mã nguồn an toàn cho đội ngũ của mình.
Cần một VPS giá rẻ để bắt đầu?
Chọn cấu hình vừa đủ nhu cầu, ưu tiên chi phí dễ tiếp cận và khả năng quản trị riêng.
Nội dung hướng dẫn trên được biên soạn cho mục đích tham khảo kỹ thuật. Các câu lệnh, quy chuẩn cấu hình và biến môi trường có thể có sự thay đổi tùy theo bản phân phối hệ điều hành, phiên bản phần mềm cũng như môi trường thực tế của bạn. Đội ngũ quản trị nên thực hiện kiểm thử trên môi trường staging, sao lưu toàn bộ dữ liệu dự án trước khi đưa vào ứng dụng cho hệ thống production chính thức.



