Dựng stack
Máy chủ chạy trong Docker. Client là ứng dụng Windows, đặt ở máy khác hoặc cùng máy nếu máy đó chạy Windows. Cả quy trình mất tầm 15 phút, phần lớn là ngồi chờ lần boot đầu.
Yêu cầu
Phần tiêu đề “Yêu cầu”Docker phải chạy được linux/amd64, vì binary nào trong stack cũng là ELF x86-64. Trên máy Apple silicon:
colima start --vm-type=vz --vz-rosetta1. Cấu hình
Phần tiêu đề “1. Cấu hình”cp .env.example .envMở .env ra, đặt mật khẩu, và điền PUBLIC_ADDR bằng địa chỉ IP mà máy chạy client kết nối tới
host này được.
2. Khởi động máy chủ
Phần tiêu đề “2. Khởi động máy chủ”docker compose up -ddocker compose logs -f goChờ dòng Avatar Star, now running. Lần boot đầu mất vài phút vì MySQL phải chạy server/db/init
trên volume rỗng để tạo schema auth, AS_SHARD và 74 bảng nội dung SYS_*, rồi tầng Java tự sinh
thêm khoảng 1.130 bảng của nó.
Dòng đó do JVM in ra server/go/logs/go.out. Container tail sẵn file này nên
docker compose logs go thấy được, nhưng nếu có ai sửa command thì phải grep thẳng file chứ đừng
grep stdout của container.
Mọi thứ lên xong thì chạy đúng một lần:
docker compose exec native bash -c 'cd /srv && ./restart_proxy.sh'proxyserver lên trước matchingserver, mà kết nối từ proxy sang matching chỉ thử đúng một lần.
Không restart proxy sau cùng thì ghép trận chết, trong khi mọi thứ khác trông vẫn bình thường.
3. Tạo tài khoản
Phần tiêu đề “3. Tạo tài khoản”Tài khoản người chơi:
docker compose exec auth python3 /opt/asauth/asacct.py create <user> --password '<password>'Tài khoản GM:
server/go/gmadmin.sh create <gm-user>GM console không có login mặc định, không tạo thì không vào được. Console nằm ở
http://<host>:8080/go/login.html. Cổng 8080 cố tình không publish trong docker-compose.yml, lý do
ở Kiến trúc.
4. Client
Phần tiêu đề “4. Client”Trên máy Windows 10 hoặc 11:
# giải nén AvatarStar-archives.zip vào client\tree\python3 client\verify_archives.pypowershell -NoProfile -File client\set-server.ps1 -Addr <IP máy chủ>client\tree\AvatarStar.exeverify_archives.py phải in ra ACCEPT rồi mới đi tiếp. Nó chạy tầm 10 giây, đối chiếu kích thước,
MD5 và nội dung của hai archive.
Đổi nội dung sau khi đã chạy
Phần tiêu đề “Đổi nội dung sau khi đã chạy”Nội dung game nằm ở các bảng SYS_*, mà tầng Java thì cache chúng qua memcached. Sửa row rồi restart
nhưng quên flush cache thì shop, quest và item vẫn trả về nội dung cũ.
docker compose exec memcached sh -c 'echo flush_all | nc 127.0.0.1 11211'docker compose restart go nativeLần boot đầu khỏi cần, vì server/db/init chạy xong trước khi có thứ gì kết nối vào.
Tiếp theo
Phần tiêu đề “Tiếp theo”Sửa nội dung trong database thì flush cache là xong. Còn sửa thứ nằm trong client, như model vũ khí, texture hay chuỗi text, thì phải đi qua kênh patch: Ship một bản update.
Bản nháp đang review. Nội dung nội bộ, đừng chia sẻ ra ngoài nhóm.