docker部署seafile修改默认端口并安装配置onlyoffice实现在线编辑

背景

有很多场景会用到类似seafile功能的需求,比如:

  • 在内网中传输和共享文件
  • 个人部署私人网盘
  • 文档协同在线编辑
  • 写笔记
  • ...
    这些功能seafile均有实现,并且社区版提供的功能基本可以满足个人或者小型团队的日常需求

问题

由于主机的80和443端口属于常用端口,且比较敏感,如果是公司内网环境下,基于安全考虑,大多时候是禁止开放这两个端口的,但seafile提供的docker部署方式中,默认使用的端口恰好是80和443,以提供http和https访问。因此,本文要解决的主要问题就是修改seafile的默认服务端口,以避免端口占用和端口冲突问题。

官方安装文档:https://cloud.seafile.com/wiki/publish/seafile-manual/hk5G/

环境

  • 操作系统:CentOS 7
  • seafile:12.0

docker和docker-compose的安装过程不再赘述,没安装的可以参考官方安装文档

1.下载seafile镜像

(注:如果是在线环境(即可以联网)的情况下,此步骤可以跳过。)

在联网环境中,拉取seafile的docker镜像

bash 复制代码
docker pull seafileltd/seafile-mc:12.0-latest
docker pull mariadb:10.11
docker pull memcached:1.6.29
docker pull lucaslorentz/caddy-docker-proxy:2.9-alpine
docker pull seafileltd/sdoc-server:1.0-latest
docker pull seafileltd/notification-server:12.0-latest
docker pull docker.seafile.top/seafileltd/onlyoffice-documentserver:8.1

每个镜像的作用:

  • seafile-mc: seafile服务端
  • mariadb: 数据存储
  • memcached: 数据缓存
  • caddy: 反向代理
  • sdoc-server: 轻量级在线协同文档服务,主要用于渲染和编辑markdown文档
  • notification-server: 通知服务,提供文档状态的实时更新
  • onlyoffice-document: office文档在线预览和协同编辑

2.打包镜像

bash 复制代码
docker save -o seafile-mc.tar seafileltd/seafile-mc:12.0-latest
docker save -o mariadb.tar mariadb:10.11
docker save -o memcached.tar memcached:1.6.29
docker save -o caddy-proxy.tar lucaslorentz/caddy-docker-proxy:2.9-alpine
docker save -o seadoc-server.tar seafileltd/sdoc-server:1.0-latest
docker save -o notification-server.tar seafileltd/notification-server:12.0-latest
docker save -o onlyoffice-document.tar docker.seafile.top/seafileltd/onlyoffice-documentserver:8.1 

3.配置文件

(1)下载配置文件

在终端执行如下命令:

bash 复制代码
# 配置文件存储目录
mkdir /opt/seafile
cd /opt/seafile

# Seafile CE 12.0的docker-compose配置文件
wget -O .env https://manual.seafile.com/12.0/repo/docker/ce/env
wget https://manual.seafile.com/12.0/repo/docker/seadoc.yml
wget https://manual.seafile.com/12.0/repo/docker/ce/seafile-server.yml
wget https://manual.seafile.com/12.0/repo/docker/caddy.yml

(2)编辑配置文件

.env文件说明:

bash 复制代码
#  .env文件内容

# 这里配置执行docker-compose up -d命令时,生效的yml
COMPOSE_FILE='seafile-server.yml,caddy.yml,seadoc.yml'
COMPOSE_PATH_SEPARATOR=','

SEAFILE_IMAGE=seafileltd/seafile-mc:12.0-latest
SEAFILE_DB_IMAGE=mariadb:10.11
SEAFILE_MEMCACHED_IMAGE=memcached:1.6.29
SEAFILE_CADDY_IMAGE=lucaslorentz/caddy-docker-proxy:2.9-alpine
# seafile服务的挂载目录
SEAFILE_VOLUME=/opt/seafile-data
# mariadb数据存储服务的挂载目录
SEAFILE_MYSQL_VOLUME=/opt/seafile-mysql/db
# caddy反向代理的挂载目录
SEAFILE_CADDY_VOLUME=/opt/seafile-caddy

