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.pswp.cn/news/902564.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/902564.shtml
英文地址,請注明出處:http://en.pswp.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…