# Domain riêng và PostgreSQL TCP/TLS

Skill cha: [tdshift-paas](https://app.tdshift.info/skill)

Chỉ có ở **chế độ server** (portal chạy với `PAAS_MODE=server`). Ở chế độ local không có các khu này.

## Gắn domain riêng cho web

Cần: project Compose đã deploy thành công ít nhất một lần, trạng thái `ready`. Mỗi project gắn được **một** hostname; địa chỉ mặc định vẫn hoạt động.

1. Khu **Domain riêng**: nhập **Tên miền** chỉ gồm hostname (ví dụ `example.vn` hoặc `www.example.vn`, không `https://`, không cổng, không đường dẫn) → **Lưu domain & lấy mã xác minh**.
2. Tại nhà cung cấp DNS (để chế độ DNS only, không proxy):
   - Apex `example.vn`: bản ghi `A` trỏ về IPv4 của server. Trang hiện IP này ở dòng **A — IP server** nếu admin đã đặt `PAAS_PUBLIC_IP` trong `.env`; nếu không có dòng đó, lấy IP bằng `dig +short <địa chỉ mặc định> A`.
   - Subdomain `www.example.vn`: bản ghi `CNAME` trỏ về địa chỉ mặc định của project hiển thị trên trang.
   - Bản ghi `TXT` tên `_tdshift-verify.<hostname>` với giá trị hiển thị trên trang. Nhiều trình quản lý DNS tự thêm tên zone: khi đó nhập `_tdshift-verify` (apex) hoặc `_tdshift-verify.www`.
   - Xoá các bản ghi A/AAAA xung đột.
3. Bấm **Xác minh DNS & kích hoạt**. Hệ thống kiểm tra TXT và các IP phân giải trùng với địa chỉ mặc định của project. DNS chưa lan truyền thì thử lại sau.
4. HTTPS do Let's Encrypt cấp tự động khi DNS đúng và cổng 80/443 truy cập được. Kích hoạt xong không có nghĩa chứng chỉ đã có ngay.

`example.vn` và `www.example.vn` là hai tên khác nhau; chỉ tên đã nhập được gắn, không tự chuyển hướng www. Không dùng được domain của portal hoặc domain đang thuộc project khác.

WordPress (service có `WORDPRESS_DB_HOST`) được cập nhật URL chuẩn và khởi động lại web service; link tuyệt đối đã lưu trong nội dung không bị sửa. Ứng dụng khác có thể cần tự cấu hình biến URL/allowed hosts.

Ví dụ: project `project-ac8580a192.tdshift.info` sang `maiphong.vn`: lấy IP bằng `dig +short project-ac8580a192.tdshift.info A`, tạo `A @` → IP đó và `TXT _tdshift-verify` → giá trị trên trang, kiểm tra bằng `dig +short maiphong.vn A` và `dig +short _tdshift-verify.maiphong.vn TXT`, rồi mới bấm xác minh. Bật proxy Cloudflare cho domain riêng sẽ làm xác minh thất bại vì IP khác server. Nếu chính địa chỉ mặc định (`*.tdshift.info`) ra IP Cloudflare thì `dig` không cho IP thật: dùng IP ở dòng **A — IP server** (portal chấp nhận `PAAS_PUBLIC_IP` khi xác minh); trang không có dòng đó thì admin phải đặt `PAAS_PUBLIC_IP`. Mở domain riêng ra 404 trước khi kích hoạt là bình thường.

**Đổi sang domain riêng khác**: nhập tên mới → **Lưu domain & lấy mã xác minh** (sinh mã TXT mới; domain cũ vẫn chạy tới khi kích hoạt tên mới) → tạo DNS cho tên mới → **Xác minh DNS & kích hoạt**. Sau đó domain cũ không còn vào project.

Không có Agent API cho domain riêng: người dùng phải bấm nút trên giao diện. AI chỉ hướng dẫn DNS và kiểm tra bằng `dig`/`curl -sI https://<domain>`; không tự xoá bản ghi DNS hay bấm gỡ domain khi chưa được yêu cầu.

**Gỡ domain riêng**: quay về địa chỉ mặc định.

## PostgreSQL TCP/TLS cho project Compose

Khu **PostgreSQL TCP / TLS**: mở một service PostgreSQL trong stack ra cổng 5432 qua TLS/SNI.

1. Chọn **PostgreSQL service**, nhập **TCP hostname** → **Lưu / đổi cấu hình**.
2. Tạo bản ghi DNS A/CNAME và TXT theo hướng dẫn trên trang.
3. **Xác minh & Bật TCP**. Tắt bằng **Tắt TCP Route**.

Client phải dùng TLS với SNI (`sslmode=verify-full`).
