Seafile 12专业版使用自己的ssl证书开启https实现公网域名访问并启用onlyoffice

一直使用的是seafile 8.0版本,好几年没有升级,看到最新的12版本新增了seadoc并且界面美好,就折腾着安装了好久,其间踩坑无数,官方的安装教程很简洁,也许是高估了新手的水平,参考论坛大佬分享的经验加上自己不断的试错,终于算是解决了这个问题,把经验分享给大家,希望对新手能有所帮助。
首先说一下基本网络环境,有公网ip4地址(因为开始的时候使用ipv6地址来测试,知识库始终不能正常使用),并且有一个自己的域名,路由器具有端口转发功能,可以说要求并不高,基本都能满足。
下面把配置贴出来,#后边有中文的部分就是需要自己修改的地方,如原本没有此项则创建

下载地址

# Seafile PRO 12.0(Github镜像源)
wget -O .env https://manual.seafile.com/12.0/repo/docker/pro/env
wget https://manual.seafile.com/12.0/repo/docker/seadoc.yml
wget https://manual.seafile.com/12.0/repo/docker/pro/seafile-server.yml
wget https://manual.seafile.com/12.0/repo/docker/caddy.yml
wget https://manual.seafile.com/12.0/repo/docker/onlyoffice.yml

.env文件

############################################
#      Docker compose configurations       #
############################################
COMPOSE_FILE='seafile-server.yml,caddy.yml,seadoc.yml,onlyoffice.yml'
COMPOSE_PATH_SEPARATOR=','

## Images
SEAFILE_IMAGE=seafileltd/seafile-pro-mc:12.0-latest
SEAFILE_DB_IMAGE=mariadb:10.11.11
SEAFILE_MEMCACHED_IMAGE=memcached:1.6.38
SEAFILE_ELASTICSEARCH_IMAGE=elasticsearch:8.18.0
SEAFILE_CADDY_IMAGE=lucaslorentz/caddy-docker-proxy:ci-alpine
SEADOC_IMAGE=seafileltd/sdoc-server:1.0-latest
NOTIFICATION_SERVER_IMAGE=seafileltd/notification-server:12.0-latest
SEASEARCH_IMAGE=seafileltd/seasearch:latest
ONLYOFFICE_IMAGE=onlyoffice/documentserver:latest

## Persistent Storage
BASIC_STORAGE_PATH=/opt/seafile-12        #此处自定义Seafile的安装目录
SEAFILE_VOLUME=$BASIC_STORAGE_PATH/seafile-data
SEAFILE_MYSQL_VOLUME=$BASIC_STORAGE_PATH/seafile-mysql/db
SEAFILE_ELASTICSEARCH_VOLUME=$BASIC_STORAGE_PATH/seafile-elasticsearch/data
SEAFILE_CADDY_VOLUME=$BASIC_STORAGE_PATH/seafile-caddy
NOTIFICATION_SERVER_VOLUME=$BASIC_STORAGE_PATH/notification-data
SS_DATA_PATH=$BASIC_STORAGE_PATH/seasearch-data 
SEADOC_VOLUME=$BASIC_STORAGE_PATH/seadoc-data
ONLYOFFICE_VOLUME=$BASIC_STORAGE_PATH/onlyoffice

############################################
#      Startup parameters                  #
############################################

SEAFILE_SERVER_PORT=7777        #此处设置Seafile服务的访问端口
SEAFILE_SERVER_PROTOCOL=https        #此处设置是否开启https
SEAFILE_SERVER_HOSTNAME=seafile.example.com:$SEAFILE_SERVER_PORT        #此处设置Seafile服务的域名或IP地址
CADDY_CERT_PATH=$SEAFILE_CADDY_VOLUME/certs        #此处设置caddy ssl证书的存放目录
CADDY_SSL_CERTIFICATE_CRT=seafile.example.com.crt        #此处输入自己申请的ssl crt证书名称
CADDY_SSL_CERTIFICATE_KEY=seafile.example.com.key        #此处输入自己申请的ssl key证书名称
TIME_ZONE=Asia/Shanghai
JWT_PRIVATE_KEY=密码        #此处设置JWT密码,不少于32位

