webpage/versioned_docs/version-v2/README.md
Use the following docker images from Docker Hub for x86_64:
m1k1o/neko:latest or m1k1o/neko:firefox - for Firefox.m1k1o/neko:chromium - for Chromium.m1k1o/neko:google-chrome - for Google Chrome.m1k1o/neko:ungoogled-chromium - for Ungoogled Chromium (by @whalehub).m1k1o/neko:microsoft-edge - for Microsoft Edge.m1k1o/neko:brave - for Brave Browser.m1k1o/neko:vivaldi - for Vivaldi Browser (by @Xeddius).m1k1o/neko:opera for Opera Browser (requires extra steps to enable DRM, see instructions here. libffmpeg is already configured.) (by @prophetofxenu)m1k1o/neko:tor-browser - for Tor Browser.m1k1o/neko:remmina - for remote desktop connection (by @lowne).
REMMINA_URL=<proto>://[<username>[:<password>]@]server[:port] (proto being vnc, rdp or spice).~/.local/share/remmina/path_to_profile.remmina) and bind-mount it, then pass env var REMMINA_PROFILE=<path_to_profile.remmina>.m1k1o/neko:vlc - for VLC Video player (needs volume mounted to /media with local video files, or setting VLC_MEDIA=/media path).m1k1o/neko:xfce or m1k1o/neko:kde - for a shared desktop / installing shared software.m1k1o/neko:base - for custom base.Dockerhub images are built using GitHub actions on every push and on weekly basis to keep all browsers up-to-date.
All images are also available on GitHub Container Registry for faster pulls:
ghcr.io/m1k1o/neko/firefox:latestghcr.io/m1k1o/neko/chromium:latestghcr.io/m1k1o/neko/google-chrome:latestghcr.io/m1k1o/neko/ungoogled-chromium:latestghcr.io/m1k1o/neko/microsoft-edge:latestghcr.io/m1k1o/neko/brave:latestghcr.io/m1k1o/neko/vivaldi:latestghcr.io/m1k1o/neko/opera:latestghcr.io/m1k1o/neko/tor-browser:latestghcr.io/m1k1o/neko/remmina:latestghcr.io/m1k1o/neko/vlc:latestghcr.io/m1k1o/neko/xfce:latestghcr.io/m1k1o/neko/kde:latestFor ARM-based images (like Raspberry Pi - with GPU hardware acceleration, Oracle Cloud ARM tier). Currently, not all images are available for ARM, because not all applications are available for ARM.
:::danger IMPORTANT
m1k1o/neko:arm-* images from dockerhub are currently not maintained and they can contain outdated software.
:::
Please use images below:
ghcr.io/m1k1o/neko/arm-firefox:latestghcr.io/m1k1o/neko/arm-chromium:latestghcr.io/m1k1o/neko/arm-ungoogled-chromium:latestghcr.io/m1k1o/neko/arm-vlc:latestghcr.io/m1k1o/neko/arm-xfce:latestFor images with VAAPI GPU hardware acceleration using intel drivers use:
ghcr.io/m1k1o/neko/intel-firefox:latestghcr.io/m1k1o/neko/intel-chromium:latestghcr.io/m1k1o/neko/intel-google-chrome:latestghcr.io/m1k1o/neko/intel-ungoogled-chromium:latestghcr.io/m1k1o/neko/intel-microsoft-edge:latestghcr.io/m1k1o/neko/intel-brave:latestghcr.io/m1k1o/neko/intel-vivaldi:latestghcr.io/m1k1o/neko/intel-opera:latestghcr.io/m1k1o/neko/intel-tor-browser:latestghcr.io/m1k1o/neko/intel-remmina:latestghcr.io/m1k1o/neko/intel-vlc:latestghcr.io/m1k1o/neko/intel-xfce:latestghcr.io/m1k1o/neko/intel-kde:latestFor images with Nvidia GPU hardware acceleration using EGL (see example below) use (please note, there is a known issue with EGL and Chromium-based browsers, see here):
ghcr.io/m1k1o/neko/nvidia-firefox:latestghcr.io/m1k1o/neko/nvidia-chromium:latestghcr.io/m1k1o/neko/nvidia-google-chrome:latestghcr.io/m1k1o/neko/nvidia-microsoft-edge:latestghcr.io/m1k1o/neko/nvidia-brave:latestGHCR images are built using GitHub actions for every tag.
:::tip For more applications, check out m1k1o/neko-apps. :::
NEKO_NAT1TO1. It will automatically get your Public IP.NEKO_NAT1TO1 to your local IP address (e.g. NEKO_NAT1TO1: 192.168.1.20)-Currently, it is not supported to supply multiple NAT addresses directly to neko (see https://github.com/m1k1o/neko/issues/47).
But it can be acheived by deploying own turn server alongside neko that is accessible from your LAN:
version: "3.4"
services:
neko:
image: "m1k1o/neko:firefox"
restart: "unless-stopped"
shm_size: "2gb"
ports:
- "8080:8080"
- "52000-52100:52000-52100/udp"
environment:
NEKO_SCREEN: 1920x1080@30
NEKO_PASSWORD: neko
NEKO_PASSWORD_ADMIN: admin
NEKO_EPR: 52000-52100
# highlight-start
NEKO_ICESERVERS: |
[{
"urls": [ "turn:<MY-COTURN-SERVER>:3478" ],
"username": "neko",
"credential": "neko"
},{
"urls": [ "stun:stun.nextcloud.com:3478" ]
}]
# highlight-end
coturn:
image: 'coturn/coturn:latest'
network_mode: "host"
command: |
-n
--realm=localhost
--fingerprint
--listening-ip=0.0.0.0
--external-ip=<MY-COTURN-SERVER>
--listening-port=3478
--min-port=49160
--max-port=49200
--log-file=stdout
--user=neko:neko
--lt-cred-mech
<MY-COTURN-SERVER> with your LAN IP address, and allow ports 49160-49200/udp and 3478/tcp in your LAN.NEKO_ICELITE: true because ICE LITE does not support TURN servers.This setup adds local turn server to neko. It won't be reachable by your remote clients and your own IP won't be reachable from your lan. So it effectively just adds local candidate and allows connections from LAN.
NEKO_ICELITE=true, every user will need 2 UDP ports.NEKO_ICELITE=true, every user will need only 1 UDP port. It is recommended to use ice-lite.32000-32100:52000-52100/udp3000:8080When using a mux, not so many ports are needed.
version: "3.4"
services:
neko:
image: "m1k1o/neko:firefox"
restart: "unless-stopped"
shm_size: "2gb"
ports:
- "8080:8080"
# highlight-start
- "8081:8081/tcp"
- "8082:8082/udp"
# highlight-end
environment:
NEKO_SCREEN: 1920x1080@30
NEKO_PASSWORD: neko
NEKO_PASSWORD_ADMIN: admin
# highlight-start
NEKO_TCPMUX: 8081
NEKO_UDPMUX: 8082
# highlight-end
NEKO_ICELITE: 1
NEKO_EPR is ignored.NEKO_TCPMUX: 8081 and NEKO_UDPMUX: 8081.8082:8082 is OK, but "5454:8082 will not work.NEKO_ICELITE=true is recommended.NEKO_ICESERVERS: '[{"urls": ["turn:<MY-COTURN-SERVER>:443?transport=udp", "turn:<MY-COTURN-SERVER>:443?transport=tcp", "turns:<MY-COTURN-SERVER>:443?transport=udp", "turns:<MY-COTURN-SERVER>:443?transport=tcp"], "credential": "<MY-COTURN-CREDENTIAL"}, {"urls": ["stun:stun.nextcloud.com:443"]}]'
-v '${PWD}/policies.json:/usr/lib/firefox/distribution/policies.json' -v '${PWD}/policies.json:/etc/chromium/policies/managed/policies.json'policies.json is placed in their Dockerfile. "DownloadRestrictions": 0,
"AllowFileSelectionDialogs": true,
"URLAllowlist": [
"file:///home/neko/Downloads"
],
/home/neko/.mozilla/firefox/profile.default folder, mount it as: -v '${PWD}/data:/home/neko/.mozilla/firefox/profile.default'/home/neko/.config/chromium folder, mount it as: -v '${PWD}/data:/home/neko/.config/chromium'supervisord.conf folder that is specified in --user-data-dir. "DefaultCookiesSetting": 1,
"RestoreOnStartup": 1,
:::danger There is a known issue with EGL and Chromium-based browsers, see WebGL not working for Nvidia Google Chrome 112.x. That means currently only Firefox is supported for Nvidia GPU acceleration. :::
You need to have NVIDIA Container Toolkit installed, start the container with --gpus all flag and use images built for nvidia (see above).
docker run -d --gpus all \
-p 8080:8080 \
-p 56000-56100:56000-56100/udp \
-e NEKO_SCREEN=1920x1080@30 \
-e NEKO_PASSWORD=neko \
-e NEKO_PASSWORD_ADMIN=admin \
-e NEKO_EPR=56000-56100 \
-e NEKO_NAT1TO1=192.168.1.10 \
-e NEKO_ICELITE=1 \
-e NEKO_VIDEO_CODEC=h264 \
-e NEKO_HWENC=nvenc \
--shm-size=2gb \
--name neko \
ghcr.io/m1k1o/neko/nvidia-google-chrome:latest
If you want to use docker-compose, you can use this example:
version: "3.4"
services:
neko:
image: "ghcr.io/m1k1o/neko/nvidia-google-chrome:latest"
restart: "unless-stopped"
shm_size: "2gb"
ports:
- "8080:8080"
- "56000-56100:56000-56100/udp"
environment:
NEKO_SCREEN: '1920x1080@30'
NEKO_PASSWORD: neko
NEKO_PASSWORD_ADMIN: admin
NEKO_EPR: 56000-56100
NEKO_NAT1TO1: 192.168.1.10
NEKO_VIDEO_CODEC: h264
NEKO_HWENC: nvenc
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1
capabilities: [gpu]
docker exec -it neko nvidia-smi command.nvh264enc in docker logs neko output.NEKO_HWENC: nvenc environment variable, CPU encoding will be used but GPU will still be available for browser rendering.Broadcast pipeline is not hardware accelerated by default. You can use this pipeline created by @evilalmus.
NEKO_BROADCAST_PIPELINE: |
flvmux name=mux
! rtmpsink location={url} pulsesrc device={device}
! audio/x-raw,channels=2
! audioconvert
! voaacenc
! mux.
ximagesrc display-name={display} show-pointer=false use-damage=false
! video/x-raw,framerate=30/1
! videoconvert
! queue
! video/x-raw,format=NV12
! nvh264enc name=encoder preset=low-latency-hq gop-size=25 spatial-aq=true temporal-aq=true bitrate=2800 vbv-buffer-size=2800 rc-mode=6
! h264parse config-interval=-1
! video/x-h264,stream-format=byte-stream,profile=high
! h264parse
! mux.
NEKO_PASSWORD will be user.NEKO_PASSWORD_ADMIN will be admin.?pwd=<password> will prefill password.?usr=<display-name> will prefill username.?cast=1 will hide all control and show only video.?embed=1 will hide most additional components and show only video.?volume=<0-1> will set volume to given value.?lang=<language> will set language to given value.?show_side=1 will show the sidebar on startup.?mute_chat=1 will mute the chat on startup.http(s)://<URL:Port>/?pwd=neko&usr=guest&cast=1