Docker部署虚拟在线浏览器neko

欢迎来到 Neko,这是一个在 Docker 中运行并使用 WebRTC 技术的自托管虚拟浏览器。Neko 是一个强大的工具,允许您在虚拟环境中运行一个功能齐全的浏览器,让您能够从任何地方安全和私密地访问互联网。使用 Neko,您可以浏览网页、运行应用程序和执行其他任务,就像在普通浏览器上一样,所有这些都在一个安全和隔离的环境中进行。无论您是希望测试 web 应用程序的开发人员,还是寻求安全浏览体验的注重隐私的用户,或者只是想利用虚拟浏览器的便利性和灵活性的人,Neko 都是完美的解决方案。

项目 GitHub:m1k1o/neko: A self hosted virtual browser that runs in docker and uses WebRTC.

项目 doc:Getting Started (m1k1o.net)

配置需求:

分辨率CPU Cores内存推荐意见
1024×576@3022gb一般
1280×720@3043gb可以
1280×720@3064gb推荐
1280×720@3084gb+最佳

这里使用的服务器配置:2Cores 2GB Ubuntu22.04。如果只是用来浏览网页的话,CPU 和内存的占用不会太高,1C1G 加个 1Gswap 就够了。如果你要看视频之类的,可能需要更高的配置,推荐 2C 以上。

此项目强烈推荐使用域名并开启 SSL,否则可能会出现未知错误。

‍

在开始部署之前,你需要安装 docker 和 docker-compose

一、安装基础环境

1、更新源

1
2
yum update -y && yum upgrade -y		#Centos执行这条命令
apt update -y && apt upgrade -y #Ubuntu/Debian执行这条命令

2、安装docker及docker compose

1
curl -fsSL https://get.docker.com -o get-docker.sh && sh ./get-docker.sh

3、检查docker是否安装成功

1
2
3
4
5
#以下即为安装成功
root@debian-4gb-fsn1-2:~# docker compose version
Docker Compose version v2.17.2
root@debian-4gb-fsn1-2:~# docker -v
Docker version 23.0.2, build 569dd73

二、添加虚拟内存

如果你机器内存够就不需要加虚拟内存

1、脚本一键添加,单位是MB

1
wget -O jcnfbox.sh https://raw.githubusercontent.com/Netflixxp/jcnf-box/main/jcnfbox.sh && chmod +x jcnfbox.sh && clear && ./jcnfbox.sh

2、手动添加

创建 1G 的 swap,可以根据你的服务器配置来调整大小

1
dd if=/dev/zero of=/mnt/swap bs=1M count=1024

设置交换分区文件

1
mkswap /mnt/swap

启动 swap

1
swapon /mnt/swap

设置开机时自启用 swap 分区

需要修改文件 /etc/fstab​ 中的 swap 行

1
vim /etc/fstab

添加

1
/mnt/swap swap swap defaults 0 0

三、docker compose安装neko

本次使用火狐内核版本m1k1o/neko:firefox​,其余可选择谷歌内核版本m1k1o/neko:chromium​,树莓派版本m1k1o/neko:arm-chromium​

创建文件夹:

1
mkdir -p /home/neko/ && cd /home/neko/

创建配置文件:

1
vim docker-compose.yml

主要修改NEKO_NAT1TO1​为自己服务器IP地址,其余部分可根据下面给的环境变量说明自行修改

英文输入法下按 i 进入编辑模式后,在这个配置文件的最后加入:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
version: "3.8"
services:
neko:
image: ""ghcr.io/m1k1o/neko/firefox:latest""
container_name: "neko"
restart: "always"
shm_size: "2gb"
ports:
- "38080:8080"
- "52000-52100:52000-52100/udp"
environment:
NEKO_SCREEN: 1920x1080@30
NEKO_PASSWORD: neko
NEKO_PASSWORD_ADMIN: admin
NEKO_NAT1TO1: 192.168.3.166
NEKO_EPR: 52000-52100
NEKO_ICELITE: 1



