DDevArchive
Đăng nhập

Deploy cơ bản: đưa app lên internet với Railway/Render

App chạy trên localhost thì chỉ mình bạn dùng được. Deploy lên cloud để cả thế giới truy cập. Bạn sẽ deploy full-stack app (frontend + backend + database) lên Railway hoặc Render — miễn phí và chỉ cần 10 phút.

Deploy là gì?

Deploy = đưa code từ máy bạn lên server trên internet để người khác truy cập qua URL. Có nhiều cách: VPS (tự quản lý), PaaS (Railway, Render, Vercel — họ quản lý server cho bạn), hoặc container (Docker + cloud). Ở giai đoạn Builder, PaaS là lựa chọn tốt nhất.

PlatformFree tierPhù hợp choDatabase
Railway5$/tháng credit miễn phíFull-stack Node.jsPostgreSQL built-in
RenderFree web serviceBackend APIPostgreSQL 90 ngày free
VercelUnlimited cho static/serverlessFrontend React/Next.jsKhông có (dùng Supabase)
SupabaseFree tier rộng rãiDatabase-as-a-ServicePostgreSQL + Auth

Deploy backend lên Railway

// File: railway-steps.txt
1. Push code lên GitHub
2. Vào railway.app → New Project → Deploy from GitHub
3. Chọn repo → Railway tự detect Node.js
4. Thêm biến môi trường:
   DATABASE_URL=postgresql://...
   JWT_SECRET=your-secret-key
   NODE_ENV=production
5. Railway tự build + deploy → có URL trong 2 phút

--- Procfile (nếu cần) ---
web: node dist/server.js

--- package.json scripts ---
"start": "node dist/server.js"
"build": "tsc"

Biến môi trường: tách config khỏi code

KHÔNG hardcode password, API key, database URL trong code. Dùng process.env.TEN_BIEN và đặt giá trị trên platform deploy. Mỗi môi trường (dev, staging, prod) có config riêng.

// File: config.js
// ❌ SAI: hardcode
const DB_URL = 'postgresql://admin:password@localhost/mydb'

// ✅ ĐÚNG: đọc từ biến môi trường
const DB_URL = process.env.DATABASE_URL
if (!DB_URL) throw new Error("Thiếu DATABASE_URL")

// File .env (chỉ dùng local, KHÔNG commit lên Git)
// DATABASE_URL=postgresql://admin:password@localhost/mydb
// JWT_SECRET=my-dev-secret
Luôn thêm .env vào .gitignore

File .env chứa secret → TUYỆT ĐỐI không commit lên GitHub. Thêm .env vào .gitignore ngay từ đầu. Trên platform deploy, đặt biến môi trường qua dashboard.

Checklist deploy production

Trước khi deploy, kiểm tra: (1) không có console.log chứa data nhạy cảm, (2) tất cả secret đặt qua biến môi trường, (3) CORS chỉ cho phép domain frontend, (4) đã chạy test và pass.

❓ Vì sao không nên hardcode DATABASE_URL trong source code?

  • Deploy app lên Railway hoặc Render
  • Thiết lập biến môi trường đúng cách
  • Thêm .env vào .gitignore
  • Kiểm tra CORS và security trước khi go live