mirror of
https://github.com/m1k1o/neko.git
synced 2025-04-28 18:06:20 +02:00
update docs.
This commit is contained in:
parent
6f3760e5b9
commit
e3cdad3f81
41 changed files with 213 additions and 198 deletions
|
@ -1,7 +0,0 @@
|
||||||
---
|
|
||||||
sidebar_position: 4
|
|
||||||
---
|
|
||||||
|
|
||||||
# Logging & Monitoring
|
|
||||||
|
|
||||||
How to track logs and monitor system performance.
|
|
|
@ -1,7 +0,0 @@
|
||||||
---
|
|
||||||
sidebar_position: 2
|
|
||||||
---
|
|
||||||
|
|
||||||
# Networking
|
|
||||||
|
|
||||||
Required network settings and firewall rules for smooth operation.
|
|
|
@ -1,5 +1,5 @@
|
||||||
---
|
---
|
||||||
sidebar_position: 3
|
sidebar_position: 4
|
||||||
---
|
---
|
||||||
|
|
||||||
# Customizing the UI
|
# Customizing the UI
|
|
@ -1,7 +0,0 @@
|
||||||
---
|
|
||||||
sidebar_position: 4
|
|
||||||
---
|
|
||||||
|
|
||||||
# WebRTC Configuration
|
|
||||||
|
|
||||||
Adjusting WebRTC settings for different browsers and improving compatibility.
|
|
|
@ -1,7 +0,0 @@
|
||||||
---
|
|
||||||
sidebar_position: 3
|
|
||||||
---
|
|
||||||
|
|
||||||
# CI/CD Pipelines
|
|
||||||
|
|
||||||
Automating deployments using CI/CD workflows.
|
|
|
@ -1,7 +0,0 @@
|
||||||
---
|
|
||||||
sidebar_position: 2
|
|
||||||
---
|
|
||||||
|
|
||||||
# Kubernetes & Helm Chart Deployment
|
|
||||||
|
|
||||||
How to deploy and manage Neko using Kubernetes and Helm.
|
|
|
@ -1,7 +0,0 @@
|
||||||
---
|
|
||||||
sidebar_position: 4
|
|
||||||
---
|
|
||||||
|
|
||||||
# Load Balancing & High Availability
|
|
||||||
|
|
||||||
Scaling Neko for high-traffic use cases.
|
|
|
@ -1,7 +0,0 @@
|
||||||
---
|
|
||||||
sidebar_position: 1
|
|
||||||
---
|
|
||||||
|
|
||||||
# Self-Hosting on Linux
|
|
||||||
|
|
||||||
Deploying and maintaining Neko on bare metal or virtual machines.
|
|
59
webpage/docs/faq.md
Normal file
59
webpage/docs/faq.md
Normal file
|
@ -0,0 +1,59 @@
|
||||||
|
# Frequently Asked Questions
|
||||||
|
|
||||||
|
### How to enable debug mode?
|
||||||
|
|
||||||
|
To see verbose information from the n.eko server, you can enable debug mode using `NEKO_DEBUG`.
|
||||||
|
|
||||||
|
```yaml title="docker-compose.yaml"
|
||||||
|
services:
|
||||||
|
neko:
|
||||||
|
image: "ghcr.io/m1k1o/neko/firefox:latest"
|
||||||
|
restart: "unless-stopped"
|
||||||
|
shm_size: "2gb"
|
||||||
|
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
|
||||||
|
# highlight-start
|
||||||
|
NEKO_DEBUG: 1
|
||||||
|
# highlight-end
|
||||||
|
```
|
||||||
|
|
||||||
|
And then view the logs using `docker logs -f neko`.
|
||||||
|
|
||||||
|
To see verbose information from the n.eko client, you need to visit the developer console in your browser. You can do this by pressing `F12` and then navigating to the `Console` tab.
|
||||||
|
|
||||||
|
### How to enable support for Chinese/Japanese/Korean input method?
|
||||||
|
|
||||||
|
There exists an extension [Google Input Tools](https://chrome.google.com/webstore/detail/mclkkofklkfljcocdinagocijmpgbhab) for Chrome that allows you to use Chinese input method.
|
||||||
|
|
||||||
|
### How can I embed the Neko desktop into web page without login prompt coming up for viewers?
|
||||||
|
|
||||||
|
You can use the following URL to embed the Neko desktop into a web page without login prompt coming up for viewers:
|
||||||
|
|
||||||
|
```
|
||||||
|
http://<your-neko-server-ip>:8080/?usr=neko&pwd=neko
|
||||||
|
```
|
||||||
|
|
||||||
|
https://stackoverflow.com/questions/15276929/how-to-make-a-video-fullscreen-when-it-is-placed-inside-an-iframe
|
||||||
|
|
||||||
|
Your iframe needs an attribute: `allowfullscreen="true" webkitallowfullscreen="true" mozallowfullscreen="true"` or more modern `allow="fullscreen *"`. For the second you can remove the star if your iframe has the same origin or replace it with your iframe origin.
|
||||||
|
|
||||||
|
### Can I use neko without docker?
|
||||||
|
|
||||||
|
Yes, you can, but it is not recommended. Neko is based on Debian and uses Xorg and Pulseaudio. Just follow the steps in the Dockerfile to install all dependencies.
|
||||||
|
|
||||||
|
However, it is recommend to start with existing system that has GUI with desktop manager, is based on Xorg and uses Pulseaudio (e.g. Ubuntu Desktop 24.04). For that matter you only need to install gstreamer dependencies, configure pulseaudio properly and run neko binary (you don't need to build it from scratch, you can copy it from docker image).
|
||||||
|
|
||||||
|
### Why does the clipboard button does not show up?
|
||||||
|
|
||||||
|
When you are using HTTPS connection and a compatible host browser (currently only Chromium-based browsers) which supports the Clipboard API, the clipboard button will not show up. Instead, you can use the native clipboard functionality of your host browser.
|
||||||
|
|
||||||
|
### Why am I unable to install extensions in the Neko browser?
|
||||||
|
|
||||||
|
The browser in Neko uses policies to restrict the installation of extensions. You can either add extensions to the policy file or disable the policy.
|
||||||
|
|
|
@ -1,9 +1,8 @@
|
||||||
---
|
---
|
||||||
title: Overview of Neko
|
|
||||||
sidebar_position: 1
|
sidebar_position: 1
|
||||||
---
|
---
|
||||||
|
|
||||||
# Overview of Neko
|
# Overview
|
||||||
|
|
||||||
Neko is an open-source self-hosted virtual browser solution that allows multiple users to share a single web browser instance remotely. It is designed for use cases such as collaborative browsing, remote access to web-based applications, and private cloud-based browsing.
|
Neko is an open-source self-hosted virtual browser solution that allows multiple users to share a single web browser instance remotely. It is designed for use cases such as collaborative browsing, remote access to web-based applications, and private cloud-based browsing.
|
||||||
|
|
||||||
|
@ -31,3 +30,11 @@ Neko runs on various platforms, including:
|
||||||
- **Raspberry Pi & ARM Devices** – Optimized versions for embedded and low-power hardware.
|
- **Raspberry Pi & ARM Devices** – Optimized versions for embedded and low-power hardware.
|
||||||
|
|
||||||
Explore the documentation to learn how to deploy, configure, and optimize Neko for your use case.
|
Explore the documentation to learn how to deploy, configure, and optimize Neko for your use case.
|
||||||
|
|
||||||
|
## Next Steps
|
||||||
|
|
||||||
|
import DocCardList from '@theme/DocCardList';
|
||||||
|
import {useCurrentSidebarCategory} from '@docusaurus/theme-common';
|
||||||
|
|
||||||
|
<DocCardList items={useCurrentSidebarCategory().items.filter((item) => item.docId !== 'getting-started/README')} />
|
||||||
|
|
|
@ -1,6 +0,0 @@
|
||||||
{
|
|
||||||
"position": 5,
|
|
||||||
"label": "Configuration",
|
|
||||||
"collapsed": false,
|
|
||||||
"collapsible": false
|
|
||||||
}
|
|
|
@ -2,7 +2,11 @@
|
||||||
sidebar_position: 3
|
sidebar_position: 3
|
||||||
---
|
---
|
||||||
|
|
||||||
# Running Neko in Docker
|
# Installation
|
||||||
|
|
||||||
|
The preferred way to install Neko is to use Docker. This method is easy to set up and manage, it contains all the necessary dependencies, and it is isolated from the host system. Other installation methods are out of scope for this documentation.
|
||||||
|
|
||||||
|
## Docker Run
|
||||||
|
|
||||||
To start a basic Neko container, use the following command:
|
To start a basic Neko container, use the following command:
|
||||||
|
|
||||||
|
@ -19,26 +23,31 @@ docker run -d --rm \
|
||||||
|
|
||||||
### Explanation
|
### Explanation
|
||||||
|
|
||||||
- `-d` - Run the container in the background.
|
- `-d --rm` - Run the container in the background and automatically remove the container when it exits.
|
||||||
- `--rm` - Automatically remove the container when it exits.
|
|
||||||
- `-p 8080:8080` - Map the container's port `8080` to the host's port `8080`.
|
- `-p 8080:8080` - Map the container's port `8080` to the host's port `8080`.
|
||||||
- `-p 56000-56100:56000-56100/udp` - Map the container's UDP ports `56000-56100` to the host's ports `56000-56100`.
|
- `-p 56000-56100:56000-56100/udp` - Map the container's UDP ports `56000-56100` to the host's ports `56000-56100`.
|
||||||
- `-e NEKO_WEBRTC_EPR=56000-56100` - Set the WebRTC endpoint range, must match the mapped ports.
|
- `-e NEKO_WEBRTC_EPR=56000-56100` - Set the WebRTC endpoint range, this value must match the mapped ports above.
|
||||||
- See [WebRTC Ephemeral Port Range](/docs/v3/getting-started/configuration/webrtc#ephemeral-udp-port-range) for more information about this setting.
|
- See [WebRTC Ephemeral Port Range](/docs/v3/reference/configuration/webrtc#ephemeral-udp-port-range) for more information about this setting.
|
||||||
- `-e NEKO_WEBRTC_NAT1TO1=127.0.0.1` - Set the NAT1TO1 IP address.
|
- There is an alternative to use only a single port, see [WebRTC UDP/TCP multiplexing](/docs/v3/reference/configuration/webrtc#udp-tcp-multiplexing).
|
||||||
|
- `-e NEKO_WEBRTC_NAT1TO1=127.0.0.1` - Set the address where the WebRTC client should connect to.
|
||||||
- To test only on the local computer, use `127.0.0.1`.
|
- To test only on the local computer, use `127.0.0.1`.
|
||||||
- To use it in a private network, use the host's IP address (e.g., `192.168.1.5`).
|
- To use it in a private network, use the host's IP address (e.g., `192.168.1.5`).
|
||||||
- To use it in a public network, you need to correctly set up port forwarding on your router and remove this env variable.
|
- To use it in a public network, you need to correctly set up port forwarding on your router and remove this env variable.
|
||||||
- See [WebRTC Server IP Address](/docs/v3/getting-started/configuration/webrtc#server-ip-address) for more information about this setting.
|
- See [WebRTC Server IP Address](/docs/v3/reference/configuration/webrtc#server-ip-address) for more information about this setting.
|
||||||
- `-e NEKO_MEMBER_MULTIUSER_USER_PASSWORD=neko` - Set the password for the user account.
|
- `-e NEKO_MEMBER_MULTIUSER_USER_PASSWORD=neko` - Set the password for the user account.
|
||||||
- `-e NEKO_MEMBER_MULTIUSER_ADMIN_PASSWORD=admin` - Set the password for the admin account.
|
- `-e NEKO_MEMBER_MULTIUSER_ADMIN_PASSWORD=admin` - Set the password for the admin account.
|
||||||
- See [Multiuser Configuration](/docs/v3/getting-started/configuration/authentication#multi-user-provider) for more information about this setting.
|
- See [Multiuser Configuration](/docs/v3/reference/configuration/authentication#multi-user-provider) for more information about this setting.
|
||||||
- `ghcr.io/m1k1o/neko/firefox:latest` - The Neko Docker image to use.
|
- There are other authentication providers available, see [Authentication Providers](/docs/v3/reference/configuration/authentication#member-providers).
|
||||||
- See [Available Docker Images](/docs/v3/getting-started/docker-images) for more information about the available images.
|
- `ghcr.io/m1k1o/neko/firefox:latest` - The Docker image to use.
|
||||||
|
- See available [Docker Images](/docs/v3/getting-started/installation/docker-images).
|
||||||
|
|
||||||
Now, open your browser and go to: `http://localhost:8080`. You should see the Neko interface.
|
Now, open your browser and go to: `http://localhost:8080`. You should see the Neko interface.
|
||||||
|
|
||||||
## Using Docker Compose
|
### Further Configuration
|
||||||
|
|
||||||
|
You can configure Neko by setting environment variables or configuration file. See the [Configuration Reference](/docs/v3/reference/configuration) for more information.
|
||||||
|
|
||||||
|
## Docker Compose
|
||||||
|
|
||||||
You can also use Docker Compose to run Neko. It is preferred to use Docker Compose for running Neko in production because you can easily manage the container, update it, and configure it.
|
You can also use Docker Compose to run Neko. It is preferred to use Docker Compose for running Neko in production because you can easily manage the container, update it, and configure it.
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
{
|
||||||
|
"position": 3,
|
||||||
|
"label": "Installation",
|
||||||
|
"collapsed": false
|
||||||
|
}
|
|
@ -1,8 +1,8 @@
|
||||||
---
|
---
|
||||||
sidebar_position: 4
|
sidebar_position: 1
|
||||||
---
|
---
|
||||||
|
|
||||||
# Available Docker Images
|
# Docker Images
|
||||||
|
|
||||||
Neko as a standalone streaming server is available as a Docker image. But that is rarely interesting for general use. The real power of Neko is in its ability to accommodate custom applications in the virtual desktop environment. This is where the various flavors of Neko Docker images come in.
|
Neko as a standalone streaming server is available as a Docker image. But that is rarely interesting for general use. The real power of Neko is in its ability to accommodate custom applications in the virtual desktop environment. This is where the various flavors of Neko Docker images come in.
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
---
|
---
|
||||||
sidebar_position: 7
|
sidebar_position: 2
|
||||||
---
|
---
|
||||||
|
|
||||||
# Examples
|
# Examples
|
|
@ -1,5 +1,5 @@
|
||||||
---
|
---
|
||||||
sidebar_position: 6
|
sidebar_position: 4
|
||||||
---
|
---
|
||||||
|
|
||||||
# Troubleshooting
|
# Troubleshooting
|
||||||
|
@ -155,7 +155,7 @@ Example for pfsense with truecharts docker container:
|
||||||
- Test externally to confirm it works.
|
- Test externally to confirm it works.
|
||||||
- Internally you have to access it using `<your-public-ip>:port`
|
- Internally you have to access it using `<your-public-ip>:port`
|
||||||
|
|
||||||
If your router does not support NAT Loopback (NAT Hairpinning), you can use turn servers to overcome this issue. See [more details here](/docs/v3/getting-started/configuration/webrtc#ice-servers) on how to set up a local coturn instance.
|
If your router does not support NAT Loopback (NAT Hairpinning), you can use turn servers to overcome this issue. See [more details here](/docs/v3/reference/configuration/webrtc#ice-servers) on how to set up a local coturn instance.
|
||||||
|
|
||||||
### Neko works locally, but not externally
|
### Neko works locally, but not externally
|
||||||
|
|
||||||
|
@ -163,16 +163,24 @@ Make sure that you are exposing your ports correctly.
|
||||||
|
|
||||||
If you put a local IP as `NEKO_WEBRTC_NAT1TO1`, external clients try to connect to that IP. But it is unreachable for them because it is your local IP. You must use your public IP address with port forwarding.
|
If you put a local IP as `NEKO_WEBRTC_NAT1TO1`, external clients try to connect to that IP. But it is unreachable for them because it is your local IP. You must use your public IP address with port forwarding.
|
||||||
|
|
||||||
## Debug mode
|
## Frequently Encountered Errors
|
||||||
|
|
||||||
To see verbose information from the n.eko server, you can enable debug mode using `NEKO_DEBUG`.
|
### Getting a black screen with a cursor, but no browser for Chromium-based browsers
|
||||||
|
|
||||||
|
Check if you did not forget to add `cap_add` to your `docker-compose.yaml` file. Make sure that the `shm_size` is set to `2gb` or higher.
|
||||||
|
|
||||||
```yaml title="docker-compose.yaml"
|
```yaml title="docker-compose.yaml"
|
||||||
services:
|
services:
|
||||||
neko:
|
neko:
|
||||||
image: "ghcr.io/m1k1o/neko/firefox:latest"
|
image: "ghcr.io/m1k1o/neko/chromium:latest"
|
||||||
|
# highlight-start
|
||||||
|
cap_add:
|
||||||
|
- SYS_ADMIN
|
||||||
|
# highlight-end
|
||||||
restart: "unless-stopped"
|
restart: "unless-stopped"
|
||||||
|
# highlight-start
|
||||||
shm_size: "2gb"
|
shm_size: "2gb"
|
||||||
|
# highlight-end
|
||||||
ports:
|
ports:
|
||||||
- "8080:8080"
|
- "8080:8080"
|
||||||
- "52000-52100:52000-52100/udp"
|
- "52000-52100:52000-52100/udp"
|
||||||
|
@ -181,15 +189,8 @@ services:
|
||||||
NEKO_MEMBER_MULTIUSER_USER_PASSWORD: neko
|
NEKO_MEMBER_MULTIUSER_USER_PASSWORD: neko
|
||||||
NEKO_MEMBER_MULTIUSER_ADMIN_PASSWORD: admin
|
NEKO_MEMBER_MULTIUSER_ADMIN_PASSWORD: admin
|
||||||
NEKO_WEBRTC_EPR: 52000-52100
|
NEKO_WEBRTC_EPR: 52000-52100
|
||||||
# highlight-start
|
|
||||||
NEKO_DEBUG: 1
|
|
||||||
# highlight-end
|
|
||||||
```
|
```
|
||||||
|
|
||||||
Ensure that you have enabled debug mode in the JavaScript console too, in order to see verbose information from the client.
|
|
||||||
|
|
||||||
## Frequently Encountered Errors
|
|
||||||
|
|
||||||
### Common server errors
|
### Common server errors
|
||||||
|
|
||||||
```
|
```
|
||||||
|
@ -225,10 +226,10 @@ Check if your TCP port is exposed correctly and your reverse proxy is correctly
|
||||||
---
|
---
|
||||||
|
|
||||||
```
|
```
|
||||||
Getting a black screen with a cursor, but no browser.
|
NotAllowedError: play() failed because the user didn't interact with the document first
|
||||||
```
|
```
|
||||||
|
|
||||||
Most likely you forgot to add `-cap-add=SYS_ADMIN` when using chromium-based browsers.
|
This error occurs when the browser blocks the video from playing because the user has not interacted with the document. You just need to manually click on the play button to start the video.
|
||||||
|
|
||||||
### Unrelated server errors
|
### Unrelated server errors
|
||||||
|
|
||||||
|
@ -238,6 +239,20 @@ Most likely you forgot to add `-cap-add=SYS_ADMIN` when using chromium-based bro
|
||||||
|
|
||||||
This error originates from the browser, that it could not connect to dbus. This does not affect us and can be ignored.
|
This error originates from the browser, that it could not connect to dbus. This does not affect us and can be ignored.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
```
|
||||||
|
I: [pulseaudio] client.c: Created 0 "Native client (UNIX socket client)"
|
||||||
|
I: [pulseaudio] protocol-native.c: Client authenticated anonymously.
|
||||||
|
I: [pulseaudio] source-output.c: Trying to change sample spec
|
||||||
|
I: [pulseaudio] sink.c: Reconfigured successfully
|
||||||
|
I: [pulseaudio] source.c: Reconfigured successfully
|
||||||
|
I: [pulseaudio] client.c: Freed 0 "neko"
|
||||||
|
I: [pulseaudio] protocol-native.c: Connection died.
|
||||||
|
```
|
||||||
|
|
||||||
|
These are just logs from pulseaudio. Unless you have audio issues, you can ignore them.
|
||||||
|
|
||||||
### Broadcast pipeline not working with some ingest servers
|
### Broadcast pipeline not working with some ingest servers
|
||||||
|
|
||||||
See [related issue](https://github.com/m1k1o/neko/issues/276).
|
See [related issue](https://github.com/m1k1o/neko/issues/276).
|
||||||
|
|
|
@ -1,7 +0,0 @@
|
||||||
---
|
|
||||||
sidebar_position: 2
|
|
||||||
---
|
|
||||||
|
|
||||||
# Automating with Webhooks
|
|
||||||
|
|
||||||
Using webhooks to trigger actions in response to Neko events.
|
|
|
@ -1,7 +0,0 @@
|
||||||
---
|
|
||||||
sidebar_position: 3
|
|
||||||
---
|
|
||||||
|
|
||||||
# Custom Configurations
|
|
||||||
|
|
||||||
Advanced settings and custom scripts for extending Neko’s functionality.
|
|
|
@ -1,7 +0,0 @@
|
||||||
---
|
|
||||||
sidebar_position: 1
|
|
||||||
---
|
|
||||||
|
|
||||||
# Embedding Neko in Web Apps
|
|
||||||
|
|
||||||
How to embed Neko as an iframe or integrate it into existing web applications.
|
|
5
webpage/docs/reference/configuration/_category_.json
Normal file
5
webpage/docs/reference/configuration/_category_.json
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
{
|
||||||
|
"position": 1,
|
||||||
|
"label": "Configuration",
|
||||||
|
"collapsed": false
|
||||||
|
}
|
|
@ -26,7 +26,7 @@ A member profile is a structure that describes the user and what the user is all
|
||||||
| `can_access_clipboard` | Whether the user can read and write to the room's clipboard. | boolean |
|
| `can_access_clipboard` | Whether the user can read and write to the room's clipboard. | boolean |
|
||||||
| `sends_inactive_cursor` | Whether the user sends the cursor position even when the user is not hosting the room, this is used to show the cursor of the user to other users. | boolean |
|
| `sends_inactive_cursor` | Whether the user sends the cursor position even when the user is not hosting the room, this is used to show the cursor of the user to other users. | boolean |
|
||||||
| `can_see_inactive_cursors` | Whether the user can see the cursor of other users even when they are not hosting the room. | boolean |
|
| `can_see_inactive_cursors` | Whether the user can see the cursor of other users even when they are not hosting the room. | boolean |
|
||||||
| `plugins` | A map of plugin names and their configuration, plugins can use this to store user-specific settings, see the [Plugins Configuration](/docs/v3/getting-started/configuration/plugins) for more information. | object |
|
| `plugins` | A map of plugin names and their configuration, plugins can use this to store user-specific settings, see the [Plugins Configuration](/docs/v3/reference/configuration/plugins) for more information. | object |
|
||||||
|
|
||||||
import Tabs from '@theme/Tabs';
|
import Tabs from '@theme/Tabs';
|
||||||
import TabItem from '@theme/TabItem';
|
import TabItem from '@theme/TabItem';
|
|
@ -155,7 +155,7 @@ WebRTC does not use the HTTP protocol, therefore it is not possible to use nginx
|
||||||
There exist two types of connections:
|
There exist two types of connections:
|
||||||
|
|
||||||
- [Ephemeral UDP port range](#ephemeral-udp-port-range): The range of UDP ports that the server uses to establish a connection with the client. Every time a new connection is established, a new port from this range is used. This range should be open on the server's firewall.
|
- [Ephemeral UDP port range](#ephemeral-udp-port-range): The range of UDP ports that the server uses to establish a connection with the client. Every time a new connection is established, a new port from this range is used. This range should be open on the server's firewall.
|
||||||
- [UDP/TCP multiplexing](#udptcp-multiplexing): The server can use a single port for multiple connections. This port should be open on the server's firewall.
|
- [UDP/TCP multiplexing](#udp-tcp-multiplexing): The server can use a single port for multiple connections. This port should be open on the server's firewall.
|
||||||
|
|
||||||
### Ephemeral UDP port range
|
### Ephemeral UDP port range
|
||||||
|
|
||||||
|
@ -181,7 +181,7 @@ ports:
|
||||||
It is important to expose the same ports to the host machine, without any remapping e.g. `49000-49100:59000-59100/udp` instead of `59000-59100:59000-59100/udp`.
|
It is important to expose the same ports to the host machine, without any remapping e.g. `49000-49100:59000-59100/udp` instead of `59000-59100:59000-59100/udp`.
|
||||||
:::
|
:::
|
||||||
|
|
||||||
### UDP/TCP multiplexing
|
### UDP/TCP multiplexing {#udp-tcp-multiplexing}
|
||||||
|
|
||||||
The UDP/TCP multiplexing port can be configured using the following configuration:
|
The UDP/TCP multiplexing port can be configured using the following configuration:
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
---
|
---
|
||||||
sidebar_position: 1
|
sidebar_position: 2
|
||||||
---
|
---
|
||||||
|
|
||||||
# Reverse Proxy Setup
|
# Reverse Proxy Setup
|
|
@ -1,5 +1,5 @@
|
||||||
---
|
---
|
||||||
sidebar_position: 8
|
sidebar_position: 3
|
||||||
---
|
---
|
||||||
|
|
||||||
# V2 Migration Guide
|
# V2 Migration Guide
|
||||||
|
@ -43,7 +43,7 @@ See the V3 [configuration options](/docs/v3/getting-started/configuration).
|
||||||
|
|
||||||
### WebRTC Video
|
### WebRTC Video
|
||||||
|
|
||||||
See the V3 configuration options for the [WebRTC Video](/docs/v3/getting-started/configuration/capture#webrtc-video).
|
See the V3 configuration options for the [WebRTC Video](/docs/v3/reference/configuration/capture#webrtc-video).
|
||||||
|
|
||||||
| **V2 Configuration** | **V3 Configuration** |
|
| **V2 Configuration** | **V3 Configuration** |
|
||||||
|---------------------------------------|-----------------------------------------------------------|
|
|---------------------------------------|-----------------------------------------------------------|
|
||||||
|
@ -65,7 +65,7 @@ V2 did not have client-side cursor support, the cursor was always part of the vi
|
||||||
|
|
||||||
### WebRTC Audio
|
### WebRTC Audio
|
||||||
|
|
||||||
See the V3 configuration options for the [WebRTC Audio](/docs/v3/getting-started/configuration/capture#webrtc-audio).
|
See the V3 configuration options for the [WebRTC Audio](/docs/v3/reference/configuration/capture#webrtc-audio).
|
||||||
|
|
||||||
| **V2 Configuration** | **V3 Configuration** |
|
| **V2 Configuration** | **V3 Configuration** |
|
||||||
|---------------------------------------|-----------------------------------------------------------|
|
|---------------------------------------|-----------------------------------------------------------|
|
||||||
|
@ -80,7 +80,7 @@ See the V3 configuration options for the [WebRTC Audio](/docs/v3/getting-started
|
||||||
|
|
||||||
### Broadcast
|
### Broadcast
|
||||||
|
|
||||||
See the V3 configuration options for the [Broadcast](/docs/v3/getting-started/configuration/capture#broadcast).
|
See the V3 configuration options for the [Broadcast](/docs/v3/reference/configuration/capture#broadcast).
|
||||||
|
|
||||||
| **V2 Configuration** | **V3 Configuration** |
|
| **V2 Configuration** | **V3 Configuration** |
|
||||||
|---------------------------------------|-----------------------------------------------------------|
|
|---------------------------------------|-----------------------------------------------------------|
|
||||||
|
@ -90,7 +90,7 @@ See the V3 configuration options for the [Broadcast](/docs/v3/getting-started/co
|
||||||
|
|
||||||
### Desktop
|
### Desktop
|
||||||
|
|
||||||
See the V3 configuration options for the [Desktop](/docs/v3/getting-started/configuration/desktop).
|
See the V3 configuration options for the [Desktop](/docs/v3/reference/configuration/desktop).
|
||||||
|
|
||||||
| **V2 Configuration** | **V3 Configuration** |
|
| **V2 Configuration** | **V3 Configuration** |
|
||||||
|---------------------------------------|-----------------------------------------------------------|
|
|---------------------------------------|-----------------------------------------------------------|
|
||||||
|
@ -98,14 +98,14 @@ See the V3 configuration options for the [Desktop](/docs/v3/getting-started/conf
|
||||||
|
|
||||||
### Authentication
|
### Authentication
|
||||||
|
|
||||||
See the V3 configuration options for the [Authentication](/docs/v3/getting-started/configuration/authentication).
|
See the V3 configuration options for the [Authentication](/docs/v3/reference/configuration/authentication).
|
||||||
|
|
||||||
| **V2 Configuration** | **V3 Configuration** |
|
| **V2 Configuration** | **V3 Configuration** |
|
||||||
|---------------------------------------|-----------------------------------------------------------|
|
|---------------------------------------|-----------------------------------------------------------|
|
||||||
| `NEKO_PASSWORD` | `NEKO_MEMBER_MULTIUSER_USER_PASSWORD` with `NEKO_MEMBER_PROVIDER=multiuser` |
|
| `NEKO_PASSWORD` | `NEKO_MEMBER_MULTIUSER_USER_PASSWORD` with `NEKO_MEMBER_PROVIDER=multiuser` |
|
||||||
| `NEKO_PASSWORD_ADMIN` | `NEKO_MEMBER_MULTIUSER_ADMIN_PASSWORD` with `NEKO_MEMBER_PROVIDER=multiuser` |
|
| `NEKO_PASSWORD_ADMIN` | `NEKO_MEMBER_MULTIUSER_ADMIN_PASSWORD` with `NEKO_MEMBER_PROVIDER=multiuser` |
|
||||||
|
|
||||||
In order for the legacy authentication to work, you need to set [Multi-user](http://localhost:3000/docs/v3/getting-started/configuration/authentication#multi-user-provider).
|
In order for the legacy authentication to work, you need to set [Multi-user](http://localhost:3000/docs/v3/reference/configuration/authentication#multi-user-provider).
|
||||||
|
|
||||||
:::warning Limitation
|
:::warning Limitation
|
||||||
V2 clients might not be compatible with any other authentication provider than the `multiuser`.
|
V2 clients might not be compatible with any other authentication provider than the `multiuser`.
|
||||||
|
@ -113,7 +113,7 @@ V2 clients might not be compatible with any other authentication provider than t
|
||||||
|
|
||||||
### WebRTC
|
### WebRTC
|
||||||
|
|
||||||
See the V3 configuration options for the [WebRTC](/docs/v3/getting-started/configuration/webrtc).
|
See the V3 configuration options for the [WebRTC](/docs/v3/reference/configuration/webrtc).
|
||||||
|
|
||||||
| **V2 Configuration** | **V3 Configuration** |
|
| **V2 Configuration** | **V3 Configuration** |
|
||||||
|---------------------------------------|-----------------------------------------------------------|
|
|---------------------------------------|-----------------------------------------------------------|
|
||||||
|
@ -134,7 +134,7 @@ import configOptions from './help.json';
|
||||||
|
|
||||||
<Configuration configOptions={configOptions} />
|
<Configuration configOptions={configOptions} />
|
||||||
|
|
||||||
See the full [V3 configuration reference](/docs/v3/getting-started/configuration/#full-configuration-reference) for more details.
|
See the full [V3 configuration reference](/docs/v3/reference/configuration/#full-configuration-reference) for more details.
|
||||||
|
|
||||||
## API
|
## API
|
||||||
|
|
||||||
|
@ -144,7 +144,7 @@ V3 is compatible with the V2 API when legacy support is enabled. There was speci
|
||||||
|
|
||||||
In V2 there was only one authentication provider available, as in V3 called the `multiuser` provider. The API knew based on the provided password (as `?pwd=` query string) if the user is an admin or not.
|
In V2 there was only one authentication provider available, as in V3 called the `multiuser` provider. The API knew based on the provided password (as `?pwd=` query string) if the user is an admin or not.
|
||||||
|
|
||||||
Since V3 handles authentication differently (see [API documentation](/docs/v3/api/neko-api#authentication)), there has been added `?usr=` query string to the API to specify the username. The password is still provided as `?pwd=` query string. The `?usr=` query string is still optional, if not provided, the API will generate a random username.
|
Since V3 handles authentication differently (see [API documentation](/docs/v3/api#authentication)), there has been added `?usr=` query string to the API to specify the username. The password is still provided as `?pwd=` query string. The `?usr=` query string is still optional, if not provided, the API will generate a random username.
|
||||||
|
|
||||||
:::warning Limitation
|
:::warning Limitation
|
||||||
For every request in the legacy API, a new user session is created based on the `?usr=&pwd=` query string. The session is destroyed after the API request is completed. So for HTTP API requests, the sessions are short-lived but for WebSocket API requests, the session is kept alive until the WebSocket connection is closed.
|
For every request in the legacy API, a new user session is created based on the `?usr=&pwd=` query string. The session is destroyed after the API request is completed. So for HTTP API requests, the sessions are short-lived but for WebSocket API requests, the session is kept alive until the WebSocket connection is closed.
|
||||||
|
@ -163,7 +163,7 @@ V2 created a new data channel on the client side, V3 creates a new data channel
|
||||||
|
|
||||||
### HTTP API
|
### HTTP API
|
||||||
|
|
||||||
The V2 version had a very limited HTTP API, the V3 API is much more powerful and flexible. See the [API documentation](/docs/v3/api/neko-api) for more details.
|
The V2 version had a very limited HTTP API, the V3 API is much more powerful and flexible. See the [API documentation](/docs/v3/api) for more details.
|
||||||
|
|
||||||
#### GET `/health`
|
#### GET `/health`
|
||||||
|
|
||||||
|
@ -219,7 +219,7 @@ Returns a screenshot of the desktop as a JPEG image.
|
||||||
|
|
||||||
#### GET `/file`
|
#### GET `/file`
|
||||||
|
|
||||||
The whole functionality of file transfer has been moved to a [File Transfer Plugin](/docs/v3/getting-started/configuration/plugins#file-transfer-plugin).
|
The whole functionality of file transfer has been moved to a [File Transfer Plugin](/docs/v3/reference/configuration/plugins#file-transfer-plugin).
|
||||||
|
|
||||||
## Limitations
|
## Limitations
|
||||||
|
|
|
@ -1,7 +0,0 @@
|
||||||
---
|
|
||||||
sidebar_position: 3
|
|
||||||
---
|
|
||||||
|
|
||||||
# Authentication & User Roles
|
|
||||||
|
|
||||||
Configuring authentication, user roles, and access permissions.
|
|
|
@ -1,7 +0,0 @@
|
||||||
---
|
|
||||||
sidebar_position: 1
|
|
||||||
---
|
|
||||||
|
|
||||||
# Connecting & Using Neko
|
|
||||||
|
|
||||||
How users can connect to a Neko session and interact with it.
|
|
|
@ -1,7 +0,0 @@
|
||||||
---
|
|
||||||
sidebar_position: 2
|
|
||||||
---
|
|
||||||
|
|
||||||
# Managing Sessions
|
|
||||||
|
|
||||||
Guide to starting, stopping, and managing Neko sessions.
|
|
|
@ -1,7 +0,0 @@
|
||||||
---
|
|
||||||
sidebar_position: 4
|
|
||||||
---
|
|
||||||
|
|
||||||
# Performance Tuning
|
|
||||||
|
|
||||||
Optimizing video quality, latency, and encoding settings (Low Latency, Encoding, etc.).
|
|
|
@ -1,7 +0,0 @@
|
||||||
---
|
|
||||||
sidebar_position: 5
|
|
||||||
---
|
|
||||||
|
|
||||||
# Security Best Practices
|
|
||||||
|
|
||||||
Tips for securing a Neko deployment, including encryption and firewall settings.
|
|
|
@ -37,7 +37,7 @@ const config: Config = {
|
||||||
docs: {
|
docs: {
|
||||||
sidebarPath: './sidebars.ts',
|
sidebarPath: './sidebars.ts',
|
||||||
docItemComponent: "@theme/ApiItem", // Derived from docusaurus-theme-openapi
|
docItemComponent: "@theme/ApiItem", // Derived from docusaurus-theme-openapi
|
||||||
editUrl: 'https://github.com/m1k1o/neko/tree/main/docs/',
|
editUrl: 'https://github.com/m1k1o/neko/tree/main/webpage/',
|
||||||
lastVersion: 'current',
|
lastVersion: 'current',
|
||||||
versions: {
|
versions: {
|
||||||
current: {
|
current: {
|
||||||
|
@ -80,12 +80,6 @@ const config: Config = {
|
||||||
position: 'left',
|
position: 'left',
|
||||||
label: 'Docs',
|
label: 'Docs',
|
||||||
},
|
},
|
||||||
{
|
|
||||||
type: 'docSidebar',
|
|
||||||
sidebarId: 'apiSidebar',
|
|
||||||
position: 'left',
|
|
||||||
label: 'API',
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
to: 'contributing',
|
to: 'contributing',
|
||||||
label: 'Contributing',
|
label: 'Contributing',
|
||||||
|
|
|
@ -10,8 +10,8 @@
|
||||||
"deploy": "docusaurus deploy",
|
"deploy": "docusaurus deploy",
|
||||||
"clear": "docusaurus clear",
|
"clear": "docusaurus clear",
|
||||||
"serve": "docusaurus serve",
|
"serve": "docusaurus serve",
|
||||||
"gen-help": "node ./src/components/Configuration/generate.js ./docs/getting-started/configuration/help.txt ./docs/getting-started/configuration/help.json",
|
"gen-help": "node ./src/components/Configuration/generate.js ./docs/reference/configuration/help.txt ./docs/reference/configuration/help.json",
|
||||||
"gen-help:v2": "node ./src/components/Configuration/generate.js ./docs/getting-started/v2-migration/help.txt ./docs/getting-started/v2-migration/help.json",
|
"gen-help:v2": "node ./src/components/Configuration/generate.js ./docs/reference/v2-migration/help.txt ./docs/reference/v2-migration/help.json",
|
||||||
"write-translations": "docusaurus write-translations",
|
"write-translations": "docusaurus write-translations",
|
||||||
"write-heading-ids": "docusaurus write-heading-ids",
|
"write-heading-ids": "docusaurus write-heading-ids",
|
||||||
"gen-api-docs": "./gen-api-docs.sh",
|
"gen-api-docs": "./gen-api-docs.sh",
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
import type {SidebarsConfig} from '@docusaurus/plugin-content-docs';
|
import type {SidebarsConfig} from '@docusaurus/plugin-content-docs';
|
||||||
|
import apiSidebar from './docs/api/sidebar';
|
||||||
|
|
||||||
// This runs in Node.js - Don't use client-side code here (browser APIs, JSX...)
|
// This runs in Node.js - Don't use client-side code here (browser APIs, JSX...)
|
||||||
|
|
||||||
|
@ -17,45 +18,50 @@ const sidebars: SidebarsConfig = {
|
||||||
{
|
{
|
||||||
type: 'category',
|
type: 'category',
|
||||||
label: 'Getting Started',
|
label: 'Getting Started',
|
||||||
|
className: 'menu__list-item-flat',
|
||||||
|
collapsible: false,
|
||||||
items: [{ type: "autogenerated", dirName: "getting-started" }]
|
items: [{ type: "autogenerated", dirName: "getting-started" }]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: 'category',
|
type: 'category',
|
||||||
label: 'User Guide',
|
label: 'Reference',
|
||||||
items: [{ type: "autogenerated", dirName: "user-guide" }]
|
className: 'menu__list-item-flat',
|
||||||
|
collapsible: false,
|
||||||
|
items: [
|
||||||
|
{ type: "autogenerated", dirName: "reference" },
|
||||||
|
{
|
||||||
|
type: 'link',
|
||||||
|
label: 'API Reference',
|
||||||
|
href: '/docs/v3/api',
|
||||||
|
}
|
||||||
|
]
|
||||||
},
|
},
|
||||||
|
//{
|
||||||
|
// type: 'category',
|
||||||
|
// label: 'Hardware Acceleration',
|
||||||
|
// items: [{ type: "autogenerated", dirName: "hardware-acceleration" }]
|
||||||
|
//},
|
||||||
|
//{
|
||||||
|
// type: 'category',
|
||||||
|
// label: 'Application Customization',
|
||||||
|
// items: [{ type: "autogenerated", dirName: "app-customization" }]
|
||||||
|
//},
|
||||||
|
//{
|
||||||
|
// type: 'category',
|
||||||
|
// label: 'Developer Guide',
|
||||||
|
// items: [{ type: "autogenerated", dirName: "developer-guide" }]
|
||||||
|
//},
|
||||||
{
|
{
|
||||||
type: 'category',
|
type: 'category',
|
||||||
label: 'Hardware Acceleration',
|
label: 'Help & Support',
|
||||||
items: [{ type: "autogenerated", dirName: "hardware-acceleration" }]
|
className: 'menu__list-item-flat',
|
||||||
|
collapsible: false,
|
||||||
|
items: [
|
||||||
|
'faq',
|
||||||
|
'release-notes',
|
||||||
|
'roadmap',
|
||||||
|
]
|
||||||
},
|
},
|
||||||
{
|
|
||||||
type: 'category',
|
|
||||||
label: 'Application Customization',
|
|
||||||
items: [{ type: "autogenerated", dirName: "app-customization" }]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 'category',
|
|
||||||
label: 'Advanced Topics',
|
|
||||||
items: [{ type: "autogenerated", dirName: "advanced-topics" }]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 'category',
|
|
||||||
label: 'Developer Guide',
|
|
||||||
items: [{ type: "autogenerated", dirName: "developer-guide" }]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 'category',
|
|
||||||
label: 'Deployment & Scaling',
|
|
||||||
items: [{ type: "autogenerated", dirName: "deployment-and-scaling" }]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
type: 'category',
|
|
||||||
label: 'Integration & Extensibility',
|
|
||||||
items: [{ type: "autogenerated", dirName: "integration-and-extensibility" }]
|
|
||||||
},
|
|
||||||
'release-notes',
|
|
||||||
'roadmap',
|
|
||||||
],
|
],
|
||||||
apiSidebar: require("./docs/api/sidebar.js"),
|
apiSidebar: require("./docs/api/sidebar.js"),
|
||||||
};
|
};
|
||||||
|
|
|
@ -78,3 +78,29 @@
|
||||||
content: "patch";
|
content: "patch";
|
||||||
background-color: var(--openapi-code-orange);
|
background-color: var(--openapi-code-orange);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Custom CSS for the sidebar
|
||||||
|
*/
|
||||||
|
|
||||||
|
.menu__list-item-flat > .menu__list-item-collapsible > .menu__link:not([aria-expanded]) {
|
||||||
|
pointer-events: none;
|
||||||
|
user-select: none;
|
||||||
|
text-transform: uppercase;
|
||||||
|
font-size: 0.8em;
|
||||||
|
padding-top: 16px;
|
||||||
|
padding-bottom: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.menu__list-item-flat > .theme-doc-sidebar-item-category-level-1 > .menu__list-item-collapsible .menu__link:not([aria-expanded]) {
|
||||||
|
padding-top: 22px;
|
||||||
|
padding-bottom: 3px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.menu__list-item-flat > .menu__list-item-collapsible:has(> .menu__link:not([aria-expanded])) + .menu__list {
|
||||||
|
padding-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.menu__list-item-flat > .menu__list-item-collapsible:has(.menu__link:not([aria-expanded])) {
|
||||||
|
pointer-events: none;
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue