Files
web-rust-template-project/docs/deployment/environment-variables.md
2026-02-13 16:06:56 +08:00

9.9 KiB
Raw Permalink Blame History

环境变量配置说明

本文档提供所有可配置的环境变量说明。

目录


配置优先级

配置的加载优先级从高到低为:

  1. 环境变量(最高优先级)
  2. 配置文件config/ 目录)
  3. 默认值(代码中硬编码)

这意味着:

  • 环境变量会覆盖配置文件中的设置
  • 配置文件会覆盖代码中的默认值

服务器配置

SERVER_HOST

服务器监听地址。

属性
类型 字符串
默认值 0.0.0.0
说明 0.0.0.0 表示监听所有网络接口

示例

SERVER_HOST=127.0.0.1  # 仅本地访问
SERVER_HOST=0.0.0.0     # 允许外部访问

SERVER_PORT

服务器监听端口。

属性
类型 整数
默认值 3000
说明 1-65535 之间的有效端口

示例

SERVER_PORT=3000   # 开发环境
SERVER_PORT=8080   # 生产环境
SERVER_PORT=80     # HTTP 标准端口

数据库配置

DATABASE_TYPE

数据库类型,支持 MySQL、PostgreSQL、SQLite。

属性
类型 字符串
默认值 sqlite
可选值 mysqlpostgresqlsqlite

示例

DATABASE_TYPE=sqlite       # SQLite 数据库
DATABASE_TYPE=mysql        # MySQL 数据库
DATABASE_TYPE=postgresql  # PostgreSQL 数据库

MySQL 配置

DATABASE_TYPE=mysql 时使用。

DATABASE_HOST

MySQL 服务器地址。

属性
类型 字符串
默认值 localhost

示例

DATABASE_HOST=localhost
DATABASE_HOST=192.168.1.100
DATABASE_HOST=mysql.example.com

DATABASE_PORT

MySQL 服务器端口。

属性
类型 整数
默认值 3306

示例

DATABASE_PORT=3306

DATABASE_USER

MySQL 用户名。

属性
类型 字符串
默认值 -
必填

示例

DATABASE_USER=root
DATABASE_USER=webapp

DATABASE_PASSWORD

MySQL 密码。

属性
类型 字符串
默认值 -
必填

示例

DATABASE_PASSWORD=your-password

DATABASE_DATABASE

MySQL 数据库名称。

属性
类型 字符串
默认值 -
必填

示例

DATABASE_DATABASE=web_template

PostgreSQL 配置

DATABASE_TYPE=postgresql 时使用,配置项与 MySQL 相同。

环境变量 说明 默认值
DATABASE_HOST PostgreSQL 服务器地址 localhost
DATABASE_PORT PostgreSQL 服务器端口 5432
DATABASE_USER PostgreSQL 用户名 -
DATABASE_PASSWORD PostgreSQL 密码 -
DATABASE_DATABASE PostgreSQL 数据库名称 -

SQLite 配置

DATABASE_TYPE=sqlite 时使用。

DATABASE_PATH

SQLite 数据库文件路径。

属性
类型 字符串
默认值 -
必填

示例

DATABASE_PATH=data/app.db
DATABASE_PATH=/var/data/webapp.db

注意

  • 目录必须存在,程序不会自动创建目录
  • 文件不存在时会自动创建

DATABASE_MAX_CONNECTIONS

数据库连接池最大连接数。

属性
类型 整数
默认值 10

示例

DATABASE_MAX_CONNECTIONS=10    # 开发环境
DATABASE_MAX_CONNECTIONS=100   # 生产环境

建议

  • 开发环境5-10
  • 生产环境:根据应用负载调整(通常是 CPU 核心数的 2-4 倍)

认证配置

AUTH_JWT_SECRET

JWT 签名密钥。

属性
类型 字符串
默认值 -
必填

安全建议

  • 生产环境使用至少 32 位的随机字符串
  • 定期更换密钥
  • 不要在代码中硬编码

生成强密钥

# 使用 OpenSSL
openssl rand -base64 32

# 使用 Python
python -c "import secrets; print(secrets.token_urlsafe(32))"

# 使用 Node.js
node -e "console.log(require('crypto').randomBytes(32).toString('base64'))"

示例

# 开发环境(不安全)
AUTH_JWT_SECRET=dev-secret-key

# 生产环境(安全)
AUTH_JWT_SECRET=Kx7Yn2Zp9qR8wF4tL6mN3vB5xC8zD1sE9aH2jK7

AUTH_ACCESS_TOKEN_EXPIRATION_MINUTES

Access Token 过期时间(分钟)。

属性
类型 整数
默认值 15

示例

AUTH_ACCESS_TOKEN_EXPIRATION_MINUTES=15   # 15 分钟(推荐)
AUTH_ACCESS_TOKEN_EXPIRATION_MINUTES=30   # 30 分钟
AUTH_ACCESS_TOKEN_EXPIRATION_MINUTES=60   # 1 小时

建议

  • 安全性要求高5-15 分钟
  • 用户体验优先30-60 分钟
  • 权衡安全性和用户体验

AUTH_REFRESH_TOKEN_EXPIRATION_DAYS

Refresh Token 过期时间(天)。

