یک فریمورک، دو نوع خروجی
Astro بهطور پیشفرض HTML استاتیک میسازد. در این حالت پوشهی dist با nginx سرو میشود و در زمان اجرا هیچ سرور Node.js لازم نیست.
اگر output را server یا hybrid گذاشتهاید، adapter رسمی @astrojs/node را در حالت standalone اضافه کنید. سرور تولیدشده روی پورت 4321 بالا میآید و HOST را از محیط میخواند.
مناسب برای
- بلاگ و سایت محتوایی
- مستندات و لندینگ با بارگذاری سریع
- سایت چندزبانه با رندر سرور
- فروشگاه کوچک با بخشهای پویا
مسیر بیلد Astro
تشخیص
وابستگی
astro؛ مقدارoutputدرastro.configنوع خروجی را تعیین میکند.astro.config.mjsنصب
پکیجمنیجر از روی لاکفایل انتخاب میشود.
npm ciبیلد
صفحهها و در حالت server، سرور Node.js ساخته میشود.
astro buildاجرا
در SSR سرور standalone اجرا میشود؛ در حالت استاتیک nginx فایلها را سرو میکند.
node ./dist/server/entry.mjs
خروجی یک استقرار واقعی
sakoocloud deploy ✔ Packed 2.4MB ✔ Source uploaded ℹ Build started · dep_7k2m9q #4 [builder 1/5] FROM node:22-alpine #6 [builder 3/5] RUN npm ci #8 [builder 4/5] RUN npm run build #10 [stage-1 2/3] COPY dist ./dist #12 exporting to image ✔ Deployed — app is running. → https://my-astro.sakooapps.ir
تنظیم برای SSR
adapter نود را در حالت standalone اضافه کنید و HOST را 0.0.0.0 بگذارید.
import { defineConfig } from "astro/config";
import node from "@astrojs/node";
export default defineConfig({
output: "server",
adapter: node({ mode: "standalone" }),
});
{
"scripts": {
"build": "astro build",
"start": "node ./dist/server/entry.mjs"
}
}
sakoocloud apps create --name my-astro --runtime astro --port 4321
sakoocloud deploy
تنظیمات
خروجی Astro روی سکو کلود
| output | نتیجه |
|---|---|
static (پیشفرض) | پوشهی dist با nginx سرو میشود |
server | سرور standalone روی پورت 4321 |
hybrid | صفحههای پیشساخته و پویا روی همان سرور |
نسخهی Node.js
نسخههای 24، 22 و 20 (LTS) در دسترساند. اگر پروژه نسخهای اعلام نکند، Node.js 22 استفاده میشود.
| از کجا خوانده میشود | نمونه |
|---|---|
.nvmrc یا .node-version | 22 |
engines.node در package.json | "node": "22.x" |
mise.toml یا .tool-versions | node = "22" |
فلگ --runtime-version در CLI | --runtime-version 22 |
پکیجمنیجر
ابزار از روی لاکفایل انتخاب میشود و نصب همیشه دقیقاً همان نسخههای قفلشده را میگیرد.
| لاکفایل | ابزار | دستور نصب |
|---|---|---|
package-lock.json | npm | npm ci |
yarn.lock | yarn | yarn install --frozen-lockfile |
pnpm-lock.yaml | pnpm | pnpm install --frozen-lockfile |
اتصال به دیتابیس
دیتابیس را به اپ لینک کنید؛ متغیرهای DATABASE_URL، DATABASE_HOST و بقیه به محیط اپ تزریق میشوند و اپ دوباره مستقر میشود. رمز عبور هیچجا در کد نمیآید.
sakoocloud apps link-db <db-id> --app my-app
import pg from "pg";
export const pool = new pg.Pool({
connectionString: process.env.DATABASE_URL,
});
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
دیتابیسهایی که معمولاً کنارش میآیند
همراه هر استقرار
اینها به رانتایم بستگی ندارند و برای هر اپ روی سکو کلود فعالاند. بعضی، مثل مقیاسدهی خودکار و کرانجاب، به پلن بستگی دارند.
- دامنهی اختصاصی و SSLدامنه را اضافه کنید؛ گواهی خودکار صادر و تمدید میشود.
- متغیرهای محیطی و سکرتمقادیر رمزگذاریشده فقط در زمان اجرا به اپ میرسند.
- مرحلهی انتشارmigration بعد از بیلد و پیش از جایگزینی نسخهی قبلی اجرا میشود.
- لاگ زندهلاگ بیلد و زمان اجرا، در CLI و کنسول.
- بازگشت به نسخهی قبلهر استقرار قبلی با یک دستور برمیگردد.
- مقیاسدهیمنابع و تعداد نمونهها را تغییر دهید یا خودکارش کنید.
- دیسک ماندگاربرای فایلهایی که باید بعد از هر استقرار بمانند.
- کرانجابدستور زمانبندیشده با همان ایمیج و متغیرها.
- استقرار خودکار با گیتهر push روی شاخهی هدف بیلد و مستقر میشود.
خطاهای رایج
اپ بالا نمیآید یا مدام ریاستارت میشود
علتسرور Astro روی localhost بالا آمده است.
راهحلپورت را از PORT بخوانید و روی 0.0.0.0 گوش بدهید.
HOST=0.0.0.0
entry.mjs پیدا نمیشود
علتadapter نود نصب نشده یا output هنوز static است.
راهحل@astrojs/node را نصب کنید و output را server یا hybrid بگذارید.
مسیرهای سایت استاتیک ۴۰۴ میدهند
علتoutputDir با پوشهی خروجی بیلد یکی نیست.
راهحلدر sakoocloud.json مقدار outputDir را dist بگذارید.
پاد با OOMKilled متوقف میشود
علتمصرف حافظه از سقف منابع اپ بیشتر شده است.
راهحلحافظه را بیشتر کنید یا مصرف برنامه را پایین بیاورید.
sakoocloud apps scale --memory 1Gi
پرسشهای متداول
سایت استاتیک Astro سرور Node.js لازم دارد؟
نه. خروجی استاتیک فقط با nginx سرو میشود و منابع کمتری مصرف میکند.
چرا پورت پیشفرض 4321 است؟
سرور standalone در Astro بهطور پیشفرض روی 4321 گوش میدهد. اگر پورت دیگری میخواهید، هنگام ساخت اپ --port را عوض کنید.
View Transitions و Island ها کار میکنند؟
بله. اینها در مرورگر اجرا میشوند و به نوع استقرار ربطی ندارند.
جزئیات بیشتر در راهنمای Astro در مستندات و مرجع CLI.