From 22e80d9d6c5d1345854a9e0bc09865ce15093550 Mon Sep 17 00:00:00 2001 From: Craig Date: Mon, 10 Feb 2020 00:59:08 +0000 Subject: [PATCH] docs (wip) --- .github/logo.png | Bin 54572 -> 0 bytes README.md | 93 +++---------------------------- client/ABOUT.md | 12 ---- client/README.md | 14 ----- client/src/components/about.vue | 2 +- docs/README.md | 95 +++----------------------------- docs/_coverpage.md | 12 ++++ docs/_media/logo.png | Bin 0 -> 58008 bytes docs/_sidebar.md | 14 +++++ docs/change-logs/README.md | 1 + docs/client.md | 14 +++++ docs/configuration.md | 10 ++++ docs/contributing.md | 1 + docs/development.md | 12 ++++ docs/docker.md | 15 +++++ docs/getting-started.md | 1 + docs/glossary.md | 1 + docs/index.html | 10 +++- docs/non-goals.md | 5 ++ docs/quick-start.md | 33 +++++++++++ docs/server.md | 65 ++++++++++++++++++++++ docs/technologies.md | 1 + server/README.md | 65 ---------------------- 23 files changed, 210 insertions(+), 266 deletions(-) delete mode 100644 .github/logo.png delete mode 100644 client/ABOUT.md delete mode 100644 client/README.md create mode 100644 docs/_media/logo.png create mode 100644 docs/change-logs/README.md create mode 100644 docs/configuration.md create mode 100644 docs/glossary.md create mode 100644 docs/non-goals.md create mode 100644 docs/quick-start.md create mode 100644 docs/technologies.md delete mode 100644 server/README.md diff --git a/.github/logo.png b/.github/logo.png deleted file mode 100644 index 46ffaba934e7206833550a1fba53b9043aeaa325..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 54572 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 diff --git a/README.md b/README.md index 168f01c..bf1154f 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,13 @@
- -
- -
+ +
+
+
+
-# **n**.eko +# n.eko This app uses Web RTC to stream a desktop inside of a docker container, I made this because [rabb.it](https://en.wikipedia.org/wiki/Rabb.it) went under and my internet can't handle streaming and discord keeps crashing when my friend attempts to. I just want to watch anime with my friends ლ(ಠ益ಠლ) so I started digging throughout the internet and found a few *kinda* clones, but none of them had the virtual browser, then I found [Turtus](https://github.com/Khauri/Turtus) and I was able to figure out the rest. This is by no means a fully featured clone of rabbit, it hs only *one* room. It's stateless, so no saved user names or passwords. ### Features @@ -15,87 +16,9 @@ * Clipboard synchronization (on [supported browsers](https://developer.mozilla.org/en-US/docs/Web/API/Clipboard/readText)) * Emote overlay * Ignore user (chat and emotes) - * Settings are saved to local storage + * Persistent settings -### Why **n**.eko? +### Why n.eko? I like cats 🐱 (`Neko` is the Japanese word for cat), I'm a weeb/nerd ***But why the cat butt?*** Because cats are *assholes*, but you love them anyways. - -### Super easy mode setup -1. Deploy a server or VPS - - *Recommended Specs:* - - | Resolution | Cores | Ram | Recommendation | - |------------|-------|-------|------------------| - | **576p** | 2 | 2gb | Not Recommended | - | **720p** | 4 | 4gb | Good Performance | - | **720p** | 6 | 4-6gb | Recommended | - | **720p+** | 8 | 8gb+ | Best Performance | - - ***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. - -2. [Login via SSH](https://www.digitalocean.com/docs/droplets/how-to/connect-with-ssh/) - -3. Install Docker - ``` - curl -sSL https://get.docker.com/ | CHANNEL=stable bash - ``` -4. Run these commands: - ``` - sudo ufw allow 80/tcp // if you have ufw installed/enabled - sudo ufw allow 59000:59100/udp - wget https://raw.githubusercontent.com/nurdism/neko/master/docker-compose.yaml - sudo docker-compose up -d - ``` -5. Visit the IP address server in your browser and login, the default password is `neko` - -> 💡 **Protip**: Run `nano docker-compose.yaml` to edit the settings, then press *ctrl+x* to exit and save the file. - -### Running: -#### Chromium container: -``` -sudo docker run -p 80:8080 -p 59000-59100:59000-59100/udp -e NEKO_PASSWORD='secret' -e NEKO_ADMIN='secret' --cap-add SYS_ADMIN nurdism/neko:chromium -``` -*Note:* `--cap-add SYS_ADMIN` is required for chromium to run properly - ----- -#### Firefox container: -``` -sudo docker run -p 8080:8080 -p 59000-59100:59000-59100/udp -e NEKO_PASSWORD='secret' -e NEKO_ADMIN='secret' --shm-size=1gb nurdism/neko:firefox -``` -*Note:* `--shm-size=1gb` is required for firefox, tabs will crash otherwise - - -### Docker Basic Configuration -``` -SCREEN_WIDTH=1280 // Display width -SCREEN_HEIGHT=720 // Display height -SCREEN_DEPTH=24 // Display bit depth -DISPLAY=:99.0 // Display number - -NEKO_PASSWORD=neko // Password -NEKO_ADMIN=neko // Admin Password -NEKO_BIND=0.0.0.0:8080 // Bind -NEKO_KEY= // (SSL)Key, needed for clipboard sync -NEKO_CERT= // (SSL)Cert, needed for clipboard sync -``` -for full documentation on configuring the server [go here](./server/README.md) - -### Development -*Highly* recommend you use a [dev container](https://code.visualstudio.com/docs/remote/containers) for [vscode](https://code.visualstudio.com/), I've included the `.devcontainer` I've used to develop this app. To build **n**.eko docker container run: -``` -cd .docker && ./build docker -``` -the `.docker` folder also contains `./test ` bash script which will launch a desktop with a browser for testing out any changes with the server. - -To run the client with hot loading (for development of new client features) -``` -cd ./client && npm run serve -``` - -### Non Goals -* Turning n.eko into a service that serves multiple rooms and browsers/desktops. -* Supporting multiple platforms -* Voice chat, use [Discord](https://discordapp.com/) \ No newline at end of file diff --git a/client/ABOUT.md b/client/ABOUT.md deleted file mode 100644 index 0b635e2..0000000 --- a/client/ABOUT.md +++ /dev/null @@ -1,12 +0,0 @@ -
- -# **n**.eko - This app uses Web RTC to stream a desktop inside of a docker container, I made this because [rabb.it](https://en.wikipedia.org/wiki/Rabb.it) went under and my internet can't handle streaming and discord keeps crashing when my friend attempts to. I just want to watch anime with my friends ლ(ಠ益ಠლ) so I started digging throughout the internet and found a few *kinda* clones, but none of them had the virtual browser, then I found [Turtus](https://github.com/Khauri/Turtus) and I was able to figure out the rest. This is by no means a fully featured clone of rabbit, it hs only *one* room. It's stateless, so no saved user names or passwords. - -### Why **n**.eko? -I like cats 🐱 (`Neko` is the Japanese word for cat), I'm a weeb/nerd - -***But why the cat butt?*** Because cats are *assholes*, but you love them anyways. - diff --git a/client/README.md b/client/README.md deleted file mode 100644 index 58f9949..0000000 --- a/client/README.md +++ /dev/null @@ -1,14 +0,0 @@ -# **n**.eko client -Web client for n.eko - -### Environment ------- -``` -VUE_APP_SERVER_PORT // development server port -``` - -### Building ------- -``` -npm install && npm run build -``` diff --git a/client/src/components/about.vue b/client/src/components/about.vue index c94562c..1449ef5 100644 --- a/client/src/components/about.vue +++ b/client/src/components/about.vue @@ -147,7 +147,7 @@ if (this.about === '') { this.loading = true this.$http - .get('https://raw.githubusercontent.com/nurdism/neko/master/client/ABOUT.md') + .get('https://raw.githubusercontent.com/nurdism/neko/master/docs/README.md') .then(res => { return this.$http.post('https://api.github.com/markdown', { text: res.data, diff --git a/docs/README.md b/docs/README.md index 0dc9b42..bf1154f 100644 --- a/docs/README.md +++ b/docs/README.md @@ -1,101 +1,24 @@
- -
- -
+ +
+
+
+
-# **n**.eko +# n.eko This app uses Web RTC to stream a desktop inside of a docker container, I made this because [rabb.it](https://en.wikipedia.org/wiki/Rabb.it) went under and my internet can't handle streaming and discord keeps crashing when my friend attempts to. I just want to watch anime with my friends ლ(ಠ益ಠლ) so I started digging throughout the internet and found a few *kinda* clones, but none of them had the virtual browser, then I found [Turtus](https://github.com/Khauri/Turtus) and I was able to figure out the rest. This is by no means a fully featured clone of rabbit, it hs only *one* room. It's stateless, so no saved user names or passwords. ### Features * Text Chat (With basic markdown support, discord flavor) * Admin users (Kick, Ban & Force Give/Release Controls) - * Clipboard synchronization + * Clipboard synchronization (on [supported browsers](https://developer.mozilla.org/en-US/docs/Web/API/Clipboard/readText)) * Emote overlay * Ignore user (chat and emotes) - * Settings are saved to local storage + * Persistent settings -### Why **n**.eko? +### Why n.eko? I like cats 🐱 (`Neko` is the Japanese word for cat), I'm a weeb/nerd ***But why the cat butt?*** Because cats are *assholes*, but you love them anyways. - -### Super easy mode setup -1. Deploy a server or VPS - - *Recommended Specs:* - - | Resolution | Cores | Ram | Recommendation | - |------------|-------|-------|------------------| - | **576p** | 2 | 2gb | Not Recommended | - | **720p** | 4 | 4gb | Good Performance | - | **720p** | 6 | 4-6gb | Recommended | - | **720p+** | 8 | 8gb+ | Best Performance | - - ***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. - -2. [Login via SSH](https://www.digitalocean.com/docs/droplets/how-to/connect-with-ssh/) - -3. Install Docker - ``` - curl -sSL https://get.docker.com/ | CHANNEL=stable bash - ``` -4. Run these commands: - ``` - sudo ufw allow 80/tcp // if you have ufw installed/enabled - sudo ufw allow 59000:59100/udp - wget https://raw.githubusercontent.com/nurdism/neko/master/docker-compose.yaml - sudo docker-compose up -d - ``` -5. Visit the IP address your server in your browser and login, the default password is `neko` - -> 💡 **Protip**: Run `nano docker-compose.yaml` to edit the settings, then press *ctrl+x* to exit and save the file. - -### Running: -#### Chromium container: -``` -sudo docker run -p 80:8080 -p 59000-59100:59000-59100/udp -e NEKO_PASSWORD='secret' -e NEKO_ADMIN='secret' --cap-add SYS_ADMIN nurdism/neko:chromium -``` -*Note:* `--cap-add SYS_ADMIN` is required for chromium to run properly - ----- -#### Firefox container: -``` -sudo docker run -p 8080:8080 -p 59000-59100:59000-59100/udp -e NEKO_PASSWORD='secret' -e NEKO_ADMIN='secret' --shm-size=1gb nurdism/neko:firefox -``` -*Note:* `--shm-size=1gb` is required for firefox, tabs will crash otherwise - - -### Docker Basic Configuration -``` -SCREEN_WIDTH=1280 // Display width -SCREEN_HEIGHT=720 // Display height -SCREEN_DEPTH=24 // Display bit depth -DISPLAY=:99.0 // Display number - -NEKO_PASSWORD=neko // Password -NEKO_ADMIN=neko // Admin Password -NEKO_BIND=0.0.0.0:8080 // Bind -NEKO_KEY= // (SSL)Key, needed for clipboard sync -NEKO_CERT= // (SSL)Cert, needed for clipboard sync -``` -for full documentation on configuring the server [go here](./server/README.md) - -### Development -*Highly* recommend you use a [dev container](https://code.visualstudio.com/docs/remote/containers) for [vscode](https://code.visualstudio.com/), I've included the `.devcontainer` I've used to develop this app. To build **n**.eko docker container run: -``` -cd .docker && ./build docker -``` -the `.docker` folder also contains `./test ` bash script which will launch a desktop with a browser for testing out any changes with the server. - -To run the client with hot loading (for development of new client features) -``` -cd ./client && npm run serve -``` - -### Non Goals -* Turning n.eko into a service that serves multiple rooms and browsers/desktops. -* Supporting multiple platforms -* Voice chat, use [Discord](https://discordapp.com/) \ No newline at end of file diff --git a/docs/_coverpage.md b/docs/_coverpage.md index e69de29..3d06b42 100644 --- a/docs/_coverpage.md +++ b/docs/_coverpage.md @@ -0,0 +1,12 @@ + + + + +> A self hosted virtual browser that runs in docker + +[GitHub](https://github.com/nurdism/neko/) +[Get Started](#neko) + + + +![color](#18191c) \ No newline at end of file diff --git a/docs/_media/logo.png b/docs/_media/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..a611a7ba56beaafe79c9e58652abc6bdea00c292 GIT binary patch literal 58008 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 + +* [Getting Started](/getting-started) + * [Quick Start](/quick-start) + * [Configuration](/configuration) +* [Development](/development) + * [Client](/client) + * [Server](/server) + * [Docker](/docker) + * [Non Goals](/non-goals) + * [Contributing](/contributing) + * [Change logs](/change-logs/) +* [Technologies](/technologies) +* [Glossary](/glossary) \ No newline at end of file diff --git a/docs/change-logs/README.md b/docs/change-logs/README.md new file mode 100644 index 0000000..0ad0430 --- /dev/null +++ b/docs/change-logs/README.md @@ -0,0 +1 @@ +# Change logs (WIP) \ No newline at end of file diff --git a/docs/client.md b/docs/client.md index e69de29..9c0e17e 100644 --- a/docs/client.md +++ b/docs/client.md @@ -0,0 +1,14 @@ +# Client (WIP) +Web client for n.eko + +## Environment +------ +``` +VUE_APP_SERVER_PORT // development server port +``` + +## Building +------ +``` +npm install && npm run build +``` diff --git a/docs/configuration.md b/docs/configuration.md new file mode 100644 index 0000000..ed163ad --- /dev/null +++ b/docs/configuration.md @@ -0,0 +1,10 @@ +# Configuration (WIP) + +## Docker Basic Configuration +``` +NEKO_PASSWORD=neko // Password +NEKO_ADMIN=neko // Admin Password +NEKO_BIND=0.0.0.0:8080 // Bind +NEKO_KEY= // (SSL) Key, needed for clipboard sync +NEKO_CERT= // (SSL) Cert, needed for clipboard sync +``` \ No newline at end of file diff --git a/docs/contributing.md b/docs/contributing.md index e69de29..5fed753 100644 --- a/docs/contributing.md +++ b/docs/contributing.md @@ -0,0 +1 @@ +# Contributing (WIP) diff --git a/docs/development.md b/docs/development.md index e69de29..ee58f8e 100644 --- a/docs/development.md +++ b/docs/development.md @@ -0,0 +1,12 @@ +# Development (WIP) + +*Highly* recommend you use a [dev container](https://code.visualstudio.com/docs/remote/containers) for [vscode](https://code.visualstudio.com/), I've included the `.devcontainer` I've used to develop this app. To build **n**.eko docker container run: +``` +cd .docker && ./build docker +``` +the `.docker` folder also contains `./test ` bash script which will launch a desktop with a browser for testing out any changes with the server. + +To run the client with hot loading (for development of new client features) +``` +cd ./client && npm run serve +``` \ No newline at end of file diff --git a/docs/docker.md b/docs/docker.md index e69de29..ea53e15 100644 --- a/docs/docker.md +++ b/docs/docker.md @@ -0,0 +1,15 @@ +# Docker (WIP) + +## Running: +### Chromium container: +``` +sudo docker run -p 80:8080 -p 59000-59100:59000-59100/udp -e NEKO_PASSWORD='secret' -e NEKO_ADMIN='secret' --cap-add SYS_ADMIN --shm-size=1gb nurdism/neko:chromium +``` +*Note:* `--cap-add SYS_ADMIN` & `--shm-size=1gb` is required for chromium to run properly + +---- +### Firefox container: +``` +sudo docker run -p 8080:8080 -p 59000-59100:59000-59100/udp -e NEKO_PASSWORD='secret' -e NEKO_ADMIN='secret' --shm-size=1gb nurdism/neko:firefox +``` +*Note:* `--shm-size=1gb` is required for firefox, tabs will crash otherwise \ No newline at end of file diff --git a/docs/getting-started.md b/docs/getting-started.md index e69de29..4f99903 100644 --- a/docs/getting-started.md +++ b/docs/getting-started.md @@ -0,0 +1 @@ +# Getting Started (WIP) diff --git a/docs/glossary.md b/docs/glossary.md new file mode 100644 index 0000000..69a11b9 --- /dev/null +++ b/docs/glossary.md @@ -0,0 +1 @@ +# Glossary (WIP) diff --git a/docs/index.html b/docs/index.html index e26d503..8fccd9a 100644 --- a/docs/index.html +++ b/docs/index.html @@ -6,17 +6,21 @@ - +
diff --git a/docs/non-goals.md b/docs/non-goals.md new file mode 100644 index 0000000..381d12f --- /dev/null +++ b/docs/non-goals.md @@ -0,0 +1,5 @@ +# Non Goals (WIP) + +* Turning n.eko into a service that serves multiple rooms and browsers/desktops. +* Supporting multiple platforms +* Voice chat, use [Discord](https://discordapp.com/) \ No newline at end of file diff --git a/docs/quick-start.md b/docs/quick-start.md new file mode 100644 index 0000000..28509c7 --- /dev/null +++ b/docs/quick-start.md @@ -0,0 +1,33 @@ +# Quick Start (WIP) + +1. Deploy a server or VPS + + **Recommended Specs:** + + | Resolution | Cores | Ram | Recommendation | + |-------------|-------|-------|------------------| + | 1024×576@30 | 2 | 2gb | Not Recommended | + | 1280x720@30 | 4 | 4gb | Good Performance | + | 1280x720@30 | 6 | 4-6gb | Recommended | + | 1280x720@30 | 8 | 8gb+ | Best Performance | + + *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:* changing the resolution will require additional setup + +2. [Login via SSH](https://www.digitalocean.com/docs/droplets/how-to/connect-with-ssh/) + +3. Install Docker + ```shell + curl -sSL https://get.docker.com/ | CHANNEL=stable bash + ``` +4. Run these commands: + ```shell + sudo ufw allow 80/tcp # if you have ufw installed/enabled + sudo ufw allow 59000:59100/udp + wget https://raw.githubusercontent.com/nurdism/neko/master/docker-compose.yaml + sudo docker-compose up -d + ``` +5. Visit the IP address server in your browser and login, the default password is `neko` + +> 💡 **Protip**: Run `nano docker-compose.yaml` to edit the settings, then press `ctrl+x` to exit and save the file. \ No newline at end of file diff --git a/docs/server.md b/docs/server.md index e69de29..b2a8489 100644 --- a/docs/server.md +++ b/docs/server.md @@ -0,0 +1,65 @@ +# Server (WIP) +Server for n.eko, as of right now this will *only* work on Linux systems, only tested on Debian based distros. + +## Configuration +------ +``` +--debug // (bool) enable debug mode +--logs // (bool) save logs to file +--config "" // (string) configuration file path +--bind "127.0.0.1:8080" // (string) address/port/socket to serve neko +--cert "" // (string) path to the SSL cert used to secure the neko server +--key "" // (string) path to the SSL key used to secure the neko server +--static "./www" // (string) path to neko client files to serve +--device "auto_null.monitor" // (string) audio device to capture +--display ":99.0" // (string) XDisplay to capture +--aduio "" // (string) audio codec parameters to use for streaming (unused) +--video "" // (string) video codec parameters to use for streaming (unused) +--epr "59000-59100" // (string) limits the pool of ephemeral ports that ICE UDP connections can allocate from +--vp8 // (bool) use VP8 video codec +--vp9 // (bool) use VP9 video codec +--h264 // (bool) use H264 video codec +--opus // (bool) use Opus audio codec +--g722 // (bool) use G722 audio codec +--pcmu // (bool) use PCMU audio codec +--pcma // (bool) use PCMA audio codec +--password "neko" // (string) password for connecting to stream +--admin "admin" // (string) admin password for connecting to stream +``` + +Config can be set via environment variables with the prefix `NEKO_` (I.E. NEKO_BIND="127.0.0.1:8080") + +## Requirements +------ +Runtime: +``` +gstreamer1.0-plugins-base // opus plugin +gstreamer1.0-plugins-good // pulseaudio, ximagesrc & vpx plugins +gstreamer1.0-plugins-bad // openh264 plugin (build from source) +gstreamer1.0-plugins-ugly // x264 plugin +gstreamer1.0-pulseaudio // pulseaudio plugin +xclip // clipboard sync +libxtst6 // keyboard and mouse input +``` + +Development: +``` +libxtst-dev +``` + +## Testing +------ +located in `.docker` folder +``` +./test firefox // creates an x server, puleseaudio server add firefox instance +./test chromium // creates an x server, puleseaudio server add chromium instance +``` + +## Building +------ +located in `.docker` folder +``` +./build gst // builds the required gst packages in `.build/gst/` +./build docker // builds the docker images +./build push // pushes the images to docker hub +``` diff --git a/docs/technologies.md b/docs/technologies.md new file mode 100644 index 0000000..6a58e22 --- /dev/null +++ b/docs/technologies.md @@ -0,0 +1 @@ +# Technologies (WIP) \ No newline at end of file diff --git a/server/README.md b/server/README.md deleted file mode 100644 index 53831a8..0000000 --- a/server/README.md +++ /dev/null @@ -1,65 +0,0 @@ -# **n**.eko server -Server for n.eko, as of right now this will *only* work on Linux systems, only tested on Debian based distros. - -### Configuration ------- -``` ---debug // (bool) enable debug mode ---logs // (bool) save logs to file ---config "" // (string) configuration file path ---bind "127.0.0.1:8080" // (string) address/port/socket to serve neko ---cert "" // (string) path to the SSL cert used to secure the neko server ---key "" // (string) path to the SSL key used to secure the neko server ---static "./www" // (string) path to neko client files to serve ---device "auto_null.monitor" // (string) audio device to capture ---display ":99.0" // (string) XDisplay to capture ---aduio "" // (string) audio codec parameters to use for streaming (unused) ---video "" // (string) video codec parameters to use for streaming (unused) ---epr "59000-59100" // (string) limits the pool of ephemeral ports that ICE UDP connections can allocate from ---vp8 // (bool) use VP8 video codec ---vp9 // (bool) use VP9 video codec ---h264 // (bool) use H264 video codec ---opus // (bool) use Opus audio codec ---g722 // (bool) use G722 audio codec ---pcmu // (bool) use PCMU audio codec ---pcma // (bool) use PCMA audio codec ---password "neko" // (string) password for connecting to stream ---admin "admin" // (string) admin password for connecting to stream -``` - -Config can be set via environment variables with the prefix `NEKO_` (I.E. NEKO_BIND="127.0.0.1:8080") - -### Requirements ------- -Runtime: -``` -gstreamer1.0-plugins-base // opus plugin -gstreamer1.0-plugins-good // pulseaudio, ximagesrc & vpx plugins -gstreamer1.0-plugins-bad // openh264 plugin (build from source) -gstreamer1.0-plugins-ugly // x264 plugin -gstreamer1.0-pulseaudio // pulseaudio plugin -xclip // clipboard sync -libxtst6 // keyboard and mouse input -``` - -Development: -``` -libxtst-dev -``` - -### Testing ------- -located in `.docker` folder -``` -./test firefox // creates an x server, puleseaudio server add firefox instance -./test chromium // creates an x server, puleseaudio server add chromium instance -``` - -### Building ------- -located in `.docker` folder -``` -./build gst // builds the required gst packages in `.build/gst/` -./build docker // builds the docker images -./build push // pushes the images to docker hub -```
- -