Try to improve documentations/readme
authorChocobozzz <me@florianbigard.com>
Fri, 12 Jan 2018 17:07:41 +0000 (18:07 +0100)
committerChocobozzz <me@florianbigard.com>
Fri, 12 Jan 2018 17:07:41 +0000 (18:07 +0100)
12 files changed:
.github/CONTRIBUTING.md
.github/ISSUE_TEMPLATE.md
ARCHITECTURE.md
FAQ.md
README.md
package.json
scripts/check.ts [deleted file]
support/doc/dependencies.md [new file with mode: 0644]
support/doc/development/client/code.md
support/doc/development/server/code.md
support/doc/production.md [new file with mode: 0644]
support/systemd/peertube.service

index 98908772891f70861667bddc66de988d9de27976..dec6a5cd03fd6f3c126818e13d0e0b17dcb4c462 100644 (file)
@@ -1,14 +1,12 @@
 # Welcome to the contributing guide for PeerTube
 
-Interesting in contributing? Awesome :)
+Interesting in contributing? Awesome!
 
 **Quick Links:**
 
   * [Give your feedback](#give-your-feedback)
-  * [Develop on the Server side](#develop-on-the-server-side)
-  * [Develop on the Client side](#develop-on-the-client-side)
-  * [Get started with development](#get-started-with-development)
   * [Write documentation](#write-documentation)
+  * [Develop](#develop)
 
 
 ## Give your feedback
@@ -16,40 +14,32 @@ Interesting in contributing? Awesome :)
 You don't need to know how to code to start contributing to PeerTube! Other
 contributions are very valuable too, among which: you can test the software and
 report bugs, you can give feedback on potential bugs, features that you are
-interested in, user interace, design, decentralized architecture...
+interested in, user interface, design, decentralized architecture...
 
 
-## Development
-
-## Develop on the Server side
+## Write documentation
 
-The server is a web server developed with
-[NodeJS](https://nodejs.org)/[Express](http://expressjs.com).
+You can help to write the documentation of the REST API, code, architecture,
+demonstrations...
 
-Newcomer? You can find a documentation of the server code/architecture
-[here](https://github.com/Chocobozzz/PeerTube/blob/master/support/doc/server/code.md).
+## Develop
 
 Don't hesitate to talk about features you want to develop by creating an issue
 before you start working on them :).
 
+### Prerequisites
 
-## Develop on the Client side
-
-The client is a web application developed with
-[TypeScript](https://www.typescriptlang.org/)/[Angular2](https://angular.io/).
-
-Newcomer? You can find a documentation of the server code/architecture
-[here](https://github.com/Chocobozzz/PeerTube/blob/master/support/doc/client/code.md).
-
-
-## Get started with development
-
-In this mode, the server will run requests between instances more quickly, the
-video durations are limited to a few seconds.
+First, make sure that you have followed 
+[the steps](/support/doc/dependencies.md) 
+to install the dependencies.
 
-### Prerequisites
+Then clone the sources and install node modules:
 
-First, make sure that you have followed the steps to install the dependencies.
+```bash
+$ git clone -b master https://github.com/Chocobozzz/PeerTube
+$ cd PeerTube
+$ yarn install --pure-lockfile
+```
 
 Then, create a postgres database and user with the values set in the
 `config/default.yaml` file. For instance, if you do not change the values
@@ -57,40 +47,51 @@ there, the following commands would create a new database called `peertube_dev`
 and a postgres user called `peertube` with password `peertube`:
 
 ```bash
-    # sudo -u postgres createuser -P peertube
-    Enter password for new role: peertube
-    # sudo -u postgres createdb -O peertube peertube_dev
+# sudo -u postgres createuser -P peertube
+Enter password for new role: peertube
+# sudo -u postgres createdb -O peertube peertube_dev
 ```
 
+In dev mode, administrator username is **root** and password is **test**.
+
 ### Server side
 
+You can find a documentation of the server code/architecture [here](/support/doc/development/server/code.md).
+
 To develop on the server-side:
 
 ```bash
-    $ npm run dev:server
+$ npm run dev:server
 ```
 
 Then, the server will listen on `localhost:9000`. When server source files
 change, these are automatically recompiled and the server will automatically
-restart.
+restart. Server is in `TEST` mode so it will run requests between instances more quickly.
 
 ### Client side
 
+You can find a documentation of the server code/architecture
+[here](/support/doc/development/client/code.md).
+
+
 To develop on the client side:
 
 ```bash
-    $ npm run dev:client
+$ npm run dev:client
 ```
 
 The API will listen on `localhost:9000` and the frontend on `localhost:3000`.
 Client files are automatically compiled on change, and the web browser will
 reload them automatically thanks to hot module replacement.
 
-**Username**: *root* <br/>
-**Password**: *test*
+### Test federation
 
+This will run 3 nodes:
 
-## Write documentation
+```bash
+$ npm run clean:server:test
+$ npm run play
+```
 
-You can help to write the documentation of the REST API, code, architecture,
-demonstrations...
+Then you will get access to the three nodes at `http://localhost:900{1,2,3}`
+with the `root` as username and `test{1,2,3}` for the password.
index 74ea709397b9b916ff9d659d3f5d5e847d069b08..c6f2dd06406e25c9952002a712f868dc9d9a8f4a 100644 (file)
@@ -1,10 +1,15 @@
-<!--
-  Problem with the demonstration server?
-    -> Please retry in a few hours or send me directly an email: https://github.com/Chocobozzz
-  Bug?
-    -> Please check first you're running on the latest version of Firefox/Chromium
-    -> Please check the console log to add informations to the bug report
--->
-
-* Browser name/version:
-* Console log if useful (Gist/Pastebin...):
+<!-- If you report a bug please fill the form -->
+
+* **PeerTube version or commit:**
+* **Browser name/version:**
+* **NodeJS version:**
+* **PostgreSQL version:**
+
+
+* **What is the expected behaviour?**
+* **What do you see instead?**
+
+
+* **Browser console log if useful (Gist/Pastebin...):**
+* **Server log if useful (Gist/Pastebin...):**
+
index cf0dcfacdba1cd1b004a1366d21bb1cbf183a362..160d6fc4f5ad0116d1ce6a544a3b82c888a6b9c0 100644 (file)
@@ -18,7 +18,7 @@
   * We use the [ActivityPub](https://www.w3.org/TR/activitypub/) protocol (only
     server-server for now). Object models could be found in
     [shared/models/activitypub
-    directory](https://github.com/Chocobozzz/PeerTube/tree/develop/shared/models/activitypub).
+    directory](/shared/models/activitypub).
   * All the requests are retried several times if they fail.
 
 ### Instance
diff --git a/FAQ.md b/FAQ.md
index 06c86ce1018fc73ed086999f2ffcae1a9fcb1bda..1bcd6006a90e5af580546d88228c0566ddb554cf 100644 (file)
--- a/FAQ.md
+++ b/FAQ.md
@@ -31,9 +31,9 @@ We think it is acceptable for a video platform.
 WEBM, MP4 or OGV videos.
 
 
-## I want to change my host or move to HTTPS, how can I do that?
+## I want to change my host, how can I do that?
 
 If you already have followers, you can't.
 
 If you don't have any followers, update your configuration and run
-`NODE_ENV=production npm run update-host` to update the torrent files.
+`NODE_ENV=production npm run update-host` to update the torrent files (they contain your domain name).
index 094d81c4af6270d81032178cad8fcbebafed1a36..7972fbed8d4083c056413590b15200d12fd656c0 100644 (file)
--- a/README.md
+++ b/README.md
@@ -64,13 +64,12 @@ donating them](https://soutenir.framasoft.org/en/).**
 
 Want to see it in action?
 
-   * [Demo server](http://peertube.cpy.re)
+   * Demonstration servers:
+     * [peertube.cpy.re](http://peertube.cpy.re) 
+     * [peertube2.cpy.re](http://peertube2.cpy.re) 
+     * [peertube3.cpy.re](http://peertube3.cpy.re)
    * [Video](https://peertube.cpy.re/videos/watch/f78a97f8-a142-4ce1-a5bd-154bf9386504)
      to see how the "decentralization feature" looks like
-   * Experimental demo servers that share videos (they are in the same
-     network): [peertube2](http://peertube2.cpy.re),
-     [peertube3](http://peertube3.cpy.re). Since I do experiments with them,
-     sometimes they might not work correctly.
 
 ## Why
 
@@ -83,12 +82,11 @@ So we need to have a decentralized network of servers seeding videos (as
 enough because one video could become famous and overload the server.  It's the
 reason why we need to use a P2P protocol to limit the server load.  Thanks to
 [WebTorrent](https://github.com/feross/webtorrent), we can make P2P (thus
-bittorrent) inside the web browser, as of today.
+BitTorrent) inside the web browser, as of today.
 
 ## Features
 
-- [X] Frontend
-  - [X] Angular frontend
+- [X] Angular frontend
 - [X] Join the fediverse
   - [X] Follow other instances
   - [X] Unfollow an instance
@@ -103,8 +101,8 @@ bittorrent) inside the web browser, as of today.
 - [X] OpenGraph tags
 - [X] OEmbed
 - [X] Update video
-- [X] Videos view counter
-- [X] Videos likes/dislikes
+- [X] Federated videos view counter
+- [X] Federated videos likes/dislikes
 - [X] Transcoding to different definitions
 - [X] Download file/torrent
 - [X] User video bytes quota
@@ -115,140 +113,32 @@ bittorrent) inside the web browser, as of today.
 - [X] User registration
 - [X] Video privacy settings (public, unlisted or private)
 - [X] Signaling a video to the admin origin PeerTube instance
-- [ ] Videos comments
+- [X] Federated videos comments
+- [ ] Video imports (URL, Torrent, YouTube...)
+- [ ] Advanced search
+- [ ] Subtitles
 - [ ] User playlist
 - [ ] User subscriptions (by tags, author...)
 - [ ] Add "DDOS" security
 
 
-## Installation
+## Front compatibility
 
-See [wiki](https://github.com/Chocobozzz/PeerTube/wiki) for complete
-installation commands.
+  * Firefox
+  * Chrome/Chromium
 
-### Front compatibility
-
-  * Chromium
-  * Firefox (>= 42 for MediaSource support)
-
-### Dependencies
+## Dependencies
 
+  * nginx
+  * PostgreSQL
   * **NodeJS >= 8.x**
   * yarn
   * OpenSSL (cli)
-  * PostgreSQL
   * FFmpeg
 
-#### Debian
-
-  1. Install NodeJS 8.x (current LTS):
-     [https://nodejs.org/en/download/package-manager/#debian-and-ubuntu-based-linux-distributions](https://nodejs.org/en/download/package-manager/#debian-and-ubuntu-based-linux-distributions)
-  2. Install yarn:
-     [https://yarnpkg.com/en/docs/install](https://yarnpkg.com/en/docs/install)
-  4. Run:
-
-```bash
-    $ apt-get update
-    $ apt-get install ffmpeg postgresql openssl
-```
-
-#### Ubuntu 16.04
-
-  1. Install NodeJS 8.x (current LTS): (same as Debian)
-  2. Install yarn: (same as Debian)
-  3. Run:
-
-```bash
-    $ apt-get update
-    $ apt-get install ffmpeg postgresql openssl
-```
-
-#### Arch Linux
-
-  1. Run:
-
-```bash
-    $ pacman -S nodejs yarn ffmpeg postgresql openssl
-```
-
-#### Other distributions
-
-Feel free to update this README file in a pull request!
-
-### Build from the sources
-
-```bash
-    $ git clone -b master https://github.com/Chocobozzz/PeerTube
-    $ cd PeerTube
-    $ yarn install
-    $ npm run build
-```
-
-## Usage
-
-### Production
-
-If you want to run PeerTube in production (which might be a bad idea for now :) ):
-
-```bash
-    $ cp config/production.yaml.example config/production.yaml
-```
-
-Then edit the `config/production.yaml` file according to your webserver
-configuration. Keys set in this file will override those of
-`config/default.yml`.
-
-Finally, run the server with the `NODE_ENV` environment variable set to
-`production`:
-
-```bash
-    $ NODE_ENV=production npm start
-```
-
-The administrator password is automatically generated and can be found in the
-logs. You can set another password with:
-
-```bash
-    $ NODE_ENV=production npm run reset-password -- -u root
-```
-
-**Nginx template** (reverse proxy): https://github.com/Chocobozzz/PeerTube/tree/master/support/nginx <br />
-**Systemd template**: https://github.com/Chocobozzz/PeerTube/tree/master/support/systemd
-
-You can check the application (CORS headers, tracker websocket...) by running:
-
-```bash
-    $ NODE_ENV=production npm run check
-```
-
-### Upgrade
-
-The following commands will upgrade the source (according to your current
-branch), upgrade node modules and rebuild client application:
-
-```bash
-    # systemctl stop peertube
-    $ npm run upgrade-peertube
-    # systemctl start peertube
-```
-
-### Test with three fresh nodes
-
-```bash
-    $ npm run clean:server:test
-    $ npm run play
-```
-
-Then you will get access to the three nodes at `http://localhost:900{1,2,3}`
-with the `root` as username and `test{1,2,3}` for the password.
-
-### Other commands
-
-To print all available commands, run:
+## Production
 
-```bash
-    $ npm run help
-```
+See the [production guide](support/doc/production.md).
 
 ## Contributing
 
index 8f72daa4d15f1c791463b5944096331d5bdcd673..efe03dc04f8763332bbe5e177d72ed0d86f9683e 100644 (file)
@@ -34,7 +34,6 @@
     "dev:server": "scripty",
     "dev:client": "scripty",
     "start": "node dist/server",
-    "check": "ts-node ./scripts/check.ts",
     "upgrade-peertube": "scripty",
     "upgrade": "echo 'This command was renamed to upgrade-peertube.'",
     "update-host": "ts-node ./scripts/update-host.ts",
diff --git a/scripts/check.ts b/scripts/check.ts
deleted file mode 100755 (executable)
index 24f4806..0000000
+++ /dev/null
@@ -1,171 +0,0 @@
-import * as series from 'async/series'
-import * as request from 'request'
-import * as WebSocket from 'ws'
-
-import { CONFIG } from '../server/initializers/constants'
-
-const requestHeaders = {
-  'Range': '',
-  'Keep-Alive': '',
-  'User-Agent': 'Mozilla',
-  'Cache-Control': 'no-cache',
-  'Content-Type': '',
-  'Host': 'example.com',
-  'Access-Control-Request-Method': 'GET',
-  'Access-Control-Request-Headers': 'range'
-}
-
-series([
-  pingServer,
-  checkCORSTorrent,
-  checkCORSWebSeed,
-  checkTracker
-], function () {
-  process.exit(0)
-})
-
-// ---------------------------------------------------------------------------
-
-function pingServer (callback: () => void) {
-  const pingUrl = CONFIG.WEBSERVER.URL + '/api/v1/ping'
-  console.log('Checking server is up (%s)...', pingUrl)
-
-  request(pingUrl, function (err, res, body) {
-    if (!err && res.statusCode === 200 && body === 'pong') {
-      console.log('SUCCESS.')
-    } else {
-      console.log('FAIL.')
-    }
-
-    callback()
-  })
-}
-
-function checkCORSTorrent (callback: () => void) {
-  const torrentUrl = CONFIG.WEBSERVER.URL + '/static/torrents/test.torrent'
-  console.log('Checking CORS headers for the torrent (%s)...', torrentUrl)
-
-  request({
-    method: 'OPTIONS',
-    uri: torrentUrl,
-    headers: requestHeaders
-  }, function (err, res) {
-    if (err || isThereValidCORSHeaders(res) === false) {
-      console.error('FAIL.')
-    } else {
-      console.log('SUCCESS.')
-    }
-
-    callback()
-  })
-}
-
-function checkCORSWebSeed (callback: () => void) {
-  const webseedUrl = CONFIG.WEBSERVER.URL + '/static/webseed/test.mp4'
-  console.log('Checking CORS headers for the video (%s)...', webseedUrl)
-
-  request({
-    method: 'OPTIONS',
-    uri: webseedUrl,
-    headers: requestHeaders
-  }, function (err, res) {
-    if (err || isThereValidCORSHeaders(res) === false) {
-      console.error('FAIL.')
-    } else {
-      console.log('SUCCESS.')
-    }
-
-    callback()
-  })
-}
-
-function checkTracker (callback: () => void) {
-  const trackerUrl = CONFIG.WEBSERVER.WS + '://' +
-                     CONFIG.WEBSERVER.HOST +
-                     '/tracker/socket'
-  console.log('Checking tracker websocket (%s)...', trackerUrl)
-
-  let ws = null
-  ws = new WebSocket(trackerUrl)
-
-  const timeout = setTimeout(failed, 1000)
-  ws.on('open', onOpen)
-
-  function onOpen () {
-    clearTimeout(timeout)
-    ws.close()
-
-    console.log('SUCCESS.')
-    callback()
-  }
-
-  function failed () {
-    ws.removeListener('open', onOpen)
-    ws.close()
-
-    console.log('FAILED.')
-    callback()
-  }
-}
-
-function isThereValidCORSHeaders (res: request.RequestResponse) {
-  let fail = false
-
-  // Check Access-Control-Allow-Origin
-  const headerAllowOriginKey = 'access-control-allow-origin'
-  const headerAllowOrigin = res.headers[headerAllowOriginKey]
-
-  if (!headerAllowOrigin) {
-    console.error(headerAllowOriginKey + ' is not present.')
-    fail = true
-  } else if (headerAllowOrigin !== '*') {
-    console.error(headerAllowOriginKey + ' does not equal "*".')
-    fail = true
-  }
-
-  // Check Access-Control-Allow-Methods
-  const headerAllowMethodsKey = 'access-control-allow-methods'
-  const headerAllowMethods = res.headers[headerAllowMethodsKey]
-  if (!headerAllowMethods) {
-    console.error(headerAllowMethodsKey + ' is not present.')
-    fail = true
-  } else {
-    const allowMethodsMissed = findPatternNotInString(headerAllowMethods as string, [ 'get' ])
-    if (allowMethodsMissed !== null) {
-      console.error(headerAllowMethodsKey + ' misses the ' + allowMethodsMissed + ' method.')
-      fail = true
-    }
-  }
-
-  // Check Access-Control-Allow-Headers
-  const headerAllowHeadersKey = 'access-control-allow-headers'
-  const headerAllowHeaders = res.headers[headerAllowHeadersKey]
-  if (!headerAllowHeaders) {
-    console.error(headerAllowHeadersKey + ' is not present.')
-    fail = true
-  } else {
-    const headersThatShouldBePresent = [
-      'Range'
-    ]
-    const allowHeadersMissed = findPatternNotInString(headerAllowHeaders as string, headersThatShouldBePresent)
-    if (allowHeadersMissed !== null) {
-      console.error(headerAllowHeadersKey + ' misses the ' + allowHeadersMissed + ' header.')
-      fail = true
-    }
-  }
-
-  return !fail
-}
-
-function findPatternNotInString (stringChain: string, patterns: string[]) {
-  let res = null
-  const stringChainLowerCase = stringChain.toLowerCase()
-
-  patterns.forEach(function (pattern) {
-    if (stringChainLowerCase.indexOf(pattern.toLowerCase()) === -1) {
-      res = pattern
-    }
-  })
-
-  return res
-}
diff --git a/support/doc/dependencies.md b/support/doc/dependencies.md
new file mode 100644 (file)
index 0000000..d77724b
--- /dev/null
@@ -0,0 +1,29 @@
+# Installation
+
+## Dependencies
+
+### Debian / Ubuntu
+
+  1. Install NodeJS 8.x (current LTS):
+     [https://nodejs.org/en/download/package-manager/#debian-and-ubuntu-based-linux-distributions](https://nodejs.org/en/download/package-manager/#debian-and-ubuntu-based-linux-distributions)
+  2. Install yarn:
+     [https://yarnpkg.com/en/docs/install](https://yarnpkg.com/en/docs/install)
+  4. Run:
+
+```bash
+$ apt-get update
+$ apt-get install nginx ffmpeg postgresql openssl g++ make
+```
+
+### Arch Linux
+
+  1. Run:
+
+```bash
+$ pacman -S nodejs yarn ffmpeg postgresql openssl
+```
+
+### Other distributions
+
+Feel free to update this file in a pull request!
+
index ddd277e548b70fc3ea94b1f396ed6afb365f0967..749783c290b8421ae4c8d0bed2041860002a795f 100644 (file)
@@ -53,12 +53,7 @@ Details of the Angular application file structure. It tries to follow [the offic
 
 Uses [TSLint](https://palantir.github.io/tslint/) for TypeScript linting and [Angular styleguide](https://angular.io/docs/ts/latest/guide/style-guide.html).
 
-## Developing
-
-  * Install [the dependencies](https://github.com/Chocobozzz/PeerTube#dependencies)
-  * Run `yarn install --pure-lockfile` at the root directory to install all the dependencies
-  * Run PostgreSQL and create the database `peertube_dev`.
-  * Run `npm run dev:client` to compile the client, run the server, watch client files modifications and reload modules on the fly (you don't need to refresh manually the web browser). The API listen on `localhost:9000` and the client on `localhost:3000`.
+## Concepts
 
 In a Angular application, we create components that we put together. Each component is defined by an HTML structure, a TypeScript file and optionally a SASS file.
 If you are not familiar with Angular I recommend you to read the [quickstart guide](https://angular.io/docs/ts/latest/quickstart.html).
index d909b0c3d2304969fd7124e0a540e19edc6460b3..ddb93119bdf704547bb8b5977a2b98ac7743c276 100644 (file)
@@ -36,21 +36,6 @@ All other server files are in the [server](https://github.com/Chocobozzz/PeerTub
 
 Uses [JavaScript Standard Style](http://standardjs.com/).
 
-
-## Developing
-
-  * Install [the dependencies](https://github.com/Chocobozzz/PeerTube#dependencies)
-  * Run `yarn install` at the root directory to install all the dependencies
-  * Run PostgreSQL and create the database `peertube_dev`.
-  * Run `npm run dev:server` to run the server, watch server files modifications and restart it automatically. The server (API + client) listen on `localhost:9000`.
-
-The `NODE_ENV=test` is set to speed up communications between instances (see [constants.ts](https://github.com/Chocobozzz/PeerTube/blob/master/server/initializers/constants.ts)).
-
-`npm run help` gives you all available commands.
-
-If you want to test the decentralization feature, you can easily run 3 instances by running `npm run play`. The instances password are `test1`, `test2` and `test3`.
-
-
 ## Architecture
 
 The server is composed by:
diff --git a/support/doc/production.md b/support/doc/production.md
new file mode 100644 (file)
index 0000000..4d7c14f
--- /dev/null
@@ -0,0 +1,227 @@
+# Production guide
+
+## Installation
+
+### Dependencies
+
+Follow the steps of the [dependencies guide](dependencies.md).
+
+### PeerTube user
+
+Create a `peertube` user with `/home/peertube` home:
+
+```bash
+sudo useradd -m -d /home/peertube -s /bin/bash -p peertube peertube
+sudo passwd peertube
+```
+
+### Database
+
+Create production database and peertube user:
+
+```bash
+sudo -u postgres createuser -P peertube
+sudo -u postgres createdb -O peertube peertube_prod
+```
+
+### Sources
+
+Clone, install node dependencies and build application:
+
+```bash
+$ cd /home/peertube
+$ sudo -u peertube git clone -b master https://github.com/Chocobozzz/PeerTube
+$ cd PeerTube
+$ sudo -u peertube yarn install --pure-lockfile
+$ sudo -u peertube npm run build
+```
+
+### PeerTube configuration
+
+Copy example configuration:
+
+```bash
+$ sudo -u peertube cp config/production.yaml.example config/production.yaml
+```
+
+Then edit the `config/production.yaml` file according to your webserver
+configuration. Keys set in this file will override those of
+`config/default.yml`.
+
+### Webserver
+
+Copy the nginx configuration template:
+
+```bash
+$ sudo cp /home/peertube/PeerTube/support/nginx/peertube-https /etc/nginx/sites-available/peertube
+```
+
+Then modify the webserver configuration file. Please pay attention to the `alias` key of `/static/webseed` location. 
+It should correspond to the path of your videos directory (set in the configuration file as `storage->videos` key).
+
+```bash
+$ sudo vim /etc/nginx/sites-available/peertube
+```
+
+If you want to set https with Let's Encrypt please follow the steps of [this guide](https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-16-04).
+
+An example of the nginx configuration could be:
+
+```
+server {
+  listen 80;
+  listen [::]:80;
+  server_name peertube.example.com;
+
+  access_log /var/log/nginx/peertube.example.com.access.log;
+  error_log /var/log/nginx/peertube.example.com.error.log;
+
+  rewrite ^ https://$server_name$request_uri? permanent;
+}
+
+server {
+  listen 443 ssl http2;
+  listen [::]:443 ssl http2;
+  server_name peertube.example.com;
+
+  # For example with Let's Encrypt
+  ssl_certificate      /etc/letsencrypt/live/peertube.example.com/fullchain.pem;
+  ssl_certificate_key  /etc/letsencrypt/live/peertube.example.com/privkey.pem;
+  ssl_trusted_certificate /etc/letsencrypt/live/peertube.example.com/chain.pem;
+
+  access_log /var/log/nginx/peertube.example.com.access.log;
+  error_log /var/log/nginx/peertube.example.com.error.log;
+
+  location ^~ '/.well-known/acme-challenge' {
+    default_type "text/plain";
+    root /var/www/certbot;
+  }
+
+  location / {
+    proxy_pass http://localhost:9000;
+    proxy_set_header X-Real-IP $remote_addr;
+    proxy_set_header Host $host;
+    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+
+    # For the video upload
+    client_max_body_size 8G;
+    proxy_connect_timeout       600;
+    proxy_send_timeout          600;
+    proxy_read_timeout          600;
+    send_timeout                600;
+  }
+
+  # Bypass PeerTube webseed route for better performances
+  location /static/webseed {
+    if ($request_method = 'OPTIONS') {
+      add_header 'Access-Control-Allow-Origin' '*';
+      add_header 'Access-Control-Allow-Methods' 'GET, OPTIONS';
+      add_header 'Access-Control-Allow-Headers' 'Range,DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
+      add_header 'Access-Control-Max-Age' 1728000;
+      add_header 'Content-Type' 'text/plain charset=UTF-8';
+      add_header 'Content-Length' 0;
+      return 204;
+    }
+
+    if ($request_method = 'GET') {
+      add_header 'Access-Control-Allow-Origin' '*';
+      add_header 'Access-Control-Allow-Methods' 'GET, OPTIONS';
+      add_header 'Access-Control-Allow-Headers' 'Range,DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
+    }
+
+    alias /var/www/PeerTube/videos;
+  }
+
+  # Websocket tracker
+  location /tracker/socket {
+    # Peers send a message to the tracker every 15 minutes
+    # Don't close the websocket before this time
+    proxy_read_timeout 1200s;
+    proxy_set_header Upgrade $http_upgrade;
+    proxy_set_header Connection "upgrade";
+    proxy_http_version 1.1;
+    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
+    proxy_set_header Host $host;
+    proxy_pass http://localhost:9000;
+  }
+}
+```
+
+
+Activate the configuration file:
+
+```bash
+$ sudo ln -s /etc/nginx/sites-available/peertube /etc/nginx/sites-enabled/peertube
+$ sudo systemctl reload nginx
+```
+
+### Systemd
+
+Copy the nginx configuration template:
+
+```bash
+sudo cp /home/peertube/PeerTube/support/systemd/peertube.service /etc/systemd/system/
+```
+
+Update the service file:
+
+```bash
+sudo vim /etc/systemd/system/peertube.service
+```
+
+It should look like this:
+
+```
+[Unit]
+Description=PeerTube daemon
+After=network.target
+
+[Service]
+Type=simple
+Environment=NODE_ENV=production
+User=peertube
+Group=peertube
+ExecStart=/usr/bin/npm start
+WorkingDirectory=/home/peertube/PeerTube
+StandardOutput=syslog
+StandardError=syslog
+SyslogIdentifier=peertube
+Restart=always
+
+[Install]
+WantedBy=multi-user.target
+```
+
+
+Tell systemd to reload its config:
+
+```bash
+sudo systemctl daemon-reload
+```
+
+### Run
+
+```bash
+sudo systemctl start peertube
+sudo journalctl -feu peertube
+```
+
+### Administrator
+
+The administrator password is automatically generated and can be found in the
+logs. You can set another password with:
+
+```bash
+$ NODE_ENV=production npm run reset-password -- -u root
+```
+
+## Upgrade
+
+The following commands will upgrade the source (according to your current
+branch), upgrade node modules and rebuild client application:
+
+```bash
+# systemctl stop peertube
+$ npm run upgrade-peertube
+# systemctl start peertube
+```
index 1e3378f772d90c2aefa69ab176aef0a83ac73d91..b9d01f235ea7c2243b3ab5d045f0d933171d7fc5 100644 (file)
@@ -1,5 +1,6 @@
 [Unit]
 Description=PeerTube daemon
+After=network.target
 
 [Service]
 Type=simple