Bỏ qua để đến nội dung

Khởi động toàn bộ hệ thống

Nếu chưa làm bước §4 (domain/TLS chưa sẵn sàng, ví dụ đang test nội bộ), có thể chạy trước các service còn lại:

Terminal window
docker compose -f docker-compose.prod.yml up -d postgres backend frontend

Sau khi có TLS (§4), khởi động đầy đủ:

Terminal window
docker compose -f docker-compose.prod.yml up -d

Backend tự chạy alembic upgrade head khi container start — không cần chạy migration tay riêng.

Terminal window
docker compose -f docker-compose.prod.yml ps
docker compose -f docker-compose.prod.yml logs backend --tail 50
curl -I https://portal.tinysoft.io.vn/health # phải trả 200
# Volume ảnh ghi được bởi user không-root của backend (Phase N):
docker compose -f docker-compose.prod.yml exec backend sh -lc \
'test -d /data/media && test -w /data/media && echo "media volume writable"'
Terminal window
# Không cần session — chỉ cần API key của 1 game (Game Registry → API Key)
curl -s "https://portal.tinysoft.io.vn/api/v2/games/drone_strike/client/bootstrap?platform=android&app_version=1.0.0" \
-H "x-game-api-key: <key>" | head -c 400 # phải trả JSON có "features", "currencies"
curl -s -o /dev/null -w '%{http_code}\n' \
"https://portal.tinysoft.io.vn/api/v2/games/drone_strike/client/bootstrap" # 401 (thiếu key) là đúng
# Icon phải là URL tuyệt đối https://.../media/... (Phase N):
curl -s "https://portal.tinysoft.io.vn/api/v2/games/drone_strike/client/bootstrap?platform=android&app_version=1.0.0" \
-H "x-game-api-key: <key>" | grep -o '"icon_url":"[^"]*"' | head -3

Mở https://portal.tinysoft.io.vn/settings (mục Cài đặt → Phiên bản trong sidebar) để xem version + git commit + thời điểm build của cả frontend lẫn backend — backend lấy trực tiếp từ GET /api/v1/version (đọc backend/version.json đóng gói sẵn trong image, không phải số cố định), frontend đọc frontend/version.json đã được bake vào lúc next build. Cách này thay cho việc phải SSH vào xem git log mỗi lần muốn biết bản nào đang chạy — trên VPS vốn không có .git để xem.


Áp dụng cho Portal v1.2.2