SELF HOSTING

Hướng dẫn cài đặt Gitea toàn tập: Tự xây dựng “GitHub” cho riêng bạn

Dạo gần đây lướt FB bạn có hay thấy các vụ vibe coding rồi lộ API Key của OpenAI / Gemini trên Github không? Dù GitHub hay GitLab rất tốt, nhưng nó có các vấ đề giới hạn repository riêng tư (private repo), size project. Nếu bạn thích hoặc tò mò vibe coding với AI mà chưa có nền tảng cơ bản thì nên self-hosted một server cho riêng mình, để tránh những vấn đề về lỗ hổng kiến thức gây ra.

Gitea chính là sự thay thế Github. Hãy tưởng tượng bạn có một phiên bản GitHub thu nhỏ, chạy ngay trên chiếc máy tính cũ ở nhà, trên một VPS giá rẻ, hay thậm chí là một chiếc Raspberry Pi nhỏ xíu. Nó nhanh, nhẹ, miễn phí và quan trọng nhất: Nó là của bạn, do bạn nắm quyền kiểm soát.

Trong bài viết này, chúng ta sẽ cùng nhau đi từ A đến Z để dựng một server Git mạnh mẽ với Gitea. Pha một cốc cà phê và bắt đầu nhé!

Gitea là gì?

Gitea (Git with a cup of tea) là một dự án mã nguồn mở được viết bằng ngôn ngữ Go. Chính vì được viết bằng Go, nó thừa hưởng sự hiệu quả, tốc độ và khả năng biên dịch thành một file binary duy nhất chạy trên mọi nền tảng.

Khác với GitLab (vốn rất mạnh nhưng ngốn RAM khủng khiếp), Gitea được thiết kế để tiết kiệm tài nguyên tối đa.

Những tính năng chính của Gitea

Dù nhẹ, nhưng Gitea không hề thiếu tính năng. Nó có gần như mọi thứ bạn cần cho quy trình phát triển phần mềm:

  • Quản lý Repository: Tạo, fork, mirror code dễ dàng.
  • Issue Tracking: Quản lý lỗi, task, label không thua kém Jira hay GitHub Issues.
  • Pull Request & Code Review: Quy trình duyệt code chuyên nghiệp.
  • CI/CD: Tích hợp sẵn Gitea Actions (tương tự GitHub Actions) để tự động hóa.
  • Package Registry: Lưu trữ Docker image, npm package, maven… ngay trên server của bạn.

Tại sao nên chọn Gitea thay vì GitHub?

Mình không phủ nhận GitHub là vua, nhưng Gitea là “lãnh chúa” trong vùng đất của riêng bạn. Đây là lý do:

1. Chi phí = “0 đồng”

GitHub miễn phí cho cá nhân, nhưng khi bạn cần các tính năng nâng cao cho tổ chức, chi phí sẽ tính theo đầu người. Với Gitea, bạn có thể tạo hàng ngàn user, hàng triệu private repository mà không tốn một xu phí bản quyền.

2. Quyền riêng tư tuyệt đối

Code của bạn nằm trên ổ cứng của bạn. Không có nhân viên Microsoft hay bot AI nào quét qua code của bạn cả. Đây là yếu tố sống còn với các dự án cần bảo mật cao (fintech, crypto, bí mật kinh doanh).

3. Hiệu năng ấn tượng

Mình đã từng chạy Gitea trên một con Raspberry Pi 3 với 1GB RAM cho team 5 người dùng. Nó vẫn chạy mượt mà. GitLab sẽ cần ít nhất 4GB RAM chỉ để khởi động.

4. Khả năng tùy biến

Bạn muốn đổi logo, đổi giao diện, hay chỉnh sửa flow làm việc? Vì là mã nguồn mở (MIT License), bạn có toàn quyền “xào nấu” Gitea theo ý thích.

Chuẩn bị hành trang

Trước khi bắt tay vào gõ lệnh, hãy đảm bảo bạn có đủ các yêu cầu sau. Đừng lo, nó rất nhẹ nhàng thôi.

Phần cứng

  • Server: VPS (Ubuntu/CentOS), máy tính cũ, hoặc Raspberry Pi.
  • RAM: Tối thiểu 1GB (thực tế 512MB vẫn chạy được nhưng 1GB cho thoải mái).
  • Disk: Tùy thuộc vào lượng code của bạn. 20GB là điểm khởi đầu tốt.

Phần mềm

