Files
bookstore/.env.example

76 lines
2.9 KiB
Bash

# Copy this to .env.dev / .env.staging / .env.production and fill in real
# values for that environment, then `chmod 600` it — it holds every API key
# and both DB passwords in plaintext, same as the secrets/<env>/ files
# deploy.sh derives from it. The filled-in files are gitignored — never
# commit them. Same code everywhere; only these values differ (see
# design doc §01, Environments & deployment).
#
# CAVEAT for the API keys below (DB_PASSWORD/DB_ROOT_PASSWORD are exempt —
# deploy.sh writes those into secrets/<env>/ files that bypass this
# entirely): docker compose passes these into containers via ${VAR}
# interpolation, which will silently mangle a value containing `$` followed
# by a letter (it tries to resolve it as another variable and blanks it out
# if unset). Avoid `$` in these specific values, or double it ($$) if you
# must use one — this bit us for real with a generated password once.
# --- Site ---
# (WP_ENVIRONMENT_TYPE is NOT set here — it's hardcoded per environment in
# docker-compose.{dev,staging,production}.yml so it can't go stale.)
SITE_DOMAIN=staging.example.com
SITE_URL=https://staging.example.com
SITE_TITLE="Bookstore (staging)"
# --- WordPress admin bootstrap (used only on first install) ---
WP_ADMIN_USER=admin
WP_ADMIN_PASSWORD=changeme
WP_ADMIN_EMAIL=admin@example.com
# --- Database ---
DB_NAME=bookstore
DB_USER=bookstore
DB_PASSWORD=changeme
DB_ROOT_PASSWORD=changeme
WP_TABLE_PREFIX=wp_
# --- Backups (deploy/backup.sh) ---
BACKUP_DIR=./backups
BACKUP_REMOTE=
BACKUP_RETENTION_DAYS=14
# --- Supplier adapters (design doc §04) ---
# staging: gutenberg_test production: booksrun,ingram
ACTIVE_SUPPLIER_ADAPTERS=gutenberg_test
BOOKSRUN_API_KEY=
# Week 4: bulk FTP inventory feed — placeholders, not yet consumed by any
# code beyond Import\BooksRunOfferSync::is_ftp_configured()'s empty check.
BOOKSRUN_FTP_HOST=
BOOKSRUN_FTP_PORT=
BOOKSRUN_FTP_USER=
BOOKSRUN_FTP_PASSWORD=
BOOKSRUN_FTP_REMOTE_PATH=
INGRAM_API_KEY=
INGRAM_ACCOUNT_ID=
# --- Payments (official WooCommerce Stripe gateway) ---
# Use test keys in dev/staging and live keys only in production. The deploy
# writes these values to gitignored Docker secret files before configuring
# the plugin. Webhook signing secret is optional but strongly recommended.
STRIPE_MODE=test
STRIPE_PUBLISHABLE_KEY=
STRIPE_SECRET_KEY=
STRIPE_WEBHOOK_SECRET=
# --- Marketing ---
MAILERLITE_API_KEY=
# --- Hardcover (AO3-style tag browsing — genre/mood/content-warning/tag sync) ---
# Get a token: hardcover.app account settings -> Hardcover API -> New API Key
HARDCOVER_API_TOKEN=
# --- Admin access restriction (production only) ---
# Space-separated IPs/CIDR ranges allowed to reach /wp-admin and
# /wp-login.php (matches Caddy's `remote_ip` syntax directly — no quotes,
# space-separated even though most other values here are one token).
# Leave blank to leave wp-admin reachable from anywhere (today's behavior).
WP_ADMIN_ALLOWED_IPS=