SEAFILE_MYSQL_DB_HOST=db
# mariadb数据库的root初始密码,建议修改
INIT_SEAFILE_MYSQL_ROOT_PASSWORD=ROOT_PASSWORD
SEAFILE_MYSQL_DB_USER=seafile
# mariadb数据库seafile用户的登录密码,建议修改
SEAFILE_MYSQL_DB_PASSWORD=PASSWORD

TIME_ZONE=Etc/UTC
# jwt秘钥,建议修改为32位-40位的复杂随机字符串
JWT_PRIVATE_KEY=AbCdEfGhIjKlMnOpQrStUvWxYz1234567890
# seafile服务的主机名
SEAFILE_SERVER_HOSTNAME=seafile.example.com
# 访问seafile使用的协议,我没有配置https,此处不再赘述
SEAFILE_SERVER_PROTOCOL=http
# seafile的管理员账号,修改为你容易记住的
[email protected]
# seafile的管理员密码,建议修改
INIT_SEAFILE_ADMIN_PASSWORD=asecret

# 是否启用seadoc服务,如果不需要可以设置为false
ENABLE_SEADOC=true
SEADOC_IMAGE=seafileltd/sdoc-server:1.0-latest
# 轻量级文档在线协同服务的挂载目录
SEADOC_VOLUME=/opt/seadoc-data

NOTIFICATION_SERVER_IMAGE=seafileltd/notification-server:12.0-latest
# 通知服务的挂载目录
NOTIFICATION_SERVER_VOLUME=/opt/notification-data

关键配置都已经添加了注释,按照注释修改即可。

我这里将docker容器的挂载目录设置为/root/docker-volumn/seafile,请根据你的需求自行调整。调整后的.env配置文件如下:

bash 复制代码
COMPOSE_FILE='seafile-server.yml,caddy.yml,seadoc.yml'
COMPOSE_PATH_SEPARATOR=','

SEAFILE_IMAGE=seafileltd/seafile-mc:12.0-latest
SEAFILE_DB_IMAGE=mariadb:10.11
SEAFILE_MEMCACHED_IMAGE=memcached:1.6.29
SEAFILE_CADDY_IMAGE=lucaslorentz/caddy-docker-proxy:2.9-alpine

SEAFILE_VOLUME=/root/docker-volumn/seafile/seafile-data
SEAFILE_MYSQL_VOLUME=/root/docker-volumn/seafile/seafile-mysql/db
SEAFILE_CADDY_VOLUME=/root/docker-volumn/seafile/seafile-caddy

SEAFILE_MYSQL_DB_HOST=db
INIT_SEAFILE_MYSQL_ROOT_PASSWORD=your_mysql_root_passwd
SEAFILE_MYSQL_DB_USER=seafile
SEAFILE_MYSQL_DB_PASSWORD=your_mysql_seafile_passwd

TIME_ZONE=Etc/UTC

JWT_PRIVATE_KEY=AbCdEfGhIjKlMnOpQrStUvWxYz1234567890
# 关键配置!!!!!!注意这里,hostname设置为192.168.44.46:8080,看后面说明
SEAFILE_SERVER_HOSTNAME=192.168.44.46:8080
SEAFILE_SERVER_PROTOCOL=http

[email protected]
INIT_SEAFILE_ADMIN_PASSWORD=your_admin_password

SEADOC_IMAGE=seafileltd/sdoc-server:1.0-latest
SEADOC_VOLUME=/root/docker-volumn/seafile/seadoc-data

ENABLE_SEADOC=true

NOTIFICATION_SERVER_IMAGE=seafileltd/notification-server:12.0-latest
NOTIFICATION_SERVER_VOLUME=/root/docker-volumn/seafile/notification-data

