diff --git a/Install.md b/Install.md new file mode 100644 index 0000000..603c7c2 --- /dev/null +++ b/Install.md @@ -0,0 +1,128 @@ +# Installing BareRTC + +This document will explain how to download and install BareRTC on your own web server. + +At this time, BareRTC is not released as a versioned pre-built archive, but as source code. This may change in the future but for now you'll need to git clone or download the source code and compile it, all of which should be easy to do on a Linux or macOS server. + +- [Installing BareRTC](#installing-barertc) + - [Requirements \& Dependencies](#requirements--dependencies) + - [Installation](#installation) + - [Deploying to Production](#deploying-to-production) + - [Developing This App](#developing-this-app) +- [License](#license) + + +## Requirements & Dependencies + +To run BareRTC on your own website, you will generally need: + +* A dedicated server or VPS for your web hosting, e.g. with root access to the console to be able to install and configure software. + * Any Linux distribution or a macOS server will work. You may be able to use a Windows server but this is out of scope for this document and you're on your own there. + * The BareRTC server is written in pure Go so any platform that the Go language can compile for should work. + * Note: if you don't have access to manage your server (e.g. you are on a shared web hosting plan with only FTP upload access), you **will not** be able to run BareRTC. +* Recommended: a reverse proxy server like NGINX. + +Your server may need programming languages for Go and JavaScript (node.js) in order to compile BareRTC and build its front-end javascript app. + +```bash +# Debian or Ubuntu +sudo apt update +sudo apt install golang nodejs npm + +# Fedora +sudo dnf install golang nodejs npm + +# Mac OS (with homebrew, https://brew.sh) +brew install golang nodejs npm +``` + +## Installation + +The recommended method is to use **git** to download a clone of the source code repository. This way you can update the app by running a `git pull` command to get the latest source. + +```bash +# Clone the git repository and change +git clone https://git.kirsle.net/apps/BareRTC +cd BareRTC/ + +# Compile the front-end javascript single page app +npm install +npm run build + +# Compile the back-end Go app to ./BareRTC +make build + +# Or immediately run the app from Go source code now +# Listens on http://localhost:9000 +make run + +# Command line interface to run the binary: +./BareRTC -address :9000 -debug +``` + +You can also download the repository as a ZIP file or tarball, though updating the code for future versions of BareRTC is a more manual process then. + +* ZIP download: https://git.kirsle.net/apps/BareRTC/archive/master.zip +* Tarball: https://git.kirsle.net/apps/BareRTC/archive/master.tar.gz + + +## Deploying to Production + +It is recommended to use a reverse proxy such as nginx in front of this app. You will need to configure nginx to forward WebSocket related headers: + +```nginx +server { + server_name chat.example.com; + listen 443 ssl http2; + listen [::]:443 ssl http2; + + ssl_certificate /etc/letsencrypt/live/chat.example.com/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/chat.example.com/privkey.pem; + + # Proxy pass to BareRTC. + location / { + proxy_pass http://127.0.0.1:9000; + + # WebSocket headers to forward along. + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "Upgrade"; + proxy_set_header Host $host; + } +} +``` + +You can run the BareRTC app itself using any service supervisor you like. I use [Supervisor](http://supervisord.org/introduction.html) and you can configure BareRTC like so: + +```ini +# /etc/supervisor/conf.d/barertc.conf +[program:barertc] +command = /home/user/git/BareRTC/BareRTC -address 127.0.0.1:9000 +directory = /home/user/git/BareRTC +user = user +``` + +Then `sudo supervisorctl reread && sudo supervisorctl add barertc` to start the app. + +## Developing This App + +In local development you'll probably run two processes in your terminal: one to `npm run watch` the Vue.js app and the other to run the Go server. + +Building and running the front-end app: + +```bash +# Install dependencies +npm install + +# Build the front-end +npm run build + +# Run the front-end in watch mode for local dev +npm run watch +``` + +And `make run` to run the Go server. + +# License + +GPLv3. diff --git a/README.md b/README.md index fcb489b..6aa0560 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,7 @@ BareRTC is a simple WebRTC-based chat room application. It is especially designe It is very much in the style of the old-school Flash based webcam chat rooms of the early 2000's: a multi-user chat room with DMs and _some_ users may broadcast video and others may watch multiple video feeds in an asynchronous manner. I thought that this should be such an obvious free and open source app that should exist, but it did not and so I had to write it myself. - [BareRTC](#barertc) +- [Installation](#installation) - [Features](#features) - [Configuration](#configuration) - [Authentication](#authentication) @@ -23,6 +24,10 @@ It is very much in the style of the old-school Flash based webcam chat rooms of - [Developing This App](#developing-this-app) - [License](#license) +# Installation + +See the [Install.md](./Install.md) for installation help. + # Features * Specify multiple Public Channels that all users have access to.