Biến máy ở nhà/công ty thành web HTTPS công khai: dùng DNS động (DDNS) của entry.io.vn trỏ tên miền về IP của bạn, rồi một container Docker (SWAG = nginx + certbot) tự cấp & tự gia hạn chứng chỉ Let's Encrypt. Không cần VPS, không mua cert.
App local :3000 → SWAG (nginx+LE) → https://tên.ddns.entry.io.vn → 🌍 internet
🎯 Cần: IP public (không sau CGNAT) + quyền forward port ở router + máy chạy Docker. Nếu sau CGNAT/không mở được port → dùng Tunnel của entry.io.vn thay cho cách này.
Bước 1
Tạo tên DDNS trỏ về IP nhà
Vào Dashboard ▸ DNS động (DDNS) → tạo tên-bạn.ddns.entry.io.vn. Để IP luôn đúng khi mạng nhà đổi IP, dùng DynDNS update (router built-in hoặc ddclient/inadyn) gọi:
# cập nhật IP (token lấy trong Dashboard) — chạy định kỳ / router tự gọi
curl "https://USER:TOKEN@entry.io.vn/nic/update?hostname=tên-bạn.ddns.entry.io.vn&myip=$(curl -s https://api.ipify.org)"
📌 Kiểm tra trỏ đúng chưa: dig +short tên-bạn.ddns.entry.io.vn phải ra IP public của nhà bạn (curl https://api.ipify.org).
Bước 2
Mở (forward) port 80 + 443 ở router
Vào trang quản trị router → Port Forwarding / NAT → trỏ cả 80 và 443 về IP nội bộ của máy chạy Docker (vd 192.168.1.50).
Port ngoài
→ Máy nội bộ
Vì sao
80 TCP
192.168.1.50:80
Let's Encrypt HTTP-01 verify + redirect → HTTPS
443 TCP
192.168.1.50:443
HTTPS thật
⚠️ Thiếu port 80 mở ra internet → Let's Encrypt không verify được → không cấp cert. (Nhiều ISP VN chặn 80/443 hoặc dùng CGNAT — nếu vậy chuyển sang Tunnel.)
Bước 3
Chạy SWAG — 1 container = nginx + Let's Encrypt
docker-compose.yml (đổi tên-bạn + email):
services:
swag:
image: lscr.io/linuxserver/swag
container_name: swag
cap_add: [ NET_ADMIN ]
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Ho_Chi_Minh
- URL=ddns.entry.io.vn
- SUBDOMAINS=tên-bạn # = phần trước .ddns.entry.io.vn
- ONLY_SUBDOMAINS=true # chỉ cấp cert cho tên-bạn.ddns.entry.io.vn
- VALIDATION=http # Let's Encrypt HTTP-01 (cần port 80)
- CERTPROVIDER=letsencrypt
- EMAIL=ban@email.com
# - STAGING=true # bật khi test nhiều lần (tránh rate-limit), chạy thật thì tắt
volumes:
- ./swag-config:/config
ports:
- 80:80
- 443:443
restart: unless-stopped
docker compose up -d && docker logs -f swag
⏳ Lần đầu SWAG sẽ tự xin cert — đợi log hiện “Server ready” / Certbot ... Congratulations. Cert lưu ở ./swag-config/etc/letsencrypt, tự gia hạn (khỏi lo).
Bước 4
Xong — kiểm tra HTTPS
Mở https://tên-bạn.ddns.entry.io.vn → thấy trang mặc định SWAG + ổ khóa 🔒 hợp lệ (Let's Encrypt). Kiểm nhanh cert:
curl -I https://tên-bạn.ddns.entry.io.vn # 200/301, không cảnh báo cert
Bước 5
Reverse-proxy app local của bạn
Mặc định SWAG serve trang tĩnh. Để đưa app nội bộ (vd web chạy 192.168.1.50:3000) ra HTTPS — sửa ./swag-config/nginx/site-confs/default.conf, thay khối location /: