Server Setup with Docker

This is a step-by-step instruction guide to setting up your own Drawpile server on a cheap cloud Linux server, using the Docker based all-in-one installer script.

The following knowledge is assumed:

  • Basic Linux command line
  • How to connect to a server using SSH
  • How to use a text editor in Linux

Step 1. Get a (virtual) server

First, you will need an actual server to run the server software on. The Drawpile server is not very demanding, so the cheapest server from Hetzner, Digital Ocean, IONOS, OVH, or any other cloud VPS provider will do just fine.

You can also use a physical machine at home (even a Raspberry Pi!) but you will need to ensure your Internet connection is up to the task.

When creating the server, you must choose which Linux distribution to use. In this tutorial, I will use Debian.

Tip: before renting a real server, you can practice by downloading Debian and installing it on virtual machine like VirtualBox. Set your VirtualBox machine's network mode to Bridged Adapter so it will get an IP address on your network for easy access.

There is one thing I strongly recommend you to do first before anything else, and that is disable password based SSH logins. Instead, set up and use SSH-keys. Your cloud service provider likely has good tutorials you can follow.

If there is just one thing you do to secure your server, do this. There are bots constantly scanning the Internet for servers with weak passwords. If you don't secure your server, you will get hacked.

Step 2. Get and run the installer script

First, log in to your server as root. To download the installer script, you will need Git. If you’re using Debian, install it like this:

apt install git

Next, download the setup script:

git clone https://github.com/drawpile/dpserver.git

Now, you can run the setup script. This will download all the necessary components.

cd dpserver
./setup.sh

The script will first download and install Docker, then the it will ask you some questions about the server environment. Specifically:

  • Your domain name. If you don’t have one, use your server’s IP address
  • Whether you want to use Let’s Encrypt. You will need a domain name for this to work.
  • If you have a Discord channel where you’d like to relay your server abuse reports

At this point, no server is actually started. If you wish, you can make additional customizations first. The setup script will write a file named .env. You can modify this file later yourself.

Docker-compose is used to manage the actual server processes. Out of the box, the docker-compose file will provide you with:

  • The Drawpile server itself
  • A list server (that just shows the active sessions by default)
  • An abuse report bridge (relays server abuse reports to a Discord webhook)
  • A web server
  • Let’s Encrypt SSL certificate for the web server
  • Web admin
  • WebSocket support for the web browser version of Drawpile

See the readme file for more information on how to customize the server package. For example, if you already have a web server, you will not want to use the nginx server included in the docker-compose file.

Step 3. Run the server

Once you’re satisfied with the configuration, you can try starting the server up:

./docker-compose-wrapper up

The server will shut down when you hit Ctrl+C. To start the server and leave it running in the background, use:

./docker-compose-wrapper up -d

To update the server components, run git pull to update the repository. If you changed any of the files inside, you may have to resolve resulting conflicts. Then run ./docker-compose-wrapper pull, followed by ./docker-compose-wrapper up -d to restart the changed services.

You can update the web admin to the latest version by running the ./update-webadmin.sh script.

Before connecting to the server, if your VPS provider has an additional local firewall (IONOS does!), you should make sure the ports 27750, 443, and 80 are allowed.