پرش به محتوا

سرور Git سازمانی با Gitea و Docker Compose

Gitea را با PostgreSQL در Docker Compose اجرا کنید، دسترسی SSH به مخازن را روی پورت جداگانه بدهید، آن را پشت Nginx با HTTPS بگذارید و بکاپ بگیرید.

Ubuntu 24.04 LTSسطح: متوسطبرای: Ubuntu 24.04 LTS، Ubuntu 26.04 LTS، Ubuntu 22.04 LTSبه‌روزرسانی: ۱۷ آبان ۱۴۰۵

Gitea یک سرور Git سبک با رابط وب، Pull Request، Issue و CI (Gitea Actions) است و روی یک سرور کوچک هم خوب اجرا می‌شود. این آموزش فرض می‌کند Docker و Compose نصب است (آموزش Docker را ببینید).

۱. فایل Compose

/opt/gitea/compose.yaml:

yaml
services:
  db:
    image: postgres:17
    restart: unless-stopped
    environment:
      POSTGRES_USER: gitea
      POSTGRES_PASSWORD: ${DB_PASSWORD}
      POSTGRES_DB: gitea
    volumes:
      - ./postgres:/var/lib/postgresql/data

  gitea:
    image: gitea/gitea:1.24
    restart: unless-stopped
    depends_on: [db]
    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: ${DB_PASSWORD}
      GITEA__server__DOMAIN: git.sahor.ir
      GITEA__server__ROOT_URL: https://git.sahor.ir/
      GITEA__server__SSH_DOMAIN: git.sahor.ir
      GITEA__server__SSH_PORT: "2222"
      GITEA__service__DISABLE_REGISTRATION: "true"
    volumes:
      - ./data:/data
    ports:
      - "127.0.0.1:3000:3000"
      - "2222:22"

نسخه را به یک شاخه‌ی مشخص (اینجا 1.24) قفل کنید و آن را آگاهانه ارتقا دهید. پیش از ارتقا، تازه‌ترین نسخه‌ی پایدار را در صفحه‌ی انتشار Gitea بررسی کنید.

bash
cd /opt/gitea
echo "DB_PASSWORD=$(openssl rand -hex 16)" > .env && chmod 600 .env
docker compose up -d
docker compose logs -f gitea

پورت وب فقط روی localhost است و از بیرون فقط از طریق Nginx در دسترس است.

۲. Nginx و HTTPS

/etc/nginx/sites-available/git.sahor.ir:

nginx
server {
    listen 80;
    server_name git.sahor.ir;
    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;
    }
}
bash
sudo ln -s /etc/nginx/sites-available/git.sahor.ir /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
sudo certbot --nginx -d git.sahor.ir
sudo ufw allow 2222/tcp

client_max_body_size برای push کردن مخازن بزرگ لازم است.

۳. راه‌اندازی اولیه

نشانی https://git.sahor.ir را باز کنید. چون تنظیمات از متغیرهای محیطی آمده، فقط حساب مدیر را بسازید. یا از خط فرمان:

bash
docker compose exec -u git gitea gitea admin user create --admin --username ali --email ali@sahor.ir --random-password

۴. استفاده با SSH

کاربر کلید عمومی‌اش را در Settings › SSH Keys اضافه می‌کند. بعد:

bash
git clone ssh://git@git.sahor.ir:2222/ali/infra.git

۵. بکاپ

bash
cd /opt/gitea
docker compose exec -u git gitea gitea dump -c /data/gitea/conf/app.ini -f /data/gitea-dump.zip
docker compose exec db pg_dump -U gitea gitea | gzip > /var/backups/gitea-db-$(date +%F).sql.gz
mv data/gitea-dump.zip /var/backups/gitea-$(date +%F).zip

پوشه‌های data و postgres را هم در بکاپ فایل‌محور (مثلاً restic) بگذارید.