mirror of https://github.com/Chocobozzz/PeerTube
2.6 KiB
2.6 KiB
Server code documentation
The server is a web server developed with TypeScript/Express.
Technologies
- TypeScript -> Language
- PostgreSQL -> Database
- Redis -> Job queue/cache
- Express -> Web server framework
- Sequelize -> SQL ORM
- WebTorrent -> BitTorrent tracker and torrent creation
- Mocha -> Test framework
Files
The server main file is server.ts. The server modules description are in the package.json at the project root. All other server files are in the server directory:
server.ts -> app initialization, main routes configuration (static routes...)
config -> server YAML configurations (for tests, production...)
scripts -> Scripts files for npm run
server
|__ controllers -> API routes/controllers files
|__ helpers -> functions used by different part of the project (logger, utils...)
|__ initializers -> functions used at the server startup (installer, database, constants...)
|__ lib -> library function (WebTorrent, OAuth2, ActivityPub...)
|__ middlewares -> middlewares for controllers (requests validators, requests pagination...)
|__ models -> Sequelize models for each SQL tables (videos, users, accounts...)
|__ tests -> API tests and real world simulations (to test the decentralized feature...)
Conventions
Uses JavaScript Standard Style.
Architecture
The server is composed by:
- a REST API (relying on the Express framework) documented on http://docs.joinpeertube.org/api.html
- a WebTorrent Tracker (slightly custom version of webtorrent/bittorrent-tracker)
A video is seeded by the server with the WebSeed protocol (HTTP).
When a user uploads a video, the REST API creates the torrent file and then adds it to its database.
If a user wants to watch the video, the tracker will indicate all other users that are watching the video + the HTTP url for the WebSeed.
Newcomers
The server entrypoint is server.ts. Looking at this file is a good start. Then you can try to understand the controllers: they are the entrypoints of each API request.