Hướng dẫn này sẽ giúp bạn đóng gói (export) dự án Godot 4 ra nền tảng Web (HTML5) và triển khai hệ thống Nakama Server lên môi trường production.
Trong môi trường thực tế (Production), bạn không thể dùng localhost hay 127.0.0.1. Server Nakama cần được đưa lên một máy chủ ảo (VPS) và cấu hình SSL (HTTPS) vì trình duyệt web yêu cầu bảo mật nghiêm ngặt.
- Thuê một VPS (DigitalOcean, Vultr, AWS, v.v...) cài đặt sẵn Ubuntu.
- Cài đặt Docker và Docker Compose trên VPS.
- Trỏ một tên miền (Domain) về địa chỉ IP của VPS (ví dụ:
api.battleship.com).
- Copy thư mục
servervà filedocker-compose.ymlcủa dự án lên VPS. - Sửa file cấu hình Nakama để đổi lại
localhostthành tên miền của bạn nếu cần. - Chạy lệnh để khởi động Nakama:
docker compose up -d
Trình duyệt Web yêu cầu kết nối an toàn wss:// (WebSocket Secure) và https://. Bạn nên cài Caddy (hoặc Nginx) để tự động cấp phát chứng chỉ Let's Encrypt:
Ví dụ Cấu hình Caddy (Caddyfile):
api.battleship.com {
reverse_proxy localhost:7350
}
console.battleship.com {
reverse_proxy localhost:7351
}Lưu ý: Port 7350 là API của Nakama, 7351 là màn hình quản trị Console.
Trước khi Export, bạn cần đổi địa chỉ kết nối trong code của Godot sang tên miền thật trên Internet thay vì localhost.
Mở file thiết lập kết nối (thường là NetworkManager.gd hoặc nơi bạn gọi Nakama.create_client):
# Thông số kết nối cục bộ (Local)
# var server_key = "defaultkey"
# var host = "127.0.0.1"
# var port = 7350
# var scheme = "http"
# Thông số kết nối Production
var server_key = "defaultkey"
var host = "api.battleship.com" # Tên miền VPS của bạn
var port = 443 # Port chuẩn của HTTPS/WSS
var scheme = "https" # Godot Nakama sẽ tự hiểu là dùng wss:// cho Socket- Vào
Project->Export... - Nhấn
Add...và chọn Web. - Nếu bạn chưa cài đặt Export Template, Godot sẽ báo đỏ. Hãy click vào link trong bảng thông báo để tải về và cài đặt.
Godot 4 sử dụng bộ nhớ dùng chung (SharedArrayBuffer) để xử lý đa luồng (multi-threading). Để Web game có thể chạy được, server lưu trữ game của bạn bắt buộc phải trả về 2 Headers sau:
Cross-Origin-Embedder-Policy: require-corp
Cross-Origin-Opener-Policy: same-originNếu bạn dự định host game lên các trang như itch.io hay GitHub Pages, itch.io đã có tùy chọn "SharedArrayBuffer support", bạn chỉ cần tick vào. Github Pages hiện tại KHÔNG hỗ trợ tùy biến Header này một cách dễ dàng.
Cách khắc phục nếu Server host game không hỗ trợ Header: Trong menu Export Web của Godot:
- Mở phần
Export Path. - Tìm mục
Variant. - Đổi từ
Thread SupportsangExport Type: Single Threaded. Lưu ý: Single Threaded có thể làm game giật hơn hoặc load chậm hơn trên web, nhưng bù lại nó có thể host ở bất kỳ đâu mà không cần thiết lập Header phức tạp.
- Nhấn nút Export Project.
- Chọn thư mục đầu ra, ví dụ
build_web/. - Tắt
Export With Debugđể tối ưu dung lượng game. - Đặt tên file xuất ra là
index.html.
Sau khi Export, bạn sẽ nhận được 1 thư mục chứa các file (index.html, index.js, index.wasm, index.pck).
Bạn có thể up thư mục này lên các dịch vụ Hosting tĩnh miễn phí/trả phí như:
- Itch.io: Tạo một project dạng HTML, nén thư mục thành file
.zip, tải lên và tick chọn SharedArrayBuffer support. - Netlify / Vercel: Kéo thả thư mục vào để deploy miễn phí. Cần chú ý file
_headersnếu cần setup SharedArrayBuffer. - VPS riêng: Nếu host cùng với server Nakama, bạn có thể thiết lập thêm một block Nginx/Caddy phục vụ các file tĩnh này.
Chúc bạn Deploy thành công!