前言
上一篇文章,我们已经在本地虚拟机中把Portainer部署好了,并且已经可以对远程服务器进行管理了,这次我准备全程通过Portainer来搭建一个载满了80、90后童年记忆的游戏网站。

就冲着有仙剑这一点,我也要把它部署起来。在部署的过程中,我想起了那天夕阳下的奔跑,那是我逝去的青春!
1. 前期准备
该游戏网站主要是基于以下两个项目搭建:
- chinese-dos-games-web:该项目用于搭建一个承载游戏的网站;
- chinese-dos-games:该项目用于下载游戏文件。
不过遗憾的是,原作者并没有提供Docker的部署方式,而另一位大佬提供的镜像oldiy/dosgame-web-docker也已经很久没有更新了。然而,这些都不是最重要的,最重要的是,项目源码中直接通过CDN方式引用了bootstrap,而stackpath.bootstrapcdn.com貌似已经访问不了,所以打开页面会很卡,布局也扭曲了。
因此,我准备下载源码,编写Dockerfile和docker-compose.yml文件,自己构建镜像部署。修改后的目录结构如下:
其中,我做了如下优化,
- 将
bootstrap相关文件下载到了本地,并修改了源码的引用方式; - 两个项目合二为一,将
chinese-dos-games项目下的img、download_data.py和games.json复制到了chinese-dos-games-web项目的static/games目录下; - 编写
Dockerfile和docker-compose.yml文件,用于构建镜像和部署,镜像中不预装游戏,减小体积; - 将上述文件夹打包成
tar包,以便于Portainer安装。
如有需要该tar包,关注公众号【老朱独立开发】,回复【dosgame】获取,然后按接下来的步骤执行即可。
2. 安装部署
接下来就可以通过Portainer来部署我们的游戏网站了。
2.1 构建镜像
- 打开Portainer管理界面,点击Home页,选择希望部署的节点。

- 选择Images,点击Build a new image按钮创建新镜像。

- 填写镜像名称,选择Upload方式,上传
tar文件(zip不支持),然后点击Build the image按钮,等待构建即可。
如果超时失败了,就重新再来一次,安装成功后,镜像列表中会出现如下两个镜像:
该步骤相当于执行了docker build -t chinese-dos-games-web .命令。
2.2 启动容器
我们知道,通过脚本启动容器有两种方式:docker run和docker compose up。它们在Portainer中分别对应的是Containers和Stacks,Containers方式需要先创建数据卷,网络等,然后再创建容器,并作出相应的配置,和Stacks相比,步骤和参数都会多一些,我这里直接采用Stacks方式,因为Stacks方式只需要配置docker-compose.yml文件即可,具体步骤如下:
- 选择Stacks,点击Add stack按钮。

- 填写Name,选择Upload,上传
docker-compose.yml文件,点击Deploy the stack即可完成部署。
该步骤需要注意的是,docker-compose.yml中的镜像名要与上面构建镜像时填写的镜像名一致。 - 到Containers中,就可以看到启动后的容器了。

该步骤相当于执行了docker compose up -d命令。
3. 配置反向代理
由于我们没有在docker-compose.yml中配置主机端口映射,因此必须通过Nginx Proxy Manager进行反向代理后,才能正常访问网站。
SSL证书也需要配置上,如下图所示:
接下来,就可以通过 https://game.ilaozhu.com/ 来访问我们的游戏网站了。
4. 下载游戏
我知道你很着急,但是请先别急,现在的游戏网站还只是虚有其表,因为缺少游戏文件,所以接下来,我们还需要下载游戏文件到数据卷中,具体步骤如下:
- 点击如下图所示的图标,连接容器。

- 选择
/bin/sh,然后点击Connect按钮。
- 执行
python3 ./static/games/download_data.py命令,下载游戏文件。
这里有些需要说明的是:
- 为了保证镜像体积更小,构建更快,因此镜像中没有预装游戏,需要部署完成后手动下载;
- 游戏一共有
1898个,近40G,你可以修改games.json文件,只保留你想要的,然后再通过download_data.py下载; - 你也可以在宿主机执行该脚本,路径是
/var/lib/docker/volumes/dos-games/_data,我在容器中执行的原因是我不想在宿主机上安装python环境; /var/lib/docker/volumes是数据卷的默认位置,虽然我们可以直接挂载目录到宿主机的任意位置,但是官方更推荐数据卷,详见:Volumes,更重要的是,数据卷可以根据容器中内容初始本地目录,而挂载目录则会以主机为准。
其实你可以在任何地方下载,只要最后拷贝到服务器上的/var/lib/docker/volumes/dos-games/_data/bin目录下,并修改对应的games.json文件就可以了。至此,我们的游戏网站才算真的部署完成了。接下来,打开 https://game.ilaozhu.com ,找找看,有没有你的童年记忆吧?
结语
Portainer作为一个可视化工具,其本质就是对各种Docker命令进行了可视化包装,让使用者可以不用记忆一大堆的命令,就能直观的管理并监控我们的容器。但是,这并不意味着以后就不用写脚本了。别的不说,单就部署而言,显然还是脚本更方便,也更不容易出错,毕竟脚本是实现全面自动化的基础,只要写一次就能永绝后患,这是可视化操作永远无法替代的优势。
好了,先不说了,我要去仙灵岛找我的灵儿了。
相关推荐
- PHP如何基于Docker安装OpenSSL扩展 2024-12-30
- 独立开发,这么起步或许能少走一些弯路 2024-02-02
- 可视化管理你的远程Docker容器-Portainer 2024-01-27
- 一款简单易用的反向代理神器 2024-01-20
- 使用Docker快速搭建一个Typecho个人博客网站 2024-01-19
评论0
暂时没有评论