由于服务器的80和443端口已经被占用,并且没有https需求,因此,我需要将seafile的默认服务端口80调整到8080端口,因此,需要在.env配置文件中修改SEAFILE_SERVER_HOSTNAME参数为192.168.44.46:8080,其中192.168.44.46为本机ip。

但是只修改这一个地方还不行,还需要修改caddy.yml文件,将其中的端口映射全部注释,然后添加8080到8080的端口映射

yml 复制代码
# 编辑caddy.yml
services:

  caddy:
    image: ${SEAFILE_CADDY_IMAGE:-lucaslorentz/caddy-docker-proxy:2.9-alpine}
    restart: unless-stopped
    container_name: seafile-caddy
    ports:
      - 8080:8080
    #  - 80:80
    #  - 8443:443
    environment:
      - CADDY_INGRESS_NETWORKS=seafile-net
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ${SEAFILE_CADDY_VOLUME:-/opt/seafile-caddy}:/data/caddy
    networks:
      - seafile-net
    healthcheck:
      test: ["CMD-SHELL", "curl --fail http://localhost:2019/metrics || exit 1"]
      start_period: 20s
      interval: 20s
      timeout: 5s
      retries: 3

networks:
  seafile-net:
    name: seafile-net

4.安装seafile

(1)上传配置文件和docker镜像到服务器

将上述配置文件.envcaddy.ymlseafile-server.ymlseadoc.yml和打包好的docker镜像上传到要部署seafile的服务器

(2)加载镜像

在docker镜像所在目录下执行如下命令:

bash 复制代码
docker load -i seafile-mc.tar
docker load -i mariadb.tar
docker load -i memcached.tar
docker load -i caddy-proxy.tar
docker load -i seadoc-server.tar
docker load -i notification-server.tar
docker load -i onlyoffice-document.tar

(3)安装seafile

在配置文件所在目录下执行如下命令:

bash 复制代码
docker-compose up -d

然后执行docker ps -a或者docker-compose ps查看容器状态为up状态并且没有exited,则表示启动成功。

然后在浏览器访问http://192.168.44.46:8080,并使用.env中配置的seafile管理员账号和密码登录即可。

至此,seafile基础服务安装完成

如果不需要office文档在线编辑和协同编辑服务的话,到这里就算已经完成了,如果需要部署onlyoffice服务,请接着往下看。

5.安装配置onlyoffice服务

(1)下载配置文件

bash 复制代码
wget https://manual.seafile.com/12.0/repo/docker/onlyoffice.yml

(2)编辑配置文件

.env配置文件中添加如下配置:

bash 复制代码
# 在COMPOSE_FILE参数后面添加onlyoffice.yml
COMPOSE_FILE='seafile-server.yml,caddy.yml,seadoc.yml,onlyoffice.yml'
# 在文件末尾添加如下配置
# onlyoffice服务挂载目录
ONLYOFFICE_VOLUME=/root/docker-volumn/seafile/seafile-onlyoffice
# onlyoffice服务端口
ONLYOFFICE_PORT=6233
# jwt秘钥,和上面的JWT_PRIVATE_KEY复杂度要求相同
ONLYOFFICE_JWT_SECRET=AbCdEfGhIjKlMnOpQrStUvWxYz1234567890
# onlyoffice的主机名,这个是后加的参数
ONLYOFFICE_SERVER_HOSTNAME=192.168.44.46

注:我的onlyoffice和seafile部署在同一台服务器上,因此ONLYOFFICE_SERVER_HOSTNAMESEAFILE_SERVER_HOSTNAME使用相同的IP,但不同的是,ONLYOFFICE_SERVER_HOSTNAME后面没有端口号,因为我们修改了seafile的默认端口,因此,不能再通过SEAFILE_SERVER_HOSTNAME来引用参数了。ONLYOFFICE_SERVER_HOSTNAME这个参数在onlyoffice.yml文件中被引用。

