تثبيت Coolify: نشر التطبيقات مع PaaS المستضاف ذاتياً
تثبيت Coolify، تكامل Docker وGit، نشر التطبيقات، إدارة قواعد البيانات، شهادات SSL، متغيرات البيئة وبديل PaaS المستضاف ذاتياً لـ Heroku/Netlify.
تثبيت Gitea أو Forgejo عبر Docker، إدارة المستودعات، CI/CD (Gitea Actions)، تكوين مفاتيح SSH، إدارة المنظمات والفرق، المرايا والـ webhook.
Gitea وForgejo هما بديلان مفتوحا المصدر وخفيفا الوزن ومستضافان ذاتياً لـ GitHub وGitLab. يمكنك استضافة مستودعات Git على خادمك الخاص، وتشغيل خطوط CI/CD، والتعاون في الكود مع فريقك. Forgejo هو فرع من Gitea يركز على المجتمع، وكلاهما متوافقان إلى حد بعيد مع بعضهما.
| الميزة | Gitea | Forgejo |
|---|---|---|
| الترخيص | MIT | GPL-3.0 |
| الإدارة | مدعوم من شركة | يديره المجتمع |
| التوافق | التطبيق المرجعي | متوافق مع Gitea |
| التحديثات | منتظمة | أكثر تكراراً |
| موصى به لـ | المؤسسات | المجتمع |
كلا المشروعين يستخدمان نفس هيكل docker-compose؛ يختلف فقط اسم الصورة.
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:
# فقط غيّر سطر image:
image: codeberg.org/forgejo/forgejo:latest
# تشغيل الحاوية
docker compose up -d
# فحص السجلات
docker logs gitea -f
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:
[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-keygen -t ed25519 -C "user@example.com"
# نسخ المفتاح العام
cat ~/.ssh/id_ed25519.pub
في Gitea: الملف الشخصي → الإعدادات → مفاتيح SSH/GPG → إضافة مفتاح 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 ساعات
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 غيغابايت من الذاكرة مثالي للفرق الصغيرة والمتوسطة.
كلاهما متطابقان تقنياً تقريباً. Forgejo هو فرع من Gitea يديره المجتمع ويتلقى تحديثات أكثر تكراراً. قد يُفضَّل Gitea للدعم المؤسسي أو الاستخدام التجاري. يُنصح بـ Forgejo لمن يفضلون البرمجيات الحرة الموجهة للمجتمع. كلاهما متوافقان مع نفس العملاء والأدوات.
إذا كان منفذ SSH مضبوطاً على 2222، يجب تحديد المنفذ في أمر git clone: ssh://git@git.example.com:2222/user/repo.git. يمكنك إضافة إدخال Host إلى ~/.ssh/config لاستخدام المنفذ تلقائياً. تحقق من أن المنفذ 2222 مفتوح في جدار حماية الخادم.
تحقق من أن حاوية runner تعمل: docker ps | grep runner. تأكد من صحة قيمة GITEA_RUNNER_REGISTRATION_TOKEN. راجع سجلات runner: docker logs gitea-runner. تحقق من إمكانية الوصول إلى URL مثيل Gitea من runner. أعد تشغيل الحاوية لإعادة تسجيل runner.
زد client_max_body_size في Nginx (مثلاً: 512M أو 1G). أضف MAX_CREATION_LIMIT إلى قسم [server] في app.ini لـ Gitea. فكّر في استخدام Git LFS: git lfs install && git lfs track '*.zip'. تحقق من تفعيل دعم LFS في Gitea.
استخدم ميزة Migrate في Gitea: مستودع جديد → ترحيل → GitHub. يمكنك أيضاً ترحيل المستودعات الخاصة باستخدام GitHub Personal Access Token. مع خيار Mirror، تتزامن التغييرات على GitHub تلقائياً. تُحفظ جميع الفروع والعلامات وتاريخ الإيداعات.
خذ نسخة احتياطية قبل التحديث: docker exec gitea gitea dump. ثم حدّث بـ docker compose pull && docker compose up -d. يُجري Gitea ترحيلات قاعدة البيانات تلقائياً. عند القفز بين إصدارات كبيرة (مثلاً: 1.19 → 1.21)، قد تحتاج إلى المرور بالإصدارات الوسيطة واحداً تلو الآخر. اقرأ ملاحظات الإصدار دائماً.
تثبيت Coolify، تكامل Docker وGit، نشر التطبيقات، إدارة قواعد البيانات، شهادات SSL، متغيرات البيئة وبديل PaaS المستضاف ذاتياً لـ Heroku/Netlify.
تثبيت Nextcloud مع Docker، تهيئة Apache/Nginx، إعداد قاعدة البيانات، شهادة SSL، مزامنة الملفات، متجر التطبيقات وتحسين الأداء.
تثبيت Portainer CE، إدارة Docker وKubernetes، نشر الـ stacks، إدارة الأحجام/الشبكات، تفويض المستخدمين، Webhooks وتكامل GitOps.