安装文档:https://github.com/linuxserver/docker-chromium?tab=readme-ov-file
为什么要用docker安装浏览器,还是涉及到外网访问内网的问题,在内网的NAS上安装了一些应用,但是没有必要通过FRP代理的方式来访问,每有一个服务启动都需要在FRP中新增一个反向端口代理,之前也用过异地组网,但是异地组网的速度实在太慢,就算使用了自建的异地组网服务还是比不上FRP。有些服务一般来说在排查BUG的时候需要用到,这时候你又是使用外网会很不方便,所以安装一个浏览器。
services:
chromium:
image: lscr.io/linuxserver/chromium:latest
container_name: chromium
security_opt:
- seccomp:unconfined #optional
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/UTC
- CHROME_CLI=https://www.linuxserver.io/ #optional
volumes:
- /path/to/config:/config
# network_mode: host
ports:
- 3000:3000
- 3001:3001
shm_size: "1gb"
restart: unless-stopped
需要注意的是不能通过host模式来启动,即使启动了也会无法正常的运行。那就只能够绕道而行了,通过 ip addr | grep docker
命令获取到宿主机在docker网段中的IP地址,然后浏览器就通过这个IP访问。
chrome使用
开启启用本地输入法,不然键盘无法输入。这个版本的chrome只有英文,不支持中文,连访问中文网站中文字符也没法正常显示。
使用nginx反向代理
飞牛里面的浏览器是通过nginx反向代理的,只对/chromium/路径。很容易就能够找到飞牛浏览器项目的源地址,你会发现是魔改一个开源项目就是我上面composer中的那个,我一开始还不明白,为什么要修改。现在明白了其中一个原因就是反向代理的原因,因为大多数网站服务都是直接占用整个端口的,没有考虑到这种特定路径的代理。像是这个浏览器项目的/websockify是websocket就是直接请求端口的,如果你用特定路径反向代理了浏览器,它就无法找到正确的服务地址,所以需要也对/websockify进行代理。但是麻烦的是如果服务一多,很难保证不会有重名的情况,这样就会出现问题。所以最好还是项目本身就支持这种代理方式。
server {
listen 80;
server_name localhost;
location ^~ /chromium/ {
rewrite ^/chromium/(.*)$ /$1 break;
add_header 'Access-Control-Allow-Origin' '*' always;
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'Authorization,Content-Type,Accept,Origin,User-Agent,DNT,Cache-Control,X-Mx-ReqToken,Keep-Alive,X-Requested-With,If-Modified-Since';
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Cross-Origin-Embedder-Policy' 'require-corp';
add_header 'Cross-Origin-Opener-Policy' 'same-origin';
add_header 'Cross-Origin-Resource-Policy' 'same-site';
proxy_pass http://127.0.0.1:3000;
proxy_buffering off;
#proxy_pass http://127.0.0.1:3000;
}
location ^~ /websockify {
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Cookie "";
proxy_read_timeout 3600s;
proxy_send_timeout 3600s;
add_header 'Access-Control-Allow-Origin' '*' always;
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'Authorization,Content-Type,Accept,Origin,User-Agent,DNT,Cache-Control,X-Mx-ReqToken,Keep-Alive,X-Requested-With,If-Modified-Since';
add_header 'Access-Control-Allow-Credentials' 'true';
add_header 'Cross-Origin-Embedder-Policy' 'require-corp';
add_header 'Cross-Origin-Opener-Policy' 'same-origin';
add_header 'Cross-Origin-Resource-Policy' 'same-site';
proxy_pass http://127.0.0.1:3000;
proxy_buffering off;
}
}