76 lines
2.9 KiB
Bash
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=
|