رفتن به محتوا
سارویCloudابر سارویکنسول Cloud

سرور، Docker و PostgreSQL

برنامهٔ همیشه روشن با دورهٔ پیش‌پرداخت، دیسک پایدار و بازیابی پس از پایان اعتبار.

قبل از ساخت

سرور مجازی Debian با ۱ GiB حافظه، Docker و PostgreSQL با ۲ GiB حافظه عرضه می‌شوند؛ CPU اشتراکی و دیسک ۲۰ GiB است. برای همیشه روشن، دورهٔ ۱، ۷ یا ۳۰ روزه را انتخاب کنید. سرویس موقت ۱ ساعت، ۱ روز یا ۷ روز است. قیمت تومانی، سهمیهٔ انتقال و زمان اتصال پیش از پرداخت نمایش داده می‌شوند. فقط اعتبار پرداخت‌شدهٔ Cloud پذیرفته می‌شود؛ اضافه‌مصرف و تمدید خودکار نداریم.

دیسک و پایان دوره

داده پس از قطع SSH و راه‌اندازی مجدد باقی می‌ماند. سرویس همیشه روشن تا پایان دوره اجرا می‌شود؛ سپس ماشین متوقف و دیسک ۷ روز نگهداری و پس از آن حذف می‌شود. تمدید / بازیابی با حفظ آدرس و دیسک، پرداخت تازه و یک راه‌اندازی مجدد کوتاه انجام می‌شود. سرویس موقت در پایان دوره با دیسک حذف می‌شود. نسخهٔ پشتیبان خودکار بیرون از دیسک نداریم. پیش از پایان دوره خروجی بگیرید؛ این محصول برای نگه‌داری نامحدود داده بدون پشتیبان مناسب نیست. هزینهٔ دوره پس از آماده‌شدن ثابت است؛ شکست پیش از آماده‌شدن پس از تأیید پاک‌سازی اعتبار را برمی‌گرداند.

شبکه و اتصال

ماشین IP عمومی ندارد؛ تماس با APIهای عمومی روی HTTP و HTTPS از خروجی کنترل‌شده انجام می‌شود. تنظیمات HTTP_PROXY و HTTPS_PROXY از قبل روی سرور و Docker آماده‌اند. دانلود و آپلود خارجی از همان سهمیهٔ انتقال سرور کم می‌شود. شبکه‌های خصوصی، metadata و پورت‌های دیگر در دسترس نیستند. اتصال خروجی حداکثر ۱۰ دقیقه و بی‌کاری آن حداکثر ۲ دقیقه است. SSH و PostgreSQL از تونل رمزگذاری‌شدهٔ CLI می‌گذرند. HTTP روی پورت 8080 از آدرس HTTPS سرور منتشر می‌شود. هر اتصال حداکثر ۱۰ دقیقه و در حالت بیکاری حداکثر ۶۰ ثانیه است. زمان اتصال حتی بدون انتقال داده مصرف می‌شود. انتقال در بلوک‌های ۶۴ KiB محاسبه می‌شود؛ HTTP حداکثر ۳۰ ثانیه، ورودی ۱ MiB و مجموع انتقال ۸ MiB در هر درخواست دارد.

SSH

Node.js 22 یا جدیدتر و CLI نسخهٔ 0.4.3 را نصب کنید. کلید عمومی Ed25519 خود را هنگام ساخت وارد کنید؛ کلید خصوصی روی رایانه می‌ماند. کلید API باید متعلق به پروژهٔ انتخاب‌شده باشد و cloud:read و cloud:write داشته باشد.

ssh-keygen -t ed25519
sarovi-cloud servers
ssh -o 'ProxyCommand=sarovi-cloud tunnel --server SERVER_ID' sarovi@SERVER_ID

اجرای Docker

تصویر linux/amd64 را از registry عمومی دریافت کنید یا آن را روی رایانه بسازید و با SSH منتقل کنید. Docker برای دریافت تصویر و ساخت، تنظیمات خروجی را می‌خواند. برای برنامهٔ Node.js از Node 24 یا Node 22.21 به بعد و NODE_USE_ENV_PROXY=1 استفاده کنید. برنامه‌های دیگری که متغیرهای پراکسی را نمی‌خوانند باید در کتابخانهٔ HTTP خود تنظیم شوند. نمونهٔ زیر HTTP را روی پورت 8080 منتشر می‌کند و داده را روی دیسک میزبان نگه می‌دارد؛ مسیر /data باید با برنامهٔ شما هماهنگ شود.

