# DevOps & VPS Landing Page — Node.js / Express

Landing page cho dịch vụ DevOps, quản trị VPS, Cloud, CI/CD và Monitoring, chạy trên **Node.js + Express**, có API xử lý form liên hệ thật (lưu file + gửi email tuỳ chọn).

## Cấu trúc thư mục

```
devops-landing-node/
├── server.js           # Express server + API /api/contact
├── package.json
├── .env.example         # Mẫu biến môi trường (copy thành .env)
├── .gitignore
├── data/
│   └── leads.json       # Tự động tạo, lưu danh sách lead gửi từ form
├── public/               # Toàn bộ frontend tĩnh
│   ├── index.html
│   ├── styles.css
│   └── script.js
└── README.md
```

## Công nghệ sử dụng

- **Backend**: Node.js, Express 4
- **Middleware**: helmet (bảo mật header), compression (nén response), morgan (log request), express-rate-limit (chống spam form)
- **Email**: nodemailer (tuỳ chọn, chỉ chạy khi cấu hình SMTP)
- **Frontend**: HTML5 + CSS3 thuần + JavaScript (vanilla, không framework)

## Cài đặt & chạy

```bash
# 1. Cài dependency
npm install

# 2. Copy file cấu hình môi trường
cp .env.example .env
# rồi chỉnh sửa .env nếu muốn bật gửi email (SMTP_HOST, SMTP_USER, SMTP_PASS...)

# 3. Chạy server
npm start
# hoặc chạy với auto-reload khi code thay đổi
npm run dev
```

Mặc định server chạy tại: **http://localhost:3000**

## API

### `POST /api/contact`
Nhận dữ liệu từ form liên hệ trên landing page.

**Body (JSON):**
```json
{
  "name": "Nguyễn Văn A",
  "email": "a@example.com",
  "phone": "0901234567",
  "service": "Quản trị VPS",
  "message": "Mình cần tư vấn gói Professional"
}
```

**Response thành công (200):**
```json
{ "ok": true }
```

**Response lỗi (400):**
```json
{ "error": "Email không hợp lệ." }
```

Mỗi lead hợp lệ được ghi vào `data/leads.json`. Nếu đã cấu hình SMTP trong `.env`, hệ thống tự gửi email thông báo tới địa chỉ `CONTACT_TO`.

Giới hạn: tối đa **5 lần gửi / 10 phút / IP** để chống spam.

### `GET /api/health`
Health check, hữu ích khi deploy lên Render, Railway, Docker, PM2...
```json
{ "status": "ok", "uptime": 123.45 }
```

## Deploy

- **Render / Railway**: kết nối repo, Build command để trống, Start command: `npm start`, nhớ set biến môi trường (`.env`) trên dashboard.
- **VPS riêng (khuyên dùng PM2)**:
  ```bash
  npm install -g pm2
  npm install --production
  pm2 start server.js --name devops-landing
  pm2 save
  ```
  Sau đó dùng Nginx reverse proxy trỏ về `localhost:3000`.
- **Docker** (tự thêm Dockerfile nếu cần):
  ```dockerfile
  FROM node:18-alpine
  WORKDIR /app
  COPY package*.json ./
  RUN npm install --production
  COPY . .
  EXPOSE 3000
  CMD ["node", "server.js"]
  ```

## Trước khi lên production, nhớ chỉnh

- `.env`: điền SMTP thật nếu muốn nhận email khi có lead mới.
- `public/index.html`: cập nhật domain thật ở `canonical`, `og:url`, `og:image`, email/Telegram/Zalo/Facebook thật ở Footer.
- Cân nhắc đổi `data/leads.json` sang database thật (MongoDB/PostgreSQL) nếu lượng lead lớn.
