使用 Docker Compose 部署 MonkeyBusiness
MonkeyBusiness 是一个用 Python 写的 EA3 服务器模拟器, 看起来还可以。由于我服务器上的所有服务都是使用 Docker Compose 方式部署的,遂尝试使用 Docker Compose 进行部署。
以下是 docker-compose.yml
version: '3'
services:
monkeybusiness:
image: python:3.11-slim
volumes:
- ./src:/app
- ./venv:/venv
networks:
- http
command: /venv/bootstrap.sh
networks:
http:
external: true
name: http
以及 bootstrap.sh
#!/usr/bin/env bash
cd /app
if test -f "/venv/bin/activate"; then
source /venv/bin/activate
else
python -m venv /venv
source /venv/bin/activate
pip install -U -r requirements.txt
fi
python pyeamu.py
bootstrap.sh
的作用是创建 venv 环境, 避免使用 Dockerfile 来创建额外的 image
。主播一直觉得为了开服务而写 Dockerfile 不太合适
接下来就是修改 config.py 以及解决一个bug, 由于这个服务端并没有设计开在 Docker
内, 所以有些小问题需要修改
config.py
import socket
# simple /etc/hosts hack
host = 'ea3.girlsband.party'
ip = socket.gethostbyname(socket.gethostname())
with open("/etc/hosts", "a") as hosts:
hosts.write(f'{ip} ea3.girlsband.party')
ip = host
port = 80
services_prefix = "/core"
verbose_log = True
arcade = "EA3"
paseli = 1145
maintenance_mode = False
以及修改bug
diff --git a/modules/core/facility.py b/modules/core/facility.py
index 63a6ada..6e358e7 100644
--- a/modules/core/facility.py
+++ b/modules/core/facility.py
@@ -1,5 +1,6 @@
import config
+from socket import gethostbyname
from fastapi import APIRouter, Request, Response
from core_common import core_process_request, core_prepare_response, E
@@ -36,7 +37,7 @@ async def facility_get(request: Request):
E("id", 3, __type="str"),
),
E.portfw(
- E.globalip(config.ip, __type="ip4"),
+ E.globalip(gethostbyname(config.ip), __type="ip4"),
E.globalport(5704, __type="u16"),
E.privateport(5705, __type="u16"),
),
修改完之后将源码拉到 src
文件夹后使用 docker-compose up
启动即可
注: 在连接服务器时除了需要设置服务器 url 之外还需要把 URL Slash
选项打开, 不然会报 404