
項目初探
項目地址:
這將是一個完整的,完全踐行 DevOps/GitOps 與 Kubernetes 上云流程的 Golang 游戲服務器開發(fā)的系列教程。
這個系列教程是對開源項目 Nanoserver 的完整拆解,旨在幫助大家快速上手 Golang(游戲)服務器后端開發(fā)。通過實踐去理解 Golang 開發(fā)的精髓 —— Share memory by communication(通過通信共享內(nèi)存)。
同時這個項目可能還會涉及到 Linux 性能調(diào)優(yōu)(BPF相關(guān)的工具)和系統(tǒng)保障(SRE)的相關(guān)的工作。
同志們,服務器端程序是跑在 Linux 上面的。為啥性能上不來,可能真的是對操作系統(tǒng)了解的太少(共勉)。
服務端
我調(diào)整過后的項目:
原項目
我的本地環(huán)境:
go version
# go version go1.14.14 darwin/amd64
使用容器運行 MySQL & Adminer
docker-compose.mysql.yaml
version: '3.1'
services:
db:
image: mysql
command:
- --default-authentication-plugin=mysql_native_password
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
restart: always
networks:
- db_network
ports:
- "3306:3306"
volumes:
- 'db_data:/bitnami/mysql/data'
environment:
MYSQL_DATABASE: scmj
MYSQL_ROOT_PASSWORD: 123456
healthcheck:
test: ['CMD', '/opt/bitnami/scripts/mysql/healthcheck.sh']
interval: 15s
timeout: 5s
retries: 6
adminer:
image: adminer
restart: always
networks:
- db_network
ports:
- 8080:8080
volumes:
db_data:
driver: local
networks:
db_network:
driver: "bridge"
啟動
docker-compose -f docker-compose.mysql.yaml up
# docker-compose -f docker-compose.mysql.yaml up -d 后臺運行
# docker-compose -f docker-compose.mysql.yaml down 卸載
# docker-compose -f docker-compose.mysql.yaml ps
# 清理數(shù)據(jù)文件
# docker volume ls
# docker volume rm nanoserver_db_data
容器啟動后,會自動幫我們創(chuàng)建數(shù)據(jù)庫 - scmj。
啟動服務端程序
已啟動好 MySql 后,我運行如下命令:
go run .
正常你會看到如下截圖(會自動的創(chuàng)建表和索引):

我們可以進入 http://localhost:8080/ 查看一下:

客戶端
在 Kirk-Wang/nanoserver 中,為少已經(jīng)放了一份專注于調(diào)試服務器邏輯的 apk。
安裝安卓模擬器
這里我推薦網(wǎng)易的 MuMu模擬器。

安裝 APK
mahjong.apk,已經(jīng)放到筆者修改過的項目中。這里我們使用多開助手,開4個空來血戰(zhàn)。


客戶端登錄
我們點擊微信登錄。


發(fā)現(xiàn)登錄失敗……
如何解決?請繼續(xù)閱讀。
解決客戶端登錄失敗問題
當然這問題,也好解決:
- 按作者所說那樣,反編譯
apk,找到appConfig.luac,使用二進制編輯器改完服務器地址,然后重新打包。

- 直接使用代理,如
Charles進行請求地址轉(zhuǎn)發(fā)。(本地調(diào)試服務器程序完全夠了)
Charles 對客戶端請求地址轉(zhuǎn)發(fā)
使用 Map Remote 映射到你本機調(diào)試的地址就完全夠了。


加入 guest 測試渠道 konglai

重新登錄進入游戲


完美,搞定。
測試 & 湊一局血戰(zhàn)到底
創(chuàng)建房間

加入房間

開始游戲

查看服務器日志

DevOps(Drone CI/CD) & DevOps
.drone.yml
kind: pipeline
type: kubernetes
name: NanoServer
steps:
- name: 更新 Chart.yaml appVersion
image: busybox
commands:
- echo $DRONE_COMMIT
- '[ -n "$DRONE_COMMIT" ] && (
sed -i "s/APP_VERSION/${DRONE_COMMIT}/g" k8s/nanoserver/nanoserver/Chart.yaml;
)'
- cat k8s/nanoserver/nanoserver/Chart.yaml
- name: 構(gòu)建 Docker Image
image: plugins/docker
settings:
debug: true
dockerfile: Dockerfile.prod
repo: hub.your-domain.com/library/nanoserver
tags: ${DRONE_COMMIT}
registry: hub.your-domain.com
username:
from_secret: docker_user
password:
from_secret: docker_pass
- name: 上云(HelmV3) -> K8S Cluster
image: pelotech/drone-helm3
settings:
helm_command: upgrade
chart: ./k8s/nanoserver/nanoserver
release: nanoserver
vaules_yaml: ./k8s/nanoserver/values.yaml
namespace: nano
api_server:
from_secret: api_server
kubernetes_token:
from_secret: k8s_token
skip_tls_verify: true
trigger:
branch:
- master


GitOps & ArgoCD 聲明式云原生漸進式部署


我是為少
微信:uuhells123
公眾號:黑客下午茶
加我微信(互相學習交流),關(guān)注公眾號(獲取更多學習資料~)