5分钟用Docker在Linux服务器部署网页版超级马里奥:从零搭建到公网访问全指南
周末想找点乐子?不如用闲置的云服务器搭建一个能随时打开的网页版超级马里奥!这个经典游戏不仅能让技术宅重温童年回忆,还能成为办公室的"团建神器"。本文将手把手教你如何用Docker快速部署,并解决国内镜像拉取慢、公网访问等实际问题,最后还会教你如何用Nginx反代和域名绑定,打造专属的怀旧游戏站。
1. 环境准备与Docker安装
在开始之前,确保你有一台运行Linux的服务器(云服务器或本地虚拟机均可)。推荐使用Ubuntu 20.04/22.04或CentOS 7/8系统,这些系统对Docker的支持最为完善。
1.1 安装Docker引擎
对于Ubuntu/Debian系统,执行以下命令:
# 卸载旧版本(如有) sudo apt-get remove docker docker-engine docker.io containerd runc # 安装依赖工具 sudo apt-get update sudo apt-get install ca-certificates curl gnupg lsb-release # 添加Docker官方GPG密钥 sudo mkdir -p /etc/apt/keyrings curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg # 设置稳定版仓库 echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null # 安装Docker引擎 sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin对于CentOS/RHEL系统,使用以下命令:
# 卸载旧版本 sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine # 安装必要工具 sudo yum install -y yum-utils # 设置稳定版仓库 sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo # 安装Docker引擎 sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin1.2 启动Docker服务并设置开机自启
sudo systemctl enable --now docker验证安装是否成功:
sudo docker run hello-world如果看到"Hello from Docker!"的欢迎信息,说明安装成功。
注意:如果服务器在中国大陆地区,建议立即配置镜像加速器,否则后续拉取镜像可能非常缓慢。
2. 配置国内镜像加速器
由于Docker Hub在国内访问速度较慢,我们需要配置镜像加速器。以下是国内主流云服务商提供的加速地址:
| 服务商 | 加速器地址 |
|---|---|
| 阿里云 | https://<你的ID>.mirror.aliyuncs.com |
| 腾讯云 | https://mirror.ccs.tencentyun.com |
| 华为云 | https://<你的ID>.swr.myhuaweicloud.com |
| 网易云 | https://hub-mirror.c.163.com |
以阿里云为例,配置方法如下:
- 登录阿里云容器镜像服务控制台
- 左侧菜单选择"镜像工具"→"镜像加速器"
- 复制专属加速器地址
然后在服务器上创建或修改/etc/docker/daemon.json文件:
sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://你的ID.mirror.aliyuncs.com"] } EOF重启Docker服务使配置生效:
sudo systemctl daemon-reload sudo systemctl restart docker验证配置是否生效:
docker info | grep Mirrors -A 1如果看到你配置的镜像地址,说明加速器已正常工作。
3. 部署网页版超级马里奥
现在我们可以开始部署游戏了。这里使用一个开源的网页版超级马里奥Docker镜像,它完整复刻了原版游戏体验。
3.1 拉取游戏镜像
执行以下命令拉取镜像:
docker pull pengbai/docker-supermario这个镜像大小约200MB,使用国内镜像加速后,下载应该能在1分钟内完成。
3.2 运行游戏容器
使用以下命令启动容器:
docker run -d -p 8080:8080 --name supermario pengbai/docker-supermario参数说明:
-d:后台运行容器-p 8080:8080:将容器内部的8080端口映射到主机的8080端口--name supermario:为容器指定一个易记的名称
检查容器是否正常运行:
docker ps你应该能看到类似这样的输出:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a1b2c3d4e5f6 pengbai/docker-supermario "nginx -g 'daemon of…" 2 minutes ago Up 2 minutes 0.0.0.0:8080->8080/tcp supermario3.3 本地访问测试
现在你可以在服务器本机使用curl测试:
curl http://localhost:8080或者如果你有图形界面,可以直接在服务器浏览器访问http://localhost:8080。
4. 配置公网访问
要让游戏能在公网访问,还需要进行一些额外配置。
4.1 防火墙设置
如果你的服务器启用了防火墙(如ufw或firewalld),需要放行8080端口:
对于ufw(Ubuntu常用):
sudo ufw allow 8080/tcp sudo ufw reload对于firewalld(CentOS常用):
sudo firewall-cmd --permanent --add-port=8080/tcp sudo firewall-cmd --reload4.2 云服务器安全组配置
如果你使用的是云服务器(如阿里云、腾讯云等),还需要在控制台配置安全组规则:
- 登录云服务商控制台
- 找到你的云服务器实例
- 进入安全组配置页面
- 添加入站规则:允许TCP协议的8080端口
4.3 获取公网访问地址
现在你可以通过http://<你的服务器公网IP>:8080访问游戏了。在浏览器中输入这个地址,就能看到熟悉的超级马里奥游戏界面。
游戏控制方式:
- 方向键:移动
- 空格键:跳跃
- 回车键:开始游戏
5. 进阶配置:打造专属游戏站
基础的部署已经完成,但我们可以做得更专业一些,比如使用域名访问、配置HTTPS等。
5.1 使用Nginx反向代理
直接暴露8080端口不够优雅,我们可以使用Nginx作为反向代理。
首先安装Nginx:
# Ubuntu/Debian sudo apt install nginx # CentOS/RHEL sudo yum install nginx然后创建配置文件/etc/nginx/conf.d/mario.conf:
server { listen 80; server_name mario.yourdomain.com; # 替换为你的域名 location / { proxy_pass http://localhost:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }测试Nginx配置并重启:
sudo nginx -t sudo systemctl restart nginx现在你可以通过http://mario.yourdomain.com访问游戏了。
5.2 配置HTTPS加密
为了安全起见,我们应该启用HTTPS。这里使用Let's Encrypt免费证书。
安装certbot工具:
# Ubuntu/Debian sudo apt install certbot python3-certbot-nginx # CentOS/RHEL sudo yum install certbot python3-certbot-nginx获取证书并自动配置Nginx:
sudo certbot --nginx -d mario.yourdomain.com按照提示操作后,你的游戏站就会自动启用HTTPS,并且certbot会设置自动续期。
5.3 使用Docker Compose管理服务
为了更方便地管理容器,我们可以使用Docker Compose。创建docker-compose.yml文件:
version: '3' services: mario: image: pengbai/docker-supermario container_name: supermario restart: unless-stopped ports: - "8080:8080"然后使用以下命令启动服务:
docker-compose up -d这样管理起来更加方便,也便于后续扩展。
6. 常见问题与解决方案
在实际部署过程中,可能会遇到一些问题,这里列出几个常见问题及解决方法。
6.1 端口冲突问题
如果8080端口已被占用,可以改用其他端口,比如:
docker run -d -p 5000:8080 --name supermario pengbai/docker-supermario然后在Nginx配置中相应地修改proxy_pass地址。
6.2 容器自动重启
有时容器可能会意外停止,我们可以添加--restart参数确保容器自动重启:
docker run -d -p 8080:8080 --name supermario --restart unless-stopped pengbai/docker-supermario6.3 游戏存档问题
默认情况下,游戏进度不会保存。如果需要保存游戏状态,可以考虑:
- 将游戏存档目录挂载到宿主机:
docker run -d -p 8080:8080 -v /path/on/host:/app/save --name supermario pengbai/docker-supermario- 或者使用Docker卷:
docker volume create mario_saves docker run -d -p 8080:8080 -v mario_saves:/app/save --name supermario pengbai/docker-supermario7. 扩展玩法:打造游戏门户
如果你想让这个游戏站更加丰富,可以考虑:
- 添加更多经典游戏(如吃豆人、俄罗斯方块等)
- 设置访问密码,限制只有知道密码的人才能玩
- 添加游戏排行榜功能
- 集成聊天室,让玩家可以交流
这些都可以通过组合不同的Docker容器来实现。例如,要添加吃豆人游戏:
docker run -d -p 8081:80 --name pacman rgielen/pacman然后在Nginx中配置相应的反向代理规则。