## Database
SEAFILE_MYSQL_DB_HOST=db
SEAFILE_MYSQL_DB_USER=seafile
SEAFILE_MYSQL_DB_PASSWORD=密码        #此处设置数据库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

## Database root password, Used to create Seafile users
INIT_SEAFILE_MYSQL_ROOT_PASSWORD=密码        #此处设置数据库root用户密码

## Seafile admin user
INIT_SEAFILE_ADMIN_EMAIL=seafile@example.com        #此处设置Seafile网站的登录邮箱账号
INIT_SEAFILE_ADMIN_PASSWORD=密码        #此处设置Seafile网站的账号登录密码

## OnlyOffice
ONLYOFFICE_PORT=6233        #此处设置onlyoffice的映射端口
ONLYOFFICE_JWT_SECRET=密码        #此处密码应与前边的JWT密码相同

caddy.yml

    ports:
      - 80:80
      - 443:443
      - ${SEAFILE_SERVER_PORT:-7777}:443        #此处映射Seafile服务的访问端口
    environment:
      - CADDY_INGRESS_NETWORKS=seafile-net
    labels:
      caddy.auto_https: "disable_certs"        #禁止caddy自动申请ssl证书
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ${SEAFILE_CADDY_VOLUME:-/opt/seafile-caddy}:/data/caddy
      - ${CADDY_CERT_PATH:-/opt/seafile-caddy/certs}:/etc/caddy/certs        #此处设置caddy ssl证书存放目录

seadoc.yml

    labels:
      caddy: ${SEAFILE_SERVER_PROTOCOL:-http}://seafile.example.com        #此处设置Seafile服务的域名或IP地址,注意不要带端口号

seafile-server.yml

    labels:
      caddy: ${SEAFILE_SERVER_PROTOCOL:-http}://seafile.example.com        #此处设置Seafile服务的域名或IP地址,注意不要带端口号
      caddy.tls: /etc/caddy/certs/${CADDY_SSL_CERTIFICATE_CRT} /etc/caddy/certs/${CADDY_SSL_CERTIFICATE_KEY}        #此处设置caddy ssl证书,直接复制不需要修改

onlyoffice.yml

    ports:
      - ${ONLYOFFICE_PORT:-6233}:443        #此处设置onlyoffice的映射端口

准备工作完成,开始部署

docker compose pull
docker compose up -d
#启动完成之后还需要做一些修改
docker compose stop

#复制自己的ssl证书到caddy目录,证书名称必须和.env中设置的相同
/opt/seafile-12/seafile-caddy/certs
#复制自己的ssl证书到onlyoffice目录,必须重命名为onlyoffice.crt和onlyoffice.key
/opt/seafile-12/onlyoffice/data/certs

#需要手动给 elasticsearch/data的映射路径 777 权限
chmod 777 -R /opt/seafile-12/seafile-elasticsearch/data

#编辑seahub_settings.py文件,在末尾添加,根据自己的实际情况修改网址及JWT密码
ENABLE_ONLYOFFICE = True
ONLYOFFICE_APIJS_URL = 'https://seafile.example.com:6233/web-apps/apps/api/documents/api.js'
ONLYOFFICE_FILE_EXTENSION = ('doc', 'docx', 'ppt', 'pptx', 'xls', 'xlsx', 'odt', 'fodt', 'odp', 'fodp', 'ods', 'fods', 'csv', 'ppsx', 'pps')
ONLYOFFICE_EDIT_FILE_EXTENSION = ('doc', 'docx', 'ppt', 'pptx', 'xls', 'xlsx', 'odt', 'fodt', 'odp', 'fodp', 'ods', 'fods', 'csv', 'ppsx', 'pps')
ONLYOFFICE_JWT_SECRET = 'JWT密码'

#再次启动,顺利的话可以正常访问seafile网站并使用onlyoffice了
docker compose up -d

以上就是全部安装过程,如果遇到问题可以参考一下,抛砖引玉,有不对的地方还请谅解。

感谢楼主无私分享,但docker compose pull拉取不了,怎么办?

配置Docker容器镜像加速器
vim /etc/docker/daemon.json

{
  "dns": ["223.5.5.5", "223.6.6.6"],
  "registry-mirrors":
    [
      "https://docker.m.daocloud.io",
      "https://docker-pull.ygxz.in",
      "https://hub.registry-mirrors.top"
    ]
}