دليل النشر

Coder على VPS: بيئات تطوير سحابية مستضافة ذاتيًا

انشر على VPS Cloud ←

دليل عملي

Coder على VPS: بيئات تطوير سحابية مستضافة ذاتيًا

الاستضافة الذاتية7 دقائق للقراءةعدد الخطوات: 3

يستغرق تثبيت PHP وNode.js والإصدار الصحيح من PostgreSQL وعشرات الإضافات على حاسوب كل مطوّر جديد وقتًا طويلًا، وتنتهي الإعدادات دائمًا بالاختلاف من جهاز إلى آخر. تحل بيئات التطوير السحابية مثل GitHub Codespaces أو Gitpod هذه المشكلة، لكنها تحتسب الكلفة بالساعة وتحتفظ بشيفرتك لديها. Coder منصة مفتوحة المصدر (رخصة AGPL-3.0) تؤدي العمل نفسه على خادمك: يحصل كل مطوّر بنقرة واحدة على مساحة عمل مطابقة، يصفها قالب Terraform. يثبّته هذا الدليل على خادم افتراضي باستخدام Docker Compose، ويضعه خلف nginx عبر HTTPS، وينشئ أول مساحة عمل Docker، ويشرح الاتصال بها من VS Code أو JetBrains أو SSH.

المحتويات· ماذا يفعل Coder1/12
  1. 01ماذا يفعل Coder
  2. 02ما يقدّمه Coder
  3. 03Coder مقارنة بالخيارات الأخرى
  4. 04المتطلبات
  5. 05ثبّت Coder باستخدام Docker Compose
  6. 06مقبس Docker يمنح مفاتيح الخادم
  7. 07ضع Coder خلف nginx عبر HTTPS
  8. 08أنشئ أول قالب وأول مساحة عمل
  9. 09اتصل من VS Code أو JetBrains أو SSH
  10. 10الإيقاف التلقائي وموارد الخادم
  11. 11النسخ الاحتياطي والتحديث
  12. 12التثبيت بنقرة واحدة على ServOrbit

ماذا يفعل 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 على VPScode-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

  1. جهّز المجلد والأسرار

    يحمل الملف .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
  2. اكتب الملف 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: {}
  3. شغّل وتحقق

    ينشئ التشغيل الأول مخطط قاعدة البيانات في ثوانٍ.

    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] وكلمة المرور المعروضة في مساحة العميل، ثم غيّرها من إعدادات الحساب.

بيئات التطوير على خادمك الافتراضي

يكفي خادم ServOrbit بنظام Ubuntu 24.04 وذاكرة 2 غيغابايت لتشغيل Coder، وخطّط لـ 4 غيغابايت أو أكثر لفريق. تثبيت بنقرة واحدة من المتجر، وHTTPS على نطاقك أو على النطاق الفرعي المجاني للخادم، مع إنشاء حساب المالك وكلمة المرور لك.

بحاجة إلى مساعدة؟

تصفّح مركز المساعدة والأسئلة الشائعة، أو تواصل مع فريقنا — معاودة اتصال أو WhatsApp أو بريد إلكتروني. الدعم بـالعربية والفرنسية والإنجليزية.

راسلنا على WhatsAppيُفتح في علامة تبويب جديدة