seafile的.env文件
# ==========================================
# Seafile 13.0 精简版 .env 配置文件
# ==========================================
SEAFILE_SERVER_HOSTNAME=YOUR-domain
SEAFILE_SERVER_PROTOCOL=https
INIT_SEAFILE_ADMIN_EMAIL=YOUR-email
INIT_SEAFILE_ADMIN_PASSWORD=YOUR-PASSWORD
JWT_PRIVATE_KEY=32位以上
INIT_SEAFILE_MYSQL_ROOT_PASSWORD=YOUR-PASSWORD
SEAFILE_MYSQL_DB_PASSWORD=YOUR-PASSWORD
SEAFILE_SERVER_PROTOCOL=https
SEAFILE_VOLUME=/data/seafile-data
SEAFILE_MYSQL_VOLUME=/data/seafile-mysql/db
REDIS_PASSWORD=YOUR-PASSWORD
SEAFILE_REDIS_IMAGE=redis
CACHE_PROVIDER=redis
SEAFILE_MYSQL_DB_HOST=db
REDIS_HOST=redis
EMAIL_USE_TLS = True
EMAIL_HOST = 'YOUR_EMAIL_SERVRE'
EMAIL_HOST_USER = 'email'
EMAIL_HOST_PASSWORD = 'YOUR-PASSWORD'
EMAIL_PORT = 587
DEFAULT_FROM_EMAIL = 'from-email'
SERVER_EMAIL = 'sever-email'
# 数据库连接与命名配置 (Seafile 初始化脚本强制要求)
SEAFILE_MYSQL_DB_HOST=db
SEAFILE_MYSQL_DB_PORT=3306
SEAFILE_MYSQL_DB_USER=seafile
SEAFILE_MYSQL_DB_CCNET_DB_NAME=ccnet_db
SEAFILE_MYSQL_DB_SEAFILE_DB_NAME=seafile_db
SEAFILE_MYSQL_DB_SEAHUB_DB_NAME=seahub_db
seafile的docker-compose.yml
services:
db:
image: mariadb:10.11
container_name: seafile-mysql
restart: unless-stopped
environment:
- MYSQL_ROOT_PASSWORD=${INIT_SEAFILE_MYSQL_ROOT_PASSWORD}
# 新增:专为 mysqladmin 提供的环境变量,用于健康检查免密认证
- MYSQL_PWD=${INIT_SEAFILE_MYSQL_ROOT_PASSWORD}
- MYSQL_LOG_CONSOLE=true
- MARIADB_AUTO_UPGRADE=1
volumes:
- ${SEAFILE_MYSQL_VOLUME}:/var/lib/mysql
networks:
- seafile-net
healthcheck:
# 修复:直接测试,它会自动读取 MYSQL_PWD 进行认证
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root"]
interval: 20s
timeout: 5s
retries: 5
start_period: 30s
redis:
image: ${SEAFILE_REDIS_IMAGE:-redis}
container_name: seafile-redis
restart: unless-stopped
environment:
# 新增:专为 redis-cli 提供的环境变量,用于健康检查免密认证
- REDISCLI_AUTH=${REDIS_PASSWORD}
# 修复:使用数组写法注入 compose 变量,避免密码中的特殊字符导致解析失败
command: ["redis-server", "--requirepass", "${REDIS_PASSWORD}"]
networks:
- seafile-net
healthcheck:
# 修复:直接 ping,它会自动读取 REDISCLI_AUTH 进行认证
test: ["CMD", "redis-cli", "ping"]
interval: 20s
timeout: 5s
retries: 5
seafile:
image: ${SEAFILE_IMAGE:-seafileltd/seafile-mc:13.0-latest}
container_name: seafile
restart: unless-stopped
ports:
- "127.0.0.1:8080:80"
volumes:
- ${SEAFILE_VOLUME}:/shared
env_file:
- .env
environment:
- SEAFILE_SERVER_LETSENCRYPT=false
# 强制等待 db 和 redis 完全健康后再启动
depends_on:
db:
condition: service_healthy
redis:
condition: service_healthy
networks:
- seafile-net
# Seafile 前端健康检查
healthcheck:
test: ["CMD", "curl", "-fsS", "http://localhost/"]
interval: 30s
timeout: 10s
retries: 5
start_period: 60s # 给 Seafile 服务足够的启动时间
networks:
seafile-net:
name: seafile-net
caddy的docker-compose.yml文件【我使用了cloudflare的DNS验证API】
{
email YOUR-email
}
YOUR-domain {
tls {
dns cloudflare {env.CF_API_TOKEN}
}
encode gzip
# 1. 自动补全尾部斜杠(模仿官方手册的 rewrite)
redir /seafdav /seafdav/
# 1. 开启访问日志
# 日志会保存在 /data/caddy/data 目录下,限制单文件50MB,保留3份
log {
output file /data/access.log {
roll_size 50mb
roll_keep 3
}
}
# 2. 增加基础安全响应头 (防止网页被恶意嵌套和嗅探)
header {
Strict-Transport-Security "max-age=31536000;"
X-Content-Type-Options nosniff
X-Frame-Options SAMEORIGIN
}
# 2. WebDAV 专项转发
# 注意:这里不要用 handle_path,要保留前缀
reverse_proxy /seafdav/* seafile:8080 {
header_up Host {host}
header_up X-Real-IP {remote_host}
header_up X-Forwarded-For {remote_host}
header_up X-Forwarded-Proto {scheme}
}
# 3. 基础界面转发
reverse_proxy seafile:80
}
启动:
alias re-sea="(cd /data/seafile && docker compose down && docker compose up -d) && (cd /data/caddy && docker compose down && docker compose up -d)"
source /root/.bashrc
re-sea