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