فریم‌ورک وب محتوامحور

هاست Astro، استاتیک یا با رندر سرور

سایت Astro را هر طور ساخته‌اید مستقر کنید: خروجی استاتیک با nginx سرو می‌شود و حالت server با @astrojs/node روی سرور Node.js اجرا می‌شود.

تشخیص
وابستگی astro در package.json
SSR
@astrojs/node در حالت standalone
اجرا
node ./dist/server/entry.mjs
پورت پیش‌فرض
4321
لوگوی Astro

یک فریم‌ورک، دو نوع خروجی

Astro به‌طور پیش‌فرض HTML استاتیک می‌سازد. در این حالت پوشه‌ی dist با nginx سرو می‌شود و در زمان اجرا هیچ سرور Node.js لازم نیست.

اگر output را server یا hybrid گذاشته‌اید، adapter رسمی @astrojs/node را در حالت standalone اضافه کنید. سرور تولیدشده روی پورت 4321 بالا می‌آید و HOST را از محیط می‌خواند.

مناسب برای

  • بلاگ و سایت محتوایی
  • مستندات و لندینگ با بارگذاری سریع
  • سایت چندزبانه با رندر سرور
  • فروشگاه کوچک با بخش‌های پویا

مسیر بیلد Astro

  1. تشخیص

    وابستگی astro؛ مقدار output در astro.config نوع خروجی را تعیین می‌کند.

    astro.config.mjs
  2. نصب

    پکیج‌منیجر از روی لاک‌فایل انتخاب می‌شود.

    npm ci
  3. بیلد

    صفحه‌ها و در حالت server، سرور Node.js ساخته می‌شود.

    astro build
  4. اجرا

    در SSR سرور standalone اجرا می‌شود؛ در حالت استاتیک nginx فایل‌ها را سرو می‌کند.

    node ./dist/server/entry.mjs

خروجی یک استقرار واقعی

sakoocloud deploy
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" }),
});

تنظیمات

خروجی Astro روی سکو کلود

outputنتیجه
static (پیش‌فرض)پوشه‌ی dist با nginx سرو می‌شود
serverسرور standalone روی پورت 4321
hybridصفحه‌های پیش‌ساخته و پویا روی همان سرور

نسخه‌ی Node.js

نسخه‌های 24، 22 و 20 (LTS) در دسترس‌اند. اگر پروژه نسخه‌ای اعلام نکند، Node.js 22 استفاده می‌شود.

از کجا خوانده می‌شودنمونه
.nvmrc یا .node-version22
engines.node در package.json"node": "22.x"
mise.toml یا .tool-versionsnode = "22"
فلگ --runtime-version در CLI--runtime-version 22

پکیج‌منیجر

ابزار از روی لاک‌فایل انتخاب می‌شود و نصب همیشه دقیقاً همان نسخه‌های قفل‌شده را می‌گیرد.

لاک‌فایلابزاردستور نصب
package-lock.jsonnpmnpm ci
yarn.lockyarnyarn install --frozen-lockfile
pnpm-lock.yamlpnpmpnpm install --frozen-lockfile

اتصال به دیتابیس

دیتابیس را به اپ لینک کنید؛ متغیرهای DATABASE_URL، DATABASE_HOST و بقیه به محیط اپ تزریق می‌شوند و اپ دوباره مستقر می‌شود. رمز عبور هیچ‌جا در کد نمی‌آید.

sakoocloud apps link-db <db-id> --app my-app

دیتابیس‌هایی که معمولاً کنارش می‌آیند

همراه هر استقرار

این‌ها به رانتایم بستگی ندارند و برای هر اپ روی سکو کلود فعال‌اند. بعضی، مثل مقیاس‌دهی خودکار و کران‌جاب، به پلن بستگی دارند.

خطاهای رایج

اپ بالا نمی‌آید یا مدام ری‌استارت می‌شود

علتسرور Astro روی localhost بالا آمده است.

راه‌حلپورت را از PORT بخوانید و روی 0.0.0.0 گوش بدهید.

env
HOST=0.0.0.0

entry.mjs پیدا نمی‌شود

علتadapter نود نصب نشده یا output هنوز static است.

راه‌حل@astrojs/node را نصب کنید و output را server یا hybrid بگذارید.

مسیرهای سایت استاتیک ۴۰۴ می‌دهند

علتoutputDir با پوشه‌ی خروجی بیلد یکی نیست.

راه‌حلدر sakoocloud.json مقدار outputDir را dist بگذارید.

پاد با OOMKilled متوقف می‌شود

علتمصرف حافظه از سقف منابع اپ بیشتر شده است.

راه‌حلحافظه را بیشتر کنید یا مصرف برنامه را پایین بیاورید.

terminal
sakoocloud apps scale --memory 1Gi

پرسش‌های متداول

سایت استاتیک Astro سرور Node.js لازم دارد؟

نه. خروجی استاتیک فقط با nginx سرو می‌شود و منابع کمتری مصرف می‌کند.

چرا پورت پیش‌فرض 4321 است؟

سرور standalone در Astro به‌طور پیش‌فرض روی 4321 گوش می‌دهد. اگر پورت دیگری می‌خواهید، هنگام ساخت اپ --port را عوض کنید.

View Transitions و Island ها کار می‌کنند؟

بله. این‌ها در مرورگر اجرا می‌شوند و به نوع استقرار ربطی ندارند.

جزئیات بیشتر در راهنمای Astro در مستندات و مرجع CLI.

سریع‌ترین مسیر از کد تا انتشار.

ابتدا ابزار خط فرمان را نصب کنید، سپس همین‌جا امتحان کنید. (بنویسید، یا یکی از پیشنهادهای پایین ترمینال را بزنید)

~/projects/my-app
امتحان کنید