Install Pawkey

Installing Pawkey can be done in two ways:

  • Standalone install

    You clone the repository build everything, set up the database by yourself, set up redis by yourself

  • Docker install

    Copy a few files, set config values and deploy

Before you start, you really need:

  • an 24/7 powered on server with an active network connection
  • a domain name you can dedicate to your Pawkey instance, resolving to the server
  • a reverse proxy running on the same machine or another machine on the local network, with valid SSL/TLS certificates for the domain name

Docker install

This is by far the easiest way to install Pawkey, it is recommended to most people.

To install docker refer to the Docker Engine install page

Create the directories you’ll need:

mkdir Pawkey && mkdir Pawkey/.config

Fetch all required examples and enter directory:

wget -O Pawkey/compose.yml https://git.boykissers.com/pawkey/pawkey/raw/branch/dev/compose.yml
wget -O Pawkey/.config/default.yml https://git.boykissers.com/pawkey/pawkey/raw/branch/dev/.config/example.yml
wget -O Pawkey/.config/docker.env https://git.boykissers.com/pawkey/pawkey/raw/branch/dev/.config/docker_example.env
cd Pawkey

Edit docker.env file with your database credentials, this is STRONGLY recommended for security reasons even tho the database server isn’t exposed to the internet

# db settings
POSTGRES_PASSWORD=example-pawkey-pass
POSTGRES_USER=example-pawkey-user
POSTGRES_DB=pawkey

Edit the required config values in .config/default.yml.

url: https://{YOUR DOMAIN NAME}/

Also remember to change the localhost values for Redis and DB, They should match your database and valkey container hostnames so in result this:

db:
  host: db
  port: 5432

  ...

redis:
  host: valkey
  port: 6379

Replace {YOUR DOMAIN NAME} with an actual domain that will be used for this server

Also remember to set proper database credentials in the config matching what you have entered in docker.env

In your compose.yml file, uncomment the env_file it should look like this as the result:

    networks:
      - paws
    env_file:
      - .config/docker.env
    ...

Congratulations, now you can start the containers:

sudo docker compose up -d

Standalone install

Prerequisites:

  • More than 2GB of free RAM, we recommend at least 4GB
  • Node.js version 22 or later, with Bun
  • PostgreSQL version 17 or later
  • Valkey or Redis 7+
  • FFmpeg
  • All the various packages to compile and build C code, and Python (on Debian-style systems, that’s build-essential & python)
  • Some system libraries and their development headers: pango, cairo, pixman, librsvg (on Debian-style systems, that’s libpango1.0-dev libcairo2-dev libpixman-1-dev librsvg2-2)

We won’t be going in-depth about installing PostgreSQL or Valkey / Redis. Refer to their official documentations or Google.

Create a pawkey user:

adduser --disabled-password --disabled-login pawkey

Start a shell as that user:

sudo -u pawkey bash

(or something like that), then clone the Pawkey repository, and copy the example configuration file:

git clone --recurse-submodules -b dev https://git.boykissers.com/pawkey/pawkey.git Pawkey
cd Pawkey
bun install --frozen-lockfile
cp .config/example.yml .config/default.yml

Edit the required config values in .config/default.yml..

url: {YOUR DOMAIN NAME}
db:
  host: localhost
  port: 5432
  #ssl: false
  # Database name
  db: pawkey

  # Auth
  user: pawkey
  pass: <YOUR PASSWORD>

redis:
  host: localhost
  port: 6379

Build Pawkey:

bun run build

Create the PostgreSQL user and database, either with createuser and createdb or with sudo -u postgres psql and then running these commands inside psql:

CREATE DATABASE pawkey WITH ENCODING = 'UTF8';
CREATE USER pawkey WITH ENCRYPTED PASSWORD '<YOUR_PASSWORD>';
GRANT ALL PRIVILEGES ON DATABASE pawkey TO pawkey;
ALTER DATABASE pawkey OWNER TO pawkey;
q

Replace <YOUR PASSWORD> with the password you want to use, Remember it has to be the same in the default.yml config file.

Then run the migrations:

bun run init

And start Pawkey:

bun run start

If everything worked as it should, you should see lines ending with something like this:

Now listening on port 3000 on https://example.tld

but with a different URL at the end (you did change the url setting in the config file, right?). Stop that process (control-C is enough), and set up a system service for Pawkey.

With systemd

Create a file /etc/systemd/system/pawkey.service containg:

[Unit]
Description=Pawkey Service

[Service]
Type=simple
User=pawkey
ExecStart=/home/pawkey/.bun/bin/bun start
WorkingDirectory=/home/pawkey/Pawkey
Environment="NODE_ENV=production"
TimeoutSec=60
StandardOutput=journal
StandardError=journal
SyslogIdentifier=pawkey
Restart=always

[Install]
WantedBy=multi-user.target

The Bun binary location can be different on your system, check it with where bun.

Then:

sudo systemctl daemon-reload
sudo systemctl enable pawkey
sudo systemctl start pawkey

After that, sudo systemctl status pawkey should show that it’s running. Now you can open your instance URL in your browser, to complete the setup.

Updating Pawkey

For update instructions, look at Updating Pawkey page.

Troubleshooting

Something doesn’t work? Refer to the Troubleshooting Guide

Proxy Setup

Refer to the Proxy Setup page