# Docker guide You can quickly get a server running using Docker. You need to have [docker](https://www.docker.com/community-edition) and [docker-compose](https://docs.docker.com/compose/install/) installed. ## Production ### Build your own Docker image ```bash $ git clone https://github.com/chocobozzz/PeerTube /tmp/peertube $ cd /tmp/peertube $ docker build . -f ./support/docker/production/Dockerfile.stretch ``` ### Run a preconfigured setup with all dependencies 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. ```bash $ git clone https://github.com/chocobozzz/PeerTube /tmp/peertube $ cd /tmp/peertube/support/docker/production ``` Then tweak the `docker-compose.yml` file there according to your needs. Then you can use the regular `up` command to set it up, with possible overrides of the environment variables: ```bash $ PEERTUBE_HOSTNAME=peertube.lvh.me \ PEERTUBE_ADMIN_EMAIL=test@example.com \ PEERTUBE_TRANSCODING_ENABLED=true \ PEERTUBE_SIGNUP_ENABLED=true \ PEERTUBE_SMTP_HOST=mail.lvh.me \ PEERTUBE_SMTP_PORT=1025 \ PEERTUBE_SMTP_FROM=noreply@peertube.lvh.me \ docker-compose up ``` Other environment variables are used in `support/docker/production/config/custom-environment-variables.yaml` and can be intuited from usage. For this example configuration, a reverse proxy is quite recommended. The example Docker Compose file provides example labels for a Traefik load balancer, although any HTTP reverse proxy will work fine. See the example Nginx configuration `support/nginx/peertube` file to get an idea of recommendations and requirements to run PeerTube the most efficiently. When starting the containers for the first time, you will get permissions errors for the data volume, like this one: ``` Error: EACCES: permission denied, mkdir '/data/logs' ``` The peertube user inside the container has a UID and GID of 991 so you have to change the folder's owner, in the case you're using `./data`: ``` chown -R 991:991 data/ ``` **Important**: note that you'll get the initial `root` user password from the program output, so check out your logs to find them. ## Development The Docker image that's preconfigured in `support/docker/dev` contains all the services embedded in one image, so as to work correctly on [Janitor](https://janitor.technology). It is much not advised to use it in production.