Chúng ta sẽ sử dụng phương pháp hiện đại và sạch sẽ nhất: Docker & Docker Compose. Cách này giúp bạn dễ dàng cài đặt, nâng cấp và backup mà không làm “rác” hệ điều hành chính.

  • Hệ điều hành: Linux (Ubuntu 20.04 hoặc 22.04 LTS là tốt nhất).
  • Kiến thức: Biết sơ về dòng lệnh Linux (Terminal).

Hướng dẫn cài đặt chi tiết (Step-by-Step)

Mình sẽ hướng dẫn bạn cài đặt trên Ubuntu. Các hệ điều hành khác cũng tương tự.

Bước 1: Cài đặt Docker và Docker Compose

Đầu tiên, hãy cập nhật hệ thống và cài Docker. Mở terminal lên và gõ:

# Cập nhật danh sách gói phần mềm
sudo apt-get update
sudo apt-get upgrade -y

# Cài đặt Docker và Docker Compose
sudo apt-get install docker.io docker-compose -y

Mẹo nhỏ (Pro tip): Để không phải gõ sudo mỗi khi dùng lệnh docker (phiền phức lắm), hãy thêm user hiện tại vào nhóm docker:

sudo usermod -aG docker $USER
newgrp docker

Kiểm tra lại xem mọi thứ đã ổn chưa:

docker --version
docker-compose --version

Bước 2: Thiết lập thư mục và cấu hình

Chúng ta cần ngăn nắp. Hãy tạo một thư mục riêng cho Gitea.

mkdir -p ~/gitea
cd ~/gitea

Bây giờ, hãy tạo file “bản vẽ” docker-compose.yml. Đây là nơi chứa toàn bộ cấu hình container:

nano docker-compose.yml

Copy và paste nội dung sau vào (mình đã tối ưu hóa file config từ bài gốc để chuẩn chỉnh hơn):

networks:
  gitea:
    external: false

services:
  server:
    image: docker.gitea.com/gitea:1.25.3
    container_name: gitea
    environment:
      - USER_UID=1000
      - USER_GID=1000
      - GITEA__database__DB_TYPE=sqlite3
      - GITEA__server__ROOT_URL=http://your-domain-or-ip:3000/
      - GITEA__server__SSH_DOMAIN=your-domain-or-ip
    restart: always
    networks:
      - gitea
    volumes:
      - ./gitea:/data
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    ports:
      - "3000:3000"
      - "222:22"

Lưu ý quan trọng cần sửa:

  1. your-domain-or-ip: Thay bằng IP của VPS (ví dụ 192.168.1.50) hoặc domain của bạn (ví dụ git.cuongtech.com).
  2. GITEA__database__DB_TYPE=sqlite3: Với quy mô nhỏ và vừa, SQLite3 là quá đủ và cực kỳ dễ backup (chỉ là 1 file). Nếu bạn định phục vụ cả trăm người dùng, hãy cân nhắc đổi sang MySQL hoặc PostgreSQL.

Lưu file lại: Nhấn Ctrl + O -> Enter -> Ctrl + X.

Bước 3: Khởi động động cơ

Giờ là lúc hô biến:

docker-compose up -d

Lệnh này sẽ tải image Gitea về và chạy nó ngầm (-d). Bạn có thể kiểm tra xem nó còn sống hay không bằng lệnh:

docker-compose ps

Nếu thấy trạng thái là Up, chúc mừng bạn, server đã chạy!

Bước 4: Thiết lập ban đầu (Initial Setup)

Đây là bước thú vị nhất. Mở trình duyệt web lên và truy cập:
http://<IP-Cua-Ban>:3000

Bạn sẽ thấy giao diện cài đặt của Gitea. Đừng hoảng với nhiều trường thông tin, chỉ cần chú ý những chỗ này:

  1. Database Settings: Giữ nguyên SQLite3 (nếu bạn chọn ở bước trên).
  2. General Settings:
    • Site Title: Đặt tên cho ngầu vào, ví dụ “My Secret Base”.
    • SSH Server Domain: Điền IP hoặc Domain của bạn.
    • SSH Port: Điền 222 (Vì trong file docker-compose chúng ta map port 222 của máy chủ vào port 22 của container).
    • Gitea Base URL: http://<IP-Cua-Ban>:3000/.
  3. Administrator Account Settings: (Nằm cuối trang)
    • Hãy tạo ngay tài khoản Admin ở đây. Đừng bỏ qua, nếu không ai đăng ký đầu tiên sẽ thành admin đấy!

