一年多前寫過類似的項目,同樣是NAS上通過Docker部署一個網(wǎng)頁版游戲模擬器,本次教程使用的容器對比上一篇可以說是全方位升級,頁面相當(dāng)炫酷。
實際游戲操作起來手感絲滑,工作累了打開網(wǎng)頁玩兩把魂斗羅或者合金彈頭就很舒服,堪稱摸魚神器。
下面和大家分享一下群暉、威聯(lián)通、極空間、華碩/愛速特、綠聯(lián)及其他Linux系統(tǒng)的合集部署教程,包含支持部署的設(shè)備型號推薦,覺得有所幫助歡迎關(guān)注點贊收藏三連哈。
細節(jié)比較多,有些特殊設(shè)置需要注意,遇到問題善用瀏覽器的搜索功能(Ctrl+F)。
本次使用的是容器是基于RetroArch的emulatorjs,作者為Ryan Kuba,Linuxserver.io托管,項目地址:
https://registry.hub.docker.com/r/linuxserver/emulatorjs
這款模擬器除了開頭展示的頁面炫酷和絲滑操作以外,最大的特點就是非常棒的平臺和ROM管理功能,支持以下主機平臺:
3do、arcade、atari2600、atari7800、colecovision、doom、gb、gba、gbc、jaguar、lynx、msx、n64、nds、nes、ngp、odyssey2、pce、psx、sega32x、segaCD、segaGG、segaMD、segaMS、segaSaturn、segaSG、snes、vb、vectrex、ws
emulatorjs這個項目可以部署在幾乎所有主流設(shè)備上,支持X86(64位)和ARM架構(gòu)(32位和64位)平臺設(shè)備,MIPS和RISC-V的路由器就暫時別想了哈。
先放一下個人修改的基礎(chǔ)代碼(docker cli規(guī)則),默認(rèn)的游戲端口用的是80,國內(nèi)大部分網(wǎng)絡(luò)并沒有開放80端口,這里我用8499作為替代,大家可以按需修改后用SSH部署:
docker run -d \
--name=emulatorjs \
-p 3000:3000 \
-p 8499:80 \
-v /目標(biāo)掛載文件夾:/config \
-v /目標(biāo)掛載文件夾:/data \
--restart unless-stopped \
lscr.io/linuxserver/emulatorjs:latest
由于不需要調(diào)用其他驅(qū)動,這里用的是群暉自帶管理器部署,對新手來說更簡單明了一些。
1.適配設(shè)備
群暉的ARM設(shè)備說實話比較磕磣,雖然支持Docker功能,但一般都是512M的板載內(nèi)存,確實玩不順,不建議部署。
DS220+、DS420+和DS920+這些只要是4G以上內(nèi)存都可以玩起來,X86架構(gòu)的黑群暉當(dāng)然也是沒問題的。
2.查看IP
進入控制面板的網(wǎng)絡(luò),點擊網(wǎng)絡(luò),下圖圈出來的3就是這臺群暉的IP:
192.168.0.205
3.實操流程
進入Docker管理器后,點擊注冊表搜索linuxserver/emulatorjs,只有一個結(jié)果,雙擊下載鏡像,標(biāo)簽用默認(rèn)的latest。
下載完成后雙擊鏡像開始創(chuàng)建容器,這里由于需要將容器的80端口轉(zhuǎn)發(fā)到宿主的8499端口,所以網(wǎng)絡(luò)選擇bridge。
PS:如果沒有公網(wǎng)IPv4的朋友想外網(wǎng)使用,上Zerotier或者蒲公英組SD-WAN吧。
容器名稱想改就改,勾選上使用高權(quán)限執(zhí)行容器后,點擊高級設(shè)置。
新增兩個端口轉(zhuǎn)發(fā)規(guī)則:
本地端口3000對應(yīng)容器端口3000
本地端口8499對應(yīng)容器端口80
下一步點擊添加文件夾:
在docker這個共享文件夾下面創(chuàng)建一個名為emulatorjs的子文件夾
在emulatorjs這個子文件夾下面創(chuàng)建兩個子文件夾,分別命名為config和data
文件夾新建完成后創(chuàng)建兩個文件夾掛載關(guān)系:
剛才新建的/docker/emulatorjs/config裝載路徑填寫/config
剛才新建的/docker/emulatorjs/data裝載路徑填寫/data
全部確認(rèn)無誤后點擊完成,開始創(chuàng)建容器。
創(chuàng)建完成后在容器頁面可以看到運行狀態(tài),接下來請?zhí)D(zhuǎn)到“使用丨上傳管理”部分。
和群暉理由一樣,新手用自帶的ContainerStation部署比較簡單。
1.適配設(shè)備
威聯(lián)通現(xiàn)在有使用RK3568平臺的ARM架構(gòu)型號,TS-216和TS-416無論是CPU還是內(nèi)存都足夠運行emulatorjs,四核硬參數(shù)在這兒,個人建議入手TS-416,畢竟4G內(nèi)存。
使用Intel JasperLake的TS-264C、TS-464C和TS-564就更沒問題了,X86架構(gòu)使用起來更爽,畢竟內(nèi)存是正常的卡槽,完全不用擔(dān)心OOM。
2.查看IP
進入網(wǎng)絡(luò)與虛擬交換機,下圖圈出來的就是這臺威聯(lián)通的IP:
10.168.1.102
3.實操流程
第一步需要創(chuàng)建用于掛載配置文件+ROM的文件夾,進入FileStation后:
Container共享文件夾下創(chuàng)建一個名為emulatorjs的子文件夾
emulatorjs子文件夾下創(chuàng)建兩個子文件夾,分別命名為config和data
第二步進入ContainerStation,點擊創(chuàng)建搜索emulatorjs,第一個結(jié)果點擊安裝,鏡像版本用默認(rèn)的latest。
進入配置后點擊網(wǎng)絡(luò),新增兩個轉(zhuǎn)發(fā)規(guī)則:
主機端口3000對應(yīng)Container端口3000
主機端口8499對應(yīng)Container端口80
點擊共享文件夾,新增兩組掛載關(guān)系:
剛才新建的
/Container/emulatorjs/config裝載路徑填寫/config剛才新建的
/Container/emulatorjs/data裝載路徑填寫/data
確認(rèn)無誤后點擊確認(rèn),開始下載鏡像并自動部署容器。
創(chuàng)建完成后在總覽頁面可以看到運行狀態(tài),接下來請?zhí)D(zhuǎn)到“使用丨上傳管理”部分。
由于極空間并沒有開放SSH,所以只能走自帶管理器操作。
1.適配設(shè)備
極空間的產(chǎn)品經(jīng)理思路是求穩(wěn),ARM架構(gòu)的老Z2和Q2并沒有開放Docker功能,ARM架構(gòu)只有Z2S(4G內(nèi)存)可以部署。
X86架構(gòu)的Z4、Z4S和Z4S旗艦版均可以部署,完全沒有問題,不過極空間并沒有送DDNS服務(wù)也沒有開啟TUN功能做不了SD-WAN,所以外網(wǎng)使用建議買個蒲公英X1(無需公網(wǎng)IP,文末放了連接)或者用DDNS-Go搭配域名(需有公網(wǎng)IP)使用。
2.查看IP
進入系統(tǒng)設(shè)置的網(wǎng)絡(luò)相關(guān)設(shè)置,下圖圈出來的就是這臺極空間的IP:
10.168.1.197
3.實操流程
第一步需要創(chuàng)建用于掛載配置文件+ROM的文件夾,進入個人空間后:
創(chuàng)建一個名為emulatorjs的子文件夾
emulatorjs子文件夾下創(chuàng)建兩個子文件夾,分別命名為config和data
右鍵這三個文件夾,設(shè)置為共享
第二步進入Docker管理器的鏡像,倉庫中搜索emulatorjs,第一個結(jié)果點擊安裝,鏡像版本用默認(rèn)的latest。
鏡像下載完成后會自動跳轉(zhuǎn)到本地鏡像管理頁面,選中emulatorjs鏡像,點擊添加到容器。
第三步開始創(chuàng)建容器,先取消性能限制的勾選。
點擊文件夾路徑,添加兩組掛載關(guān)系:
剛才新建的/我的文件/Docker/emulatorjs/config裝載路徑填寫/config
剛才新建的/我的文件/Docker/emulatorjs/data裝載路徑填寫/data
進入配置后點擊網(wǎng)絡(luò),新增兩個轉(zhuǎn)發(fā)規(guī)則:
本地端口3010對應(yīng)容器端口3000(3000不知道被啥占用了,需要改成3010)
本地端口8499對應(yīng)容器端口80
確認(rèn)無誤后點擊應(yīng)用,開始部署容器。
創(chuàng)建完成后在總覽頁面可以看到運行狀態(tài),接下來請?zhí)D(zhuǎn)到“使用丨上傳管理”部分。
ADM系統(tǒng)自帶的容器管理器Portainer非常好用,這里就用它作為演示。
1.適配設(shè)備
華碩(愛速特)不管是ARM還是X86架構(gòu),生態(tài)都基于Docker,所以部署當(dāng)然是沒問題啦,最近新款A(yù)S67系列也要上架了,感興趣的話可以關(guān)注一下NAS圈為數(shù)不多帶顯示屏的系列。
2.查看IP
進入偏好設(shè)定的網(wǎng)絡(luò),下圖圈出來的就是這臺華碩的IP:
192.168.0.194
3.實操流程
第一步需要創(chuàng)建用于掛載配置文件+ROM的文件夾,進入文件總管后:
Docker共享文件夾下創(chuàng)建一個名為emulatorjs的子文件夾
emulatorjs子文件夾下創(chuàng)建兩個子文件夾,分別命名為config和data
右鍵config文件夾點擊屬性,這里可以看到config文件夾所在路徑是:
/volume1/Docker/emulatorjs
所以config這個文件夾的完整路徑應(yīng)該是:
/volume1/Docker/emulatorjs/config
同理data文件夾的完整路徑應(yīng)該是:
/volume1/Docker/emulatorjs/data
第二步打開Portainer,跳轉(zhuǎn)到管理頁面登錄,準(zhǔn)備開始部署。
點擊Container進入容器管理頁面,單擊Add container。
第三步填寫鏡像,注意看圖和文字說明:
Name填寫emulatorjs
image填寫linuxserver/emulatorjs
第四步配置端口,新增兩個轉(zhuǎn)發(fā)規(guī)則:
host端口3000對應(yīng)Container端口3000
host端口8499對應(yīng)Container端口80
第四步配置文件夾,下拉到底部:
點擊Volumes的map additional volume創(chuàng)建兩個掛載關(guān)系
將默認(rèn)的Volume改成Bind
新增兩組掛載關(guān)系:
container填寫/config,host填寫剛創(chuàng)建的
/volume1/Docker/emulatorjs/configcontainer填寫/data,host填寫剛創(chuàng)建的
/volume1/Docker/emulatorjs/data
確認(rèn)無誤后點擊Deploy the container,開始下載鏡像并自動部署容器。
創(chuàng)建完成后會跳轉(zhuǎn)到容器管理頁面,這里可以看到運行狀態(tài),接下來請?zhí)D(zhuǎn)到“使用丨上傳管理”部分。
和極空間一樣,綠聯(lián)沒有SSH功能,只能用自帶管理器部署。
1.適配設(shè)備
綠聯(lián)目前有兩款NAS(DH2100和DH2600),只有DH2600有Docker功能,所以想玩的話就入手DH2600。
2.查看IP
點擊綠聯(lián)客戶端左下角設(shè)備的設(shè)備管理,下圖圈出來的就是這臺綠聯(lián)DH2600的IP:
10.163.1.179
3.實操流程
第一步需要創(chuàng)建用于掛載配置文件+ROM的文件夾,進入FileStation后:
Container共享文件夾下創(chuàng)建一個名為emulatorjs的子文件夾
emulatorjs子文件夾下創(chuàng)建兩個子文件夾,分別命名為config和data
第二步進入Docker管理器的鏡像管理,搜索emulatorjs,第一個結(jié)果點擊安裝,鏡像版本用默認(rèn)的latest。
下載完成后點擊本地鏡像,雙擊emulatorjs的鏡像開始創(chuàng)建,勾選下創(chuàng)建后啟動容器。
點擊存儲空間,添加兩組掛載關(guān)系:
剛才新建的config裝載路徑填寫/config
剛才新建的data裝載路徑填寫/data
進入配置后點擊網(wǎng)絡(luò),新增兩個轉(zhuǎn)發(fā)規(guī)則:
本地端口3000對應(yīng)容器端口3000
本地端口8499對應(yīng)容器端口80
確認(rèn)無誤后點擊確認(rèn),開始下載鏡像并自動部署容器。
創(chuàng)建完成后在容器管理可以看到運行狀態(tài),接下來請?zhí)D(zhuǎn)到“使用丨上傳管理”部分。
除了NAS以外,理論上所有Linux系設(shè)備都可以部署,只要CPU架構(gòu)是X86和ARM即可。
1.適配設(shè)備
根據(jù)項目說明,latest標(biāo)簽的鏡像是自適應(yīng)的,ARM設(shè)備也不需要改標(biāo)簽,正常按照下面部署就行。
如果想要一個比較開放的NAS,可以考慮萬由的HS系列,目前系統(tǒng)基本就是NAS專享版本的Debian,開放度非常高,下文也是用的萬由401p作為案例演示。
瑞芯微RK系列和樹莓派系列開發(fā)板理論上也是可以的,自己部署下docker本體即可。
2.查看IP
用Linux的都能自己搞定吧?ifconfig命令看下就知道了。
3.實操流程
先用su賬號SSH登錄,安裝docker cli:
curl -sSL https://get.daocloud.io/docker | sh
輸入下面代碼回車即可(目標(biāo)掛載文件夾記得換一下):
docker run -d \
--name=emulatorjs \
-p 3000:3000 \
-p 8499:80 \
-v /目標(biāo)掛載文件夾:/config \
-v /目標(biāo)掛載文件夾:/data \
--restart unless-stopped \
linuxserver/emulatorjs:latest
等上面命令執(zhí)行完成后,用docker ps命令看下狀態(tài)即可,接下來請?zhí)D(zhuǎn)到“使用丨上傳管理”部分。
emulatorjs一共有兩個網(wǎng)頁后臺:
端口號3000對應(yīng)的是文件管理(本文的極空間是3010)
端口號8499對應(yīng)的是游戲頁面
管理頁面訪問方式就是NAS的IP加上端口號,比如我這里的就是瀏覽器輸入:
192.168.195.180:3000
進入后提示需要先創(chuàng)建默認(rèn)文件系統(tǒng),點擊下圖的Download。
這時候不要急,等待出現(xiàn)Downloaded All Files后,再點擊右上角的黑點關(guān)閉下載詳情,刷新下網(wǎng)頁。
之后點擊File Management,左側(cè)是預(yù)設(shè)好的不同主機文件夾,點擊想要上傳的主機分類,將ROM上傳到roms文件夾。
具體上傳時間由電腦和NAS的網(wǎng)速決定,一般很快,畢竟這些主機游戲文件都不大。
上傳完畢后點擊Rom Management,左上方會提示Scan(掃描),點擊執(zhí)行。
掃描完成后同樣點擊黑塊關(guān)閉日志。
之后進入對應(yīng)平臺,點擊add all rom to config,將新增ROM添加到列表。
后續(xù)如果有更新或者修改,點擊Default的DL/Update即可下載最新的配置文件。
先說下遇到的問題,上傳新ROM后可能網(wǎng)頁會不顯示,清除下瀏覽器緩存即可破之,建議把ROM一起上傳完后再操作。
游戲頁面訪問方式同樣是NAS的IP加上端口號,比如我這里的就是瀏覽器輸入:
192.168.195.180:8499
鍵盤的方向鍵就是方向,z和x是ab鍵,回車是start鍵,k是暫停,自己試一下就知道了。
值得一提的是部分游戲會崩潰,PS平臺我拿戰(zhàn)神測試會程序崩潰,NES和GBA沒問題,等后續(xù)優(yōu)化吧。
既然是摸魚,外網(wǎng)訪問肯定是剛需,這里說一下常見訪問方式。
1.群暉/威聯(lián)通/華碩(愛速特)
這三家都送了DDNS(域名解析),如果有IPv4的公網(wǎng)IP,外網(wǎng)用域名加端口號的方式訪問即可。
如果沒有IPv4的公網(wǎng)IP就比較麻煩了,Linux5.10核心的大版本更新之后這三家的虛擬交換機都有問題,沒辦法走IPv6將Docker端口轉(zhuǎn)發(fā)到宿主機上,emulatorjs目前還不支持自定義游戲頁面端口,所以走Host也行不通。
替代方案就是做SD-WAN,免費蒲公英(限三臺)和Zerotier(可能不穩(wěn)定)的部署教程之前寫過,感興趣可以去看看。
如果家中設(shè)備比較多想一起組網(wǎng),也可以選擇直接購買蒲公英的X1或者X3A組網(wǎng)路由器,用著方便點。
2??極空間/綠聯(lián)
這兩家的NAS的定位都是輕NAS,能客戶端訪問自然也不會送DDNS服務(wù),如果有公網(wǎng)IP,可以路由器開啟UPnP,之后通過IP加端口號的方式直接訪問。
即使你沒有IPv4的公網(wǎng)IP也沒關(guān)系,親測是可以直接通過IPv6的公網(wǎng)IP加端口號使用emulatorjs,IPv6的地址規(guī)則和v4不同,格式如下(符號一定是英文符號):
[NAS的ip]:8499
提醒:訪問端電腦和NAS均需要有IPv6的公網(wǎng)IP,不然訪問不了。
極空間查看IPv6的方法上文說過了不再贅述,綠聯(lián)比較奇怪,沒有入口顯示IPv6的IP(實際上設(shè)備能拿到),只能通過路由器后臺查看。
PS:你要覺得麻煩,直接上貝銳的蒲公英吧,花錢能解決的問題都不算問題。