| 参数名称 | 描述 | 示例值/说明 |
|----------------------|--------------------------------------------------------------|-----------------------------------------------------------------|
| `--shm-size=2gb` | 设置共享内存大小为 2GB,此设置为必须。 | |
| `--cap-add SYS_ADMIN` | 使用 Chromium 内核时需添加,以获取必要的系统管理权限。 | |
| `NEKO_PASSWORD` | 普通用户的登录密码。 | `mySecurePass123` |
| `NEKO_PASSWORD_ADMIN` | 管理员(admin)用户的登录密码。 | `AdminSecurePass456` |
| `NEKO_NAT1TO1` | 局域网使用时设置为服务器本地 IP,公网则自动获取公网 IP,可选。 | `192.168.3.166` 或留空自动获取 |
| `NEKO_SCREEN` | 自定义浏览器窗口分辨率。 | `1920x1080` |
| `NEKO_ICELITE` | 启用 Ice Lite 协议以优化连接性能,可选。 | `true` 或留空默认值 |
| `NEKO_EPR` | 设置 WebRTC 的 UDP 端口范围,用于P2P连接。 | `52000-52100` |
| `NEKO_FILE_TRANSFER_ENABLED` | 启用文件传输功能,需要设置为 `true`。 | `true` 或默认 `false` 如果不需要启用文件传输功能 |
‍```

m1k1o/neko:firefox:测试下来firefox不会黑屏,使用别的浏览器可能会黑屏,这点可以自己设置chromium等,最好还是firefox

安装chromium的示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
version: "3.8"
services:
neko:
image: "ghcr.io/m1k1o/neko/chromium:latest"
restart: "unless-stopped"
shm_size: "2gb"
cap_add:
- SYS_ADMIN
ports:
- "8080:8080"
- "52000-52100:52000-52100/udp"
environment:
NEKO_DESKTOP_SCREEN: '1920x1080@30'
NEKO_MEMBER_MULTIUSER_USER_PASSWORD: neko
NEKO_MEMBER_MULTIUSER_ADMIN_PASSWORD: admin
NEKO_WEBRTC_EPR: 52000-52100
NEKO_WEBRTC_ICELITE: 1
NEKO_WEBRTC_NAT1TO1: <your-IP>

按 esc​ 后,输入:wq​ 保存退出。

运行:

1
docker-compose up -d

访问 ip:38080​ 或者是你的域名就可以进入到 neko 浏览器了,我们使用管理员密码登录:

默认界面:

基本使用:

四、neko room

neko room是另外的一个工具,可以批量添加多个不同浏览器

选择一个域名解析到vps的IP

下载neko room安装脚本

1
wget -O neko-rooms.sh https://raw.githubusercontent.com/m1k1o/neko-rooms/master/traefik/install

执行脚本

1
sudo bash neko-rooms.sh

直接回车表示使用默认配置

脚本会自动申请证书,通过填入的域名访问

expert setting 可以添加环境变量、对CPU和内存设置资源限制、启用GPU

image

1、所有人都有控制权,可以同时控制屏幕,无需请求

neko room:开启 NEKO_IMPLICIT_CONTROL

docker compose运行的neko:在compose文件的环境变量加上 NEKO_IMPLICIT_CONTROL: true

2、复制粘贴,同时需要使用https,另外一些浏览器例如firefox不支持

neko或neko-room添加环境变量 NEKO_FILE_TRANSFER_ENABLED: true

3、neko反代设置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
server {
listen 443 ssl http2;
server_name example.com;

location / {
proxy_pass http://127.0.0.1:8080;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_cache_bypass $http_upgrade;
}
}

4、安装浏览器扩展或下载文件

参考: Chrome policies:https://support.google.com/chrome/a/answer/7579271?hl=en

作者为了安全默认禁止下载文件 禁止安装扩展(https://github.com/m1k1o/neko/issues/114#issuecomment-988309991)

For security, if the browser would be compromised, installing any extension could potentially allow anyone to access filesystem or steal all cookies, inject malware to any page…

但我们一般不在乎那些,可以根据官方教程手动修改 chrome polices

以 Chromium​为例

1、在vps新建一个 policies.json 文件,可以填入如下政策

 这里文件添加在 `/root/policies.json`​
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
{
"AutofillAddressEnabled": false,
"AutofillCreditCardEnabled": false,
"BrowserSignin": 0,
"DefaultNotificationsSetting": 2,
"DeveloperToolsAvailability": 2,
"EditBookmarksEnabled": false,
"FullscreenAllowed": true,
"IncognitoModeAvailability": 1,
"SyncDisabled": true,
"AutoplayAllowed": true,
"BrowserAddPersonEnabled": false,
"BrowserGuestModeEnabled": false,
"DefaultPopupsSetting": 2,
"DownloadRestrictions": 0,
"VideoCaptureAllowed": true,
"AllowFileSelectionDialogs": false,
"PromptForDownloadLocation": false,
"BookmarkBarEnabled": false,
"PasswordManagerEnabled": false,
"BrowserLabsEnabled": false,
"URLAllowlist": [
"file:///home/neko/Downloads",
"file://*",
"chrome://policy"
],

"ExtensionInstallForcelist": [
"cjpalhdlnbpafiamejdnhcphjbkeiagm;https://clients2.google.com/service/update2/crx",
"mnjggcdmjocbbbhaepdhchncahnbgone;https://clients2.google.com/service/update2/crx"
],
"ExtensionInstallAllowlist": [
"cjpalhdlnbpafiamejdnhcphjbkeiagm",
"mnjggcdmjocbbbhaepdhchncahnbgone",
"padekgcemlokbadohgkifijomclgjgif"
]
}

然后替换 Chromium 原本严格的政策

1
2
3
#容器ID'13f53eaa2252' 记得替换为你自己的
#/root/policies.json 也是替换为你文件路径
docker cp /root/policies.json 13f53eaa2252:/etc/chromium/policies/managed/policies.json

然后就可以下载安装扩展了

image

5、甲骨文arm运行

1
2
3
4
5
ghcr.io/m1k1o/neko/arm-firefox:latest
ghcr.io/m1k1o/neko/arm-chromium:latest
ghcr.io/m1k1o/neko/arm-ungoogled-chromium:latest
ghcr.io/m1k1o/neko/arm-vlc:latest
ghcr.io/m1k1o/neko/arm-xfce:latest

五、整体评价

1、优点

可以装逼
网络没问题的情况下非常流畅,在线看视频是没有问题的

2、缺点

需要配置较高的 vps 才能流畅运行
网络要求高,需要线路较好的 vps,反代不方便
中文输入支持不好
移动端优化不足