nirva|deploy
2026-05-15·8 min read·NirvaDeploy team
#Railway#migration#tutorial#Thai

Migrate จาก Railway มา NirvaDeploy — คู่มือทีละขั้น

ทำได้แบบ zero-downtime — รัน 2 platforms parallel ก่อน cutover

ทำไมต้อง migrate?

  • ราคาถูกกว่า 15-29% ทุก tier (ดู pricing comparison)
  • ภาษาไทย ทั้ง UI, error messages, support
  • ใบกำกับภาษีอัตโนมัติ ในนาม Best Investigation Co., Ltd. — สำหรับ SME ไทย
  • MCP-native ให้ Claude/Manus/GPT สั่งงานได้
  • PromptPay + บัตรไทย ผ่าน Stripe Thailand

แต่ Railway ก็ยังดี — ถ้าคุณไม่ใช่ Thai SME, ไม่ต้องการ MCP, ไม่ต้องการใบกำกับภาษี → ใช้ Railway ต่อก็ได้

ก่อนเริ่ม

เครื่องมือที่ต้องการ

  • Railway account (เดิม) — login + เข้า dashboard ได้
  • NirvaDeploy account — sign in ด้วย Line/Google ที่ nirvadeploy.com
  • Railway API token: railway.com/account/tokens
  • (Optional) Claude Desktop กับ NirvaDeploy MCP เชื่อมแล้ว — ทำให้ migration ผ่านการคุย

ของที่จะ migrate

  • Projects + services ทั้งหมด
  • Environment variables (รวม secrets)
  • Custom domains (ถ้ามี)
  • Database (Postgres/Redis — ต้อง dump + restore แยก)

ที่ migrate ไม่ได้ (Phase 2 limitation)

  • Railway-specific features (Volume, Cron — Phase 2.x จะรองรับ)
  • Team members (NirvaDeploy v0.2 single-user, Phase 2.x จะมี team)
  • GitHub OAuth-connected repos (need re-auth บน NirvaDeploy)

5-step migration

Step 1: Audit Railway projects (15 นาที)

ดูว่ามีอะไรอยู่บน Railway บ้าง — เปิด dashboard + คัด list:

Project: my-app
├── Service: api          (Python FastAPI, 1 GB RAM)
├── Service: worker       (Python, background jobs)
└── Service: postgres     (Railway managed Postgres)

Environment variables:
- DATABASE_URL (auto from postgres)
- ANTHROPIC_API_KEY
- LINE_CHANNEL_SECRET
- LINE_CHANNEL_ACCESS_TOKEN

Custom domain: api.myapp.com
💡 ใช้ Railway CLI: railway variables --json ดึง env vars ทั้งหมด

Step 2: ตั้ง NirvaDeploy + connect Claude (10 นาที)

# Clone MCP server
git clone https://github.com/Nirvacore/nirvadeploy.git
cd nirvadeploy-mcp
python3 -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt

# ใส่ Railway token เดิม (Phase 1-3 ใช้ Railway underneath ก็จริง
# แต่เพราะ NirvaDeploy wrap Railway — ตอน migrate ใช้ token เดียวกัน)
cp .env.example .env
# แก้ RAILWAY_TOKEN=xxx

เชื่อม Claude Desktop ตาม getting-started.md

Step 3: สร้าง projects ใหม่บน NirvaDeploy (5 นาที/project)

ใช้ Claude:

คุณ: สร้างโปรเจกต์ใหม่จาก repo myorg/my-app

>

Claude: (เรียก nirvadeploy_create_project_from_repo) ✅ สร้างโปรเจกต์ 'my-app' แล้ว 📦 project_id: proj-new-001 🔧 service_id: svc-new-001
คุณ: ตั้ง env vars พวกนี้: ANTHROPIC_API_KEY=xxx, LINE_CHANNEL_SECRET=yyy

>

Claude: (เรียก nirvadeploy_set_variable หลายรอบ) ✅ ตั้งค่าครบ 5 ตัว

Tip: สำหรับ batch set variables — ใช้ template ของเรา:

คุณ: Deploy template nirvadeploy/template-fastapi-line-bot พร้อม env vars จาก Railway ของผม

(Template marketplace มี 10 ตัวพร้อมใช้ — ดู /dashboard/templates)

Step 4: Database migration (10-60 นาที — ขึ้นกับขนาด)

Postgres:

# Dump จาก Railway (เปิด terminal ใน Railway shell หรือ local)
pg_dump $RAILWAY_DATABASE_URL > backup.sql

# Restore ใส่ NirvaDeploy Postgres add-on
# (Phase 2.x: postgres add-on จะ provision ผ่าน template/MCP)
psql $NIRVADEPLOY_DATABASE_URL < backup.sql

Redis:

# Dump
redis-cli -u $RAILWAY_REDIS_URL --rdb dump.rdb

# Restore — ใช้ redis-cli RESTORE หรือ rdb-tools

Tips:

  • ทำใน maintenance window (ลด traffic) ถ้าเป็น production
  • Test กับ staging database ก่อน
  • เก็บ backup ของ Railway ไว้อย่างน้อย 30 วันก่อน decommission

Step 5: DNS cutover (5 นาที + รอ TTL)

Railway domain:      api-prod.up.railway.app
NirvaDeploy domain:  my-app-svc.nirvadeploy.com (หรือ custom domain ของคุณ)

Recommended: gradual cutover ใช้ weighted DNS:

  1. Cloudflare DNS load balancer (หรือ Route53 weighted records)
  2. 0% NirvaDeploy → 10% → 50% → 100% ตามที่มั่นใจ
  3. Monitor error rates บน NirvaDeploy /status + บน Railway dashboard
  4. ถ้ามีปัญหา rollback ไป 100% Railway ทันที

Simple cutover (ถ้าไม่กังวล downtime ≤ TTL):

  1. Update DNS A record / CNAME → NirvaDeploy
  2. รอ TTL หมด (5-60 นาที)
  3. Done
💡 NirvaDeploy auto-provisions SSL cert (Let's Encrypt) — ไม่ต้องตั้งเอง

หลัง cutover

Verify (1 วัน)

Decommission Railway (30 วันหลัง verify)

  • Keep Railway running 30 วันเป็น safety net
  • ถ้าไม่มีปัญหา — เข้า Railway dashboard → delete services + cancel subscription
  • เก็บ Postgres dump ใน R2/S3 ไว้อย่างน้อย 90 วัน

Common gotchas

"Build failed: package not found"

Railway มี cached node_modules. NirvaDeploy build fresh — ต้องตรวจสอบ package.json มี deps ครบ. แก้: npm install --save <missing> แล้ว push

Custom domain SSL not provisioning

NirvaDeploy ต้องเห็น DNS ของคุณ point มาที่ service URL ก่อน Let's Encrypt issue cert. แก้: รอ 5-10 นาทีหลัง DNS update — ระบบ retry อัตโนมัติ

Database connection refused

ลืม IP whitelist? — Railway Postgres allow all by default. ถ้าใช้ Supabase/Neon/RDS — เปิด NirvaDeploy IP

Environment vars ขาดบางตัว

Railway มี auto vars (PORT, RAILWAY_PROJECT_ID ฯลฯ) ที่ NirvaDeploy ใช้ชื่อต่าง. แก้: เช็คชื่อ var ใน source code, map ใหม่:

  • RAILWAY_PROJECT_ID → ใช้ NIRVADEPLOY_PROJECT_ID แทน
  • PORT → เหมือนกัน (รองรับมาตรฐาน)

Migration cost calculator

Solo dev (1 service, Hobby)

  • Railway: $5-7/mo ($60-84/yr)
  • NirvaDeploy Hobby: ฿111/mo (~$43/yr)
  • ประหยัด ~฿593/yr

Freelancer (5 services, Pro)

  • Railway: ~$22-30/mo ($264-360/yr)
  • NirvaDeploy Pro: ฿333/mo (~$190/yr)
  • ประหยัด ~฿4,133/yr

SME (15 services, Team)

  • Railway: ~$80-120/mo ($960-1,440/yr)
  • NirvaDeploy Business: ฿888/mo (~$533/yr)
  • ประหยัด ~฿25,733/yr

ลอง pricing calculator เต็มที่ /pricing


ต้องช่วยอะไร?


ผ่านได้แล้วบอกเราด้วย — เรา feature stories ของลูกค้าที่ migrate เสร็จใน [/showcase](/showcase)


ชอบบทความนี้?

ลอง NirvaDeploy ฟรี

Free tier ตลอดชีพ · ไม่ต้องใส่บัตร · Sign in ด้วย Line/Google

เริ่มเลย →