Skip to main content

Docker Deployment

Deploy the PocketPing bridge server using Docker for production use.

Quick Start

docker run -d \
--name pocketping-bridge \
-p 3001:3001 \
-e TELEGRAM_BOT_TOKEN=your_token \
-e TELEGRAM_FORUM_CHAT_ID=your_chat_id \
ghcr.io/pocketping/pocketping-bridge:latest

Docker Compose

For production, use Docker Compose:

docker-compose.yml
version: '3.8'

services:
bridge:
image: ghcr.io/pocketping/pocketping-bridge:latest
container_name: pocketping-bridge
ports:
- "3001:3001"
environment:
# Server
- PORT=3001
- API_KEY=${API_KEY}

# Telegram (optional)
- TELEGRAM_BOT_TOKEN=${TELEGRAM_BOT_TOKEN}
- TELEGRAM_FORUM_CHAT_ID=${TELEGRAM_FORUM_CHAT_ID}

# Discord (optional)
- DISCORD_BOT_TOKEN=${DISCORD_BOT_TOKEN}
- DISCORD_CHANNEL_ID=${DISCORD_CHANNEL_ID}

# Slack (optional)
- SLACK_BOT_TOKEN=${SLACK_BOT_TOKEN}
- SLACK_APP_TOKEN=${SLACK_APP_TOKEN}
- SLACK_CHANNEL_ID=${SLACK_CHANNEL_ID}

# AI (optional)
- OPENAI_API_KEY=${OPENAI_API_KEY}
- AI_SYSTEM_PROMPT=${AI_SYSTEM_PROMPT}

restart: unless-stopped
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3001/health"]
interval: 30s
timeout: 10s
retries: 3

Create a .env file:

.env
API_KEY=your_secret_api_key

# Telegram
TELEGRAM_BOT_TOKEN=123456789:ABCdefGHIjklMNOpqrsTUVwxyz
TELEGRAM_FORUM_CHAT_ID=-1001234567890

# Discord
DISCORD_BOT_TOKEN=your_discord_token
DISCORD_CHANNEL_ID=123456789012345678

Run:

docker compose up -d

Environment Variables

VariableRequiredDescription
PORTNoServer port (default: 3001)
API_KEYNoSecret key for API authentication
TELEGRAM_BOT_TOKENIf using TelegramBot token from BotFather
TELEGRAM_FORUM_CHAT_IDIf using TelegramSupergroup ID (starts with -100)
DISCORD_BOT_TOKENIf using DiscordDiscord bot token
DISCORD_CHANNEL_IDIf using DiscordChannel ID for threads
SLACK_BOT_TOKENIf using SlackSlack bot token (xoxb-)
SLACK_APP_TOKENIf using SlackSlack app token (xapp-)
SLACK_CHANNEL_IDIf using SlackSlack channel ID
OPENAI_API_KEYIf using AIOpenAI API key for AI fallback

With Traefik (HTTPS)

docker-compose.yml
version: '3.8'

services:
bridge:
image: ghcr.io/pocketping/pocketping-bridge:latest
environment:
- TELEGRAM_BOT_TOKEN=${TELEGRAM_BOT_TOKEN}
- TELEGRAM_FORUM_CHAT_ID=${TELEGRAM_FORUM_CHAT_ID}
labels:
- "traefik.enable=true"
- "traefik.http.routers.pocketping.rule=Host(`bridge.yourdomain.com`)"
- "traefik.http.routers.pocketping.tls.certresolver=letsencrypt"
restart: unless-stopped

traefik:
image: traefik:v2.10
command:
- "--providers.docker=true"
- "--entrypoints.websecure.address=:443"
- "--certificatesresolvers.letsencrypt.acme.tlschallenge=true"
- "--certificatesresolvers.letsencrypt.acme.email=you@example.com"
- "--certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json"
ports:
- "443:443"
volumes:
- "/var/run/docker.sock:/var/run/docker.sock:ro"
- "./letsencrypt:/letsencrypt"

Health Checks

The bridge server exposes a health endpoint:

curl http://localhost:3001/health
# {"status":"ok","bridges":{"telegram":true,"discord":false,"slack":false}}

Logs

View logs:

docker logs pocketping-bridge -f

Updating

docker compose pull
docker compose up -d

Next Steps