3 * [Installation](#installation)
8 Please don't install PeerTube for production on a device behind a low bandwidth connection (example: your ADSL link).
9 If you want information about the appropriate hardware to run PeerTube, please see the [FAQ](https://github.com/Chocobozzz/PeerTube/blob/develop/FAQ.md#should-i-have-a-big-server-to-run-peertube).
13 **Follow the steps of the [dependencies guide](dependencies.md).**
17 Create a `peertube` user with `/var/www/peertube` home:
20 $ sudo useradd -m -d /var/www/peertube -s /bin/bash -p peertube peertube
25 $ sudo passwd peertube
31 $ sudo pw useradd -n peertube -d /var/www/peertube -s /usr/local/bin/bash -m
32 $ sudo passwd peertube
34 or use `adduser` to create it interactively.
38 Create the production database and a peertube user inside PostgreSQL:
41 $ sudo -u postgres createuser -P peertube
44 Here you should enter a password for postgresql user peertube, it should be copied in production.yaml file.
45 Don’t just hit enter else it will be empty, default production yaml uses peertube here, but it is better you pick a stronger one.
48 $ sudo -u postgres createdb -O peertube -E UTF8 -T template0 peertube_prod
52 Then enable extensions PeerTube needs:
55 $ sudo -u postgres psql -c "CREATE EXTENSION pg_trgm;" peertube_prod
56 $ sudo -u postgres psql -c "CREATE EXTENSION unaccent;" peertube_prod
59 ### Prepare PeerTube directory
61 Fetch the latest tagged version of Peertube
63 $ VERSION=$(curl -s https://api.github.com/repos/chocobozzz/peertube/releases/latest | grep tag_name | cut -d '"' -f 4) && echo "Latest Peertube version is $VERSION"
66 Open the peertube directory, create a few required directories
68 $ cd /var/www/peertube
69 $ sudo -u peertube mkdir config storage versions
72 Download the latest version of the Peertube client, unzip it and remove the zip
74 $ cd /var/www/peertube/versions
75 $ sudo -u peertube wget -q "https://github.com/Chocobozzz/PeerTube/releases/download/${VERSION}/peertube-${VERSION}.zip"
76 $ sudo -u peertube unzip -q peertube-${VERSION}.zip && sudo -u peertube rm peertube-${VERSION}.zip
81 $ cd /var/www/peertube
82 $ sudo -u peertube ln -s versions/peertube-${VERSION} ./peertube-latest
83 $ cd ./peertube-latest && sudo -H -u peertube yarn install --production --pure-lockfile
86 ### PeerTube configuration
88 Copy the default configuration file that contains the default configuration provided by PeerTube.
89 You **must not** update this file.
92 $ cd /var/www/peertube
93 $ sudo -u peertube cp peertube-latest/config/default.yaml config/default.yaml
96 Now copy the production example configuration:
99 $ cd /var/www/peertube
100 $ sudo -u peertube cp peertube-latest/config/production.yaml.example config/production.yaml
103 Then edit the `config/production.yaml` file according to your webserver
104 and database configuration (`webserver`, `database`, `redis`, `smtp` and `admin.email` sections in particular).
105 Keys defined in `config/production.yaml` will override keys defined in `config/default.yaml`.
107 **PeerTube does not support webserver host change**. Even though [PeerTube CLI can help you to switch hostname](https://docs.joinpeertube.org/maintain-tools?id=update-hostjs) there's no official support for that since it is a risky operation that might result in unforeseen errors.
111 We only provide official configuration files for Nginx.
113 Copy the nginx configuration template:
116 $ sudo cp /var/www/peertube/peertube-latest/support/nginx/peertube /etc/nginx/sites-available/peertube
119 Then set the domain for the webserver configuration file.
120 Replace `[peertube-domain]` with the domain for the peertube server.
123 $ sudo sed -i 's/${WEBSERVER_HOST}/[peertube-domain]/g' /etc/nginx/sites-available/peertube
124 $ sudo sed -i 's/${PEERTUBE_HOST}/127.0.0.1:9000/g' /etc/nginx/sites-available/peertube
127 Then modify the webserver configuration file. Please pay attention to the `alias` keys of the static locations.
128 It should correspond to the paths of your storage directories (set in the configuration file inside the `storage` key).
131 $ sudo vim /etc/nginx/sites-available/peertube
134 Activate the configuration file:
137 $ sudo ln -s /etc/nginx/sites-available/peertube /etc/nginx/sites-enabled/peertube
140 To generate the certificate for your domain as required to make https work you can use [Let's Encrypt](https://letsencrypt.org/):
143 $ sudo systemctl stop nginx
144 $ sudo certbot certonly --standalone --post-hook "systemctl restart nginx"
145 $ sudo systemctl reload nginx
148 Now you have the certificates you can reload nginx:
151 $ sudo systemctl reload nginx
154 Certbot should have installed a cron to automatically renew your certificate.
155 Since our nginx template supports webroot renewal, we suggest you to update the renewal config file to use the `webroot` authenticator:
158 $ # Replace authenticator = standalone by authenticator = webroot
159 $ # Add webroot_path = /var/www/certbot
160 $ sudo vim /etc/letsencrypt/renewal/your-domain.com.conf
164 On FreeBSD you can use [Dehydrated](https://dehydrated.io/) `security/dehydrated` for [Let's Encrypt](https://letsencrypt.org/)
167 $ sudo pkg install dehydrated
175 $ sudo cp /var/www/peertube/peertube-latest/support/sysctl.d/30-peertube-tcp.conf /etc/sysctl.d/
176 $ sudo sysctl -p /etc/sysctl.d/30-peertube-tcp.conf
179 Your distro may enable this by default, but at least Debian 9 does not, and the default FIFO
180 scheduler is quite prone to "Buffer Bloat" and extreme latency when dealing with slower client
181 links as we often encounter in a video server.
185 If your OS uses systemd, copy the configuration template:
188 $ sudo cp /var/www/peertube/peertube-latest/support/systemd/peertube.service /etc/systemd/system/
191 Check the service file (PeerTube paths and security directives):
194 $ sudo vim /etc/systemd/system/peertube.service
198 Tell systemd to reload its config:
201 $ sudo systemctl daemon-reload
204 If you want to start PeerTube on boot:
207 $ sudo systemctl enable peertube
213 $ sudo systemctl start peertube
214 $ sudo journalctl -feu peertube
218 On FreeBSD, copy the startup script and update rc.conf:
221 $ sudo install -m 0555 /var/www/peertube/peertube-latest/support/freebsd/peertube /usr/local/etc/rc.d/
222 $ sudo sysrc peertube_enable="YES"
228 $ sudo service peertube start
233 If your OS uses OpenRC, copy the service script:
236 $ sudo cp /var/www/peertube/peertube-latest/support/init.d/peertube /etc/init.d/
239 If you want to start PeerTube on boot:
242 $ sudo rc-update add peertube default
245 Run and print last logs:
248 $ sudo /etc/init.d/peertube start
249 $ tail -f /var/log/peertube/peertube.log
254 The administrator password is automatically generated and can be found in the PeerTube
255 logs (path defined in `production.yaml`). You can also set another password with:
258 $ cd /var/www/peertube/peertube-latest && NODE_CONFIG_DIR=/var/www/peertube/config NODE_ENV=production npm run reset-password -- -u root
261 Alternatively you can set the environment variable `PT_INITIAL_ROOT_PASSWORD`,
262 to your own administrator password, although it must be 6 characters or more.
266 Now your instance is up you can:
268 * Add your instance to the public PeerTube instances index if you want to: https://instances.joinpeertube.org/
269 * Check [available CLI tools](/support/doc/tools.md)
273 ### PeerTube instance
275 **Check the changelog (in particular BREAKING CHANGES!):** https://github.com/Chocobozzz/PeerTube/blob/develop/CHANGELOG.md
279 The password it asks is PeerTube's database user password.
282 $ cd /var/www/peertube/peertube-latest/scripts && sudo -H -u peertube ./upgrade.sh
290 $ SQL_BACKUP_PATH="backup/sql-peertube_prod-$(date -Im).bak" && \
291 cd /var/www/peertube && sudo -u peertube mkdir -p backup && \
292 sudo -u postgres pg_dump -F c peertube_prod | sudo -u peertube tee "$SQL_BACKUP_PATH" >/dev/null
295 Fetch the latest tagged version of Peertube:
298 $ VERSION=$(curl -s https://api.github.com/repos/chocobozzz/peertube/releases/latest | grep tag_name | cut -d '"' -f 4) && echo "Latest Peertube version is $VERSION"
301 Download the new version and unzip it:
304 $ cd /var/www/peertube/versions && \
305 sudo -u peertube wget -q "https://github.com/Chocobozzz/PeerTube/releases/download/${VERSION}/peertube-${VERSION}.zip" && \
306 sudo -u peertube unzip -o peertube-${VERSION}.zip && \
307 sudo -u peertube rm peertube-${VERSION}.zip
310 Install node dependencies:
313 $ cd /var/www/peertube/versions/peertube-${VERSION} && \
314 sudo -H -u peertube yarn install --production --pure-lockfile
317 Copy new configuration defaults values and update your configuration file:
320 $ sudo -u peertube cp /var/www/peertube/versions/peertube-${VERSION}/config/default.yaml /var/www/peertube/config/default.yaml
321 $ diff /var/www/peertube/versions/peertube-${VERSION}/config/production.yaml.example /var/www/peertube/config/production.yaml
324 Change the link to point to the latest version:
327 $ cd /var/www/peertube && \
328 sudo unlink ./peertube-latest && \
329 sudo -u peertube ln -s versions/peertube-${VERSION} ./peertube-latest
334 Check changes in nginx configuration:
337 $ cd /var/www/peertube/versions
338 $ diff "$(ls --sort=t | head -2 | tail -1)/support/nginx/peertube" "$(ls --sort=t | head -1)/support/nginx/peertube"
343 Check changes in systemd configuration:
346 $ cd /var/www/peertube/versions
347 $ diff "$(ls --sort=t | head -2 | tail -1)/support/systemd/peertube.service" "$(ls --sort=t | head -1)/support/systemd/peertube.service"
352 If you changed your nginx configuration:
355 $ sudo systemctl reload nginx
358 If you changed your systemd configuration:
361 $ sudo systemctl daemon-reload
364 Restart PeerTube and check the logs:
367 $ sudo systemctl restart peertube && sudo journalctl -fu peertube
370 ### Things went wrong?
372 Change `peertube-latest` destination to the previous version and restore your SQL backup:
375 $ OLD_VERSION="v0.42.42" && SQL_BACKUP_PATH="backup/sql-peertube_prod-2018-01-19T10:18+01:00.bak" && \
376 cd /var/www/peertube && sudo -u peertube unlink ./peertube-latest && \
377 sudo -u peertube ln -s "versions/peertube-$OLD_VERSION" peertube-latest && \
378 sudo -u postgres pg_restore -c -C -d postgres "$SQL_BACKUP_PATH" && \
379 sudo systemctl restart peertube