Files
PaperPhone/server/.env.example
2026-03-30 01:02:02 +08:00

65 lines
3.1 KiB
Plaintext

# ─────────────────────────────────────────────────────────────────
# PaperPhone — Environment Variables
# Copy this file to server/.env and fill in real values
# ─────────────────────────────────────────────────────────────────
# ── Server ────────────────────────────────────────────────────────
PORT=3000
NODE_ENV=development
# ── JWT ───────────────────────────────────────────────────────────
# REQUIRED: generate a strong random secret, e.g.:
# openssl rand -hex 32
JWT_SECRET=change_this_to_a_long_random_string_in_production
JWT_EXPIRES_IN=7d
# ── MySQL ─────────────────────────────────────────────────────────
# Docker Compose: set DB_HOST=mysql (the service name)
DB_HOST=localhost
DB_PORT=3306
DB_USER=root
DB_PASS=root
DB_NAME=paperphone
# ── Redis ─────────────────────────────────────────────────────────
# Docker Compose: set REDIS_HOST=redis (the service name)
REDIS_HOST=localhost
REDIS_PORT=6379
REDIS_PASS=
# ── Cloudflare R2 (S3-compatible object storage) ─────────────────
# Get from: Cloudflare Dashboard → R2 → Manage API Tokens
R2_ACCOUNT_ID=
R2_ACCESS_KEY_ID=
R2_SECRET_ACCESS_KEY=
R2_BUCKET=paperphone
R2_PUBLIC_URL=
# ── Cloudflare TURN (optional — for cross-network WebRTC calls) ──
# Get from: Cloudflare Dashboard → Workers & Pages → Calls
CF_CALLS_APP_ID=
CF_CALLS_APP_SECRET=
# ── Web Push / VAPID (optional) ──────────────────────────────────
# Generate with: npx web-push generate-vapid-keys
VAPID_PUBLIC_KEY=
VAPID_PRIVATE_KEY=
VAPID_SUBJECT=mailto:admin@paperphone.app
# ── OneSignal (optional — Median.co native push) ─────────────────
# Get from: OneSignal Dashboard → Settings → Keys & IDs
ONESIGNAL_APP_ID=
ONESIGNAL_REST_KEY=
# ── Telegram Bot API (optional — sticker pack proxy) ─────────────
# Create a bot via @BotFather to get a token
TELEGRAM_BOT_TOKEN=
# ── Sticker Packs (optional) ─────────────────────────────────────
# Comma-separated list of Telegram sticker pack names with labels.
# Format: pack_name:Display Label,another_pack:Another Label
# No limit on quantity. Leave blank to use the 8 built-in defaults.
# Example:
# STICKER_PACKS=asterism_by_favorite_stickers_bot:Asterism,my_custom_pack:My Pack
STICKER_PACKS=