基于EmulatorJs的Docker实现Web端游玩模拟器

或许大家都见过一些在线游玩fc、gbc等老游戏的网页了,这些网页使我们随时随地都能体验并回味一波老游戏的滋味,也能在上班的时候摸鱼,曾经我思考过这些网站的实现原理,想要模仿一下,自己搭建一个在线的模拟器网站。在参考了网络上各路大神的方案后我选择基于Emulator+Docker来实现。

这里要感谢B站的一位大佬,本文的搭建思路来自于他(已获得同意,感谢)。

文章链接:怀旧游戏web端EmulatorJs的Docker搭建教程 - 哔哩哔哩 (bilibili.com)

废话不多说,我们直接开始。

你需要的

一台Linux服务器(最好是云主机,也可以是虚拟机)。

步骤

一、下载镜像文件

为了降低搭建门槛,这里我演示用宝塔来添加和管理Docker容器,关于Linux系统如何安装宝塔面板可以百度一下宝塔官网,有详细的操作流程,简单快捷。

首先让我们下载Docker

下载完毕后,启动它们(上面的绿色按钮开启),再点击下方的Dcoker管理器3.9.2。依次点击镜像管理、获取镜像、镜像名称输入linuxserver/emulatorjs:1.7.2,再点击获取镜像等待镜像下载完毕。

如果下载失败或者太慢,可以尝试设置镜像加速。加速地址https://almtd3fa.mirror.aliyuncs.com/

二、创建容器

一般情况下,用宝塔面板下载好Docker后它会自动设置好环境变量的,我们可以直接使用相关命令创建好容器,这里要注意好端口映射的问题(宿主机端口看你喜好,但是容器内端口必须是固定的80和3000)。

首先我们创建好两个文件夹,用来存放EmulatorJs容器的配置文件和数据。可以使用mkdir命令创建,也可以在宝塔面板创建。

mkdir -p /usr/local/emulatorjs/config && mkdir /usr/local/emulatorjs/data
#这里的路径看你喜好,但要记住同步更改后面的容器创建命令。

创建好两个文件后,我们接下来开始创建容器,容器的创建命令参考自官方文档与B站的克鲁斯-蓝眼大佬。

docker run -d --name emulatorjs1.7.2 -e PUID=1000 -e PGID=1000 -e TZ=Asia/Shanghai -p 8282:80 -p 8383:3000 -v /usr/local/emulatorjs/config:/config -v /usr/local/emulatorjs/data:/data linuxserver/emulatorjs:1.7.2

当然也可以通过宝塔来创建容器(还是建议运行上面命令,稳定方便)

容器创建完毕后会自动运行。

接下来我们尝试访问。

我们要选择暴露上面两个端口,这里选择的是8282和8383端口,如果你是云服务器,还需要额外设置安全组(我用的是阿里云服务器)。后记得关闭Linux系统自身的防火墙或者同步开放这两个端口。

然后我们尝试访问管理后台:访问地址是  http://服务器ip:8383。比如http://192.168.10.2:8383

成功打开如下页面后,点击Download

下载完毕后,拿出你准备好的游戏资源吧!这款模拟器支持多种格式的游戏,如gba、gbc、nes等等,各种老游戏的资源网上也有许多。现在我们尝试下上传一款nes的魂斗罗。

添加一款游戏的流程就是这样啦,接下来就是激动人心的时刻。

我们访问游玩页面:访问地址是  http://服务器ip:8282。比如http://192.168.10.2:8282

芜湖,加载成功,接下来介绍一下这个页面的操作。如果你后台上传了多款类型的游戏(比如既有gbc、又有nes),那么这里按键盘 ↑ ↓ 就是切换不同类型的模拟器。这里我只上传了nes,所以只有一种模拟器。切到你要玩的模拟器后,我们按键盘 → 就能进入该类型模拟器,然后按键盘 ↑ ↓ 就是选择游戏了,此时按键盘 ← 可以返回上一界面选择模拟器,按键盘 → 则是正式进入游戏。

