pip0

Deploy pip0 on Hetzner

From a blank VPS to a production-ready pip0 instance with SSL — ~30 minutes.

CX22 — €4.49/moUbuntu 24.04Docker + nginx + Certbot

Prerequisites

  • ✓ A pip0 license key (from your welcome email)
  • ✓ A domain name pointed at your server (for SSL — optional but recommended)
  • ✓ A Hetzner Cloud account

1

Create the server

  1. Log in to Hetzner Cloud Console
  2. Click + New Project → name it pip0
  3. Click Add Server and configure:
SettingValue
LocationPick closest to you
ImageUbuntu 24.04
TypeShared CPU → CX22 (2 vCPU, 4 GB RAM)
NetworkingPublic IPv4 ✅
SSH keysAdd your public key (recommended)
Namepip0-server
  1. Click Create & Buy Now
  2. Note the server's public IP address
2

Configure the firewall

In Hetzner Console → Firewalls → Create Firewall:

DirectionProtocolPortSource
InboundTCP22Your IP (SSH)
InboundTCP80Any (HTTP — for Certbot)
InboundTCP443Any (HTTPS)
InboundTCP8080Any (pip0 — until SSL is set up)

Apply the firewall to your pip0-server.

3

Connect and update the server

ssh root@YOUR_SERVER_IP
apt-get update && apt-get upgrade -y
4

Install Docker

curl -fsSL https://get.docker.com | sh

Verify:

docker --version
docker compose version
Docker Compose is included as a plugin — no separate install needed.
5

Point your domain (optional but recommended)

In your DNS provider, add an A record:

NameTypeValue
pip0.yourdomain.comAYOUR_SERVER_IP
DNS propagation takes 1–10 minutes.

You can skip this and use http://YOUR_SERVER_IP:8080 instead, but HTTPS is required for webhooks from external services (Stripe, WhatsApp, etc.) to work reliably.
6

Run the pip0 wizard

On your local machine, go to pip0.ai/setup and complete the wizard:

  1. Enter your license key
  2. Select the pieces (integrations) you want installed
  3. On the Config step, set your domain:
    • — With domain: http://pip0.yourdomain.com
    • — IP only: http://YOUR_SERVER_IP
  4. Download pip0-setup.zip
7

Upload and start pip0

Transfer the ZIP to your server:

scp pip0-setup.zip root@YOUR_SERVER_IP:/root/

On the server:

cd /root
unzip pip0-setup.zip
cd pip0-setup

Log in to the pip0 registry:

docker login registry.pip0.ai
# Username: your purchase email
# Password: your license key

Start pip0:

docker compose up -d
First boot pulls the image (~1.5 GB) and runs database migrations — takes 2–5 minutes.
Watch progress: docker compose logs -f pip0

Once started, open:

http://YOUR_SERVER_IP:8080/sign-up

Create your admin account. This triggers the piece filter — your selected integrations are applied after sign-up.

8

Set up SSL with nginx + Certbot

Skip this section if using IP-only access.

Install nginx and Certbot

apt-get install -y nginx certbot python3-certbot-nginx

Create nginx config

cat > /etc/nginx/sites-available/pip0 << 'EOF'
server {
    listen 80;
    server_name pip0.yourdomain.com;

    location / {
        proxy_pass http://localhost:8080;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_cache_bypass $http_upgrade;
        proxy_read_timeout 300s;
        proxy_connect_timeout 300s;
    }
}
EOF

Enable the site

ln -s /etc/nginx/sites-available/pip0 /etc/nginx/sites-enabled/
nginx -t
systemctl reload nginx

Issue SSL certificate

certbot --nginx -d pip0.yourdomain.com

Update pip0 environment

cd /root/pip0-setup
sed -i 's|AP_FRONTEND_URL=.*|AP_FRONTEND_URL=https://pip0.yourdomain.com|' .env
Do not change AP_INTERNAL_URL — it must stay as http://localhost:3000. This is the internal engine callback URL, unrelated to your public domain.
docker compose down && docker compose up -d

Your instance is now live at https://pip0.yourdomain.com.

9

Auto-start on reboot

restart: unless-stopped is already set in the generated docker-compose.yml — no extra configuration needed. pip0 restarts automatically after a server reboot.


Troubleshooting

pip0 not loading after docker compose up -d

Wait 2–5 minutes for first boot. Check logs: docker compose logs -f pip0

502 Bad Gateway from nginx

pip0 is still starting. Run docker compose ps — all 3 containers (pip0, postgres, redis) must be Up.

Piece filter not applied after sign-up

Check logs for [post-install] Platform row found. Running SQL... — if absent, wait a moment after sign-up and check again.

docker login fails

Use your license key (UUID from welcome email) as the password — not your pip0.ai account password.

Lost your .env file

Re-run the wizard at pip0.ai/setup. ⚠ New secrets will be generated — back up your DB first: docker compose exec postgres pg_dump -U postgres postgres > backup.sql


Maintenance

Update pip0:

cd /root/pip0-setup
docker compose pull
docker compose down && docker compose up -d

Back up your database:

docker compose exec postgres pg_dump -U postgres postgres > pip0-backup-$(date +%Y%m%d).sql

View logs:

docker compose logs -f pip0