mirror of
https://github.com/m1k1o/neko.git
synced 2025-08-02 08:19:14 +02:00
WIP new docs.
This commit is contained in:
parent
004e893921
commit
b23ca1af04
28 changed files with 1250 additions and 1204 deletions
4
webpage/docs/getting-started/_category_.json
Normal file
4
webpage/docs/getting-started/_category_.json
Normal file
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"position": 1,
|
||||
"label": "Getting Started"
|
||||
}
|
106
webpage/docs/getting-started/configuration/configuration.tsx
Normal file
106
webpage/docs/getting-started/configuration/configuration.tsx
Normal file
|
@ -0,0 +1,106 @@
|
|||
import React from 'react';
|
||||
import Tabs from '@theme/Tabs';
|
||||
import TabItem from '@theme/TabItem';
|
||||
import CodeBlock from '@theme/CodeBlock';
|
||||
import configOptions from './help.json';
|
||||
|
||||
export default () => {
|
||||
const environmentVariables = () => {
|
||||
let code = '';
|
||||
configOptions.forEach(option => {
|
||||
let value = ""
|
||||
if (option.defaultValue) {
|
||||
value = `"${option.defaultValue}"`
|
||||
} else if (option.type) {
|
||||
value = `<${option.type}>`
|
||||
}
|
||||
code += `# ${option.description}\n`;
|
||||
code += `NEKO_${option.key.join('_').toUpperCase()}: ${value}\n`;
|
||||
});
|
||||
return (
|
||||
<CodeBlock language="yaml">
|
||||
{code}
|
||||
</CodeBlock>
|
||||
);
|
||||
}
|
||||
|
||||
const cmdArguments = () => {
|
||||
let code = '';
|
||||
configOptions.forEach(option => {
|
||||
code += `# ${option.description}\ \n`;
|
||||
code += `--${option.key.join('.')}`;
|
||||
if (option.type) {
|
||||
code += ` <${option.type}>`;
|
||||
}
|
||||
code += '\n';
|
||||
});
|
||||
return (
|
||||
<CodeBlock language="shell">
|
||||
{code}
|
||||
</CodeBlock>
|
||||
);
|
||||
}
|
||||
|
||||
const yamlFile = () => {
|
||||
const final = Symbol('final');
|
||||
|
||||
const buildYaml = (obj, prefix = '') => {
|
||||
let code = '';
|
||||
Object.keys(obj).forEach(key => {
|
||||
const value = obj[key];
|
||||
if (typeof value === 'object' && !Array.isArray(value) && !value[final]) {
|
||||
code += prefix+`${key}:\n`;
|
||||
code += buildYaml(value, prefix + ' ');
|
||||
} else {
|
||||
let val = '';
|
||||
if (value.defaultValue) {
|
||||
val = `"${value.defaultValue}"`;
|
||||
} else if (value.type) {
|
||||
val = `<${value.type}>`;
|
||||
}
|
||||
code += prefix+`# ${value.description || ''}\n`;
|
||||
code += prefix+`${key}: ${val}\n`;
|
||||
}
|
||||
});
|
||||
return code;
|
||||
};
|
||||
|
||||
const yamlCode = buildYaml(configOptions.reduce((acc, option) => {
|
||||
const keys = option.key;
|
||||
let current = acc;
|
||||
keys.forEach((key, index) => {
|
||||
if (!current[key]) {
|
||||
current[key] = index === keys.length - 1 ? option : {};
|
||||
}
|
||||
current = current[key];
|
||||
});
|
||||
current[final] = true;
|
||||
return acc;
|
||||
}, {}));
|
||||
|
||||
return (
|
||||
<CodeBlock language="yaml">
|
||||
{yamlCode}
|
||||
</CodeBlock>
|
||||
);
|
||||
}
|
||||
|
||||
return (
|
||||
<div>
|
||||
<Tabs>
|
||||
<TabItem value="env" label="Environment Variables">
|
||||
<p>You can set the following environment variables in your <code>docker-compose.yaml</code> file or in your shell environment.</p>
|
||||
{environmentVariables()}
|
||||
</TabItem>
|
||||
<TabItem value="args" label="Command Line Arguments">
|
||||
<p>You can list the following command line arguments using <code>neko serve --help</code>.</p>
|
||||
{cmdArguments()}
|
||||
</TabItem>
|
||||
<TabItem value="yaml" label="YAML Configuration File">
|
||||
<p>You can create a <code>/etc/neko/neko.yaml</code> file with the following configuration options.</p>
|
||||
{yamlFile()}
|
||||
</TabItem>
|
||||
</Tabs>
|
||||
</div>
|
||||
);
|
||||
};
|
33
webpage/docs/getting-started/configuration/help.js
Normal file
33
webpage/docs/getting-started/configuration/help.js
Normal file
|
@ -0,0 +1,33 @@
|
|||
/* This script reads the help.txt file and generates a help.json file with the configuration options. */
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
|
||||
const parseConfigOptions = (text) => {
|
||||
const lines = text.split('\n');
|
||||
return lines.map(line => {
|
||||
const match = line.match(/--([\w.]+)(?:\s(\w+))?\s+(.*?)(?:\s+\(default\s+"?([\w\/.@]+)"?\))?$/);
|
||||
if (match) {
|
||||
const [, key, type, description, defaultValue] = match;
|
||||
return { key: key.split('.'), type, defaultValue: defaultValue || undefined, description };
|
||||
}
|
||||
return null;
|
||||
}).filter(option => option !== null);
|
||||
};
|
||||
|
||||
const filePath = path.resolve(__dirname, 'help.txt');
|
||||
const outputFilePath = path.resolve(__dirname, 'help.json');
|
||||
|
||||
fs.readFile(filePath, 'utf8', (err, data) => {
|
||||
if (err) {
|
||||
console.error('Error reading help file:', err);
|
||||
return;
|
||||
}
|
||||
const configOptions = parseConfigOptions(data);
|
||||
fs.writeFile(outputFilePath, JSON.stringify(configOptions, null, 2), (err) => {
|
||||
if (err) {
|
||||
console.error('Error writing help file:', err);
|
||||
} else {
|
||||
console.log('Help file generated successfully.');
|
||||
}
|
||||
});
|
||||
});
|
789
webpage/docs/getting-started/configuration/help.json
Normal file
789
webpage/docs/getting-started/configuration/help.json
Normal file
|
@ -0,0 +1,789 @@
|
|||
[
|
||||
{
|
||||
"key": [
|
||||
"capture",
|
||||
"audio",
|
||||
"codec"
|
||||
],
|
||||
"type": "string",
|
||||
"defaultValue": "opus",
|
||||
"description": "audio codec to be used"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"capture",
|
||||
"audio",
|
||||
"device"
|
||||
],
|
||||
"type": "string",
|
||||
"defaultValue": "audio_output.monitor",
|
||||
"description": "pulseaudio device to capture"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"capture",
|
||||
"audio",
|
||||
"pipeline"
|
||||
],
|
||||
"type": "string",
|
||||
"description": "gstreamer pipeline used for audio streaming"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"capture",
|
||||
"broadcast",
|
||||
"audio_bitrate"
|
||||
],
|
||||
"type": "int",
|
||||
"defaultValue": "128",
|
||||
"description": "broadcast audio bitrate in KB/s"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"capture",
|
||||
"broadcast",
|
||||
"autostart"
|
||||
],
|
||||
"defaultValue": "true",
|
||||
"description": "automatically start broadcasting when neko starts and broadcast_url is set"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"capture",
|
||||
"broadcast",
|
||||
"pipeline"
|
||||
],
|
||||
"type": "string",
|
||||
"description": "gstreamer pipeline used for broadcasting"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"capture",
|
||||
"broadcast",
|
||||
"preset"
|
||||
],
|
||||
"type": "string",
|
||||
"defaultValue": "veryfast",
|
||||
"description": "broadcast speed preset for h264 encoding"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"capture",
|
||||
"broadcast",
|
||||
"url"
|
||||
],
|
||||
"type": "string",
|
||||
"description": "initial URL for broadcasting, setting this value will automatically start broadcasting"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"capture",
|
||||
"broadcast",
|
||||
"video_bitrate"
|
||||
],
|
||||
"type": "int",
|
||||
"defaultValue": "4096",
|
||||
"description": "broadcast video bitrate in KB/s"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"capture",
|
||||
"microphone",
|
||||
"device"
|
||||
],
|
||||
"type": "string",
|
||||
"defaultValue": "audio_input",
|
||||
"description": "pulseaudio device used for microphone"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"capture",
|
||||
"microphone",
|
||||
"enabled"
|
||||
],
|
||||
"defaultValue": "true",
|
||||
"description": "enable microphone stream"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"capture",
|
||||
"screencast",
|
||||
"enabled"
|
||||
],
|
||||
"description": "enable screencast"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"capture",
|
||||
"screencast",
|
||||
"pipeline"
|
||||
],
|
||||
"type": "string",
|
||||
"description": "gstreamer pipeline used for screencasting"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"capture",
|
||||
"screencast",
|
||||
"quality"
|
||||
],
|
||||
"type": "string",
|
||||
"defaultValue": "60",
|
||||
"description": "screencast JPEG quality"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"capture",
|
||||
"screencast",
|
||||
"rate"
|
||||
],
|
||||
"type": "string",
|
||||
"defaultValue": "10/1",
|
||||
"description": "screencast frame rate"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"capture",
|
||||
"video",
|
||||
"codec"
|
||||
],
|
||||
"type": "string",
|
||||
"defaultValue": "vp8",
|
||||
"description": "video codec to be used"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"capture",
|
||||
"video",
|
||||
"display"
|
||||
],
|
||||
"type": "string",
|
||||
"description": "X display to capture"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"capture",
|
||||
"video",
|
||||
"ids"
|
||||
],
|
||||
"type": "strings",
|
||||
"description": "ordered list of video ids"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"capture",
|
||||
"video",
|
||||
"pipelines"
|
||||
],
|
||||
"type": "string",
|
||||
"description": "pipelines config in JSON used for video streaming (default \"[]\")"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"capture",
|
||||
"webcam",
|
||||
"device"
|
||||
],
|
||||
"type": "string",
|
||||
"defaultValue": "/dev/video0",
|
||||
"description": "v4l2sink device used for webcam"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"capture",
|
||||
"webcam",
|
||||
"enabled"
|
||||
],
|
||||
"description": "enable webcam stream"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"capture",
|
||||
"webcam",
|
||||
"height"
|
||||
],
|
||||
"type": "int",
|
||||
"defaultValue": "720",
|
||||
"description": "webcam stream height"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"capture",
|
||||
"webcam",
|
||||
"width"
|
||||
],
|
||||
"type": "int",
|
||||
"defaultValue": "1280",
|
||||
"description": "webcam stream width"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"desktop",
|
||||
"display"
|
||||
],
|
||||
"type": "string",
|
||||
"description": "X display to use for desktop sharing"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"desktop",
|
||||
"file_chooser_dialog"
|
||||
],
|
||||
"description": "whether to handle file chooser dialog externally"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"desktop",
|
||||
"input",
|
||||
"enabled"
|
||||
],
|
||||
"defaultValue": "true",
|
||||
"description": "whether custom xf86 input driver should be used to handle touchscreen"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"desktop",
|
||||
"input",
|
||||
"socket"
|
||||
],
|
||||
"type": "string",
|
||||
"description": "socket path for custom xf86 input driver connection (default \"/tmp/xf86-input-neko.sock\")"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"desktop",
|
||||
"screen"
|
||||
],
|
||||
"type": "string",
|
||||
"defaultValue": "1280x720@30",
|
||||
"description": "default screen size and framerate"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"desktop",
|
||||
"unminimize"
|
||||
],
|
||||
"defaultValue": "true",
|
||||
"description": "automatically unminimize window when it is minimized"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"desktop",
|
||||
"upload_drop"
|
||||
],
|
||||
"defaultValue": "true",
|
||||
"description": "whether drop upload is enabled"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"member",
|
||||
"file",
|
||||
"hash"
|
||||
],
|
||||
"defaultValue": "true",
|
||||
"description": "member file provider: whether to hash passwords using sha256 (recommended)"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"member",
|
||||
"file",
|
||||
"path"
|
||||
],
|
||||
"type": "string",
|
||||
"description": "member file provider: storage path"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"member",
|
||||
"multiuser",
|
||||
"admin_password"
|
||||
],
|
||||
"type": "string",
|
||||
"defaultValue": "admin",
|
||||
"description": "member multiuser provider: admin password"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"member",
|
||||
"multiuser",
|
||||
"admin_profile"
|
||||
],
|
||||
"type": "string",
|
||||
"description": "member multiuser provider: admin profile in JSON format (default \"{}\")"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"member",
|
||||
"multiuser",
|
||||
"user_password"
|
||||
],
|
||||
"type": "string",
|
||||
"defaultValue": "neko",
|
||||
"description": "member multiuser provider: user password"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"member",
|
||||
"multiuser",
|
||||
"user_profile"
|
||||
],
|
||||
"type": "string",
|
||||
"description": "member multiuser provider: user profile in JSON format (default \"{}\")"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"member",
|
||||
"object",
|
||||
"users"
|
||||
],
|
||||
"type": "string",
|
||||
"description": "member object provider: users in JSON format (default \"[]\")"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"member",
|
||||
"provider"
|
||||
],
|
||||
"type": "string",
|
||||
"defaultValue": "multiuser",
|
||||
"description": "choose member provider"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"plugins",
|
||||
"dir"
|
||||
],
|
||||
"type": "string",
|
||||
"defaultValue": "./bin/plugins",
|
||||
"description": "path to neko plugins to load"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"plugins",
|
||||
"enabled"
|
||||
],
|
||||
"description": "load plugins in runtime"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"plugins",
|
||||
"required"
|
||||
],
|
||||
"description": "if true, neko will exit if there is an error when loading a plugin"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"server",
|
||||
"bind"
|
||||
],
|
||||
"type": "string",
|
||||
"description": "address/port/socket to serve neko (default \"127.0.0.1:8080\")"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"server",
|
||||
"cert"
|
||||
],
|
||||
"type": "string",
|
||||
"description": "path to the SSL cert used to secure the neko server"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"server",
|
||||
"cors"
|
||||
],
|
||||
"type": "strings",
|
||||
"description": "list of allowed origins for CORS, if empty CORS is disabled, if '*' is present all origins are allowed"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"server",
|
||||
"key"
|
||||
],
|
||||
"type": "string",
|
||||
"description": "path to the SSL key used to secure the neko server"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"server",
|
||||
"metrics"
|
||||
],
|
||||
"defaultValue": "true",
|
||||
"description": "enable prometheus metrics available at /metrics"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"server",
|
||||
"path_prefix"
|
||||
],
|
||||
"type": "string",
|
||||
"defaultValue": "/",
|
||||
"description": "path prefix for HTTP requests"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"server",
|
||||
"pprof"
|
||||
],
|
||||
"description": "enable pprof endpoint available at /debug/pprof"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"server",
|
||||
"proxy"
|
||||
],
|
||||
"description": "trust reverse proxy headers"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"server",
|
||||
"static"
|
||||
],
|
||||
"type": "string",
|
||||
"description": "path to neko client files to serve"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"session",
|
||||
"api_token"
|
||||
],
|
||||
"type": "string",
|
||||
"description": "API token for interacting with external services"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"session",
|
||||
"control_protection"
|
||||
],
|
||||
"description": "users can gain control only if at least one admin is in the room"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"session",
|
||||
"cookie",
|
||||
"enabled"
|
||||
],
|
||||
"defaultValue": "true",
|
||||
"description": "whether cookies authentication should be enabled"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"session",
|
||||
"cookie",
|
||||
"expiration"
|
||||
],
|
||||
"type": "int",
|
||||
"defaultValue": "8760",
|
||||
"description": "expiration of the cookie in hours"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"session",
|
||||
"cookie",
|
||||
"name"
|
||||
],
|
||||
"type": "string",
|
||||
"defaultValue": "NEKO_SESSION",
|
||||
"description": "name of the cookie that holds token"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"session",
|
||||
"cookie",
|
||||
"secure"
|
||||
],
|
||||
"defaultValue": "true",
|
||||
"description": "use secure cookies"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"session",
|
||||
"file"
|
||||
],
|
||||
"type": "string",
|
||||
"description": "if sessions should be stored in a file, otherwise they will be stored only in memory"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"session",
|
||||
"heartbeat_interval"
|
||||
],
|
||||
"type": "int",
|
||||
"defaultValue": "120",
|
||||
"description": "interval in seconds for sending heartbeat messages"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"session",
|
||||
"implicit_hosting"
|
||||
],
|
||||
"defaultValue": "true",
|
||||
"description": "allow implicit control switching"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"session",
|
||||
"inactive_cursors"
|
||||
],
|
||||
"description": "show inactive cursors on the screen"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"session",
|
||||
"locked_controls"
|
||||
],
|
||||
"description": "whether controls should be locked for users initially"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"session",
|
||||
"locked_logins"
|
||||
],
|
||||
"description": "whether logins should be locked for users initially"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"session",
|
||||
"merciful_reconnect"
|
||||
],
|
||||
"defaultValue": "true",
|
||||
"description": "allow reconnecting to websocket even if previous connection was not closed"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"session",
|
||||
"private_mode"
|
||||
],
|
||||
"description": "whether private mode should be enabled initially"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"webrtc",
|
||||
"epr"
|
||||
],
|
||||
"type": "string",
|
||||
"description": "limits the pool of ephemeral ports that ICE UDP connections can allocate from"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"webrtc",
|
||||
"estimator",
|
||||
"debug"
|
||||
],
|
||||
"description": "enables debug logging for the bandwidth estimator"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"webrtc",
|
||||
"estimator",
|
||||
"diff_threshold"
|
||||
],
|
||||
"type": "float",
|
||||
"defaultValue": "0.15",
|
||||
"description": "how bigger the difference between estimated and stream bitrate must be to trigger upgrade/downgrade"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"webrtc",
|
||||
"estimator",
|
||||
"downgrade_backoff"
|
||||
],
|
||||
"type": "duration",
|
||||
"defaultValue": "10s",
|
||||
"description": "how long to wait before downgrading again after previous downgrade"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"webrtc",
|
||||
"estimator",
|
||||
"enabled"
|
||||
],
|
||||
"description": "enables the bandwidth estimator"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"webrtc",
|
||||
"estimator",
|
||||
"initial_bitrate"
|
||||
],
|
||||
"type": "int",
|
||||
"defaultValue": "1000000",
|
||||
"description": "initial bitrate for the bandwidth estimator"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"webrtc",
|
||||
"estimator",
|
||||
"passive"
|
||||
],
|
||||
"description": "passive estimator mode, when it does not switch pipelines, only estimates"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"webrtc",
|
||||
"estimator",
|
||||
"read_interval"
|
||||
],
|
||||
"type": "duration",
|
||||
"defaultValue": "2s",
|
||||
"description": "how often to read and process bandwidth estimation reports"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"webrtc",
|
||||
"estimator",
|
||||
"stable_duration"
|
||||
],
|
||||
"type": "duration",
|
||||
"defaultValue": "12s",
|
||||
"description": "how long to wait for stable connection (upward or neutral trend) before upgrading"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"webrtc",
|
||||
"estimator",
|
||||
"stalled_duration"
|
||||
],
|
||||
"type": "duration",
|
||||
"defaultValue": "24s",
|
||||
"description": "how long to wait for stalled bandwidth estimation before downgrading"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"webrtc",
|
||||
"estimator",
|
||||
"unstable_duration"
|
||||
],
|
||||
"type": "duration",
|
||||
"defaultValue": "6s",
|
||||
"description": "how long to wait for stalled connection (neutral trend with low bandwidth) before downgrading"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"webrtc",
|
||||
"estimator",
|
||||
"upgrade_backoff"
|
||||
],
|
||||
"type": "duration",
|
||||
"defaultValue": "5s",
|
||||
"description": "how long to wait before upgrading again after previous upgrade"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"webrtc",
|
||||
"icelite"
|
||||
],
|
||||
"description": "configures whether or not the ICE agent should be a lite agent"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"webrtc",
|
||||
"iceservers",
|
||||
"backend"
|
||||
],
|
||||
"type": "urls",
|
||||
"description": "Backend only STUN and TURN servers in JSON format with urls, `username` and `credential` keys (default \"[]\")"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"webrtc",
|
||||
"iceservers",
|
||||
"frontend"
|
||||
],
|
||||
"type": "urls",
|
||||
"description": "Frontend only STUN and TURN servers in JSON format with urls, `username` and `credential` keys (default \"[]\")"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"webrtc",
|
||||
"icetrickle"
|
||||
],
|
||||
"defaultValue": "true",
|
||||
"description": "configures whether cadidates should be sent asynchronously using Trickle ICE"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"webrtc",
|
||||
"ip_retrieval_url"
|
||||
],
|
||||
"type": "string",
|
||||
"description": "URL address used for retrieval of the external IP address (default \"https://checkip.amazonaws.com\")"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"webrtc",
|
||||
"nat1to1"
|
||||
],
|
||||
"type": "strings",
|
||||
"description": "sets a list of external IP addresses of 1:1 (D)NAT and a candidate type for which the external IP address is used"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"webrtc",
|
||||
"tcpmux"
|
||||
],
|
||||
"type": "int",
|
||||
"description": "single TCP mux port for all peers"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"webrtc",
|
||||
"udpmux"
|
||||
],
|
||||
"type": "int",
|
||||
"description": "single UDP mux port for all peers, replaces EPR"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"config"
|
||||
],
|
||||
"type": "string",
|
||||
"description": "configuration file path"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"debug"
|
||||
],
|
||||
"description": "enable debug mode"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"log",
|
||||
"dir"
|
||||
],
|
||||
"type": "string",
|
||||
"description": "logging directory to store logs"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"log",
|
||||
"json"
|
||||
],
|
||||
"description": "logs in JSON format"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"log",
|
||||
"level"
|
||||
],
|
||||
"type": "string",
|
||||
"defaultValue": "info",
|
||||
"description": "set log level (trace, debug, info, warn, error, fatal, panic, disabled)"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"log",
|
||||
"nocolor"
|
||||
],
|
||||
"description": "no ANSI colors in non-JSON output"
|
||||
},
|
||||
{
|
||||
"key": [
|
||||
"log",
|
||||
"time"
|
||||
],
|
||||
"type": "string",
|
||||
"defaultValue": "unix",
|
||||
"description": "time format used in logs (unix, unixms, unixmicro)"
|
||||
}
|
||||
]
|
93
webpage/docs/getting-started/configuration/help.txt
Normal file
93
webpage/docs/getting-started/configuration/help.txt
Normal file
|
@ -0,0 +1,93 @@
|
|||
--capture.audio.codec string audio codec to be used (default "opus")
|
||||
--capture.audio.device string pulseaudio device to capture (default "audio_output.monitor")
|
||||
--capture.audio.pipeline string gstreamer pipeline used for audio streaming
|
||||
--capture.broadcast.audio_bitrate int broadcast audio bitrate in KB/s (default 128)
|
||||
--capture.broadcast.autostart automatically start broadcasting when neko starts and broadcast_url is set (default true)
|
||||
--capture.broadcast.pipeline string gstreamer pipeline used for broadcasting
|
||||
--capture.broadcast.preset string broadcast speed preset for h264 encoding (default "veryfast")
|
||||
--capture.broadcast.url string initial URL for broadcasting, setting this value will automatically start broadcasting
|
||||
--capture.broadcast.video_bitrate int broadcast video bitrate in KB/s (default 4096)
|
||||
--capture.microphone.device string pulseaudio device used for microphone (default "audio_input")
|
||||
--capture.microphone.enabled enable microphone stream (default true)
|
||||
--capture.screencast.enabled enable screencast
|
||||
--capture.screencast.pipeline string gstreamer pipeline used for screencasting
|
||||
--capture.screencast.quality string screencast JPEG quality (default "60")
|
||||
--capture.screencast.rate string screencast frame rate (default "10/1")
|
||||
--capture.video.codec string video codec to be used (default "vp8")
|
||||
--capture.video.display string X display to capture
|
||||
--capture.video.ids strings ordered list of video ids
|
||||
--capture.video.pipelines string pipelines config in JSON used for video streaming (default "[]")
|
||||
--capture.webcam.device string v4l2sink device used for webcam (default "/dev/video0")
|
||||
--capture.webcam.enabled enable webcam stream
|
||||
--capture.webcam.height int webcam stream height (default 720)
|
||||
--capture.webcam.width int webcam stream width (default 1280)
|
||||
--desktop.display string X display to use for desktop sharing
|
||||
--desktop.file_chooser_dialog whether to handle file chooser dialog externally
|
||||
--desktop.input.enabled whether custom xf86 input driver should be used to handle touchscreen (default true)
|
||||
--desktop.input.socket string socket path for custom xf86 input driver connection (default "/tmp/xf86-input-neko.sock")
|
||||
--desktop.screen string default screen size and framerate (default "1280x720@30")
|
||||
--desktop.unminimize automatically unminimize window when it is minimized (default true)
|
||||
--desktop.upload_drop whether drop upload is enabled (default true)
|
||||
--member.file.hash member file provider: whether to hash passwords using sha256 (recommended) (default true)
|
||||
--member.file.path string member file provider: storage path
|
||||
--member.multiuser.admin_password string member multiuser provider: admin password (default "admin")
|
||||
--member.multiuser.admin_profile string member multiuser provider: admin profile in JSON format (default "{}")
|
||||
--member.multiuser.user_password string member multiuser provider: user password (default "neko")
|
||||
--member.multiuser.user_profile string member multiuser provider: user profile in JSON format (default "{}")
|
||||
--member.object.users string member object provider: users in JSON format (default "[]")
|
||||
--member.provider string choose member provider (default "multiuser")
|
||||
--plugins.dir string path to neko plugins to load (default "./bin/plugins")
|
||||
--plugins.enabled load plugins in runtime
|
||||
--plugins.required if true, neko will exit if there is an error when loading a plugin
|
||||
--server.bind string address/port/socket to serve neko (default "127.0.0.1:8080")
|
||||
--server.cert string path to the SSL cert used to secure the neko server
|
||||
--server.cors strings list of allowed origins for CORS, if empty CORS is disabled, if '*' is present all origins are allowed
|
||||
--server.key string path to the SSL key used to secure the neko server
|
||||
--server.metrics enable prometheus metrics available at /metrics (default true)
|
||||
--server.path_prefix string path prefix for HTTP requests (default "/")
|
||||
--server.pprof enable pprof endpoint available at /debug/pprof
|
||||
--server.proxy trust reverse proxy headers
|
||||
--server.static string path to neko client files to serve
|
||||
--session.api_token string API token for interacting with external services
|
||||
--session.control_protection users can gain control only if at least one admin is in the room
|
||||
--session.cookie.enabled whether cookies authentication should be enabled (default true)
|
||||
--session.cookie.expiration int expiration of the cookie in hours (default 8760)
|
||||
--session.cookie.name string name of the cookie that holds token (default "NEKO_SESSION")
|
||||
--session.cookie.secure use secure cookies (default true)
|
||||
--session.file string if sessions should be stored in a file, otherwise they will be stored only in memory
|
||||
--session.heartbeat_interval int interval in seconds for sending heartbeat messages (default 120)
|
||||
--session.implicit_hosting allow implicit control switching (default true)
|
||||
--session.inactive_cursors show inactive cursors on the screen
|
||||
--session.locked_controls whether controls should be locked for users initially
|
||||
--session.locked_logins whether logins should be locked for users initially
|
||||
--session.merciful_reconnect allow reconnecting to websocket even if previous connection was not closed (default true)
|
||||
--session.private_mode whether private mode should be enabled initially
|
||||
--webrtc.epr string limits the pool of ephemeral ports that ICE UDP connections can allocate from
|
||||
--webrtc.estimator.debug enables debug logging for the bandwidth estimator
|
||||
--webrtc.estimator.diff_threshold float how bigger the difference between estimated and stream bitrate must be to trigger upgrade/downgrade (default 0.15)
|
||||
--webrtc.estimator.downgrade_backoff duration how long to wait before downgrading again after previous downgrade (default 10s)
|
||||
--webrtc.estimator.enabled enables the bandwidth estimator
|
||||
--webrtc.estimator.initial_bitrate int initial bitrate for the bandwidth estimator (default 1000000)
|
||||
--webrtc.estimator.passive passive estimator mode, when it does not switch pipelines, only estimates
|
||||
--webrtc.estimator.read_interval duration how often to read and process bandwidth estimation reports (default 2s)
|
||||
--webrtc.estimator.stable_duration duration how long to wait for stable connection (upward or neutral trend) before upgrading (default 12s)
|
||||
--webrtc.estimator.stalled_duration duration how long to wait for stalled bandwidth estimation before downgrading (default 24s)
|
||||
--webrtc.estimator.unstable_duration duration how long to wait for stalled connection (neutral trend with low bandwidth) before downgrading (default 6s)
|
||||
--webrtc.estimator.upgrade_backoff duration how long to wait before upgrading again after previous upgrade (default 5s)
|
||||
--webrtc.icelite configures whether or not the ICE agent should be a lite agent
|
||||
--webrtc.iceservers.backend urls Backend only STUN and TURN servers in JSON format with urls, `username` and `credential` keys (default "[]")
|
||||
--webrtc.iceservers.frontend urls Frontend only STUN and TURN servers in JSON format with urls, `username` and `credential` keys (default "[]")
|
||||
--webrtc.icetrickle configures whether cadidates should be sent asynchronously using Trickle ICE (default true)
|
||||
--webrtc.ip_retrieval_url string URL address used for retrieval of the external IP address (default "https://checkip.amazonaws.com")
|
||||
--webrtc.nat1to1 strings sets a list of external IP addresses of 1:1 (D)NAT and a candidate type for which the external IP address is used
|
||||
--webrtc.tcpmux int single TCP mux port for all peers
|
||||
--webrtc.udpmux int single UDP mux port for all peers, replaces EPR
|
||||
|
||||
Global Flags:
|
||||
-c, --config string configuration file path
|
||||
-d, --debug enable debug mode
|
||||
--log.dir string logging directory to store logs
|
||||
--log.json logs in JSON format
|
||||
--log.level string set log level (trace, debug, info, warn, error, fatal, panic, disabled) (default "info")
|
||||
--log.nocolor no ANSI colors in non-JSON output
|
||||
--log.time string time format used in logs (unix, unixms, unixmicro) (default "unix")
|
13
webpage/docs/getting-started/configuration/index.mdx
Normal file
13
webpage/docs/getting-started/configuration/index.mdx
Normal file
|
@ -0,0 +1,13 @@
|
|||
---
|
||||
sidebar_position: 5
|
||||
---
|
||||
|
||||
# Configuration
|
||||
|
||||
Configuration options can be set using Environment Variables, as an argument to the CLI, or in a configuration file.
|
||||
|
||||
Highest priority is given to the Environment Variables, followed by CLI arguments, and then the configuration file.
|
||||
|
||||
import Configuration from './configuration.tsx'
|
||||
|
||||
<Configuration />
|
|
@ -0,0 +1,8 @@
|
|||
{
|
||||
"position": 3,
|
||||
"label": "Installation",
|
||||
"link": {
|
||||
"type": "generated-index",
|
||||
"description": "There are multiple ways to install neko, choose the one that fits your needs."
|
||||
}
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
---
|
||||
sidebar_position: 3
|
||||
---
|
||||
|
||||
# Cloud Deployments
|
||||
|
||||
:::warning
|
||||
This page is a work in progress. [Docker Setup](./docker-setup.md) is the recommended way to install Neko.
|
||||
:::
|
||||
|
||||
Neko can be deployed to various cloud platforms for scalable, high-availability solutions. This guide walks you through deploying Neko on popular cloud providers such as AWS, Google Cloud, and Azure.
|
144
webpage/docs/getting-started/installation/docker-setup.md
Normal file
144
webpage/docs/getting-started/installation/docker-setup.md
Normal file
|
@ -0,0 +1,144 @@
|
|||
---
|
||||
sidebar_position: 1
|
||||
---
|
||||
|
||||
# Docker Setup
|
||||
|
||||
<div align="center">
|
||||
<img src="/img/icons/firefox.svg" title="m1k1o/neko:firefox" width="60" height="auto"/>
|
||||
<img src="/img/icons/google-chrome.svg" title="m1k1o/neko:google-chrome" width="60" height="auto"/>
|
||||
<img src="/img/icons/chromium.svg" title="m1k1o/neko:chromium" width="60" height="auto"/>
|
||||
<img src="/img/icons/microsoft-edge.svg" title="m1k1o/neko:microsoft-edge" width="60" height="auto"/>
|
||||
<img src="/img/icons/brave.svg" title="m1k1o/neko:brave" width="60" height="auto"/>
|
||||
<img src="/img/icons/vivaldi.svg" title="m1k1o/neko:vivaldi" width="60" height="auto"/>
|
||||
<img src="/img/icons/opera.svg" title="m1k1o/neko:opera" width="60" height="auto"/>
|
||||
<img src="/img/icons/tor-browser.svg" title="m1k1o/neko:tor-browser" width="60" height="auto"/>
|
||||
<img src="/img/icons/remmina.png" title="m1k1o/neko:remmina" width="60" height="auto"/>
|
||||
<img src="/img/icons/vlc.svg" title="m1k1o/neko:vlc" width="60" height="auto"/>
|
||||
<img src="/img/icons/xfce.svg" title="m1k1o/neko:xfce" width="60" height="auto"/>
|
||||
<img src="/img/icons/kde.svg" title="m1k1o/neko:kde" width="60" height="auto"/>
|
||||
</div>
|
||||
|
||||
Use the following docker images from [Docker Hub](https://hub.docker.com/r/m1k1o/neko) for x86_64:
|
||||
- `m1k1o/neko:latest` or `m1k1o/neko:firefox` - for Firefox.
|
||||
- `m1k1o/neko:chromium` - for Chromium (needs `--cap-add=SYS_ADMIN`, see the [security implications](https://www.redhat.com/en/blog/container-tidbits-adding-capabilities-container)).
|
||||
- `m1k1o/neko:google-chrome` - for Google Chrome (needs `--cap-add=SYS_ADMIN`, see the [security implications](https://www.redhat.com/en/blog/container-tidbits-adding-capabilities-container)).
|
||||
- `m1k1o/neko:ungoogled-chromium` - for [Ungoogled Chromium](https://github.com/Eloston/ungoogled-chromium) (needs `--cap-add=SYS_ADMIN`, see the [security implications](https://www.redhat.com/en/blog/container-tidbits-adding-capabilities-container)) (by @whalehub).
|
||||
- `m1k1o/neko:microsoft-edge` - for Microsoft Edge (needs `--cap-add=SYS_ADMIN`, see the [security implications](https://www.redhat.com/en/blog/container-tidbits-adding-capabilities-container)).
|
||||
- `m1k1o/neko:brave` - for [Brave Browser](https://brave.com) (needs `--cap-add=SYS_ADMIN`, see the [security implications](https://www.redhat.com/en/blog/container-tidbits-adding-capabilities-container)).
|
||||
- `m1k1o/neko:vivaldi` - for [Vivaldi Browser](https://vivaldi.com) (needs `--cap-add=SYS_ADMIN`, see the [security implications](https://www.redhat.com/en/blog/container-tidbits-adding-capabilities-container)) (by @Xeddius).
|
||||
- `m1k1o/neko:opera` for [Opera Browser](https://opera.com) (requires extra steps to enable DRM, see instructions [here](https://www.reddit.com/r/operabrowser/wiki/opera/linux_widevine_config/). libffmpeg is already configured.) (by @prophetofxenu)
|
||||
- `m1k1o/neko:tor-browser` - for Tor Browser.
|
||||
- `m1k1o/neko:remmina` - for remote desktop connection (by @lowne).
|
||||
- Pass env var `REMMINA_URL=<proto>://[<username>[:<password>]@]server[:port]` (proto being `vnc`, `rdp` or `spice`).
|
||||
- Or create your custom configuration with remmina locally (it's saved in `~/.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](https://github.com/m1k1o?tab=packages&repo_name=neko) for faster pulls:
|
||||
|
||||
- `ghcr.io/m1k1o/neko/firefox:latest`
|
||||
- `ghcr.io/m1k1o/neko/chromium:latest`
|
||||
- `ghcr.io/m1k1o/neko/google-chrome:latest`
|
||||
- `ghcr.io/m1k1o/neko/ungoogled-chromium:latest`
|
||||
- `ghcr.io/m1k1o/neko/microsoft-edge:latest`
|
||||
- `ghcr.io/m1k1o/neko/brave:latest`
|
||||
- `ghcr.io/m1k1o/neko/vivaldi:latest`
|
||||
- `ghcr.io/m1k1o/neko/opera:latest`
|
||||
- `ghcr.io/m1k1o/neko/tor-browser:latest`
|
||||
- `ghcr.io/m1k1o/neko/remmina:latest`
|
||||
- `ghcr.io/m1k1o/neko/vlc:latest`
|
||||
- `ghcr.io/m1k1o/neko/xfce:latest`
|
||||
- `ghcr.io/m1k1o/neko/kde:latest`
|
||||
|
||||
For 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. Please note, that `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: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`
|
||||
|
||||
For images with VAAPI GPU hardware acceleration using intel drivers use:
|
||||
|
||||
- `ghcr.io/m1k1o/neko/intel-firefox:latest`
|
||||
- `ghcr.io/m1k1o/neko/intel-chromium:latest`
|
||||
- `ghcr.io/m1k1o/neko/intel-google-chrome:latest`
|
||||
- `ghcr.io/m1k1o/neko/intel-ungoogled-chromium:latest`
|
||||
- `ghcr.io/m1k1o/neko/intel-microsoft-edge:latest`
|
||||
- `ghcr.io/m1k1o/neko/intel-brave:latest`
|
||||
- `ghcr.io/m1k1o/neko/intel-vivaldi:latest`
|
||||
- `ghcr.io/m1k1o/neko/intel-opera:latest`
|
||||
- `ghcr.io/m1k1o/neko/intel-tor-browser:latest`
|
||||
- `ghcr.io/m1k1o/neko/intel-remmina:latest`
|
||||
- `ghcr.io/m1k1o/neko/intel-vlc:latest`
|
||||
- `ghcr.io/m1k1o/neko/intel-xfce:latest`
|
||||
- `ghcr.io/m1k1o/neko/intel-kde:latest`
|
||||
|
||||
For 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](https://github.com/m1k1o/neko/issues/279)):
|
||||
|
||||
- `ghcr.io/m1k1o/neko/nvidia-firefox:latest`
|
||||
- `ghcr.io/m1k1o/neko/nvidia-chromium:latest`
|
||||
- `ghcr.io/m1k1o/neko/nvidia-google-chrome:latest`
|
||||
- `ghcr.io/m1k1o/neko/nvidia-microsoft-edge:latest`
|
||||
- `ghcr.io/m1k1o/neko/nvidia-brave:latest`
|
||||
|
||||
GHCR images are built using GitHub actions for every tag.
|
||||
|
||||
## Running Neko with Docker
|
||||
|
||||
To start a basic Neko container, use the following command:
|
||||
|
||||
```sh
|
||||
docker run -d --rm \
|
||||
-p 8080:8080 \
|
||||
-p 56000-56100:56000-56100/udp \
|
||||
-e NEKO_EPR=56000-56100 \
|
||||
-e NEKO_PASSWORD=neko \
|
||||
-e NEKO_PASSWORD_ADMIN=admin \
|
||||
-e NEKO_NAT1TO1=<your-ip> \
|
||||
--shm-size=2g \
|
||||
m1k1o/neko:latest
|
||||
```
|
||||
|
||||
### Explanation
|
||||
|
||||
- `-d` - Run the container in the background.
|
||||
- `--rm` - Automatically remove the container when it exits.
|
||||
- `-p 8080:8080` - Map the host's port `8080` to the container's port `8080`.
|
||||
- `-p 56000-56100:56000-56100/udp` - Map the host's ports `56000-56100` to the container's ports `56000-56100` using UDP.
|
||||
- `-e NEKO_EPR=56000-56100` - Set the range of ports for the WebRTC connection, it must match the port range mapped above.
|
||||
- `-e NEKO_PASSWORD=neko` and `-e NEKO_PASSWORD_ADMIN=admin` - Set passwords for the user and admin user.
|
||||
- `-e NEKO_NAT1TO1=<your-ip>` - Set the public or local IP address for the NAT1:1 connection.
|
||||
- `--shm-size=2g` - Set the shared memory size to 2GB, otherwise, the browser may crash.
|
||||
- `m1k1o/neko:latest` - The name of the image to run, change it to the desired image.
|
||||
|
||||
Now, open your browser and go to: `http://localhost:8080`. You should see the Neko interface.
|
||||
|
||||
## Using Docker Compose
|
||||
|
||||
You can also use Docker Compose to run Neko. Create a `docker-compose.yml` file with the following content:
|
||||
|
||||
```yaml title="docker-compose.yml"
|
||||
services:
|
||||
neko:
|
||||
image: m1k1o/neko:latest
|
||||
shm_size: 2g
|
||||
ports:
|
||||
- "8080:8080"
|
||||
- "56000-56100:56000-56100/udp"
|
||||
environment:
|
||||
NEKO_EPR: 56000-56100
|
||||
NEKO_PASSWORD: neko
|
||||
NEKO_PASSWORD_ADMIN: admin
|
||||
NEKO_NAT1TO1: <your-ip>
|
||||
```
|
||||
|
||||
Then, run the following command:
|
||||
|
||||
```sh
|
||||
docker compose up -d
|
||||
```
|
|
@ -0,0 +1,74 @@
|
|||
---
|
||||
sidebar_position: 2
|
||||
---
|
||||
|
||||
# Manual Installation
|
||||
|
||||
:::warning
|
||||
This page is a work in progress. [Docker Setup](./docker-setup.md) is the recommended way to install Neko.
|
||||
:::
|
||||
|
||||
In some cases, you may want to install Neko manually without Docker. This guide walks you through the process of setting up Neko on your local machine or server.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
Before proceeding, ensure that you have the following installed on your system:
|
||||
|
||||
- [node.js](https://nodejs.org/) and [npm](https://www.npmjs.com/) (for building the frontend).
|
||||
- [go](https://golang.org/) (for building the server).
|
||||
- [gstreamer](https://gstreamer.freedesktop.org/) (for video processing).
|
||||
```shell
|
||||
sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev \
|
||||
gstreamer1.0-plugins-base gstreamer1.0-plugins-good \
|
||||
gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly \
|
||||
gstreamer1.0-pulseaudio;
|
||||
```
|
||||
- [x.org](https://www.x.org/) (for X11 server).
|
||||
```shell
|
||||
sudo apt-get install libx11-dev libxrandr-dev libxtst-dev libxcvt-dev xorg;
|
||||
```
|
||||
- [pulseaudio](https://www.freedesktop.org/wiki/Software/PulseAudio/) (for audio support).
|
||||
```shell
|
||||
sudo apt-get install pulseaudio;
|
||||
```
|
||||
- other dependencies:
|
||||
```shell
|
||||
sudo apt-get install xdotool xclip libgtk-3-0 libgtk-3-dev libopus0 libvpx6;
|
||||
```
|
||||
|
||||
## Step 1: Clone the Repository
|
||||
|
||||
Start by cloning the Neko Git repository to your machine:
|
||||
|
||||
```bash
|
||||
git clone https://github.com/m1k1o/neko.git
|
||||
cd neko
|
||||
```
|
||||
|
||||
## Step 2: Build the Frontend
|
||||
|
||||
Navigate to the `client` directory and install the dependencies:
|
||||
|
||||
```shell
|
||||
cd client;
|
||||
npm install;
|
||||
npm run build;
|
||||
```
|
||||
|
||||
## Step 3: Build the Server
|
||||
|
||||
Navigate to the `server` directory and build the server:
|
||||
|
||||
```shell
|
||||
cd server;
|
||||
go build;
|
||||
```
|
||||
|
||||
## Step 4: Run the Server
|
||||
|
||||
Finally, run the server:
|
||||
|
||||
```shell
|
||||
./server/server;
|
||||
```
|
||||
|
33
webpage/docs/getting-started/overview-of-neko.md
Normal file
33
webpage/docs/getting-started/overview-of-neko.md
Normal file
|
@ -0,0 +1,33 @@
|
|||
---
|
||||
title: Overview of Neko
|
||||
sidebar_position: 1
|
||||
---
|
||||
|
||||
# Overview of Neko
|
||||
|
||||
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.
|
||||
|
||||
## Key Features
|
||||
|
||||
- **Multi-User Collaboration** – Multiple users can interact with the same browser session.
|
||||
- **Audio & Video Streaming** – Real-time streaming of the browser’s output with low latency.
|
||||
- **Secure & Self-Hosted** – You control the server, ensuring privacy and security.
|
||||
- **GPU Acceleration** – Supports hardware acceleration for improved performance.
|
||||
- **Customization Options** – Configure bookmarks, extensions, persistent data, and more.
|
||||
|
||||
## Use Cases
|
||||
|
||||
- **Remote Browsing** – Access a web browser from any device without installing software.
|
||||
- **Watch Parties** – Stream content together with friends and interact in real time.
|
||||
- **Web Development & Testing** – Test websites in a controlled browser environment.
|
||||
- **Cloud-Based Browsing** – Securely browse the web from a dedicated remote environment.
|
||||
|
||||
## Supported Platforms
|
||||
|
||||
Neko runs on various platforms, including:
|
||||
|
||||
- **Linux & Docker** – Easy deployment using Docker containers.
|
||||
- **Cloud Services** – Deployable on AWS, Azure, Google Cloud, and other providers.
|
||||
- **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.
|
63
webpage/docs/getting-started/quick-start-guide.md
Normal file
63
webpage/docs/getting-started/quick-start-guide.md
Normal file
|
@ -0,0 +1,63 @@
|
|||
---
|
||||
sidebar_position: 2
|
||||
---
|
||||
|
||||
# Quick Start Guide
|
||||
|
||||
Neko is easy to use and requires no technical expertise to get started. All you need to do is download the Docker image and you're ready to go:
|
||||
|
||||
1. Deploy a server or VPS with public IP address.
|
||||
|
||||
**Recommended Specs:**
|
||||
|
||||
| Resolution | Cores | Ram | Recommendation |
|
||||
|-------------|-------|-------|------------------|
|
||||
| 1024×576@30 | 2 | 2gb | Not Recommended |
|
||||
| 1280x720@30 | 4 | 3gb | Good Performance |
|
||||
| 1280x720@30 | 6 | 4gb | Recommended |
|
||||
| 1280x720@30 | 8 | 4gb+ | Best Performance |
|
||||
|
||||
|
||||
:::danger[Why are the specs so high?]
|
||||
If you think about it, you have to run a full desktop, a browser (a resource hog on its own) *and* encode/transmit the desktop, there's a lot going on and so it demands some power.
|
||||
:::
|
||||
|
||||
:::note
|
||||
Admin can change the resolution in the GUI.
|
||||
:::
|
||||
|
||||
2. [Login via SSH](https://www.digitalocean.com/docs/droplets/how-to/connect-with-ssh/).
|
||||
|
||||
3. Install [Docker](https://docs.docker.com/get-docker/):
|
||||
```shell
|
||||
curl -sSL https://get.docker.com/ | CHANNEL=stable bash
|
||||
```
|
||||
|
||||
4. Install [Docker Compose Plugin](https://docs.docker.com/compose/install/linux/):
|
||||
```shell
|
||||
sudo apt-get update
|
||||
sudo apt-get install docker-compose-plugin
|
||||
```
|
||||
|
||||
5. Download docker compose file and start it:
|
||||
```shell
|
||||
wget https://raw.githubusercontent.com/m1k1o/neko/master/docker-compose.yaml
|
||||
sudo docker compose up -d
|
||||
```
|
||||
|
||||
:::note
|
||||
If you want to run Neko on your local network, you have to add `NEKO_NAT1TO1=<your-local-ip>` to the `docker-compose.yaml` file.
|
||||
:::
|
||||
|
||||
6. Visit the IP address server in your browser and login, the default password is `neko`.
|
||||
|
||||
:::tip
|
||||
Run `nano docker-compose.yaml` to edit the settings, then press `ctrl+x` to exit and save the file.
|
||||
:::
|
||||
|
||||
## Well known cloud providers
|
||||
* [Hetzner Cloud](https://www.hetzner.com/cloud)
|
||||
* [Digital Ocean](https://www.digitalocean.com/)
|
||||
* [Contabo](https://contabo.com/)
|
||||
* [Linode](https://www.linode.com/)
|
||||
* [Vultr](https://www.vultr.com/)
|
7
webpage/docs/getting-started/running-neko.md
Normal file
7
webpage/docs/getting-started/running-neko.md
Normal file
|
@ -0,0 +1,7 @@
|
|||
---
|
||||
sidebar_position: 4
|
||||
---
|
||||
|
||||
# Running Neko
|
||||
|
||||
How to start and manage a Neko instance on different environments.
|
7
webpage/docs/getting-started/troubleshooting.md
Normal file
7
webpage/docs/getting-started/troubleshooting.md
Normal file
|
@ -0,0 +1,7 @@
|
|||
---
|
||||
sidebar_position: 7
|
||||
---
|
||||
|
||||
# Troubleshooting
|
||||
|
||||
Common issues, error messages, and their solutions.
|
7
webpage/docs/getting-started/updating-and-upgrading.md
Normal file
7
webpage/docs/getting-started/updating-and-upgrading.md
Normal file
|
@ -0,0 +1,7 @@
|
|||
---
|
||||
sidebar_position: 6
|
||||
---
|
||||
|
||||
# Updating & Upgrading
|
||||
|
||||
Best practices for keeping Neko updated and migrating between versions.
|
Loading…
Add table
Add a link
Reference in a new issue