انتقل إلى المحتوى الرئيسي
العودة إلى الفئة

تثبيت Gitea / Forgejo: خادم Git المستضاف ذاتياً

تثبيت Gitea أو Forgejo عبر Docker، إدارة المستودعات، CI/CD (Gitea Actions)، تكوين مفاتيح SSH، إدارة المنظمات والفرق، المرايا والـ webhook.

وقت القراءة: 14 دقيقة الاستضافة الذاتية
giteaforgejogitself-hostingdockerci/cdمستودع

جدول المحتويات

تثبيت Gitea / Forgejo: خادم Git المستضاف ذاتياً

Gitea وForgejo هما بديلان مفتوحا المصدر وخفيفا الوزن ومستضافان ذاتياً لـ GitHub وGitLab. يمكنك استضافة مستودعات Git على خادمك الخاص، وتشغيل خطوط CI/CD، والتعاون في الكود مع فريقك. Forgejo هو فرع من Gitea يركز على المجتمع، وكلاهما متوافقان إلى حد بعيد مع بعضهما.

Gitea مقابل Forgejo

الميزةGiteaForgejo
الترخيصMITGPL-3.0
الإدارةمدعوم من شركةيديره المجتمع
التوافقالتطبيق المرجعيمتوافق مع Gitea
التحديثاتمنتظمةأكثر تكراراً
موصى به لـالمؤسساتالمجتمع

كلا المشروعين يستخدمان نفس هيكل docker-compose؛ يختلف فقط اسم الصورة.

متطلبات النظام

  • خادم مثبت عليه Docker وDocker Compose
  • 512 ميغابايت من الذاكرة العشوائية كحد أدنى (يُنصح بـ 1 غيغابايت)
  • PostgreSQL أو MySQL (موصى به) أو SQLite
  • المنفذ 22 أو منفذ مخصص للوصول عبر SSH

التثبيت باستخدام Docker

docker-compose.yml (Gitea)

hljs yaml
version: '3.8'

services:
  gitea:
    image: gitea/gitea:latest
    container_name: gitea
    restart: unless-stopped
    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__server__DOMAIN=git.example.com
      - GITEA__server__SSH_DOMAIN=git.example.com
      - GITEA__server__ROOT_URL=https://git.example.com/
      - GITEA__server__SSH_PORT=2222
    volumes:
      - ./gitea-data:/data
      - /etc/timezone:/etc/timezone:ro
      - /etc/localtime:/etc/localtime:ro
    ports:
      - "127.0.0.1:3000:3000"
      - "2222:22"
    depends_on:
      - db

  db:
    image: postgres:15
    container_name: gitea-db
    restart: unless-stopped
    environment:
      POSTGRES_DB: gitea
      POSTGRES_USER: gitea
      POSTGRES_PASSWORD: كلمة-مرور-قوية
    volumes:
      - postgres-data:/var/lib/postgresql/data

volumes:
  postgres-data:

التبديل إلى Forgejo

hljs yaml
# فقط غيّر سطر image:
image: codeberg.org/forgejo/forgejo:latest
hljs bash
# تشغيل الحاوية
docker compose up -d

# فحص السجلات
docker logs gitea -f

Nginx Reverse Proxy

hljs nginx
server {
    listen 80;
    server_name git.example.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name git.example.com;

    ssl_certificate /etc/letsencrypt/live/git.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/git.example.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;
    }
}

الإعداد الأولي

بعد التثبيت، انتقل إلى https://git.example.com:

  1. إعدادات قاعدة البيانات تُملأ تلقائياً (من env)
  2. الإعدادات العامة: عنوان الموقع، بريد المشرف
  3. أنشئ حساب المشرف
  4. أكمل الإعداد

التكوين المتقدم عبر app.ini

hljs ini
[server]
DOMAIN = git.example.com
ROOT_URL = https://git.example.com/
SSH_DOMAIN = git.example.com
SSH_PORT = 2222
DISABLE_SSH = false

[service]
DISABLE_REGISTRATION = true
REQUIRE_SIGNIN_VIEW = false

[mailer]
ENABLED = true
FROM = gitea@example.com
SMTP_ADDR = smtp.example.com
SMTP_PORT = 587
USER = gitea@example.com
PASSWD = كلمة-مرور-smtp

تكوين مفاتيح SSH

إضافة مفتاح SSH للمستخدم

hljs bash
# إنشاء مفتاح SSH
ssh-keygen -t ed25519 -C "user@example.com"

# نسخ المفتاح العام
cat ~/.ssh/id_ed25519.pub

في Gitea: الملف الشخصيالإعداداتمفاتيح SSH/GPGإضافة مفتاح SSH

الاستنساخ عبر SSH

hljs bash
# الاستنساخ عبر SSH (المنفذ 2222)
git clone ssh://git@git.example.com:2222/user/repo.git

# التبسيط مع ~/.ssh/config
Host git.example.com
  HostName git.example.com
  User git
  Port 2222
  IdentityFile ~/.ssh/id_ed25519

# بعد الإعداد
git clone git@git.example.com:user/repo.git

إدارة المستودعات

إنشاء مستودع

hljs bash
mkdir myproject && cd myproject
git init
git add .
git commit -m "الإيداع الأول"
git remote add origin https://git.example.com/user/myproject.git
git push -u origin main

مستودع المرآة

مستودع جديد → ترحيل → GitHub/GitLab/Bitbucket
- URL الاستنساخ: https://github.com/user/repo.git
- مرآة (مزامنة تلقائية): مفعّل
- فترة المزامنة: 8 ساعات

Gitea Actions (CI/CD)

إعداد Actions Runner

hljs yaml
runner:
  image: gitea/act_runner:latest
  container_name: gitea-runner
  restart: unless-stopped
  environment:
    - GITEA_INSTANCE_URL=https://git.example.com
    - GITEA_RUNNER_REGISTRATION_TOKEN=RUNNER_TOKEN
    - GITEA_RUNNER_NAME=my-runner
  volumes:
    - ./runner-data:/data
    - /var/run/docker.sock:/var/run/docker.sock

ملف سير العمل

hljs yaml
# .gitea/workflows/ci.yml
name: CI Pipeline

on:
  push:
    branches: [main, develop]
  pull_request:
    branches: [main]

jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3

      - name: إعداد Node.js
        uses: actions/setup-node@v3
        with:
          node-version: '20'

      - name: تثبيت التبعيات
        run: npm ci

      - name: تشغيل الاختبارات
        run: npm test

      - name: البناء
        run: npm run build

إدارة المنظمات والفرق

إنشاء منظمة:
+ → منظمة جديدة → الاسم والرؤية

إنشاء فريق:
المنظمة → الفرق → فريق جديد
- الأذونات: مالك، مشرف، كتابة، قراءة
- الوصول إلى المستودع: محدد أو الكل

دعوة عضو:
الفريق → الأعضاء → إضافة مستخدم

النسخ الاحتياطي

hljs bash
# نسخ احتياطي لبيانات Gitea
docker exec gitea gitea dump -c /data/gitea/conf/app.ini

# نسخ احتياطي لقاعدة البيانات
docker exec gitea-db pg_dump -U gitea gitea > gitea-db-$(date +%Y%m%d).sql

# دليل البيانات الكامل
tar -czf gitea-backup-$(date +%Y%m%d).tar.gz ./gitea-data/

مع Gitea/Forgejo على خوادم REXE VPS، يمكنك إدارة البنية التحتية الكاملة لكود فريقك. 1 غيغابايت من الذاكرة مثالي للفرق الصغيرة والمتوسطة.