如果加载完毕后还是黑屏,我们点击浏览器的返回按钮返回到选游戏的界面(也就是上面那个左边是模拟器,右边是游戏名的界面),再次按 → 键进入游戏即可秒加载成功。

当当当,忙活了这么久,你终于可以随时随地在上班的时候摸鱼了,你迫不及待想要回味一下童年,结果敲键盘aswd怎么没反应嘞???脏话即将脱口而出,别急,按下F1,下滑到Controls,我们设置下按钮先(这里不得不吐槽下,默认的是用↑↓←→控制方向,用左手控制攻击的异端(开个玩笑),至少我适应不了hhhhh)。

还有一种方法是back到MainMenu,再选择Settings,选择input

设置完毕后再次按F1即可关闭设置界面,然后就能愉快的玩耍了。

另外,手机浏览器打开也是能玩的(我用的小米浏览器)。

三、登录验证

此时,如果你用的是虚拟机,那么安全问题倒是不必担忧,但是如果你用的是云服务器,那么像这样直接访问就能玩游戏、进后台的话,就跟裸奔一样。

因此,你还可以选择加上一层登录认证,方法多种多样,后端写个登录服务,前端弄个登录页面。这里楼主前端本领不够写不出好看的页面,所以直接用Nginx实现登录验证。

首先,你需要下载nginx(可以上网找资源、或者宝塔面板安装)。

下载完nginx后,我们改下配置文件:

{
........

#添加下方server块,确保8181端口未被其它应用占用
    server {
        listen       8181;
        server_name  localhost;
        
        #开启登录校验功能
        auth_basic on;
        #htpasswd命令生成的密码文件(比如文件名admin,放到了/usr/local/nginx/password目录下)
        auth_basic_user_file /usr/local/nginx/password/admin;
        #请求体最大限制1024m,防止太小时上传大游戏失败。
        client_max_body_size 1024m;
        location / {
            root   html;
            index  index.html index.htm;
        }
        #转发到Emulator模拟器游玩页面
        location /play/ {
            proxy_pass http://localhost:8282/;
        }
        #转发到Emulator模拟器管理页面
        location /manage/ {
            proxy_pass http://localhost:8383/;
        }
    }

.......
}

按我上面这种配置的话,你只需要暴露8181端口,然后可以把以前暴露的8282端口和8383端口给关闭了。这样别人就只能通过8181端口访问你的网站了。

然后我们需要生成密码文件,如果你是按我上面的配置,那么就在/usr/local/nginx/password目录下运行此htpasswd命令生成admin密码文件:

#先运行这个命令,安装httpd-tools,如果你已经安装过跳过此步骤
yum install httpd-tools
#接下来运行下面这两个命令,在对应目录下生成密码文件admin,账号是username,密码是password
cd /usr/local/nginx/password
htpasswd -cb ./admin username password

接下来重新进入nginx安装目录,运行如下命令启动nginx:

./sbin/nginx -c ./conf/nginx.conf

启动成功后,访问游玩页面与管理页面,

访问地址是  http://服务器ip:8181/play 与 http://服务器ip:8181/manage。

比如http://192.168.10.2:8181/play

完成,可以把你的网站介绍给你的好基友一起上班摸鱼了