(3)修改onlyoffice.yml

bash 复制代码
---
services:
  caddy:
    ports:
      - ${ONLYOFFICE_PORT:-6233}:${ONLYOFFICE_PORT:-6233}

  onlyoffice:
    image: onlyoffice/documentserver:8.0
    restart: unless-stopped
    container_name: seafile-onlyoffice
    environment:
      #- DB_TYPE=${DB_TYPE:-mariadb}
      #- DB_HOST=${SEAFILE_MYSQL_DB_HOST:-db}
      #- DB_USER=${SEAFILE_MYSQL_DB_USER:-seafile}
      #- DB_PWD=${SEAFILE_MYSQL_DB_PASSWORD:?Variable is not set or empty}
      - JWT_ENABLED=true
      - JWT_SECRET=${ONLYOFFICE_JWT_SECRET:?Variable is not set or empty}
    volumes:
      - ${ONLYOFFICE_VOLUME:-/opt/onlyoffice}/logs:/var/log/onlyoffice
      - ${ONLYOFFICE_VOLUME:-/opt/onlyoffice}/data:/var/www/onlyoffice/Data
      - ${ONLYOFFICE_VOLUME:-/opt/onlyoffice}/lib:/var/lib/onlyoffice
    labels:
      # 修改前
      # caddy: ${SEAFILE_SERVER_PROTOCOL:-http}://${SEAFILE_SERVER_HOSTNAME:?Variable is not set or empty}:${ONLYOFFICE_PORT:-6233}
      # 修改后
      caddy: ${SEAFILE_SERVER_PROTOCOL:-http}://${ONLYOFFICE_SERVER_HOSTNAME:?Variable is not set or empty}:${ONLYOFFICE_PORT:-6233}
      caddy.reverse_proxy: "{{upstreams}}"
    networks:
      - seafile-net

networks:
  seafile-net:
    name: seafile-net

从上述配置文件中的修改前后可以看到这里只是将SEAFILE_SERVER_HOSTNAME引用修改为ONLYOFFICE_SERVER_HOSTNAME了,因为如果按照原来的引用的话,那么在caddy中的onlyoffice代理配置将会转发到192.168.44.46:8080:6233,所以就会报错。

(6)上传配置文件和docker镜像

此处参考第4章,不再赘述。

(7)重新安装部署seafile+onlyoffice

在配置文件所在目录执行:

bash 复制代码
# 停止并删除原来的容器(此操作不会删除挂载数据)
docker-compose down

等待执行完成后,重新执行:

bash 复制代码
docker-compose up -d

如果不出意外,应该可以正常使用seafile和onlyoffice的在线编辑功能了。至此,大功告成。

如果有报错,建议先排查,如果实在排查不到问题所在,可以删除挂载目录下的文件,然后重新执行docker-compose up -d进行部署。

相关推荐
andrew_121910 分钟前
docker底层原理简述
linux·docker·容器
庸子15 分钟前
Docker镜像与容器概念解析
运维·docker·容器
李菠菜26 分钟前
配置Docker国内镜像加速
docker·容器
庸子3 小时前
解析虚拟机与Docker容器化服务的本质差异及Docker核心价值
运维·docker·容器
RQ_ghylls4 小时前
21.disql命令登录达梦数据库,查询并操作数据库
java·linux·开发语言·数据库·windows·docker·数据分析
李菠菜4 小时前
非root用户运行Docker命令的最佳实践
linux·docker·容器
西柚小萌新5 小时前
【人工智能agent】--docker本地部署dify教程
人工智能·docker·容器
Saggitarxm15 小时前
阿里云镜像加速仅支持阿里云产品了
阿里云·docker·云计算·镜像加速
007php00716 小时前
使用 Docker 安装 Elastic Stack 并重置本地密码
大数据·运维·后端·mysql·docker·eureka·jenkins