介绍
Phira 是一个 Phigros 的二创社区。作为一个开源的音游,其提供了多人联机的功能,玩家可自行部署官方的 TeamFlos/phira-mp 作为联机服务器。
phiria-mp 采用 Rust 编写。开发者并没有在 GitHub 上提供预编译的可执行文件,因此若要自行部署,需要安装 Rust 环境,并使用 Cargo 进行编译。
为了保持生产环境的纯洁不被 Rust 污染,我下定决心为其创建一个容器镜像,即置于 Dokcer 环境中运行。
教程请直接浏览🪂「运行」部分。
实现
我创建了这样一个 Dockerfile
文件,将构建和运行分成了两个阶段,配合 Alpine 基础镜像以尽可能减少镜像体积。
软件包镜像源
其中我在第 8 行这一步为 Alpine 的包管理器更换了下载源(上海交通大学)。根据需要,可以更改或删除这一行。
使用的端口
在其他的一些教程中并没有提到此程序使用的是什么端口,在此我进行说明。
在此文章被编写时,此程序使用了
12346/TCP
端口。 在此之前曾经使用过12345/TCP
端口,但目前已被废除。
FROM rust:alpine as build LABEL org.opencontainers.image.authors="i@xiaojin233.cn" COPY . /build WORKDIR /build RUN sed -i 's@dl-cdn.alpinelinux.org@mirrors.sjtug.sjtu.edu.cn@g' /etc/apk/repositories RUN apk update && \ apk add musl-dev pkgconfig openssl-dev openssl-libs-static RUN cargo build --release -p phira-mp-server FROM alpine:latest COPY --from=build /build/target/release/phira-mp-server /app/phira-mp-server WORKDIR /app EXPOSE 12346 ENV RUST_LOG=info CMD [ "/app/phira-mp-server" ]
在实际使用时,需要先将储存库克隆至本地,在储存库的根目录下创建这个文件,随后再进行构建操作。
git clone https://github.com/TeamFlos/phira-mp.git cd phira-mp vim Dockerfile # ... docker build -t jinzhijie/phira-mp:latest .
预构建镜像
为了方便使用,我提供了预构建的镜像,并将其发布在了 Docker Hub 和 Aliyun ACR 上。
Docker Hub: docker.io/jinzhijie/phira-mp:012f2c6
(https://hub.docker.com/r/jinzhijie/phira-mp)
Aliyun ACR: registry.cn-shanghai.aliyuncs.com/xiaojin233/phira-mp:012f2c6
由于 rust #89626,我在构建 arm64 的镜像时遇到了困难,所以在此我只提供了 amd64 的镜像。
运行
在此我仅作简单的运行操作。
docker run --name phira-mp --restart always -it -d -p 12346:12346 registry.cn-shanghai.aliyuncs.com/xiaojin233/phira-mp:012f2c6
在 Phira 的设置界面的 多人游戏服务器 填写服务器的 IP 和端口。
运行后并不会立即产生日志,当用户在 Phira 中连接时才会出现日志。
2023-11-04T06:44:45.479488Z INFO phira_mp_server::server: received connections from 112.65.0.0:56464 (29f5afb9-c9c0-4b88-9fa0-c43687000000), version: 1
至此,服务器部署完成。可以愉快地和朋友游玩啦 ❤