3.4 KiB
Server code documentation
The server is a web server developed with TypeScript/Express.
Technologies
- TypeScript -> Language
- PostgreSQL -> Database
- 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 initilization, 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.
Developing
- Install the 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 onlocalhost:9000
.
The NODE_ENV=test
is set to speed up communications between instances (see 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:
- a REST API (Express framework)
- a WebTorrent Tracker
A video is seeded by the server with the WebSeed protocol (HTTP).
When a user uploads a video, the rest API create 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. You can begin to look at this file. Then you can try to understand the controllers: they are the entrypoint of each API request.