رفتن به محتوای اصلی

استقرار با Docker

Dockerfile، ایمیج آماده، Docker Compose و انتخاب نسخه زبان.

راهنمای گره اپ

هر چیزی که در Docker اجرا می‌شود در گره اپ هم اجرا می‌شود. سه راه دارید:

۱. Dockerfile داخل پروژه

اگر در ریشه پروژه (یا پوشه ریشه‌ای که تعیین کرده‌اید) Dockerfile باشد، گره اپ همان را بیلد می‌کند و تشخیص خودکار کنار گذاشته می‌شود. مسیر دیگری را در تب «بیلد و اجرا» تنظیم کنید (مثلاً docker/prod.Dockerfile). آرگومان‌های بیلد (ARG) را هم همان‌جا بدهید.

FROM node:22-slim
WORKDIR /app
COPY package*.json ./
RUN npm ci --omit=dev
COPY . .
ENV PORT=3000
CMD ["node", "server.js"]
  • اپ باید روی 0.0.0.0 و پورتی که در تنظیمات اپ آمده گوش دهد؛ متغیر PORT همیشه مقدار آن را دارد.
  • بسته‌های npm، PyPI و Go و ایمیج‌های پایه هنگام بیلد از میرور گره گرفته می‌شوند؛ ARG NPM_CONFIG_REGISTRY و ARG PIP_INDEX_URL را در Dockerfile بنویسید تا از آن استفاده شود.
  • .dockerignore رعایت می‌شود؛ node_modules و .git را در آن بگذارید.

۲. ایمیج آماده از رجیستری

در «اپ جدید» منبع «ایمیج Docker» را انتخاب کنید و نام کامل ایمیج را بنویسید، مثل ghcr.io/acme/api:1.4.2. ایمیج باید عمومی باشد. برای انتشار نسخه جدید:

gereh deploy --app my-api --image ghcr.io/acme/api:1.4.3

برای ده‌ها نرم‌افزار متن‌باز (n8n، Nextcloud، Keycloak، Metabase…) از اپ‌های آماده استفاده کنید؛ دیسک، پایگاه داده و رمزها خودکار ساخته می‌شوند و نسخه را خودتان انتخاب می‌کنید.

۳. Docker Compose

ZIP پروژه‌ای که docker-compose.yml دارد را بارگذاری کنید (حداکثر ۸ سرویس). سرویس عمومی اولین سرویس دارای ports است یا برچسب gereh.public: "true" دارد. volumes و env_file نادیده گرفته می‌شوند. اگر سرویس‌های postgres، mysql یا redis دارید، بهتر است با قالب ترکیبی آن‌ها را به پایگاه داده مدیریت‌شده با پشتیبان روزانه تبدیل کنید؛ ویرایشگر قالب، فایل compose را خودکار تبدیل می‌کند.

نسخه زبان بدون Dockerfile

بدون Dockerfile هم نسخه زبان را انتخاب کنید: Node.js از 8 تا 24، PHP از 7.2 تا 8.4، Python از 3.7 تا 3.13، ‎.NET از 2.1 تا 10، Go از 1.21 تا 1.25 و… نسخه‌هایی که Nixpacks پشتیبانی می‌کند با همان ساخته می‌شوند و بقیه از ایمیج رسمی زبان (مثل node:8-slim یا mcr.microsoft.com/dotnet/sdk:2.1) با Dockerfile تولیدشده. نسخه در آرگومان بیلد GEREH_RUNTIME_VERSION نگه داشته می‌شود و از تب «بیلد و اجرا» قابل تغییر است.

اشکال‌زدایی

gereh logs --follow          # لاگ زنده همه نمونه‌ها
gereh shell                  # اجرای دستور در نمونه در حال اجرا
gereh deploy --no-cache      # بیلد دوباره بدون کش