docker build --platform linux/amd64 -t my-app .
docker save my-app | ssh -o 'ProxyCommand=sarovi-cloud tunnel --server SERVER_ID' sarovi@SERVER_ID 'docker load'
# داخل سرور:
docker run -d --restart unless-stopped --env-file /etc/sarovi/egress.env -p 8080:8080 -v /home/sarovi/data:/data my-app

فراخوانی API خارجی

روی سرور، HTTP_PROXY و HTTPS_PROXY آماده‌اند. برای سرویس systemd، EnvironmentFile=/etc/sarovi/egress.env و برای کانتینر --env-file /etc/sarovi/egress.env را اضافه کنید. Node 24 یا Node 22.21 به بعد با NODE_USE_ENV_PROXY=1 کار می‌کند؛ Python requests و بسیاری از کتابخانه‌های Go تنظیمات محیط را می‌خوانند. کتابخانه‌هایی که پراکسی محیطی را نمی‌خوانند باید صریح تنظیم شوند. سقف ۳۲ اتصال همزمان و ۳۰۰ اتصال تازه در دقیقه برای هر سرور است؛ اتصال خروجی حداکثر ۱۰ دقیقه یا ۲ دقیقه بی‌کاری ادامه دارد. فایل تنظیمات اعتبارنامهٔ همین سرور را دارد؛ در Git یا مرورگر عمومی منتشر نکنید.

set -a; . /etc/sarovi/egress.env; set +a
curl https://api.github.com/zen
# Node 24 در کانتینر:
docker run --rm --env-file /etc/sarovi/egress.env node:24-alpine node -e "fetch('https://api.github.com/zen').then(r=>r.text()).then(console.log)"

PostgreSQL

PostgreSQL 15 روی ماشین مستقل اجرا می‌شود. کاربر و دیتابیس app هستند. فرمان connection رمز را نمایش می‌دهد؛ آن را در گزارش، Git یا مرورگر عمومی قرار ندهید. در ترمینال دیگر تونل را باز نگه دارید و با psql یا ابزار SQL متصل شوید. ورود کاربران، Realtime و API خودکار Supabase در این سرویس وجود ندارند.

sarovi-cloud server connection --server SERVER_ID --protocol postgres
sarovi-cloud tunnel --server SERVER_ID --protocol postgres --port 5433
psql 'host=127.0.0.1 port=5433 user=app dbname=app sslmode=require'

پشتیبان و بازیابی

برای پشتیبان، خروجی را روی رایانه نگه دارید؛ نگهداری ۷ روزهٔ دیسک جای پشتیبان مستقل نیست و در پایان این مهلت حذف می‌شود. نمونهٔ بازیابی برای دیتابیس خالی روی سرور تازه است. ابتدا بازیابی را بررسی کنید و سپس برنامه را منتقل کنید.

ssh -o 'ProxyCommand=sarovi-cloud tunnel --server SERVER_ID' sarovi@SERVER_ID 'sudo -u postgres pg_dump -Fc app' > app.dump
cat app.dump | ssh -o 'ProxyCommand=sarovi-cloud tunnel --server NEW_SERVER_ID' sarovi@NEW_SERVER_ID 'sudo -u postgres pg_restore -d app --no-owner'

ساخت از API

از GET /v1/cloud/pricing توکن قیمت و از GET /v1/cloud/servers نسخهٔ سیاست، قیمت و ظرفیت را بخوانید. درخواست ساخت باید idempotency_key ثابت، fx_token، max_cost_micro_usd و تأیید پرداخت داشته باشد. برای همیشه روشن، continuous:true و confirm_stop_at_expiry:true ارسال کنید؛ برای موقت confirm_delete_at_expiry:true. تمدید از POST /v1/cloud/servers/ID/renew با hours، idempotency_key، fx_token، max_cost_micro_usd، confirm_prepaid:true و confirm_restart:true انجام می‌شود. پس از timeout همان شناسه را بررسی کنید؛ درخواست تازه نسازید.