با این روش لازم نیست خودتان image بسازید: پلتفرم ریپو را clone میکند، build میگیرد و اجرا میکند. ریپوی عمومی و خصوصی هر دو پشتیبانی میشوند.
پیشنیاز#
- اپ روی یک پورتِ مشخص و روی
0.0.0.0گوش دهد. - secret در ریپو commit نشده باشد.
- برای build با Dockerfile:
Dockerfileدر ریشه یا مسیرِ مشخص. بدونِ Dockerfile، build خودکار زبان را تشخیص میدهد (build خودکار برای Node.js).
کدام روشِ دسترسی؟#
| Repo access | مناسب برای | URL ریپو |
|---|---|---|
| Public | ریپوی عمومی | https://github.com/org/app |
| GitHub (connected) | سادهترین برای ریپوی خصوصیِ GitHub؛ باید GitHub را در SETTINGS → INTEGRATIONS وصل کرده باشید | از لیست انتخاب میشود |
| Access Token | GitLab، Gitea یا هر میزبانِ گیت با توکن | https://… |
| Deploy Key | کمترین دسترسی: کلیدی فقط برای یک ریپو، فقطخواندنی | SSH، مثلاً git@github.com:org/app.git |
مراحل در ویزارد#
- SERVICES → + NEW SERVICE → Custom app.
- NAME & SIZE: نامِ اپ و پک.
- SOURCE: گزینهی Git Repo، آدرسِ ریپو و branch. اگر GitHub وصل است، با «Use a connected GitHub repo» از لیست انتخاب کنید.
- OPTIONS:
- Port — پیشفرض برای گیت
3000. - Repo access — یکی از چهار روشِ جدولِ بالا.
- Build settings —
Auto(پیشنهادی)،Dockerfileبا مسیرِ فایل، یاDocker Composeبا مسیرِ فایل و نامِ سرویسِ اصلی. - در صورت نیاز، دیتابیسی از همین سازمان را وصل کنید.
- Port — پیشفرض برای گیت
- REVIEW: CREATE & DEPLOY. لاگِ build زنده در ویزارد نمایش داده میشود.
ساختنِ Deploy Key#
روی سیستمِ خودتان:
ssh-keygen -t ed25519 -C "weblines-deploy" -f ./weblines-deploy -N ""
weblines-deploy.pub(عمومی) را در تنظیماتِ ریپو اضافه کنید — GitHub: Settings → Deploy keys → Add deploy key، فقط Read.- در ویزارد، Deploy Key → NEW KEY: یک نام بدهید و محتوای
weblines-deploy(خصوصی) را paste کنید. برای اپهای بعدی، SAVED KEY را انتخاب کنید.
کلیدِ خصوصی فقط به موتورِ دیپلوی فرستاده میشود و در مرورگر نمیماند.
نکتههایی که ویزارد از کدِ شما پیدا میکند#
وقتی ریپو را از GitHubِ وصلشده انتخاب میکنید (یا ZIP آپلود میکنید)، ویزارد کد را میخواند و قبل از ساخت اینها را نشان میدهد:
- متغیرهای لازم: اگر
.env.example(یا فایلِ نمونهی مشابه) دارید، نامِ متغیرهایش به کادرِ متغیرهای محیطی اضافه میشود. فقط نام میآید، نه مقدار. مقدار را بنویسید؛ خطی که خالی بماند تنظیم نمیشود. برای کلیدهای امنیتی (مثلِSECRET_KEY) دکمهای هست که مقدارِ تصادفی میسازد. - هشدارِ دادهی داخلِ کانتینر: اگر پروژه SQLite داخلِ پوشهی پروژه دارد، در
data/یاuploads/فایل مینویسد،DATA_DIRدارد یا فایلِ دیتابیس همراهِ کد است، ویزارد هشدار میدهد که این دادهها با هر دیپلو و ریاستارت پاک میشوند. راهحل: یک دیتابیس وصل کنید یا پوشه را روی فضای دائمی بگذارید.
build خودکار برای Node.js#
با Build settings → Auto و بدونِ Dockerfile در ریپو، پلتفرم برای پروژهی Node یک Dockerfile میسازد:
- مدیرِ بسته از
packageManager،preinstall، فایلِ lock وpnpm-workspace.yamlتشخیص داده میشود: npm، pnpm، Yarn یا bun. - monorepo و workspace: کلِ درخت کپی و نصب میشود. اگر ریشه اسکریپتِ
startنداشته باشد، تنها پکیجی کهstartدارد اجرا میشود. - نسخهی Node از
engines.nodeیا.nvmrcخوانده میشود. - با هر دیپلوی از برنچ، طرحِ build از نو ساخته میشود؛ پس تغییرِ مدیرِ بسته یا نسخهی Node در کد خودش اعمال میشود. اگر بعداً Dockerfileِ خودتان را به ریپو اضافه کنید، همان استفاده میشود.
Dockerfileِ نمونه (Node)#
FROM node:20-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --omit=dev
COPY . .
RUN npm run build
EXPOSE 3000
CMD ["node", "dist/server.js"]
انتشارِ تغییرات#
اینکه push خودش دیپلوی کند یا نه، به روشِ دسترسی بستگی دارد:
| Repo access | بعد از push |
|---|---|
| GitHub (connected) | به انتخابِ شما. در ویزارد، بخشِ On git push: خودکار (پیشفرض) یا دستی. بعداً در Settings → Build & run با گزینهی «Deploy automatically on every push» عوض میشود. |
| Public، Access Token، Deploy Key | خودکار نیست. DEPLOY را بزنید، یا Deploy Hook یا دیپلوی از CI را وصل کنید. |
برای دیپلوی با هر push روی یک ریپوی GitHub (عمومی یا خصوصی)، GitHub را در SETTINGS → INTEGRATIONS وصل کنید و ریپو را از لیست انتخاب کنید.
دیپلوی دستی: روی کارتِ اپ DEPLOY را بزنید — build با cache انجام میشود. FULL BUILD بدونِ cache است و بسیار کندتر؛ فقط وقتی وابستگیها یا Dockerfile عوض شدهاند.
خطاهای رایج#
| خطا | علت |
|---|---|
Permission denied (publickey) | کلیدِ عمومی در ریپو اضافه نشده، یا URL بهجای SSH با https:// است |
authentication failed | توکن منقضی شده یا دسترسیِ خواندنِ ریپو را ندارد |
| build موفق، سایت باز نمیشود | پورتِ ویزارد با پورتِ واقعیِ اپ یکی نیست |
بیشتر: خطای دیپلوی
