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镜像

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.打包镜像

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)下载配置文件

在终端执行如下命令:

# 配置文件存储目录
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文件说明:

#  .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-caddySEAFILE_MYSQL_DB_HOST=db
# mariadb数据库的root初始密码,建议修改
INIT_SEAFILE_MYSQL_ROOT_PASSWORD=ROOT_PASSWORD
SEAFILE_MYSQL_DB_USER=seafile
# mariadb数据库seafile用户的登录密码,建议修改
SEAFILE_MYSQL_DB_PASSWORD=PASSWORDTIME_ZONE=Etc/UTC
# jwt秘钥,建议修改为32位-40位的复杂随机字符串
JWT_PRIVATE_KEY=AbCdEfGhIjKlMnOpQrStUvWxYz1234567890
# seafile服务的主机名
SEAFILE_SERVER_HOSTNAME=seafile.example.com
# 访问seafile使用的协议,我没有配置https,此处不再赘述
SEAFILE_SERVER_PROTOCOL=http
# seafile的管理员账号,修改为你容易记住的
INIT_SEAFILE_ADMIN_EMAIL=me@example.com
# seafile的管理员密码,建议修改
INIT_SEAFILE_ADMIN_PASSWORD=asecret# 是否启用seadoc服务,如果不需要可以设置为false
ENABLE_SEADOC=true
SEADOC_IMAGE=seafileltd/sdoc-server:1.0-latest
# 轻量级文档在线协同服务的挂载目录
SEADOC_VOLUME=/opt/seadoc-dataNOTIFICATION_SERVER_IMAGE=seafileltd/notification-server:12.0-latest
# 通知服务的挂载目录
NOTIFICATION_SERVER_VOLUME=/opt/notification-data

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

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

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-alpineSEAFILE_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-caddySEAFILE_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_passwdTIME_ZONE=Etc/UTCJWT_PRIVATE_KEY=AbCdEfGhIjKlMnOpQrStUvWxYz1234567890
# 关键配置!!!!!!注意这里,hostname设置为192.168.44.46:8080,看后面说明
SEAFILE_SERVER_HOSTNAME=192.168.44.46:8080
SEAFILE_SERVER_PROTOCOL=httpINIT_SEAFILE_ADMIN_EMAIL=admin@example.com
INIT_SEAFILE_ADMIN_PASSWORD=your_admin_passwordSEADOC_IMAGE=seafileltd/sdoc-server:1.0-latest
SEADOC_VOLUME=/root/docker-volumn/seafile/seadoc-dataENABLE_SEADOC=trueNOTIFICATION_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的端口映射

# 编辑caddy.yml
services:caddy:image: ${SEAFILE_CADDY_IMAGE:-lucaslorentz/caddy-docker-proxy:2.9-alpine}restart: unless-stoppedcontainer_name: seafile-caddyports:- 8080:8080#  - 80:80#  - 8443:443environment:- CADDY_INGRESS_NETWORKS=seafile-netvolumes:- /var/run/docker.sock:/var/run/docker.sock- ${SEAFILE_CADDY_VOLUME:-/opt/seafile-caddy}:/data/caddynetworks:- seafile-nethealthcheck:test: ["CMD-SHELL", "curl --fail http://localhost:2019/metrics || exit 1"]start_period: 20sinterval: 20stimeout: 5sretries: 3networks:seafile-net:name: seafile-net

4.安装seafile

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

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

(2)加载镜像

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

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

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

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)下载配置文件

wget https://manual.seafile.com/12.0/repo/docker/onlyoffice.yml

(2)编辑配置文件

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

# 在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

---
services:caddy:ports:- ${ONLYOFFICE_PORT:-6233}:${ONLYOFFICE_PORT:-6233}onlyoffice:image: onlyoffice/documentserver:8.0restart: unless-stoppedcontainer_name: seafile-onlyofficeenvironment:#- 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/onlyofficelabels:# 修改前# 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-netnetworks: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

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

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

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

docker-compose up -d

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/902564.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机视觉cv2入门之视频处理

在我们进行计算机视觉任务时,经常会对视频中的图像进行操作,这里我来给大家分享一下,cv2对视频文件的操作方法。这里我们主要介绍cv2.VideoCapture函数的基本使用方法。 cv2.VideoCapture函数 当我们在使用cv2.VideoCapture函数时&#xff…

Linux之彻底掌握防火墙-----安全管理详解

—— 小 峰 编 程 目录: 一、防火墙作用 二、防火墙分类 1、逻辑上划分:大体分为 主机防火墙 和 网络防火墙 2、物理上划分: 硬件防火墙 和 软件防火墙 三、硬件防火墙 四、软件防火墙 五、iptables 1、iptables的介绍 2、netfilter/…

python项目实战-后端个人博客系统

本文分享一个基于 Flask 框架开发的个人博客系统后端项目,涵盖用户注册登录、文章发布、分类管理、评论功能等核心模块。适合初学者学习和中小型博客系统开发。 一、项目结构 blog │ app.py │ forms.py │ models.py │ ├───instance │ blog.d…

Unity 接入阿里的全模态大模型Qwen2.5-Omni

1 参考 根据B站up主阴沉的怪咖 开源的项目的基础上修改接入 AI二次元老婆开源项目地址(unity-AI-Chat-Toolkit): Github地址:https://github.com/zhangliwei7758/unity-AI-Chat-Toolkit Gitee地址:https://gitee.com/DammonSpace/unity-ai-chat-too…

第十五届蓝桥杯 2024 C/C++组 合法密码

目录 题目: 题目描述: 题目链接: 思路: substr函数: 思路详解: 代码: 代码详解; 题目: 题目描述: 题目链接: P10906 [蓝桥杯 2024 国 B] 合法密码 -…

