ติดตั้ง Gitea Git Server ส่วนตัวบน VPS
Gitea คือ self-hosted Git service น้ำหนักเบาคล้าย GitHub แต่ติดตั้งบน VPS ตัวเองได้ รองรับ repository, issue tracker, pull request, webhook และ organization เขียนด้วย Go จึงใช้ RAM น้อยมาก VPS 1GB สามารถรัน Gitea ได้สบายๆ พร้อม repository หลายร้อย repo
ติดตั้ง Gitea ด้วย Binary โดยตรง
# สร้าง user สำหรับ Gitea
sudo adduser --system --shell /bin/bash --gecos 'Git Version Control' --group --disabled-password --home /home/git git
# สร้าง directory
sudo mkdir -p /var/lib/gitea/{custom,data,log}
sudo chown -R git:git /var/lib/gitea/
sudo chmod -R 750 /var/lib/gitea/
sudo mkdir /etc/gitea
sudo chown root:git /etc/gitea
sudo chmod 770 /etc/gitea
# Download Gitea binary (ตรวจ version ล่าสุดที่ gitea.io)
wget -O /tmp/gitea https://dl.gitea.com/gitea/1.21.11/gitea-1.21.11-linux-amd64
sudo chmod +x /tmp/gitea
sudo mv /tmp/gitea /usr/local/bin/gitea
สร้าง systemd Service
sudo nano /etc/systemd/system/gitea.service
[Unit]
Description=Gitea (Git with a cup of tea)
After=syslog.target network.target mysql.service
[Service]
RestartSec=2s
Type=simple
User=git
Group=git
WorkingDirectory=/var/lib/gitea/
ExecStart=/usr/local/bin/gitea web --config /etc/gitea/app.ini
Restart=always
Environment=USER=git HOME=/home/git GITEA_WORK_DIR=/var/lib/gitea
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now gitea
ตั้ง Nginx Reverse Proxy + TLS
sudo nano /etc/nginx/sites-available/gitea
server {
listen 443 ssl;
server_name git.yourdomain.com;
ssl_certificate /etc/letsencrypt/live/git.yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/git.yourdomain.com/privkey.pem;
client_max_body_size 512M;
location / {
proxy_pass http://127.0.0.1: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;
}
}
server {
listen 80;
server_name git.yourdomain.com;
return 301 https://$host$request_uri;
}
sudo certbot --nginx -d git.yourdomain.com
sudo ln -s /etc/nginx/sites-available/gitea /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
ตั้งค่าครั้งแรกผ่าน Web
เปิด browser ไปที่ https://git.yourdomain.com ระบบจะแสดง installation page ตั้งค่า:
- Database: SQLite3 (พอสำหรับการใช้งานส่วนตัว) หรือ MySQL/PostgreSQL
- Site URL:
https://git.yourdomain.com - SSH Server Port: 22 (ต้องเปิด port ใน firewall)
- สร้าง Admin Account แรก
# หลัง setup เสร็จ ล็อก config ไม่ให้แก้ผ่าน web
sudo chmod 750 /etc/gitea
sudo chmod 640 /etc/gitea/app.ini
ตรวจสอบว่า Gitea ทำงานถูกต้อง
# ตรวจ service status
sudo systemctl status gitea
# ตรวจ port 3000 เปิดอยู่
sudo ss -tulnp | grep 3000
# ดู log
sudo journalctl -u gitea -n 50
# ทดสอบ clone ผ่าน HTTPS
git clone https://git.yourdomain.com/youruser/yourrepo.git
/-/admin ให้ดู system info, user stats และ run maintenance tasks เช่น Git GC และ resync repository hooks
แก้ปัญหาที่พบบ่อย
Error: "repository not found" หลัง clone
ตรวจสิทธิ์ directory ของ Gitea data:
sudo chown -R git:git /var/lib/gitea/
ls -la /var/lib/gitea/data/
sudo systemctl restart gitea
SSH push ไม่ได้ (Permission denied)
ต้องเพิ่ม SSH key ใน Gitea account และ authorized_keys:
# ตรวจ authorized_keys
cat /home/git/.ssh/authorized_keys
# ควรมี gitea-internal command สำหรับแต่ละ key
# ถ้า SSH key ใน Gitea ไม่ sync ให้ resync
sudo -u git gitea admin regenerate keys -c /etc/gitea/app.ini
Gitea ช้ามากเมื่อมี repository ใหญ่
รัน Git GC เพื่อ optimize repository:
sudo -u git gitea admin git repositories gc -c /etc/gitea/app.ini
# หรือรัน gc เฉพาะ repo
cd /var/lib/gitea/data/repositories/user/repo.git
git gc --aggressive
Webhook ไม่ทำงาน (ERR_CONNECTION_REFUSED)
Gitea บล็อก localhost webhook โดย default ตั้งใน app.ini:
sudo nano /etc/gitea/app.ini
[webhook]
ALLOWED_HOST_LIST = external,loopback
sudo systemctl restart gitea
คำถามที่พบบ่อย
Gitea กับ GitLab CE ต่างกันอย่างไร?
Gitea ใช้ RAM น้อยกว่ามาก (ประมาณ 100-200MB เทียบกับ 2-4GB ของ GitLab) Gitea เหมาะสำหรับ VPS ขนาดเล็กและทีมเล็ก GitLab CE มี built-in CI/CD ที่แข็งแกร่งกว่าและ feature ครบกว่าสำหรับ enterprise
Backup Gitea ทำอย่างไร?
ใช้คำสั่ง dump ในตัวของ Gitea ซึ่งจะ backup ทั้ง repository, database, config และ attachments ออกมาเป็นไฟล์ zip เดียว:
sudo -u git gitea dump -c /etc/gitea/app.ini -w /tmp
Migrate repository จาก GitHub มา Gitea ได้ไหม?
ได้ ไปที่ Explore > Migrate Repository เลือก source platform เป็น GitHub ใส่ token และ repo URL Gitea จะ clone ทั้ง code, issues, labels, milestones และ wiki มาให้ครบ