Back to Docs

Self-hosting with Docker

The pix3ltools-deploy repository provides a Docker Compose stack for running the entire Pix3lTools ecosystem on your own server.

Services

ServicePortDescription
pix3lboard3000Kanban board
pix3lwiki3001Wiki documentation
pix3lprompt3002AI prompt editor
pix3lmcp3010MCP server for Claude
sqld8080LibSQL database
watchtowerImage update monitor
traefik80/443HTTPS reverse proxy (VPS only)

Docker images are published to GitHub Container Registry:

ghcr.io/pix3ltools-lab/pix3lboard:latest
ghcr.io/pix3ltools-lab/pix3lwiki:latest
ghcr.io/pix3ltools-lab/pix3lprompt:latest
ghcr.io/pix3ltools-lab/pix3lmcp:latest

Prerequisites

Quick Start (Local / WSL / macOS / Linux)

git clone https://github.com/Pix3ltools-lab/pix3ltools-deploy.git
cd pix3ltools-deploy
./setup.sh

The setup.sh script:

  1. Checks that Docker is installed and running
  2. Generates a .env file with a secure JWT_SECRET
  3. Starts all containers
  4. Initializes the database and creates the admin account

After setup, access the apps at:

Environment Variables

Create a .env file (or copy .env.example):

# Required
JWT_SECRET=your-secret-key-minimum-32-characters-long

# Pix3lMCP integration
PIX3LBOARD_MCP_EMAIL=admin@example.com
PIX3LBOARD_MCP_PASSWORD=YourPassword123
PIX3LBOARD_MCP_WORKSPACE_IDS=    # configure after first login

# Optional
LOG_LEVEL=info

Production VPS with HTTPS

For a production server with HTTPS and Let’s Encrypt certificates:

./setup.sh              # initial setup
./setup-https.sh        # configure Traefik + Let's Encrypt
sudo ./setup-fail2ban.sh  # brute-force protection (optional)

setup-https.sh will ask for:

Manual Setup

If you prefer to configure manually:

cp .env.example .env
# Edit .env with a strong JWT_SECRET (32+ characters)

docker compose up -d

Then initialize the databases:

# Pix3lBoard database
git clone https://github.com/Pix3ltools-lab/pix3lboard.git /tmp/pix3lboard
TURSO_DATABASE_URL=http://localhost:8080 TURSO_AUTH_TOKEN=dummy \
  E2E_USER_EMAIL=admin@example.com E2E_USER_PASSWORD=YourPassword123 \
  bash /tmp/pix3lboard/scripts/db-init.sh

# Pix3lWiki database
git clone https://github.com/Pix3ltools-lab/pix3lwiki.git /tmp/pix3lwiki
source .env
TURSO_DATABASE_URL=http://localhost:8080 TURSO_AUTH_TOKEN=dummy JWT_SECRET="$JWT_SECRET" \
  E2E_USER_EMAIL=admin@example.com E2E_USER_PASSWORD=YourPassword123 \
  bash /tmp/pix3lwiki/scripts/db-init.sh

Updating

docker compose pull
docker compose up -d

Backup

# Database
docker compose cp sqld:/var/lib/sqld ./backup-db

# File attachments (Pix3lBoard thumbnails and uploads)
docker compose cp pix3lboard:/data/blob-storage ./backup-blobs

Deploying on Vercel

Each project can also be deployed independently on Vercel.

Prerequisites

Pix3lBoard / Pix3lWiki

# Install Turso CLI and create a database
curl -sSfL https://get.tur.so/install.sh | bash
turso auth login
turso db create pix3lboard
turso db show pix3lboard --url     # → TURSO_DATABASE_URL
turso db tokens create pix3lboard  # → TURSO_AUTH_TOKEN

In the Vercel dashboard:

  1. Import the repository
  2. Set Framework Preset to Astro (for the website) or Next.js (for the apps)
  3. Add environment variables: TURSO_DATABASE_URL, TURSO_AUTH_TOKEN, JWT_SECRET
  4. Deploy

Pix3lPrompt

No environment variables required. Import the repository in Vercel and deploy — zero configuration needed.

Pix3lMCP

# In Vercel dashboard
# Add: PIX3LBOARD_URL, PIX3LBOARD_API_KEY (or EMAIL+PASSWORD), WORKSPACE_IDS

After deploy, register in Claude Code:

claude mcp add --transport http --scope user pix3lboard -- https://<your-deployment>.vercel.app/api/mcp