|
| 1 | +# توثيق خادم OpenCode Docker |
| 2 | + |
| 3 | +يغطي هذا الدليل تشغيل OpenCode في وضع الخادم داخل حاويات Docker. |
| 4 | + |
| 5 | +## مقدمة |
| 6 | + |
| 7 | +خادم OpenCode هو نشر بدون رأس لـ OpenCode يعمل كخدمة خلفية، ويمكن الوصول إليه عبر واجهة برمجة التطبيقات HTTP. توفر صورة Docker بيئة تشغيل كاملة مع جميع الأدوات اللازمة مثبتة مسبقًا، مما يجعلها مثالية لـ: |
| 8 | + |
| 9 | +- بيئات التطوير عن بُعد |
| 10 | +- التكامل مع CI/CD |
| 11 | +- مثيلات البرمجة المشتركة للفريق |
| 12 | +- تشغيل OpenCode على الخوادم بدون واجهة رسومية |
| 13 | + |
| 14 | +## البدء السريع |
| 15 | + |
| 16 | +شغّل خادم OpenCode بكلمة مرور آمنة: |
| 17 | + |
| 18 | +```bash |
| 19 | +docker run -d \ |
| 20 | + --name opencode-server \ |
| 21 | + -p 3000:3000 \ |
| 22 | + -e OPENCODE_SERVER_PASSWORD=your_secure_password \ |
| 23 | + -v opencode_workspace:/workspace \ |
| 24 | + ghcr.io/anomalyco/opencode/server:debian |
| 25 | +``` |
| 26 | + |
| 27 | +الوصول إلى الخادم على `http://localhost:3000`. |
| 28 | + |
| 29 | +## متغيرات الصورة |
| 30 | + |
| 31 | +يتوفر متغيران للصورة الأساسية: |
| 32 | + |
| 33 | +| المتغير | الصورة الأساسية | الحجم | حالة الاستخدام | |
| 34 | +| -------- | ------------------ | ------ | ------------------------ | |
| 35 | +| `debian` | Debian Trixie Slim | ~500MB | موصى به لمعظم المستخدمين | |
| 36 | +| `alpine` | Alpine Edge | ~200MB | بصمة أدنى، سحب أسرع | |
| 37 | + |
| 38 | +### سحب متغيرات محددة |
| 39 | + |
| 40 | +```bash |
| 41 | +# Debian (موصى به) |
| 42 | +docker pull ghcr.io/anomalyco/opencode/server:debian |
| 43 | + |
| 44 | +# Alpine (الحد الأدنى) |
| 45 | +docker pull ghcr.io/anomalyco/opencode/server:alpine |
| 46 | +``` |
| 47 | + |
| 48 | +## متغيرات البيئة |
| 49 | + |
| 50 | +| المتغير | الافتراضي | الوصف | |
| 51 | +| -------------------------- | ----------------------------- | ------------------------------------------ | |
| 52 | +| `OPENCODE_SERVER_PASSWORD` | (لا شيء) | **مطلوب.** كلمة مرور لمصادقة HTTP الأساسية | |
| 53 | +| `OPENCODE_SERVER_USERNAME` | `opencode` | اسم المستخدم لمصادقة HTTP الأساسية | |
| 54 | +| `XDG_CONFIG_HOME` | `/home/opencode/.config` | دليل التكوين | |
| 55 | +| `XDG_CACHE_HOME` | `/home/opencode/.cache` | دليل ذاكرة التخزين المؤقت | |
| 56 | +| `XDG_DATA_HOME` | `/home/opencode/.local/share` | دليل البيانات | |
| 57 | + |
| 58 | +### خيارات الخادم (علامات CLI) |
| 59 | + |
| 60 | +يقبل الخادم هذه الخيارات الإضافية عند تجاوز الأمر الافتراضي: |
| 61 | + |
| 62 | +```bash |
| 63 | +docker run ... ghcr.io/anomalyco/opencode/server:debian \ |
| 64 | + opencode serve --hostname=0.0.0.0 --port=3000 --cors=https://example.com |
| 65 | +``` |
| 66 | + |
| 67 | +| العلامة | الافتراضي | الوصف | |
| 68 | +| --------------- | ---------------- | -------------------------------- | |
| 69 | +| `port--` | `0` (عشوائي) | المنفذ للاستماع | |
| 70 | +| `hostname--` | `127.0.0.1` | اسم المضيف للربط | |
| 71 | +| `mdns--` | `false` | تمكين اكتشاف خدمة mDNS | |
| 72 | +| `mdns-domain--` | `opencode.local` | اسم مجال mDNS المخصص | |
| 73 | +| `cors--` | `[]` | نطاقات CORS المسموح بها الإضافية | |
| 74 | + |
| 75 | +## تحميل الأقراص |
| 76 | + |
| 77 | +قم بتحميل هذه الأقراص لت保持 البيانات ومشاركة الموارد: |
| 78 | + |
| 79 | +### مساحة العمل (مطلوب) |
| 80 | + |
| 81 | +```bash |
| 82 | +-v /path/to/workspace:/workspace |
| 83 | +``` |
| 84 | + |
| 85 | +هنا يقوم OpenCode بتشغيل ملفات مشروعك. قم بتحميل مستودع الكود الخاص بك هنا. |
| 86 | + |
| 87 | +### مفاتيح SSH |
| 88 | + |
| 89 | +```bash |
| 90 | +-v ~/.ssh:/home/opencode/.ssh:ro |
| 91 | +``` |
| 92 | + |
| 93 | +وصول للقراءة فقط إلى مفاتيح SSH لاستنساخ المستودعات الخاصة. |
| 94 | + |
| 95 | +### تكوين Git |
| 96 | + |
| 97 | +```bash |
| 98 | +-v ~/.gitconfig:/home/opencode/.gitconfig:ro |
| 99 | +``` |
| 100 | + |
| 101 | +وراثة هوية مستخدم Git من المضيف. |
| 102 | + |
| 103 | +### تكوين OpenCode |
| 104 | + |
| 105 | +```bash |
| 106 | +-v ~/.config/opencode:/home/opencode/.config/opencode |
| 107 | +``` |
| 108 | + |
| 109 | +保持 إعدادات OpenCode بين إعادة تشغيل الحاوية. |
| 110 | + |
| 111 | +### ذاكرة التخزين المؤقت |
| 112 | + |
| 113 | +```bash |
| 114 | +-v opencode_cache:/home/opencode/.cache |
| 115 | +``` |
| 116 | + |
| 117 | +ذاكرة تخزين مؤقت لحزم npm وخوادم اللغات والأدوات الأخرى التي تم تنزيلها. |
| 118 | + |
| 119 | +## المنافذ |
| 120 | + |
| 121 | +| المنفذ | البروتوكول | الوصف | |
| 122 | +| ------ | ---------- | ----------------------------------------------- | |
| 123 | +| `3000` | HTTP | واجهة برمجة تطبيقات الخادم الرئيسية (الافتراضي) | |
| 124 | + |
| 125 | +يمكن إعادة تعيين المنفذ عبر علامة `-p` في Docker: |
| 126 | + |
| 127 | +```bash |
| 128 | +-p 8080:3000 # الوصول إلى الخادم على http://localhost:8080 |
| 129 | +``` |
| 130 | + |
| 131 | +## المستخدم والأذونات |
| 132 | + |
| 133 | +تعمل الحاوية كمستخدم غير أساسي (`opencode`، UID 1000) لأسباب أمنية. هذا المستخدم لديه وصول `sudo` بدون كلمة مرور للمهام الإدارية: |
| 134 | + |
| 135 | +```bash |
| 136 | +# تنفيذ الأوامر كمستخدم opencode |
| 137 | +docker exec -it opencode-server sudo -u opencode <command> |
| 138 | + |
| 139 | +# الحصول على shell كمستخدم opencode |
| 140 | +docker exec -it opencode-server sudo -u opencode /bin/bash |
| 141 | +``` |
| 142 | + |
| 143 | +إذا كنت بحاجة إلى وصول أساسي: |
| 144 | + |
| 145 | +```bash |
| 146 | +docker exec -it opencode-server /bin/bash |
| 147 | +``` |
| 148 | + |
| 149 | +## الأدوات المثبتة |
| 150 | + |
| 151 | +تتضمن الصورة هذه الأدوات بشكل مباشر: |
| 152 | + |
| 153 | +| الأداة | الوصف | |
| 154 | +| ----------------- | -------------------------------- | |
| 155 | +| `opencode` | واجهة سطر أوامر OpenCode | |
| 156 | +| `bun` | وقت تشغيل JavaScript ومدير الحزم | |
| 157 | +| `bunx` | مكافئ Bun لـ npx (تشغيل حزم npm) | |
| 158 | +| `uv` | مدير حزم Python | |
| 159 | +| `git` | التحكم في الإصدار | |
| 160 | +| `git-lfs` | امتداد التخزين الكبير لـ Git | |
| 161 | +| `build-essential` | مكتبات GCC وmake والبناء | |
| 162 | +| `curl` | عميل HTTP | |
| 163 | +| `wget` | أداة تنزيل الملفات | |
| 164 | +| `openssh-client` | أدوات عميل ومفاتيح SSH | |
| 165 | +| `xz-utils` | أدوات الضغط | |
| 166 | + |
| 167 | +### استخدام bun |
| 168 | + |
| 169 | +```bash |
| 170 | +# تشغيل حزمة Node.js |
| 171 | +docker exec -it opencode-server bunx create-next-app |
| 172 | + |
| 173 | +# تثبيت التبعيات |
| 174 | +docker exec -it opencode-server bun install |
| 175 | +``` |
| 176 | + |
| 177 | +### استخدام uv |
| 178 | + |
| 179 | +```bash |
| 180 | +# تثبيت حزمة Python |
| 181 | +docker exec -it opencode-server uv pip install pandas |
| 182 | + |
| 183 | +# تشغيل برنامج Python |
| 184 | +docker exec -it opencode-server uv run script.py |
| 185 | +``` |
| 186 | + |
| 187 | +### استخدام git |
| 188 | + |
| 189 | +```bash |
| 190 | +# استنساخ مستودع في مساحة العمل |
| 191 | +docker exec -it opencode-server git clone https://github.com/user/repo.git /workspace/repo |
| 192 | +``` |
| 193 | + |
| 194 | +## فحص الصحة |
| 195 | + |
| 196 | +تتضمن الحاوية فحص صحة مدمج يتحقق من استجابة الخادم: |
| 197 | + |
| 198 | +```bash |
| 199 | +# فحص صحة الحاوية |
| 200 | +docker inspect --format='{{.State.Health.Status}}' opencode-server |
| 201 | +``` |
| 202 | + |
| 203 | +نقطة نهاية الصحة ترد HTTP 200 عندما تكون صحية: |
| 204 | + |
| 205 | +```bash |
| 206 | +# فحص الصحة اليدوي |
| 207 | +curl -f http://localhost:3000/health |
| 208 | +``` |
| 209 | + |
| 210 | +تكوين فحص الصحة: |
| 211 | + |
| 212 | +- الفترة: 30 ثانية |
| 213 | +- المهلة: 10 ثوان |
| 214 | +- فترة البدء: 10 ثوان |
| 215 | +- المحاولات: 3 |
| 216 | + |
| 217 | +## مثال Docker Compose |
| 218 | + |
| 219 | +أنشئ ملف `docker-compose.yml`: |
| 220 | + |
| 221 | +```yaml |
| 222 | +services: |
| 223 | + opencode: |
| 224 | + image: ghcr.io/anomalyco/opencode/server:debian |
| 225 | + container_name: opencode-server |
| 226 | + restart: unless-stopped |
| 227 | + ports: |
| 228 | + - "3000:3000" |
| 229 | + environment: |
| 230 | + - OPENCODE_SERVER_PASSWORD=your_secure_password |
| 231 | + - OPENCODE_SERVER_USERNAME=opencode |
| 232 | + volumes: |
| 233 | + - ./workspace:/workspace |
| 234 | + - opencode_config:/home/opencode/.config |
| 235 | + - opencode_cache:/home/opencode/.cache |
| 236 | + - ~/.ssh:/home/opencode/.ssh:ro |
| 237 | + - ~/.gitconfig:/home/opencode/.gitconfig:ro |
| 238 | + healthcheck: |
| 239 | + test: ["CMD", "curl", "-f", "http://localhost:3000/health"] |
| 240 | + interval: 30s |
| 241 | + timeout: 10s |
| 242 | + retries: 3 |
| 243 | + |
| 244 | +volumes: |
| 245 | + opencode_config: |
| 246 | + opencode_cache: |
| 247 | +``` |
| 248 | +
|
| 249 | +بدء الحزمة: |
| 250 | +
|
| 251 | +```bash |
| 252 | +docker-compose up -d |
| 253 | +``` |
| 254 | + |
| 255 | +## البناء من المصدر |
| 256 | + |
| 257 | +لبناء صورة الخادم من المصدر: |
| 258 | + |
| 259 | +### استنساخ المستودع |
| 260 | + |
| 261 | +```bash |
| 262 | +git clone https://github.com/anomalyco/opencode.git |
| 263 | +cd opencode |
| 264 | +``` |
| 265 | + |
| 266 | +### بناء متغير Debian |
| 267 | + |
| 268 | +```bash |
| 269 | +docker build \ |
| 270 | + -f packages/containers/server/docker/Dockerfile.debian \ |
| 271 | + -t opencode-server:local \ |
| 272 | + . |
| 273 | +``` |
| 274 | + |
| 275 | +### بناء متغير Alpine |
| 276 | + |
| 277 | +```bash |
| 278 | +docker build \ |
| 279 | + -f packages/containers/server/docker/Dockerfile.alpine \ |
| 280 | + -t opencode-server:alpine-local \ |
| 281 | + . |
| 282 | +``` |
| 283 | + |
| 284 | +### تشغيل البناء المحلي الخاص بك |
| 285 | + |
| 286 | +```bash |
| 287 | +docker run -d \ |
| 288 | + -p 3000:3000 \ |
| 289 | + -e OPENCODE_SERVER_PASSWORD=dev_password \ |
| 290 | + -v $(pwd)/workspace:/workspace \ |
| 291 | + opencode-server:local |
| 292 | +``` |
| 293 | + |
| 294 | +## حل المشكلات |
| 295 | + |
| 296 | +### عدم بدء الخادم |
| 297 | + |
| 298 | +تحقق من السجلات: |
| 299 | + |
| 300 | +```bash |
| 301 | +docker logs opencode-server |
| 302 | +``` |
| 303 | + |
| 304 | +المشاكل الشائعة: |
| 305 | + |
| 306 | +- عدم وجود `OPENCODE_SERVER_PASSWORD` - يرفض الخادم البدء بدون مصادقة |
| 307 | +- المنفذ مستخدم بالفعل - تغيير تعيين منفذ المضيف |
| 308 | + |
| 309 | +### فشل المصادقة |
| 310 | + |
| 311 | +تأكد من تطابق كلمة المرور تمامًا. يستخدم الخادم مصادقة HTTP الأساسية: |
| 312 | + |
| 313 | +```bash |
| 314 | +# اختبار المصادقة |
| 315 | +curl -u opencode:your_password http://localhost:3000/health |
| 316 | +``` |
| 317 | + |
| 318 | +### أخطاءPermissions مساحة العمل |
| 319 | + |
| 320 | +تأكد من أن الدليل المركب قابل للكتابة بواسطة UID 1000: |
| 321 | + |
| 322 | +```bash |
| 323 | +# إصلاح الملكية |
| 324 | +sudo chown -R 1000:1000 /path/to/workspace |
| 325 | +``` |
| 326 | + |
| 327 | +### بدء بطيء |
| 328 | + |
| 329 | +أول تشغيل يقوم بتنزيل خوادم اللغات والأدوات. تحقق من التقدم: |
| 330 | + |
| 331 | +```bash |
| 332 | +docker logs -f opencode-server |
| 333 | +``` |
| 334 | + |
| 335 | +### لا يمكن للحاوية الوصول إلى الإنترنت |
| 336 | + |
| 337 | +تحقق من تكوين DNS: |
| 338 | + |
| 339 | +```bash |
| 340 | +docker exec opencode-server ping -c 3 8.8.8.8 |
| 341 | +docker exec opencode-server cat /etc/resolv.conf |
| 342 | +``` |
| 343 | + |
| 344 | +### فشل فحص الصحة |
| 345 | + |
| 346 | +تحقق من أن الخادم يعمل فعليًا: |
| 347 | + |
| 348 | +```bash |
| 349 | +docker exec opencode-server curl -f http://localhost:3000/health |
| 350 | +``` |
| 351 | + |
| 352 | +### عدم عمل مفتاح SSH |
| 353 | + |
| 354 | +تأكد من أذونات المفاتيح الصحيحة داخل الحاوية: |
| 355 | + |
| 356 | +```bash |
| 357 | +docker exec opencode-server sudo chmod 600 /home/opencode/.ssh/id_rsa |
| 358 | +docker exec opencode-server sudo chmod 644 /home/opencode/.ssh/id_rsa.pub |
| 359 | +``` |
0 commit comments