تثبيت Gitea / Forgejo: خادم Git المستضاف ذاتياً
تثبيت Gitea أو Forgejo عبر Docker، إدارة المستودعات، CI/CD (Gitea Actions)، تكوين مفاتيح SSH، إدارة المنظمات والفرق، المرايا والـ webhook.
جدول المحتويات
تثبيت Gitea / Forgejo: خادم Git المستضاف ذاتياً
Gitea وForgejo هما بديلان مفتوحا المصدر وخفيفا الوزن ومستضافان ذاتياً لـ GitHub وGitLab. يمكنك استضافة مستودعات Git على خادمك الخاص، وتشغيل خطوط CI/CD، والتعاون في الكود مع فريقك. Forgejo هو فرع من Gitea يركز على المجتمع، وكلاهما متوافقان إلى حد بعيد مع بعضهما.
Gitea مقابل Forgejo
| الميزة | Gitea | Forgejo |
|---|---|---|
| الترخيص | MIT | GPL-3.0 |
| الإدارة | مدعوم من شركة | يديره المجتمع |
| التوافق | التطبيق المرجعي | متوافق مع Gitea |
| التحديثات | منتظمة | أكثر تكراراً |
| موصى به لـ | المؤسسات | المجتمع |
كلا المشروعين يستخدمان نفس هيكل docker-compose؛ يختلف فقط اسم الصورة.
متطلبات النظام
- خادم مثبت عليه Docker وDocker Compose
- 512 ميغابايت من الذاكرة العشوائية كحد أدنى (يُنصح بـ 1 غيغابايت)
- PostgreSQL أو MySQL (موصى به) أو SQLite
- المنفذ 22 أو منفذ مخصص للوصول عبر SSH
التثبيت باستخدام Docker
docker-compose.yml (Gitea)
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
# فقط غيّر سطر image:
image: codeberg.org/forgejo/forgejo:latest
# تشغيل الحاوية
docker compose up -d
# فحص السجلات
docker logs gitea -f
Nginx Reverse Proxy
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:
- إعدادات قاعدة البيانات تُملأ تلقائياً (من env)
- الإعدادات العامة: عنوان الموقع، بريد المشرف
- أنشئ حساب المشرف
- أكمل الإعداد
التكوين المتقدم عبر app.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 للمستخدم
# إنشاء مفتاح SSH
ssh-keygen -t ed25519 -C "user@example.com"
# نسخ المفتاح العام
cat ~/.ssh/id_ed25519.pub
في Gitea: الملف الشخصي → الإعدادات → مفاتيح SSH/GPG → إضافة مفتاح SSH
الاستنساخ عبر SSH
# الاستنساخ عبر 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
إدارة المستودعات
إنشاء مستودع
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
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
ملف سير العمل
# .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
إدارة المنظمات والفرق
إنشاء منظمة:
+ → منظمة جديدة → الاسم والرؤية
إنشاء فريق:
المنظمة → الفرق → فريق جديد
- الأذونات: مالك، مشرف، كتابة، قراءة
- الوصول إلى المستودع: محدد أو الكل
دعوة عضو:
الفريق → الأعضاء → إضافة مستخدم
النسخ الاحتياطي
# نسخ احتياطي لبيانات 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 غيغابايت من الذاكرة مثالي للفرق الصغيرة والمتوسطة.
مقالات ذات صلة
تثبيت Coolify: نشر التطبيقات مع PaaS المستضاف ذاتياً
تثبيت Coolify، تكامل Docker وGit، نشر التطبيقات، إدارة قواعد البيانات، شهادات SSL، متغيرات البيئة وبديل PaaS المستضاف ذاتياً لـ Heroku/Netlify.
تثبيت Nextcloud: التخزين السحابي المستضاف ذاتياً والتعاون
تثبيت Nextcloud مع Docker، تهيئة Apache/Nginx، إعداد قاعدة البيانات، شهادة SSL، مزامنة الملفات، متجر التطبيقات وتحسين الأداء.
إدارة Docker مع Portainer: التحكم في الحاويات عبر واجهة الويب
تثبيت Portainer CE، إدارة Docker وKubernetes، نشر الـ stacks، إدارة الأحجام/الشبكات، تفويض المستخدمين، Webhooks وتكامل GitOps.