属性
类型 整数
默认值 7

示例

AUTH_REFRESH_TOKEN_EXPIRATION_DAYS=7    # 7 天(推荐)
AUTH_REFRESH_TOKEN_EXPIRATION_DAYS=30   # 30 天
AUTH_REFRESH_TOKEN_EXPIRATION_DAYS=90   # 90 天

建议

  • Web 应用7-30 天
  • 移动应用30-90 天
  • 安全性要求高的应用7 天或更短

Redis 配置

REDIS_HOST

Redis 服务器地址。

属性
类型 字符串
默认值 localhost

示例

REDIS_HOST=localhost
REDIS_HOST=192.168.1.100
REDIS_HOST=redis.example.com

REDIS_PORT

Redis 服务器端口。

属性
类型 整数
默认值 6379

示例

REDIS_PORT=6379

REDIS_PASSWORD

Redis 密码(如果设置了密码)。

属性
类型 字符串
默认值 -
必填

示例

REDIS_PASSWORD=your-redis-password

REDIS_DB

Redis 数据库编号。

属性
类型 整数
默认值 0
范围 0-15

示例

REDIS_DB=0    # 默认数据库
REDIS_DB=1    # 数据库 1

配置示例

开发环境SQLite

重要:本项目不支持 .env 文件。开发环境请使用 config/ 目录下的 toml 配置文件。

方式一:使用默认配置(最简单)

无需任何配置,直接运行即可:

cargo run

方式二:修改配置文件

如果需要修改配置,编辑 config/default.toml 或创建 config/local.toml

# 复制默认配置
cp config/default.toml config/local.toml

# 编辑配置文件
nano config/local.toml  # 或使用其他编辑器

# 运行
cargo run -- -c config/local.toml

开发环境MySQL

重要:本项目不支持 .env 文件。开发环境请使用 config/ 目录下的 toml 配置文件。

编辑 MySQL 配置文件:

# 编辑开发环境配置文件
nano config/development.toml

# 设置 database.type = "mysql" 并修改连接信息

# 运行
cargo run

或使用环境变量(适用于 Docker/Kubernetes

DATABASE_TYPE=mysql \
DATABASE_HOST=localhost \
DATABASE_PORT=3306 \
DATABASE_USER=root \
DATABASE_PASSWORD=root \
DATABASE_DATABASE=web_template_dev \
cargo run

生产环境

重要:本项目不支持 .env 文件。生产环境请使用 config/ 目录下的 toml 配置文件或环境变量。

方式一:使用配置文件

修改 config/production.toml 中的配置:

# 编辑生产环境配置文件
nano config/production.toml

# 运行
cargo run -- -e production -c config/production.toml

方式二使用环境变量Docker/Kubernetes 推荐)

DATABASE_TYPE=mysql \
DATABASE_HOST=mysql.production.example.com \
DATABASE_PORT=3306 \
DATABASE_USER=webapp \
DATABASE_PASSWORD=strong-password-here \
DATABASE_DATABASE=web_template_prod \
DATABASE_MAX_CONNECTIONS=100 \
AUTH_JWT_SECRET=Kx7Yn2Zp9qR8wF4tL6mN3vB5xC8zD1sE9aH2jK7 \
REDIS_HOST=redis.production.example.com \
REDIS_PORT=6379 \
REDIS_PASSWORD=strong-redis-password \
REDIS_DB=0 \
cargo run -- -e production

Docker Compose 配置

# docker-compose.yml
version: '3.8'

services:
  web:
    image: web-rust-template:latest
    ports:
      - "3000:3000"
    environment:
      - SERVER_HOST=0.0.0.0
      - SERVER_PORT=3000
      - DATABASE_TYPE=postgresql
      - DATABASE_HOST=db
      - DATABASE_PORT=5432
      - DATABASE_USER=webapp
      - DATABASE_PASSWORD=password
      - DATABASE_DATABASE=web_template
      - DATABASE_MAX_CONNECTIONS=10
      - AUTH_JWT_SECRET=${JWT_SECRET}
      - AUTH_ACCESS_TOKEN_EXPIRATION_MINUTES=15
      - AUTH_REFRESH_TOKEN_EXPIRATION_DAYS=7
      - REDIS_HOST=redis
      - REDIS_PORT=6379
      - REDIS_DB=0
    depends_on:
      - db
      - redis

  db:
    image: postgres:15
    environment:
      - POSTGRES_USER=webapp
      - POSTGRES_PASSWORD=password
      - POSTGRES_DB=web_template
    volumes:
      - postgres_data:/var/lib/postgresql/data

  redis:
    image: redis:7
    volumes:
      - redis_data:/data

volumes:
  postgres_data:
  redis_data:

安全检查清单

生产环境部署前检查:

  • JWT 密钥使用强随机字符串(至少 32 位)
  • 数据库密码使用强密码
  • Redis 设置密码(如果可从外部访问)
  • 服务器监听地址根据需求配置0.0.0.0 或 127.0.0.1
  • 数据库连接数根据负载调整
  • Token 过期时间根据安全要求配置
  • 环境变量文件不提交到版本控制

相关文档


提示:使用 .env.example 作为模板,不要提交包含敏感信息的 .env 文件到版本控制。