【好玩的经典游戏】Docker环境下部署双人网页小游戏
一、项目介绍
1.1 项目简介
flatris:Flatris是一个最近从头开始重新设计的项目,它已经发展成一个具有UI和服务器组件的多人游戏。Flatris是一个快速节奏的两人在线网页游戏。在这个游戏中,两个玩家将同时进行操作,竞争谁能够更快地消除下落的方块。这个游戏的UI经过重新设计,充满了现代感和极简主义的风格。它具有直观的控件和友好的用户界面,使玩家能够轻松地理解和操作游戏。
1.2 项目特点
-
快节奏的游戏体验:Flatris是一个快节奏的游戏,玩家需要迅速思考和反应,以在游戏中取得胜利。
-
多人游戏:Flatris是一个多人在线游戏,可以与其他玩家一同竞技。玩家可以与好友或其他在线玩家进行对战。
-
新的界面设计:游戏界面经过重新设计,使其更加现代化和直观。玩家可以更容易地理解和操作游戏。
-
服务器组件:Flatris具有服务器组件,这意味着游戏可以在互联网上进行多人游戏。玩家可以与世界各地的其他玩家一起玩耍。
-
用户界面改进:新的用户界面使得游戏更加易于使用和导航。玩家可以轻松找到自己需要的功能和设置。
-
更多功能和选项:Flatris提供了更多的功能和选项,如排行榜、成就系统等。
二、本次实践介绍
二、本地环境介绍
2.1 本地环境规划
本次实践为个人测试环境,操作系统版本为centos7.6。
hostname | IP地址 | 操作系统版本 | Docker版本 |
---|---|---|---|
jeven | 192.168.3.166 | centos 7.6 | 20.10.17 |
2.2 本次实践介绍
1.本次实践部署环境为个人测试环境,生产环境请谨慎;
2.在Docker环境下部署Flatris双人网页小游戏。
三、本地环境检查
3.1 安装Docker环境
本次实践需要提前安装Docker环境,如果未安装,可以使用以下一键安装脚本部署Docker环境。
curl -fsSL https://get.docker.com -o get-docker.sh
sh get-docker.sh --mirror Aliyun
- Docker镜像加速配置
echo '{ "registry-mirrors": ["https://docker.mirrors.sjtug.sjtu.edu.cn"] }' > /etc/docker/daemon.json
systemctl daemon-reload && systemctl restart docker
- 开启路由转发
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
systemctl restart network
sysctl net.ipv4.ip_forward
- 在/etc/rc.d/rc.local文件中,写入以下内容:
vim /etc/rc.d/rc.local
echo 1 > /proc/sys/net/bridge/bridge-nf-call-iptables
echo 1 > /proc/sys/net/bridge/bridge-nf-call-ip6tables
chmod +x /etc/rc.d/rc.local
3.2 检查Docker服务状态
检查Docker服务是否正常运行,确保Docker正常运行。
[root@jeven ~]# systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; vendor preset: disabled)
Active: active (running) since Fri 2024-03-01 00:18:43 CST; 52s ago
Docs: https://docs.docker.com
Main PID: 11826 (dockerd)
Tasks: 28
Memory: 155.4M
CGroup: /system.slice/docker.service
├─11826 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
3.3 检查Docker版本
检查Docker版本
[root@jeven ~]# docker -v
Docker version 20.10.17, build 100c701
3.4 检查docker compose 版本
检查Docker compose版本,确保2.0以上版本。
[root@jeven ~]# docker compose version
Docker Compose version v2.6.0
四、构建容器镜像
4.1 下载项目源码
下载flatris项目源码
git clone https://github.com/ovidiuch/flatris.git
查看源码内容
[root@jeven flatris]# tree -L 2 ./
./
├── babel.config.js
├── docker-compose-visual.yml
├── docker-compose.yml
├── Dockerfile
├── flatris.gif
├── flatris.png
├── flow-typed
│ └── npm
├── jest.config.js
├── jest.framework-setup.js
├── jest-puppeteer.config.js
├── jest.setup.js
├── jest.visual.config.js
├── LICENSE
├── multiplayer.md
├── package.json
├── README.md
├── scripts
│ └── generate-game-media-queries.js
├── server
│ ├── api.js
│ ├── db.js
│ ├── env.js
│ ├── env-set-dev.js
│ ├── env-set-prod.js
│ ├── express.js
│ ├── firebase.js
│ ├── http.js
│ ├── next.js
│ ├── rollbar.js
│ ├── socket.js
│ ├── start-dev-client.js
│ ├── start-dev-server.js
│ └── start-prod.js
├── shared
│ ├── constants
│ ├── reducers
│ ├── types
│ └── utils
├── TODO.md
├── web
│ ├── actions
│ ├── babel.config.js
│ ├── components
│ ├── constants
│ ├── cosmos.config.json
│ ├── global.css
│ ├── __image_snapshots__
│ ├── mocks
│ ├── next.config.js
│ ├── pages
│ ├── reducers
│ ├── static
│ ├── store.js
│ ├── utils
│ └── visualtest.js
└── yarn.lock
19 directories, 38 files
4.2 查看Dockerfile文件
进入flatris源码目录
[root@jeven ~]# cd /data/docker/flatris/
[root@jeven flatris]# ls
babel.config.js Dockerfile flow-typed jest-puppeteer.config.js LICENSE README.md shared yarn.lock
docker-compose-visual.yml flatris.gif jest.config.js jest.setup.js multiplayer.md scripts TODO.md
docker-compose.yml flatris.png jest.framework-setup.js jest.visual.config.js package.json server web
查看Dockerfile文件内容
[root@jeven flatris]# cat Dockerfile
FROM node:12
WORKDIR /usr/src/app
COPY package.json yarn.lock ./
RUN yarn --frozen-lockfile
COPY . ./
RUN yarn build
EXPOSE 3000
CMD yarn start
4.3 复制变量文件
将源码目录中的
.env.example.j
s复制为.env.js
文件
cp .env.example.js .env.js
4.4 构建镜像
执行以下命令,构建镜像。
docker compose build
如果不想构建或构建失败,可以使用我已经构建好的镜像。
swr.cn-north-4.myhuaweicloud.com/jeven/flatris:latest
五、部署网页小游戏
5.1 修改docker-compose.yml文件
本次实践部署使用docker compose方式,可以直接使用源码目录中的docker-compose.yml部署文件,需要按以上部署提前构建镜像。
[root@jeven flatris]# cat docker-compose.yml
version: '3'
services:
flatris:
build: .
ports:
- '3000:3000'
restart: unless-stopped
如果不想构建镜像,可修改docker-compose.yml文件,直接快速部署。
version: '3'
services:
flatris:
# build: .
image: swr.cn-north-4.myhuaweicloud.com/jeven/flatris:latest
container_name: flatris
ports:
- '5200:3000'
restart: unless-stopped
5.2 创建容器
执行
docker compose up -d
命令,创建flatris容器。
[root@jeven flatris]# docker compose up -d
[+] Running 2/2
⠿ Network flatris_default Created 0.0s
⠿ Container flatris Started 0.7s
5.3 查看容器状态
检查flatris容器状态,确保flatris容器正常启动。
[root@jeven flatris]# docker compose ps
NAME COMMAND SERVICE STATUS PORTS
flatris "docker-entrypoint.s…" flatris running 0.0.0.0:5200->3000/tcp, :::5200->3000/tcp
5.4 查看容器日志
查看flatris容器运行日志,确保flatris服务正常启动。
[root@jeven flatris]# docker compose logs
flatris | yarn run v1.22.17
flatris | $ env-cmd babel-node server/start-prod.js
flatris | Browserslist: caniuse-lite is outdated. Please run:
flatris | npx browserslist@latest --update-db
flatris | Firebase not configured
flatris | > Ready on http://localhost:3000
六、访问游戏系统
6.1 访问游戏初始页
访问地址:http://192.168.3.166:5200,将IP替换为自己服务器IP地址,进入进flatris初始页。如果无法访问,则检查服务器防火墙是否设置,云服务器的安全组端口是否放行等。
6.2 开始新游戏
点击“NEW GAME”,开始新游戏。
输入名称,自定义填写即可。
6.3 双人游戏
点击游戏右侧的“2P”,复制游戏链接。
在另一个浏览器或者电脑打开复制的链接,输入名字即可。
一直选择确认,点击“OK”。
选择加入游戏
开始双人网页小游戏,通过方向键:上下左右控制方块。