关于Nginx的更多配置、Docker容器的更多知识,以及Emulator模拟器的更多功能,就等待大家自己探索啦。

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 基于DockerWeb系统架构设计是一种将应用程序和依赖项打包在容器中的方法,使其能够在不同的环境中快速部署和运行的系统架构。 首先,我们需要将Web系统拆分为多个模块,每个模块负责不同的功能。这些模块可以是前、后、数据库等。 接下来,我们使用Docker将每个模块打包为一个独立的容器。每个容器包含该模块所需的所有依赖项,例如软件库、环境变量等。 为了实现容器之间的通信以及对外部的访问,我们需要使用Docker网络或者Docker Compose进行配置。通过网络,不同容器可以进行通信,例如前容器可以向后容器发送请求。 此外,我们可以使用Docker Swarm或Kubernetes等容器编排工具进行管理和部署。它们可以实现容器的自动化扩展、负载均衡和故障恢复,确保Web系统的高可用性和稳定性。 最后,可以通过使用Docker镜像仓库来存储和管理容器镜像,方便团队成员共享和更新。 基于DockerWeb系统架构设计带来了很多好处。首先,它提供了一种轻量级、可移植的部署方式,可以简化系统的部署和迁移。其次,它允许我们使用容器隔离技术,将应用程序与底层操作系统解耦,提高了系统的安全性和可靠性。另外,通过使用容器编排工具,我们可以更好地管理和扩展系统,提高系统的可伸缩性和性能。 总而言之,基于DockerWeb系统架构设计使得系统的部署和运维更加灵活和高效,同时提供了更好的安全性和可扩展性。 ### 回答2: 基于DockerWeb系统架构设计是一种将应用程序及其依赖项打包为容器的集中管理方式。以下是具体的架构设计: 1. 容器化应用程序:将Web应用程序和其依赖项(例如数据库、消息队列等)打包为容器镜像。可以使用Dockerfile定义容器的运行环境和依赖项。 2. 容器编排:使用容器编排工具(如Docker Compose、Kubernetes)组织和管理多个容器。可以定义容器的数量、环境变量、网络设置等。 3. 高可用和负载均衡:使用容器编排工具的负载均衡功能,在多个容器之间均衡地分发用户请求。当某个容器出现故障时,负载均衡会将请求转发到其他正常的容器上。 4. 持久化数据:将容器与数据分离,使用外部存储服务(如数据库)存储应用程序的持久化数据。这样即使容器重启或被替换,数据仍然存在。 5. 安全性:通过在容器中限制权限和访问控制,加强系统的安全性。可以使用Docker提供的安全功能,如命名空间隔离、应用程序沙箱等。 6. 监控和日志:使用容器日志和监控工具来监控系统的性能和状态。可以使用ELK(Elasticsearch, Logstash, Kibana)等工具来收集和分析日志。 7. 部署和扩展:使用容器编排工具实现无缝的部署和扩展。可以通过简单地添加或删除容器实例来调整系统的规模,从而满足用户需求。 基于DockerWeb系统架构设计可以提供更高的可扩展性、灵活性和易管理性。容器化的应用程序能够快速部署、隔离和迁移,同时通过自动化的容器编排和负载均衡,可以实现高可用和负载均衡的架构。此外,容器化的架构还可以简化开发团队的协作,提高开发效率。 ### 回答3: 基于DockerWeb系统架构设计是一种基于容器化技术的系统设计方法。它将Web应用程序的不同组件打包成独立的容器,每个容器都包含了应用程序所需的所有依赖,包括操作系统、库文件和配置文件等。 首先,Docker容器可以根据不同的功能划分为多个微服务。每个微服务负责处理特定的业务功能,如用户管理、订单管理等。因为每个微服务都是独立运行在容器中的,因此它们可以并行处理多个请求,提高系统的效率和稳定性。 其次,容器之间可以通过Docker网络进行通信。在架构设计中,可以使用容器编排工具如Docker Compose或Kubernetes来协调和管理不同容器之间的通信和调度。通过容器网络,微服务之间的通信可以通过容器名称来实现,而无需关心具体的IP地址和口。 另外,针对系统的数据存储,可以使用Docker卷来实现持久化存储。通过将数据卷挂载到容器中,可以确保数据不会随着容器的销毁而丢失。可以使用诸如Docker Volume、Docker NFS等技术来实现数据卷的管理和共享。 最后,通过持续集成和持续部署(CI/CD)的工作流程,可以实现Web系统的自动化构建、测试和部署。可以使用持续集成工具如Jenkins或GitLab CI来自动构建和测试Docker镜像,然后通过容器编排工具将镜像部署到生产环境中。 总之,基于DockerWeb系统架构设计通过容器化技术的应用,实现了系统组件的隔离部署、灵活扩展和资源的高效利用。它提供了一种可靠、可伸缩和易于管理的系统架构,使得Web应用程序更加稳定和可靠。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值