This article can be too techincal for some users. If it is for you, ask a friend who is familiar with techincal stuff. SudoVanilla is also willing to help you live in a call via Matrix or Jitsi Meet, email to schedule a call.
Penpot allows users, developers, and companies to selfhost Penpot on-premise or in the cloud on their servers. Thanks to this, it is possible selfhost Penpot directly on your daily driver and make Penpot Desktop work offline.
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 (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 execute docker 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
After making sure that Docker is running on your machine, let’s go ahead and start Penpot with it.
First step is to obtain the docker-compose.yml
file, you can download this from the Penpot repo using the following command in your terminal:
Terminal window
curl -o docker-compose.yaml https://raw.githubusercontent.com/penpot/penpot/main/docker/images/docker-compose.yaml
Afterwards, you can simply launch Penpot by using the composer command:
Terminal window
docker compose -p penpot -f docker-compose.yaml up -d
Wait a moment, then the server should be up and running on http://localhost:9001.
Set Penpot Desktop to your Local Instance
Once you’ve confirmed that Penpot is now running on http://localhost:9001, go ahead and set this link inside of Penpot Desktop so that the app uses your local instance.
Click on the gear icon found in the upper-right corner of Penpot Desktop, then for instance please set “http://localhost:9001”, and click the save button.
Now, reload or restart Penpot Desktop to start using Penpot Desktop offline.
Creating an Account
You’ll need to setup an account in your own instance, since it’s hosted on your machine, you have full control.
Create an account by clicking “Create Account” link on the login page and it should be straight-forward from there.
If you have having issues with that, you can try doing it through the command line instead:
Terminal window
docker exec -ti penpot-penpot-backend-1 python3 ./manage.py create-profile
Updating Penpot
Whenever an update is release, you can update your local Penpot instance by running:
Terminal window
docker compose -f docker-compose.yaml pull
Backup Penpot
Penpot uses Docker volumes to store all persistent data. This allows you to delete and recreate containers whenever you want without losing information.
This also means you need to do regular backups of the contents of the volumes. You cannot directly copy the contents of the volume data folder. Docker provides you a volume backup procedure, that uses a temporary container to mount one or more volumes, and copy their data to an archive file stored outside of the container.
If you use Docker Desktop, there is an extension that may ease the backup process.
If you use the default docker compose file, there are two volumes used: one for the Postgres database and another one for the assets uploaded by your users (images and svg clips). There may be more volumes if you enable other features, as explained in the file itself.