- Docker: Multi-stage Dockerfile with security hardening, docker-compose for production and development environments - Environment: Comprehensive .env.example with all config options, lib/config/env.ts for typed environment validation - Logging: Structured JSON logging with request/response middleware - Monitoring: Prometheus metrics endpoint, Grafana dashboard, health checks (liveness/readiness probes) - Security: Security headers, rate limiting, CORS middleware - CI/CD: GitHub Actions workflows for CI, production deploy, and preview deployments - Error tracking: Sentry integration foundation Files created: - Docker: Dockerfile, docker-compose.yml, docker-compose.dev.yml, .dockerignore - Config: lib/config/env.ts, lib/config/index.ts - Logging: lib/logging/logger.ts, lib/logging/middleware.ts - Monitoring: lib/monitoring/sentry.ts, lib/monitoring/metrics.ts, lib/monitoring/health.ts - Security: lib/security/headers.ts, lib/security/rateLimit.ts, lib/security/cors.ts - API: pages/api/health/*, pages/api/metrics.ts - Infra: infra/prometheus/prometheus.yml, infra/grafana/*
128 lines
No EOL
4.6 KiB
Text
128 lines
No EOL
4.6 KiB
Text
# =============================================================================
|
|
# LocalGreenChain Environment Variables
|
|
# Agent 4: Production Deployment
|
|
# Copy this file to .env.local and fill in the values
|
|
# =============================================================================
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# Application Settings
|
|
# -----------------------------------------------------------------------------
|
|
NODE_ENV=development
|
|
PORT=3001
|
|
NEXT_PUBLIC_API_URL=http://localhost:3001
|
|
NEXT_PUBLIC_APP_NAME=LocalGreenChain
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# Database (PostgreSQL)
|
|
# -----------------------------------------------------------------------------
|
|
DATABASE_URL=postgresql://lgc:lgc_password@localhost:5432/localgreenchain
|
|
DB_USER=lgc
|
|
DB_PASSWORD=lgc_password
|
|
DB_NAME=localgreenchain
|
|
DB_HOST=localhost
|
|
DB_PORT=5432
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# Redis Cache
|
|
# -----------------------------------------------------------------------------
|
|
REDIS_URL=redis://localhost:6379
|
|
REDIS_HOST=localhost
|
|
REDIS_PORT=6379
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# Authentication (NextAuth.js)
|
|
# Generate secret: openssl rand -base64 32
|
|
# -----------------------------------------------------------------------------
|
|
NEXTAUTH_URL=http://localhost:3001
|
|
NEXTAUTH_SECRET=your-secret-key-change-in-production
|
|
|
|
# OAuth Providers (optional)
|
|
GITHUB_CLIENT_ID=
|
|
GITHUB_CLIENT_SECRET=
|
|
GOOGLE_CLIENT_ID=
|
|
GOOGLE_CLIENT_SECRET=
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# Error Tracking (Sentry)
|
|
# -----------------------------------------------------------------------------
|
|
SENTRY_DSN=
|
|
NEXT_PUBLIC_SENTRY_DSN=
|
|
SENTRY_ORG=
|
|
SENTRY_PROJECT=
|
|
SENTRY_AUTH_TOKEN=
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# Logging
|
|
# Levels: error, warn, info, debug, trace
|
|
# -----------------------------------------------------------------------------
|
|
LOG_LEVEL=info
|
|
LOG_FORMAT=json
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# Monitoring
|
|
# -----------------------------------------------------------------------------
|
|
PROMETHEUS_ENABLED=false
|
|
METRICS_PORT=9091
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# Plants.net API (optional)
|
|
# -----------------------------------------------------------------------------
|
|
PLANTS_NET_API_KEY=your_api_key_here
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# Tor Configuration (optional)
|
|
# -----------------------------------------------------------------------------
|
|
TOR_ENABLED=false
|
|
TOR_SOCKS_HOST=127.0.0.1
|
|
TOR_SOCKS_PORT=9050
|
|
TOR_CONTROL_PORT=9051
|
|
TOR_HIDDEN_SERVICE_DIR=/var/lib/tor/localgreenchain
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# Privacy Settings
|
|
# -----------------------------------------------------------------------------
|
|
DEFAULT_PRIVACY_MODE=standard
|
|
ALLOW_ANONYMOUS_REGISTRATION=true
|
|
LOCATION_OBFUSCATION_DEFAULT=fuzzy
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# File Storage (S3/R2/MinIO)
|
|
# -----------------------------------------------------------------------------
|
|
STORAGE_PROVIDER=local
|
|
S3_BUCKET=
|
|
S3_REGION=
|
|
S3_ACCESS_KEY_ID=
|
|
S3_SECRET_ACCESS_KEY=
|
|
S3_ENDPOINT=
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# Email (SMTP)
|
|
# -----------------------------------------------------------------------------
|
|
SMTP_HOST=localhost
|
|
SMTP_PORT=1025
|
|
SMTP_USER=
|
|
SMTP_PASSWORD=
|
|
SMTP_FROM=noreply@localgreenchain.local
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# Rate Limiting
|
|
# -----------------------------------------------------------------------------
|
|
RATE_LIMIT_WINDOW_MS=60000
|
|
RATE_LIMIT_MAX_REQUESTS=100
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# Security
|
|
# -----------------------------------------------------------------------------
|
|
CORS_ORIGINS=http://localhost:3001
|
|
CSP_REPORT_URI=
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# Legacy Drupal Settings (for backward compatibility)
|
|
# -----------------------------------------------------------------------------
|
|
NEXT_PUBLIC_DRUPAL_BASE_URL=http://localhost:8080
|
|
NEXT_IMAGE_DOMAIN=localhost
|
|
DRUPAL_CLIENT_ID=52ce1a10-bf5c-4c81-8edf-eea3af95da84
|
|
DRUPAL_CLIENT_SECRET=SA9AGbHnx6pOamaAus2f9LG9XudHFjKs
|
|
DRUPAL_SITE_ID=example_marketing
|
|
DRUPAL_PREVIEW_SECRET=secret
|
|
DRUPAL_FRONT_PAGE=/home |