NoSQL 简单讲解

目录 1. NoSQL 的背景与意义 1.1 数据库的演变 1.2 NoSQL 的兴起 2. NoSQL 数据库的分类 2.1 键值存储(Key-Value Stores) 2.2 文档数据库(Document Stores) 2.3 列族存储(Column-Family Stores) 2.…

122.在 Vue3 中使用 OpenLayers 实现图层层级控制(zIndex)显示与设置详解

📅 作者:彭麒 📫 邮箱:1062470959@qq.com 📌 声明:本文源码归吉檀迦俐所有,欢迎学习借鉴,如用于商业项目请注明出处 🙌 🔧 技术栈:Vue 3 + Composition API + OpenLayers 6+ + Element Plus + Tailwind CSS 🧠 一、什么是 zIndex(图层层级)? 在地图开发中…

车载测试用例开发-如何平衡用例覆盖度和测试效率的方法论

1 摘要 在进行车载测试用例编写时,会遇到多个条件导致用例排列组合爆炸的情况,但是为了产品测试质量,我们又不得不保证用例设计的需求覆盖度,这样又会使得测试周期非常长。我们如何平衡效率和测试质量?本文进行了一些…

AI——神经网络以及TensorFlow使用

文章目录 一、TensorFlow安装二、张量、变量及其操作1、张量Tensor2、变量 三、tf.keras介绍1、使用tf.keras构建我们的模型2、激活函数1、sigmoid/logistics函数2、tanh函数3、RELU函数4、LeakReLu5、SoftMax6、如何选择激活函数 3、参数初始化1、bias偏置初始化2、weight权重…

Kubernetes (k8s) 日常运维命令总结

一、资源查看 查看所有命名空间的 Pod kubectl get pod --all-namespaces查看指定命名空间的 Pod kubectl get pod --namespace <命名空间>查看所有部署&#xff08;Deployments&#xff09; kubectl get deployments.apps --all-namespaces查看所有守护进程集&#xff0…

【PostgreSQL教程】PostgreSQL 特别篇之 语言接口连接Perl

博主介绍:✌全网粉丝22W+,CSDN博客专家、Java领域优质创作者,掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围:SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物联网、机器学习等设计与开发。 感兴趣的可…

07-IDEA企业开发工具-开发入门程序

1. IDEA创建Java项目的代码结构 项目结构: IDEA中的Java项目包含四种主要结构&#xff1a;工程(Project)、模块(Module)、包(Package)、类(Class)。 工程(Project): 代表整个项目&#xff0c;通常是一个磁盘目录或文件夹。模块(Module): 工程下的子单元&#xff0c;用于划分项…

深度解析云计算:概念、优势与分类全览

以下是对云计算概念、优点和分类更详细的介绍&#xff1a; 一、云计算的概念 云计算是一种通过互联网提供计算服务的模式&#xff0c;它基于虚拟化、分布式计算、网络存储等一系列先进技术&#xff0c;将计算资源进行整合和管理&#xff0c;形成一个庞大的资源池。这些资源包…

高并发系统的通用设计方法是什么?

背景 高并发系统的通用设计方法是解决系统在面对大量用户访问时的性能瓶颈问题。当系统遇到性能瓶颈时&#xff0c;通常是因为某个单点资源&#xff08;如数据库、后端云服务器、网络带宽等&#xff09;达到了极限。 为了提升整个系统的容量&#xff0c;需要找到这个瓶颈资源…

【手机】vivo手机应用声音分离方案

文章目录 前言方案 前言 尝试分离vivo手机音乐与其他应用的声音 方案 最佳方案&#xff1a;网易云音乐设置内关闭音量均衡 上传不同的白噪音&#xff0c;成功 goodlock&#xff0c;主要适用于三星手机&#xff0c;vivo不一定适用 app volume control &#xff0c;可行

一个报错说函数为私有函数

你遇到的警告信息&#xff1a; warning: declaration of struct Zero2TenVDrv will not be visible outside of this function [-Wvisibility]这是编译器提示你在某个函数内部声明了一个结构体 struct Zero2TenVDrv&#xff0c;但这个结构体的声明作用域仅限于该函数内部&…

3.2 Agent核心能力:感知、规划、决策与执行

智能代理&#xff08;Agent&#xff09;是一种能够在复杂环境中自主运作的计算实体&#xff0c;其智能行为依赖于四大核心能力&#xff1a;感知&#xff08;Perception&#xff09;、规划&#xff08;Planning&#xff09;、决策&#xff08;Decision-making&#xff09;和执行…

图解Mysql原理:深入理解事务的特性以及它的实现机制

前言 大家好&#xff0c;我是程序蛇玩编程。 Mysql中事务大家不陌生吧&#xff0c;事务就是要保证一组数据库操作&#xff0c;要么全部成功&#xff0c;要么全部失败。那它具有哪些特性&#xff0c;如何实现的呢?接着往下看。 正文 事务的特性: 事务的基本特性主要为四种…

进行网页开发时,怎样把function()中变量值在控制台输出,查看?

在网页开发过程中&#xff0c;为了及时了解JavaScript中的function函数中的变量值&#xff0c;可以用控制台命令console.log()把变量的值在控制台输出&#xff0c;方便调试时对函数变量值进行了解。 看下面的一段示例&#xff1a; <!DOCTYPE html> <html> &l…

linux内核进程管理(1)——创建,退出

linux源码阅读——进程管理&#xff08;1&#xff09; 1. 进程的基本介绍1.1 linux中进程和线程的区别1.2 task_struct中的基本内容1.3 命名空间ns(namespace)命名空间结构图Linux 中的命名空间类型 1.4 进程标识符 2. 创建一个进程的流程2.1 CLONE宏2.2 创建进程系统调用1. do…