--- title: 1.3 Install with Docker --- # Install with Docker This section details everything you need to know to get Penpot up and running in production environments using Docker. For this, we provide a series of *Dockerfiles* and a *docker-compose* file that orchestrate all. ## Install Docker
Skip this section if you already have docker installed, up and running.
Currently, Docker comes into two different flavours: ### Docker Desktop This is the only option to have Docker in a Windows or MacOS. Recently it's also available for Linux, in the most popular distributions (Debian, Ubuntu and Fedora). You can install it following the official guide. Docker Desktop has a graphical control panel (GUI) to manage the service and view the containers, images and volumes. But need the command line (Terminal in Linux and Mac, or PowerShell in Windows) to build and run the containers, and execute other operations. It already includes **docker compose** utility, needed by Penpot. ### Docker Engine This is the classic and default Docker setup for Linux machines, and the only option for a Linux VPS without graphical interface. You can install it following the official guide. And you also need the [docker compose](https://docs.docker.com/compose/cli-command/#installing-compose-v2) (V2) plugin. You can use the old **docker-compose** tool, but all the documentation supposes you are using the V2. You can easily check which version of **docker compose** you have. If you can executedocker compose
command, then you have V2. If you need to write docker-compose
(with a
-
) for it to work, you have the old version.
## Start Penpot
As first step you will need to obtain the docker-compose.yaml
file. You can download it
from Penpot repository.
```bash
wget https://raw.githubusercontent.com/penpot/penpot/main/docker/images/docker-compose.yaml
```
or
```bash
curl -o docker-compose.yaml https://raw.githubusercontent.com/penpot/penpot/main/docker/images/docker-compose.yaml
```
Then simply launch composer:
```bash
docker compose -p penpot -f docker-compose.yaml up -d
```
At the end it will start listening on http://localhost:9001
If you don't change anything, by default this will use the latest image published in dockerhub.
If you want to have more control over the version (which is recommended), you can use the PENPOT_VERSION envvar in the common ways: - setting the value in the .env file - or passing the envvar in the command line ```bash PENPOT_VERSION=2.4.3 docker compose -p penpot -f docker-compose.yaml up -d ``` ## Stop Penpot If you want to stop running Penpot, just type ```bash docker compose -p penpot -f docker-compose.yaml down ``` ## Configure Penpot with Docker The configuration is defined using flags and environment variables in thedocker-compose.yaml
file. The default downloaded file comes with the essential flags and variables already set,
and other ones commented out with some explanations.
You can find all configuration options in the [Configuration][1] section.
## Using the CLI for administrative tasks
Penpot provides a script (`manage.py`) with some administrative tasks to perform in the server.
**NOTE**: this script will only work with the enable-prepl-server
flag set in the docker-compose.yaml file. For older versions of docker-compose.yaml file,
this flag is set in the backend service.
For instance, if the registration is disabled, the only way to create a new user is with this script:
```bash
docker exec -ti penpot-penpot-backend-1 python3 manage.py create-profile
```
**NOTE:** the exact container name depends on your docker version and platform.
For example it could be penpot-penpot-backend-1
or penpot_penpot-backend-1
.
You can check the correct name executing docker ps
.
## Update Penpot
To get the latest version of Penpot in your local installation, you just need to
execute:
```bash
docker compose -f docker-compose.yaml pull
```
This will fetch the latest images. When you do docker compose up
again, the containers will be recreated with the latest version.
It is strongly recommended to update the Penpot version in small increments, rather than updating between two distant versions.
**Important: Upgrade from version 1.x to 2.0** The migration to version 2.0, due to the incorporation of the new v2 components, includes an additional process that runs automatically as soon as the application starts. If your on-premises Penpot instance contains a significant amount of data (such as hundreds of penpot files, especially those utilizing SVG components and assets extensively), this process may take a few minutes. In some cases, such as when the script encounters an error, it may be convenient to run the process manually. To do this, you can disable the automatic migration process using thedisable-v2-migration
flag in PENPOT_FLAGS
environment variable. You can then execute the
migration process manually with the following command:
```bash
docker exec -ti