Trang này gom mọi biến môi trường vào một chỗ để tra nhanh. Cách điền .env
từng bước khi cài VPS vẫn theo Hướng dẫn triển khai §3.
Dùng ô tìm kiếm hoặc Ctrl+F với tên biến để nhảy tới dòng cần xem.
Cách đọc cột “Bắt buộc”:
Có: production thiếu hoặc để giá trị mẫu thì container không lên, hoặc
có lỗ hổng bảo mật.
Khi dùng: chỉ cần khi bật tính năng liên quan.
Không: code đã có mặc định an toàn, chỉ đặt khi muốn đổi.
Cột Mặc định là giá trị trong code khi không đặt biến (thường là giá trị
cho dev). Cột Production là giá trị nên dùng trên VPS.
Môi trường: dev, test, staging, production. Nhiều cơ chế an toàn dựa vào biến này (chặn IDENTITY_VERIFICATION_MODE=skip, bắt buộc media qua nginx, bắt buộc PROMO_CODE_HMAC_SECRET…)
Các trần thưởng dưới đây chỉ là mặc định cho game chưa khai báo tiền tệ
riêng. Trần thật của từng game sửa ở Portal → Tiền tệ & tiến trình;
đổi .env không ảnh hưởng game đã cấu hình.
Biến
Bắt buộc
Mặc định
Production
Ý nghĩa
MAX_EARNING_PER_SYNC
Không
5000
Giữ mặc định
GOLD tối đa nhận trong một lần đồng bộ (chống gian lận)
MAX_EARNING_PER_WINDOW
Không
50000
Giữ mặc định
GOLD tối đa trong một cửa sổ thời gian
MAX_EARNING_WINDOW_SECONDS
Không
300
Giữ mặc định
Độ dài cửa sổ thời gian (giây) cho MAX_EARNING_PER_WINDOW
REWARD_MAX_GOLD_PER_CHECKIN_CELL
Không
10000
Giữ mặc định
GOLD tối đa của một ô điểm danh
REWARD_MAX_GOLD_PER_GIFT
Không
100000
Giữ mặc định
GOLD tối đa của một lần tặng quà
REWARD_MAX_GOLD_PER_CAMPAIGN
Không
100000
Giữ mặc định
GOLD tối đa của một chiến dịch khuyến mãi
REWARD_MAX_GOLD_PER_PROMO_CODE
Không
100000
Giữ mặc định
GOLD tối đa của một mã quà
GIFT_APPROVAL_GOLD_THRESHOLD
Không
5000
Giữ mặc định
Tặng quà từ mức GOLD này trở lên phải duyệt hai người (khi game bật approval_workflow)
GIFT_APPROVAL_RECIPIENT_THRESHOLD
Không
50
Giữ mặc định
Tặng cho từ số người nhận này trở lên phải duyệt hai người
DAILY_CHECKIN_REWARDS_JSON
Không
Bảng 7 ngày của Drone Strike
Không đặt
Bảng thưởng mặc định khi tạo bản nháp điểm danh đầu tiên. Bảng thật quản lý trên Portal → Điểm danh
DAILY_CHECKIN_RESET_UTC_OFFSET_MINUTES
Không
0
Không đặt
Mốc reset điểm danh mặc định (phút lệch UTC) cho bản nháp đầu tiên
RECONCILIATION_PENDING_HOURS
Không
24
Giữ mặc định
Giao dịch chờ lâu hơn số giờ này được đếm vào hàng chờ đối soát trên Health
Các biến *_PATH là đường dẫn bên trong container backend. Thư mục
credentials/ trong thư mục cài đặt được mount chỉ đọc vào /app/credentials.
Cách tạo từng giá trị: Google Play & Cloud.
Biến
Bắt buộc
Mặc định
Production
Ý nghĩa
GOOGLE_PLAY_SERVICE_ACCOUNT_JSON_PATH
Khi dùng IAP
Trống
/app/credentials/<file>.json
Service account gọi Google Play Developer API: xác minh giao dịch, acknowledge/consume, đối soát hoàn tiền
GOOGLE_PUBSUB_AUDIENCE
Khi dùng RTDN
Trống
URL push endpoint đã cấu hình ở Pub/Sub
Audience của JWT mà Pub/Sub ký khi đẩy thông báo tới /webhooks/play-store
GOOGLE_PUBSUB_PUBLIC_KEY_PATH
Khi dùng RTDN
Trống
/app/credentials/<file>
Khóa công khai để kiểm chữ ký thông báo Pub/Sub
GOOGLE_PLAY_VERIFY_PUSH_JWT
Không
true
true
Kiểm JWT của push Pub/Sub. Chỉ tắt khi debug ở dev
ADMOB_PUBLISHER_ID
Khi dùng AdMob
Trống
pub-…
Publisher ID để lấy doanh thu quảng cáo
ADMOB_SERVICE_ACCOUNT_JSON_PATH
Khi dùng AdMob
Trống
/app/credentials/<file>.json
Service account đọc báo cáo AdMob
IAP_WEBHOOK_PUBLIC_KEY_PATH
Khi dùng
Trống
/app/credentials/<file>
Khóa công khai kiểm webhook IAP kiểu cũ
IAP_WEBHOOK_ISSUER
Khi dùng
Trống
Issuer của webhook
Issuer mong đợi trong webhook IAP kiểu cũ
APPLE_ROOT_CERTIFICATE_PATH
Khi dùng
Trống
/app/credentials/<file>
Chứng chỉ gốc Apple để kiểm thông báo App Store (iOS IAP chưa bật)
Domain gốc của site (sitemap, link tuyệt đối). Mặc định https://portal.tinysoft.io.vn; base /guide/ không đổi
PORTAL_E2E_BASE_URL
npm run screenshots
URL Portal để chụp ảnh, chỉ chấp nhận localhost. Mặc định http://localhost:3000
PORTAL_E2E_GAME_ID
npm run screenshots
Game test_t4_demo_<hex> do script seed tạo
PORTAL_E2E_EMAIL
npm run screenshots
Email admin dev để đăng nhập khi chụp (đặt trong shell, không ghi vào file)
PORTAL_E2E_PASSWORD
npm run screenshots
Mật khẩu admin dev (đặt trong shell, không ghi vào file)
PORTAL_E2E_STORAGE_STATE
npm run screenshots
File phiên đăng nhập Playwright, lưu ngoài repo (dùng khi tài khoản có MFA)
PORTAL_T4_STATE_FILE
seed-screenshots.py
Nơi ghi id game demo. Mặc định file tạm gameops-portal-t4-screenshot-seed.json
Đối chiếu với backend/src/admin_portal/settings.py, các file .env*.example
và script trong scripts/ của Portal v1.2.2. npm run build:all báo lỗi nếu
có biến mới chưa có trong trang này.