Seafile12服务内网自签发证书Docker部署方式总结分享
部署环境需要,测试了Seafile12服务在内网使用自签发证书的Docker部署方式,遇到并解决了一些问题,因此做个总结分享。
证书文件准备
自签发证书
使用证书工具用自己的根证书书签发服务证书。
注意:服务证书可选名称应包括Seafile服务的域名(本文seafile12test.example.com)、部署Seafile服务的主机IP(本文192.168.1.2)、Caddy容器可能使用的IP(Docker seafile-net网络前几个IP,比如:172.18.0.2~6)。
复制证书到目录
将根证书公钥(本文root.crt)和服务证书公钥(本文server.crt)和私钥(server.key)复制到部署Seafile服务主机“/opt”下对应目录。复制完成效果如下:
/opt/
├── seadoc-data
│ └── root.crt
├── seafile-caddy
│ └── certificates
│ └── local
│ └── seafile12test.example.com
│ ├── root.crt
│ ├── server.crt
│ └── server.key
└── seafile-data
└── root.crt
注意:服务证书应在“seafile-caddy/certificates/local/服务域名/”目录下,以免Caddy启动初始化目录时把文件删除了。
配置文件修改
.env文件
COMPOSE_FILE='seafile-server.yml,caddy.yml,seadoc.yml'
SEAFILE_SERVER_HOSTNAME=seafile12test.example.com
SEAFILE_SERVER_PROTOCOL=https
ENABLE_SEADOC=true
SEADOC_SERVER_URL=https://seafile12test.example.com/sdoc-server
# 其他配置项略,请自行配置
caddy.yml更改
添加“labels”段,不使用Caddy自动签发域名证书;其他不变。
......
environment:
- CADDY_INGRESS_NETWORKS=seafile-net
labels:
#caddy.debug:
caddy.auto_https: "disable_certs"
volumes:
......
如有调试需要,可以取消“caddy.debug”的注释,输出更详细的日志。
seafile-server.yml更改
添加Seafile容器本地域名解析、python证书信任,配置Caddy同时启用域名和IP转发及调用服务证书;其他不变。
......
container_name: seafile
command: /bin/bash -c "echo '192.168.1.2 seafile12test.example.com' >>/etc/hosts; cat /shared/root.crt >>/opt/seafile/seafile-server-12.0.4/seahub/thirdpart/certifi/cacert.pem; /sbin/my_init -- /scripts/enterpoint.sh "
......
labels:
caddy: "${SEAFILE_SERVER_PROTOCOL:-http}://${SEAFILE_SERVER_HOSTNAME:?Variable is not set or empty} https://192.168.1.2"
caddy.reverse_proxy: "{{upstreams 80}}"
caddy.tls: /data/caddy/certificates/local/seafile12test.example.com/server.crt /data/caddy/certificates/local/seafile12test.example.com/server.key
caddy.tls.ca_root: /data/caddy/certificates/local/seafile12test.example.com/root.crt
......
注:配置Caddy的IP转发不是必须的;配置了因为跨域问题,也不能用于在内网访问使用。但是,如果在Seafile主机外的前端还有代理时,就需要配置IP转发。
seadoc.yml
添加Seadoc容器本地域名解析、node证书信任,配置Caddy转发与“seafile-server.yml”配置一致;其他不变。
......
container_name: seadoc
command: /bin/bash -c "echo '192.168.1.2 seafile12test.example.com' >>/etc/hosts; /sbin/my_init -- /scripts/enterpoint.sh "
......
environment:
- NODE_EXTRA_CA_CERTS=/shared/root.crt
......
labels:
caddy: "${SEAFILE_SERVER_PROTOCOL:-http}://${SEAFILE_SERVER_HOSTNAME:?Variable is not set or empty} https://192.168.1.2"
......
启动后配置
当首次“docker compose up -d
”启动Seafile服务后,需要修改“seahub_settings.py”文件,添加“CSRF_TRUSTED_ORIGINS”配置,然后重启“seahub”。
echo 'CSRF_TRUSTED_ORIGINS = [ "https://seafile12test.example.com", "https://192.168.1.2" ]' >>/opt/seafile-data/seafile/conf/seahub_settings.py
docker exec -it seafile /opt/seafile/seafile-server-latest/seahub.sh stop
sleep 2
docker exec -it seafile /opt/seafile/seafile-server-latest/seahub.sh start
至此,如果你的内网DNS可以解析你的Seafile域名,或添加域名解析到本地host文件,就可以正常使用Seafile12服务了。
另,测试中如果Seafile服务主机重启,因容器启动快慢问题,可能存在Caddy没有收到Seafile的转发配置,需要“docker compose down
”再“docker compose up -d
”重启一次。