PeerTube/support/doc/docker.md

5.7 KiB

Docker guide

You can quickly get a server running using Docker. You need to have docker and docker-compose installed.

Production

Install

PeerTube does not support webserver host change. Keep in mind your domain name is definitive after your first PeerTube start.

PeerTube needs a PostgreSQL and a Redis instance to work correctly. If you want to quickly set up a full environment, either for trying the service or in production, you can use a docker-compose setup.

Go to your peertube workdir

cd /your/peertube/directory

Create the reverse proxy configuration directory

mkdir -p ./docker-volume/traefik

Get the latest reverse proxy configuration

curl https://raw.github.com/chocobozzz/PeerTube/master/support/docker/production/config/traefik.toml > ./docker-volume/traefik/traefik.toml

View the source of the file you're about to download: traefik.toml

Create Let's Encrypt ACME certificates as JSON file

touch ./docker-volume/traefik/acme.json

Needs to have file mode 600:

chmod 600 ./docker-volume/traefik/acme.json 

Get the latest Compose file

curl https://raw.github.com/chocobozzz/PeerTube/master/support/docker/production/docker-compose.yml > docker-compose.yml 

View the source of the file you're about to download: docker-compose.yml

Get the latest env_file

curl https://raw.github.com/Chocobozzz/PeerTube/master/support/docker/production/.env > .env

View the source of the file you're about to download: .env

Update the reverse proxy configuration

vim ./docker-volume/traefik/traefik.toml

You must replace <MY EMAIL ADDRESS> and <MY DOMAIN> to enable Let's Encrypt SSL Certificates creation. Now included in .env file with TRAEFIK_ACME_EMAIL and TRAEFIK_ACME_DOMAINS variables used through traefik service command value of docker-compose.yml file.

More at: https://docs.traefik.io/v1.7

Tweak the docker-compose.yml file there according to your needs

vim ./docker-compose.yml

Then tweak the .env file to change the environment variables

vim ./.env

In the downloaded example .env, you must replace:

  • <MY POSTGRES USERNAME>
  • <MY POSTGRES PASSWORD>
  • <MY POSTGRES DB>
  • <MY DOMAIN> without 'https://'
  • <MY EMAIL ADDRESS>

Other environment variables are used in /support/docker/production/config/custom-environment-variables.yaml and can be intuited from usage.

Testing local Docker setup

To test locally your Docker setup, you must add your domain (<MY DOMAIN>) in /etc/hosts:

127.0.0.1       localhost   mydomain.tld

You can use the regular up command to set it up

docker-compose up

Obtaining Your Automatically Generated Admin Credentials

Now that you've installed your PeerTube instance you'll want to grep your peertube container's logs for the root password. You're going to want to run docker-compose logs peertube | grep -A1 root to search the log output for your new PeerTube's instance admin credentials which will look something like this.

user@s:~/peertube|master⚡ ⇒  docker-compose logs peertube | grep -A1 root

peertube_1  | [example.com:443] 2019-11-16 04:26:06.082 info: Username: root
peertube_1  | [example.com:443] 2019-11-16 04:26:06.083 info: User password: abcdefghijklmnop

Obtaining Your Automatically Generated DKIM DNS TXT Record

DKIM signature sending and RSA keys generation are enabled by the default Postfix image mwader/postfix-relay with OpenDKIM. Run cat ./docker-volume/opendkim/keys/*/*.txt to display your DKIM DNS TXT Record containing the public key to configure to your domain :

user@s:~/peertube|master⚡ ⇒  cat ./docker-volume/opendkim/keys/*/*.txt

peertube._domainkey.mydomain.tld.	IN	TXT	( "v=DKIM1; h=sha256; k=rsa; "
	  "p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0Dx7wLGPFVaxVQ4TGym/eF89aQ8oMxS9v5BCc26Hij91t2Ci8Fl12DHNVqZoIPGm+9tTIoDVDFEFrlPhMOZl8i4jU9pcFjjaIISaV2+qTa8uV1j3MyByogG8pu4o5Ill7zaySYFsYB++cHJ9pjbFSC42dddCYMfuVgrBsLNrvEi3dLDMjJF5l92Uu8YeswFe26PuHX3Avr261n"
	  "j5joTnYwat4387VEUyGUnZ0aZxCERi+ndXv2/wMJ0tizq+a9+EgqIb+7lkUc2XciQPNuTujM25GhrQBEKznvHyPA6fHsFheymOuB763QpkmnQQLCxyLygAY9mE/5RY+5Q6J9oDOQIDAQAB" )  ; ----- DKIM key peertube for mydomain.tld

What now?

See the production guide "What now" section.

Upgrade

Important: Before upgrading, check you have all the storage fields in your production.yaml file.

Pull the latest images and rerun PeerTube:

$ cd /your/peertube/directory
$ docker-compose pull
$ docker-compose up -d

Build your own Docker image

$ git clone https://github.com/chocobozzz/PeerTube /tmp/peertube
$ cd /tmp/peertube
$ docker build . -f ./support/docker/production/Dockerfile.buster

Development

We don't have a Docker image for development. See the CONTRIBUTING guide for more information on how you can hack PeerTube!