aboutsummaryrefslogtreecommitdiffhomepage
path: root/support/doc/server/code.md
diff options
context:
space:
mode:
Diffstat (limited to 'support/doc/server/code.md')
-rw-r--r--support/doc/server/code.md74
1 files changed, 74 insertions, 0 deletions
diff --git a/support/doc/server/code.md b/support/doc/server/code.md
new file mode 100644
index 000000000..d49d120e9
--- /dev/null
+++ b/support/doc/server/code.md
@@ -0,0 +1,74 @@
1# Server code documentation
2
3The server is a web server developed with [NodeJS](https://nodejs.org)/[Express](http://expressjs.com).
4
5
6## Technologies
7
8 * [NodeJS](https://nodejs.org) -> Language
9 * [MongoDB](https://www.mongodb.com/) -> Database
10 * [Express](http://expressjs.com) -> Web server framework
11 * [Mongoose](http://mongoosejs.com/) -> MongoDB object modeling
12 * [WebTorrent](https://webtorrent.io/) -> BitTorrent over WebRTC
13 * [Electron](http://electron.atom.io/) -> To make WebRTC inside NodeJS
14 * [Mocha](https://mochajs.org/) -> Test framework
15
16
17## Files
18
19The server main file is [server.js](https://github.com/Chocobozzz/PeerTube/blob/master/server.js).
20The server modules description are in the [package.json](https://github.com/Chocobozzz/PeerTube/blob/master/package.json) at the project root.
21All other server files are in the [server](https://github.com/Chocobozzz/PeerTube/tree/master/server) directory:
22
23 server.js -> app initilization, main routes configuration (static routes...)
24 config -> server YAML configurations (for tests, production...)
25 scripts -> Scripts files for npm run
26 server
27 |__ controllers -> API routes/controllers files
28 |__ helpers -> functions used by different part of the project (logger, utils...)
29 |__ initializers -> functions used at the server startup (installer, database, constants...)
30 |__ lib -> library function (WebTorrent, OAuth2, friends logic...)
31 |__ middlewares -> middlewares for controllers (requests validators, requests pagination...)
32 |__ models -> Mongoose models for each MongoDB collection (videos, users, pods...)
33 |__ tests -> API tests and real world simulations (to test the decentralized feature...)
34
35
36## Conventions
37
38Uses [JavaScript Standard Style](http://standardjs.com/).
39
40
41## Developing
42
43 * Install [the dependencies](https://github.com/Chocobozzz/PeerTube#dependencies)
44 * Run `npm install` at the root directory to install all the dependencies
45 * Run MongoDB
46 * Run `npm run dev` to compile the client and automatically run the server. If the client files are already compiled you can simply run `NODE_ENV=test node server`
47
48The `NODE_ENV=test` is set to speed up communications between pods (see [constants.js](https://github.com/Chocobozzz/PeerTube/blob/master/server/initializers/constants.js#L71)).
49
50`npm run help` give you all available commands.
51
52If you want to test the decentralization feature, you can easily run 3 pods by runnin `npm run play`. The pods password are `test1`, `test2` and `test3`.
53
54
55## Architecture
56
57The server is composed by:
58
59 * a REST API
60 * a WebTorrent Tracker
61 * A separate Electron process
62
63The seperate Electron process has the goal to seed videos through WebRTC because WebRTC directly in NodeJS is not usable for now.
64
65![Architecture scheme](https://github.com/Chocobozzz/PeerTube/blob/master/support/doc/server/upload-video.png)
66
67When an user upload a video, the rest API asks the Electron process to seed it (communicate with IPC) and then adds it to its Mongo database.
68
69If an user wants to watch the video, the tracker will indicate all other users that are watching the video + the Electron process.
70
71## Newcomers
72
73The server entrypoint is [server.js](https://github.com/Chocobozzz/PeerTube/blob/master/server.js). You can begin to look at this file.
74Then you can try to understand the [controllers](https://github.com/Chocobozzz/PeerTube/tree/master/server/controllers): they are the entrypoint of each API request.