ماذا يفعل Coder
يفصل Coder بين أمرين يُخلط بينهما كثيرًا: المحرر والبيئة. يبقى المحرر هو الذي تفضّله — VS Code في المتصفح أو على حاسوبك، أو بيئة JetBrains، أو طرفية بسيطة. أما البيئة فتعيش على الخادم: حاوية تضم الشيفرة واللغات وقواعد بيانات الاختبار وأدوات المشروع.
توصف هذه البيئة في قالب مكتوب بلغة Terraform. ينشره المدير مرة واحدة، ثم ينشئ كل مطوّر مساحة عمله من هذا القالب، ويشغّلها حين يعمل ويوقفها حين ينتهي. يتصل وكيل مثبّت في مساحة العمل بخادم Coder وينقل الطرفية والمنافذ وجلسات المحرر.
ما يقدّمه Coder
- مساحات عمل متطابقة — يعمل الجميع على البيئة نفسها، الموصوفة في قالب بإصدارات.
- قالب Docker متوفر — حاوية لكل مساحة عمل على الخادم، مع وحدة تخزين
/homeدائمة. - كل المحررات — code-server في المتصفح، وVS Code Remote-SSH، وJetBrains Gateway، و
coder ssh. - تحويل المنافذ — يفتح
coder port-forwardالتطبيق قيد التطوير على حاسوبك. - إيقاف تلقائي — تتوقف المساحات الخاملة حسب جدولة القالب.
- حسابات ودخول موحّد — حسابات محلية أو GitHub أو OpenID Connect.
Coder مقارنة بالخيارات الأخرى
مرّر الجدول أفقيًا
| Coder على VPS | code-server وحده | GitHub Codespaces | |
|---|---|---|---|
| المستخدمون | فريق بحسابات وأدوار | شخص واحد | حسابات GitHub |
| البيئة | قالب Terraform بإصدارات | الخادم نفسه | ملف devcontainer |
| المحررات | المتصفح وVS Code وJetBrains وSSH | المتصفح | المتصفح وVS Code وJetBrains |
| مكان الشيفرة | على خادمك | على خادمك | لدى GitHub |
| الكلفة | سعر الخادم | سعر الخادم | بساعة الحوسبة والتخزين |
المتطلبات
خادم Ubuntu 24.04 بذاكرة 2 غيغابايت وقرص 20 غيغابايت لمطوّر أو اثنين — وخطّط لـ 4 إلى 8 غيغابايت لفريق صغير —، مع Docker وإضافة Compose، ونطاق فرعي يشير إلى الخادم، مثل coder.example.com. لا غنى عن HTTPS: يتصل وكلاء مساحات العمل بالخادم على هذا العنوان، وتمر جلسات المحرر عبر WebSocket.
ثبّت Coder باستخدام Docker Compose
جهّز المجلد والأسرار
يحمل الملف
.envكلمة مرور قاعدة البيانات، ومعرّف مجموعة Docker على المضيف — ما يسمح للخادم باستخدام مقبس Docker دون العمل بصلاحيات root — والنطاق.mkdir -p /opt/coder && cd /opt/coder { echo "DB_PASSWORD=$(openssl rand -hex 16)" echo "DOCKER_GID=$(stat -c %g /var/run/docker.sock)" echo "DOMAIN=coder.example.com" } > .env chmod 600 .envاكتب الملف docker-compose.yml
خدمتان: خادم Coder الذي يتضمن Terraform، وPostgreSQL. لا يُنشر المنفذ إلا على الواجهة المحلية، وسيتولى nginx أمر HTTPS.
services: coder: image: ghcr.io/coder/coder:v2.39.0 restart: unless-stopped group_add: - "${DOCKER_GID}" depends_on: database: condition: service_healthy ports: - "127.0.0.1:7080:7080" environment: CODER_HTTP_ADDRESS: "0.0.0.0:7080" CODER_ACCESS_URL: "https://${DOMAIN}" CODER_PG_CONNECTION_URL: "postgresql://coder:${DB_PASSWORD}@database:5432/coder?sslmode=disable" CODER_TELEMETRY_ENABLE: "false" volumes: - /var/run/docker.sock:/var/run/docker.sock database: image: postgres:17.11-alpine restart: unless-stopped environment: POSTGRES_USER: coder POSTGRES_PASSWORD: ${DB_PASSWORD} POSTGRES_DB: coder volumes: - coder-db:/var/lib/postgresql/data healthcheck: test: ["CMD-SHELL", "pg_isready -U coder -d coder"] interval: 5s retries: 12 volumes: coder-db: {}شغّل وتحقق
ينشئ التشغيل الأول مخطط قاعدة البيانات في ثوانٍ.
docker compose up -d docker compose logs -f coder # attendre « View the Web UI » curl -fsS http://127.0.0.1:7080/healthz
مقبس Docker يمنح مفاتيح الخادم
ينشئ Coder مساحات العمل عبر مقبس Docker، ويستطيع كل من يعدّل قالبًا تشغيل أي حاوية على الخادم — أي التصرف بصلاحيات root على المضيف. احصر دوري المالك ومدير القوالب في أشخاص موثوقين، ولا تنشر المنفذ 7080 على العنوان العام أبدًا.
ضع Coder خلف nginx عبر HTTPS
احصل على شهادة بالأمر certbot certonly --nginx -d coder.example.com، ثم عرّف الموقع. الترويستان Upgrade وConnection ضروريتان: بدونهما تفشل الطرفية في المتصفح واتصالات الوكلاء.
server {
listen 443 ssl;
http2 on;
server_name coder.example.com;
ssl_certificate /etc/letsencrypt/live/coder.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/coder.example.com/privkey.pem;
location / {
proxy_pass http://127.0.0.1:7080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 1h;
}
}أعد تحميل nginx بالأمر nginx -t && systemctl reload nginx، ثم افتح https://coder.example.com. أنشئ الحساب الأول فورًا: يصبح أول زائر لشاشة الترحيب مالك التثبيت.
أنشئ أول قالب وأول مساحة عمل
في Templates، انقر على Create Template واختر قالب البداية Docker Containers. يحمّل Coder مزوّدي Terraform اللازمين وينشر القالب. أنشئ بعد ذلك مساحة عمل منه: تبدأ حاوية على الخادم ويتصل وكيلها، وتعرض الصفحة الحالة Running مع زر لفتح code-server.
القالب ملف main.tf بسيط. لتكييفه مع مشروعك، غيّر الصورة الأساسية وأضف الأدوات إلى سكربت بدء الوكيل، ثم انشر إصدارًا جديدًا: تقترحه المساحات الموجودة عند إعادة تشغيلها التالية.
اتصل من VS Code أو JetBrains أو SSH
يكفي المتصفح للبداية، لكن معظم المطوّرين يفضّلون محررهم المعتاد. ثبّت أداة سطر الأوامر على حاسوبك واربطها بالخادم:
curl -L https://coder.com/install.sh | sh
coder login https://coder.example.com
coder list
coder ssh mon-espace
coder port-forward mon-espace --tcp 3000:3000
coder config-ssh # ajoute les hôtes coder.<espace> à ~/.ssh/configبعد coder config-ssh، يرى VS Code Remote-SSH وJetBrains Gateway كل مساحة عمل كمضيف SSH عادي. يمر الاتصال عبر عنوان HTTPS للخادم، فلا يُفتح أي منفذ SSH إضافي على الخادم.
الإيقاف التلقائي وموارد الخادم
في حالة الخمول، يستهلك خادم Coder وقاعدة بياناته نحو 550 ميغابايت من الذاكرة، وتستهلك مساحة عمل خاملة مبنية على صورة قالب Docker نحو 200 ميغابايت — وأكثر بكثير أثناء البناء أو تشغيل الاختبارات. في إعدادات القالب، ضمن Schedule، حدّد مهلة للإيقاف التلقائي: لن تستهلك مساحة منسية مساءً شيئًا طوال الليل. تُحفظ وحدة التخزين /home عند الإيقاف، ولا يُعاد إنشاء سوى الحاوية عند إعادة التشغيل.
النسخ الاحتياطي والتحديث
الحسابات والقوالب والإعدادات محفوظة في PostgreSQL، وعمل المطوّرين في وحدات التخزين /home لمساحات العمل.
cd /opt/coder
docker compose exec -T database pg_dump -U coder coder | gzip > coder-$(date +%F).sql.gz
docker volume ls --filter name=coder- # volumes /home des espaces de travailللتحديث، غيّر وسم الصورة في docker-compose.yml وفق [صفحة الإصدارات](https://github.com/coder/coder/releases)، ثم شغّل docker compose pull && docker compose up -d: يرحّل الخادم قاعدة بياناته عند البدء. خذ نسخة احتياطية قبل كل ترقية رئيسية.
التثبيت بنقرة واحدة على ServOrbit
على خادم ServOrbit، يُثبَّت Coder من المتجر. ينشر السكربت الخادم وقاعدة بيانات PostgreSQL، ويولّد كلمة مرور المدير وينشئ حساب المالك قبل أي كشف للخدمة — فلا تكون شاشة تسجيل المدير الأول متاحة من الإنترنت أبدًا. كما يضبط الوكيل العكسي nginx عبر HTTPS مع WebSocket، على نطاق فرعي من نطاقك أو على النطاق الفرعي المجاني للخادم. سجّل الدخول بالعنوان [email protected] وكلمة المرور المعروضة في مساحة العميل، ثم غيّرها من إعدادات الحساب.