Cài đặt Gitea: Tự xây dựng Git Server “ngon – bổ – rẻ” cho riêng mình

Git tutorial - IT technology blog
Git tutorial - IT technology blog

6 tháng “chung sống” cùng Gitea: Tại sao mình chia tay GitLab?

Ngày đầu lập team làm outsource, mình từng ham hố cài GitLab vì “nghe đồn” nó chuyên nghiệp nhất. Sai lầm bắt đầu từ đó. Con VPS 4GB RAM giá $20/tháng lúc ấy thường xuyên đứng hình, CPU nhảy vọt lên 100% mỗi khi anh em push code. Sau một tuần stress, mình quyết định chuyển sang Gitea và nhận ra đây mới thực sự là chân ái.

Gitea được viết bằng Go nên cực kỳ nhẹ. Chạy thực tế cho team 10 người, mình soi lại tài nguyên thì thấy nó chỉ ngốn vỏn vẹn 120MB – 150MB RAM. Bạn hoàn toàn có thể chạy Gitea mượt mà trên một con VPS $5/tháng (1GB RAM) mà vẫn có đủ Pull Request, Issue, Wiki và Kanban board chẳng kém gì GitHub.

Triển khai nhanh: Gitea lên sóng trong 5 phút với Docker Compose

Dùng Docker là cách nhanh nhất để quản lý môi trường. Sau này cần nâng cấp server, bạn chỉ việc bê nguyên folder đi là xong. Dưới đây là file cấu hình mình đã tinh chỉnh để chạy ổn định cho môi trường production.

version: "3"

networks:
  gitea:
    external: false

services:
  server:
    image: gitea/gitea:1.21.7
    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=gitea_password
    restart: always
    networks:
      - gitea
    volumes:
      - ./data:/data
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    ports:
      - "3000:3000"
      - "2222:22"
    depends_on:
      - db

  db:
    image: postgres:15-alpine
    restart: always
    environment:
      - POSTGRES_USER=gitea
      - POSTGRES_PASSWORD=gitea_password
      - POSTGRES_DB=gitea
    networks:
      - gitea
    volumes:
      - ./postgres:/var/lib/postgresql/data

Việc còn lại rất đơn giản. Bạn lưu file thành docker-compose.yml và chạy lệnh:

docker-compose up -d

Bây giờ, hãy mở trình duyệt và truy cập http://IP-SERVER:3000. Giao diện cài đặt trực quan sẽ hiện ra ngay lập tức.

Cấu hình chuẩn để chạy dự án thực tế

1. Chọn Database: PostgreSQL là bắt buộc

Dùng cá nhân lưu dăm ba cái script linh tinh? SQLite cân tốt. Tuy nhiên, nếu xác định làm dự án nghiêm túc hoặc dùng cho team, hãy chọn PostgreSQL. Nó giúp Gitea xử lý các thao tác đồng thời (concurrent) ổn định hơn và việc backup dữ liệu cũng an tâm hơn nhiều.

2. Xử lý SSH Port (Né đụng hàng với Host)

Port 22 mặc định thường bị chiếm dụng để login vào server. Trong file cấu hình trên, mình map port 2222:22. Khi clone code, link SSH của bạn sẽ trông như thế này: ssh://[email protected]:2222/user/repo.git.

Mẹo nhỏ: Trong bước cài đặt đầu tiên trên web, hãy điền đúng SSH_DOMAINSSH_PORT=2222 để Gitea tự sinh link clone chuẩn cho anh em copy.

Chặn port 3000 bằng Nginx và SSL

Dùng port 3000 trông rất thiếu chuyên nghiệp và kém bảo mật. Mình luôn dùng Nginx để làm Proxy và cài SSL miễn phí từ Let’s Encrypt. Template cấu hình như sau:

server {
    listen 80;
    server_name git.yourdomain.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;
    }
}

Chỉ cần gõ thêm certbot --nginx, hệ thống sẽ tự động cấp chứng chỉ HTTPS. Repo của bạn lúc này đã sẵn sàng tại https://git.yourdomain.com.

Tự động hóa với Gitea Actions (CI/CD)

Gitea Actions dùng cú pháp YAML y hệt GitHub Actions nên bạn sẽ không mất thời gian học lại. Thay vì cài Jenkins nặng nề, bạn chỉ cần một con gitea-runner nhỏ gọn để tự động build Docker image và deploy mỗi khi merge code vào nhánh chính.

Kinh nghiệm “xương máu” từ thực tế

Đừng bao giờ tin vào ổ cứng VPS

Mình từng mất trắng 2 ngày code vì ổ cứng VPS bị hỏng đột ngột mà không có bản backup mới nhất. Từ đó, mình luôn chạy cronjob để dump dữ liệu hàng đêm. Lệnh backup nhanh trong Docker bạn có thể dùng:

docker exec -u 1000 gitea /app/gitea/gitea dump -c /data/gitea/conf/app.ini

File zip tạo ra chứa toàn bộ code, database và cấu hình. Hãy đẩy file này lên một server khác hoặc S3 để kê gối ngủ ngon.

Cứu nguy nhờ Branch Protection

Đã bao giờ bạn thót tim vì một đồng nghiệp “lỡ tay” git push --force đè nát nhánh main chưa? Hãy vào Settings -> Branches -> Add Rule cho nhánh main ngay lập tức. Cấm force push và yêu cầu phải qua Pull Request mới được merge. Một thao tác nhỏ nhưng sẽ cứu bạn khỏi những thảm họa không đáng có.

Gitea thực sự là khoản đầu tư hời nhất cho các team nhỏ muốn làm chủ mã nguồn mà không muốn tốn phí hàng tháng. Hy vọng những chia sẻ này giúp bạn tự tin hơn khi tự xây dựng “nhà kho” code riêng cho mình.

Share: