仮ですが、他に挑戦する方の参考になるようDockerを使用した構築方法を記載しておきます。
環境
Docker、docker-compose導入済み
rootlessOK
現時点での問題点
パケットを受けた時の文字コードとプログラム側の文字コード、DB側の文字コードが絡み合って日本語の名前、サーバ名が文字化けする
(苦肉の策として名前はDB側で変更すればOKだが、名前の検索とかはできなくなる)
また、コンフィグで日本語は使用できない
このあたりに詳しい方、更新をお願いします。
Dockerfile
ARG BUILDER_IMAGE=ubuntu:noble
FROM $BUILDER_IMAGE as builder
RUN apt-get update \
&& apt-get -y install --no-install-recommends git libzip-dev gnupg gcc g++ libglib2.0-dev unixodbc-dev pkg-config libmysqlclient-dev ca-certificates make \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /tmp
ARG __build_type=release
RUN git clone https://github.com/Acrisio-Filho/SuperSS-Dev
WORKDIR /tmp/SuperSS-Dev
# data_iff.hの更新でビルドできない問題への対応
RUN git reset --hard 29657d3233a84b77f3cc7bd07af6e50705a9a62d
WORKDIR /tmp/SuperSS-Dev/Server\ Lib/Linux\ Builds/
# Build gg
RUN make -f Makefile-ggauth70.mk
RUN make -f Makefile-ggsrvlib.mk
# BUild Smart
RUN make -f Makefile-smart.mk
# Build Game Server
RUN make -f Makefile-gs.mk
# Build Auth Server
RUN make -f Makefile-as.mk
# Build Login Server
RUN make -f Makefile-ls.mk
# Build Message Server
RUN make -f Makefile-ms.mk
# Build Rank Server
RUN make -f Makefile-rs.mk
# PangyaServer
FROM ubuntu:noble as Server
RUN apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y libc6 unzip curl gnupg libzip-dev tmux libglib2.0 libmysqlclient21 tdsodbc unixodbc \
&& rm -rf /var/lib/apt/lists/*
# ビルドしたものをコピー
COPY --from=builder ["/tmp/SuperSS-Dev/Server Lib/Linux Builds/Auth Server/", "/opt/AuthServer"]
COPY --from=builder ["/tmp/SuperSS-Dev/Server Lib/Linux Builds/Game Server/", "/opt/GameServer"]
COPY --from=builder ["/tmp/SuperSS-Dev/Server Lib/Linux Builds/Login Server/", "/opt/LoginServer"]
COPY --from=builder ["/tmp/SuperSS-Dev/Server Lib/Linux Builds/Message Server/", "/opt/MessageServer"]
COPY --from=builder ["/tmp/SuperSS-Dev/Server Lib/Linux Builds/Rank Server/", "/opt/RankServer"]
# 起動スクリプトと設定
COPY ./start.sh /entrypoint.sh
COPY ./ini/odbc.ini /etc/odbc.ini
COPY ./ini/odbcinst.ini /etc/odbcinst.ini
WORKDIR /opt
RUN chmod +x /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
CMD ["start"]
docker-compose.yaml
version: '3'
services:
db:
container_name: pangya_db
hostname: pangya_db
ports:
- "1433:1433"
image: mcr.microsoft.com/mssql/server:2019-latest
environment:
- ACCEPT_EULA=Y
- SA_PASSWORD=【ここは変更してください】
- MSSQL_PID=Express
- MSSQL_LCID=1041
- MSSQL_COLLATION=Japanese_CI_AS
volumes:
- "./mssqlserver/data:/var/opt/mssql/data"
- "./mssqlserver/log:/var/opt/mssql/log"
- "./mssqlserver/secrets:/var/opt/mssql/secrets"
networks:
- pangya
app:
container_name: pangya_app
ports:
- "7777:7777"
- "20203:20203"
- "10303:10303"
- "30303:30303"
- "4774:4774"
build: .
image: japangya
depends_on:
- db
networks:
- pangya
volumes:
- "./ini/auth_server.ini:/opt/AuthServer/server.ini"
- "./ini/game_server.ini:/opt/GameServer/server.ini"
- "./ini/login_server.ini:/opt/LoginServer/server.ini"
- "./ini/message_server.ini:/opt/MessageServer/server.ini"
- "./ini/rank_server.ini:/opt/RankServer/server.ini"
#- "./pangya_jp.iff:/opt/GameServer/data/pangya_jp.iff" #iff入れ替えた場合
command: /bin/sh -c "while :; do sleep 10; done"
web:
container_name: web
image: nginx
volumes:
- "./www:/usr/share/nginx/html"
ports:
- "8080:80"
networks:
pangya:
driver: bridge
start.sh
#!/bin/bash
set -eu
# Base Directory
dir=/opt/
as=AuthServer
ls=LoginServer
ms=MessageServer
rs=RankServer
gs=GameServer
#smart=Smart-Calculator
# Smart Calculator lib
#tmux new-session -s "${smart}" -c "/home/acrisio/projects/Node/${smart}/" -d 'node smart.js'
# Auth Server
tmux new-session -s "${as}" -c "${dir}/${as}/" -d ./auth
# Login Server
tmux new-session -s "${ls}" -c "${dir}/${ls}/" -d ./login
# Message Server
tmux new-session -s "${ms}" -c "${dir}/${ms}/" -d ./msn
# Rank Server
tmux new-session -s "${rs}" -c "${dir}/${rs}/" -d ./rank
# Game Server
tmux new-session -s "${gs}" -c "${dir}/${gs}/" -d ./game
# Show sessions createds
tmux ls
if [ "$1" = 'start' ]; then
tmux -v new-session -s console -d
while true; do
sleep 1
tmux list-sessions > /dev/null 2>&1 || break
done
exit 0
fi
exec "$@"
odbc.ini
[pangya]
Driver = FreeTDS
Server = pangya_db
host = pangya_db
port = 1433
tds version = 7.4
ClientCharset = SHIFT_JIS
odbcinst.ini
[FreeTDS]
Description = FreeTDS for SQL Server
Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
UsageCount = 1
ファイル構造
以下の用にini等を配置
├ Dockerfile
├ docker-compose.yaml
├ start.sh
├ pangya_jp.iff
├ ini
│ ├ auth_server.ini
│ ├ game_server.ini
│ ├ login_server.ini
│ ├ message_server.ini
│ ├ odbc.ini
│ ├ odbcinst.ini
│ └ rank_server.ini
└ www
事前準備
上記ファイル構造通りに各iniファイルを配置します。
※authやgameなどはリポジトリ上から取得可能です。
各server.iniのDBIPはpangyaに設定します。
auth以外のserver.iniのAUTHSERVERのIPはauthに設定します。
それ以外は好きなように設定してください。
ただし、日本語を使うとバグるので英語でお願いします。(Windows版は日本語でも行ける)
www内はリポジトリのwwwをコピーしてきてください。
ビルド
docker compose buildを実行します。
CPUにもよりますが大体10~20分程度かかるのでコーヒーでも飲みながら待ちます。
DBの準備
docker compose up dbをして、SSMSからアクセスします。
pangyaユーザやsqlの実行をしてpangyaDBを作成します。
DB周りはWindowsと同様に設定可能なのでそちらを参照してください。
起動
docker compose up -dをして起動します。
docker compose logs -fでログを開きそれぞれ正常に起動していることを確認します。
補足
各サーバを別々で起動しようとしましたがどうにもゲームサーバだけCPU使用率が異常になるのでtmuxで起動する手法のままにしています。
サーバのメモリが2GB以下でMSSQLが起動できない時
MSSQLは要件として2GB以上を要求しています。
安定性を犠牲にして無理やり起動する場合は以下のDockerfileでビルドしてください。
(数ヶ月使った感じ大丈夫そうでした)
FROM oraclelinux:7-slim AS build0
WORKDIR /root
RUN yum update -y && yum install -y binutils gcc
ADD wrapper.c /root/
RUN gcc -shared -ldl -fPIC -o wrapper.so wrapper.c
FROM mcr.microsoft.com/mssql/rhel/server:2019-latest
COPY --from=build0 /root/wrapper.so /root/
ADD wrapper.c /root/
USER root
RUN echo "/root/wrapper.so" > /etc/ld.so.preload
USER mssql
最終更新:2024年09月13日 20:39