Nhấn Install Gitea. Đợi khoảng 10-30 giây, Gitea sẽ tự chuyển hướng bạn vào trang chủ.

Trải nghiệm và sử dụng

Bây giờ bạn đã là chủ nhân của hệ thống. Hãy thử tạo repository đầu tiên.

  1. Đăng nhập bằng tài khoản Admin.
  2. Nhấn dấu + ở góc trên bên phải -> New Repository.
  3. Đặt tên: hello-world.
  4. Chọn Private (thử tính năng riêng tư xem sao).
  5. Nhấn Create Repository.

Để đưa code lên, bạn làm y hệt như GitHub:

# Clone về máy (lưu ý port 222)
git clone ssh://git@your-domain-or-ip:222/username/hello-world.git

# Hoặc dùng HTTPS
git clone http://your-domain-or-ip:3000/username/hello-world.git

# Thử commit
cd hello-world
echo "Chao Gitea" > README.md
git add .
git commit -m "Commit dau tien"
git push origin main

Nâng cao: Bảo mật và vận hành (Production Ready)

Chạy được là một chuyện, chạy an toàn lại là chuyện khác. Dưới đây là những lời khuyên từ kinh nghiệm xương máu của mình.

1. Bật HTTPS với Nginx (Bắt buộc nếu public ra internet)

Đừng bao giờ để trần port 3000 ra internet mà không có SSL. Chúng ta sẽ dùng Nginx làm Reverse Proxy.

Cài Nginx và Certbot:

sudo apt-get install nginx certbot python3-certbot-nginx -y

Tạo file cấu hình Nginx:

sudo nano /etc/nginx/sites-available/gitea

Nội dung mẫu (hãy thay your-domain.com bằng domain thật):

server {
    listen 80;
    server_name your-domain.com;

    # Tự động chuyển hướng sang HTTPS
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    server_name your-domain.com;

    # Đường dẫn chứng chỉ (Certbot sẽ tự điền sau)
    ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;

    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;
    }
}

Sau đó chạy Certbot để lấy chứng chỉ SSL miễn phí:

sudo certbot --nginx -d your-domain.com

2. Chiến lược sao lưu (Backup)

Dữ liệu là vàng. Với Docker setup như trên, dữ liệu của bạn nằm trong thư mục ./gitea.

Script backup đơn giản:

# Tắt container để đảm bảo dữ liệu toàn vẹn
docker-compose down

# Nén thư mục lại
tar -czf backup-gitea-$(date +%F).tar.gz gitea/

# Bật lại
docker-compose up -d

Bạn nên đẩy file backup này lên Google Drive hoặc S3 định kỳ.

3. Cập nhật thường xuyên

Gitea ra bản mới rất đều. Để update, bạn chỉ cần:

docker-compose pull  # Kéo image mới về
docker-compose up -d # Chạy lại container với code mới

Quá đơn giản phải không?

Khắc phục sự cố thường gặp

  • Lỗi SSH Permission Denied: Kiểm tra xem bạn đã add Public Key vào Gitea chưa (Settings -> SSH/GPG Keys). Và nhớ là chúng ta dùng port 222 chứ không phải 22.
  • Không truy cập được web: Kiểm tra tường lửa (Firewall/UFW) xem đã mở port 3000 (hoặc 80/443 nếu dùng Nginx) chưa.
  • Container không start: Kiểm tra quyền sở hữu thư mục. chown thư mục data về đúng user ID mà container sử dụng (thường là 1000).

Vậy là bạn đã sở hữu một hệ thống Git server xịn xò, bảo mật và hoàn toàn miễn phí. Gitea không chỉ là một công cụ, nó là minh chứng cho việc bạn có thể làm chủ công nghệ thay vì phụ thuộc vào nó.

Nếu bạn gặp khó khăn ở bước nào, hoặc có những mẹo hay ho khi dùng Gitea, đừng ngần ngại chia sẻ ở phần bình luận bên dưới nhé. Mình sẽ rất vui được thảo luận cùng các bạn.

Chúc các bạn cài đặt thành công và code vui vẻ!

gitea, self-hosted, DevOps, docker, linux, git server, open-source, vibe code,

Duy Nghiện
Hãy làm khán giả, đừng làm nhân vật chính :)

You may also like

Nhận thông báo qua email
Nhận thông báo cho
guest

0 Bình luận
Mới nhất
Cũ nhất Nhiều like nhất
Phản hồi nội tuyến
Xem tất cả bình luận