CentOS 服務器 基於 Docker 部署 Seafile + OnlyOffice ,開啟自定義域名和 https 的詳細教程。
一、用 Docker 部署 Seafile 服務
1.安裝 docker
因為 Seafile v7.x.x 容器是通過 docker-compose 命令運行的,所以首先要安裝Docker。
# 安裝 Docker yum -y install docker # 啟動 Docker systemctl start docker # 設置 Docker開機自啟動 systemctl enable docker
-----------------------------其它 Docker常用命令-------------------------- # 查看版本號 docker -v # 查看 Docker 狀態,報錯時候使用 systemctl status docker # 停止 Docker systemctl stop docker # 重啟 Docker systemctl restart docker # 查看正在運行的容器 docker ps # 查看所有容器,包括停止的容器 docker ps -a # 查看容器占用資源情況 docker stats # 查看容器的日志(可在這查看報錯信息) docker logs 容器名或ID # 啟動已被停止的容器 docker start 容器名或ID # 停止運行中的容器 docker stop 容器名或ID # 重啟容器 docker restart 容器名或ID
2.安裝 docker-compose
官方是通過docker-compose管理 seafile、seafile-elasticsearch、seafile-memcached 和 seafile-mysql 四個容器。
Docker-Compose 項目是 Docker 官方的開源項目,負責實現對 Docker 容器集群的快速編排。
因為 Seafile v7.x.x 容器是通過 docker-compose 命令運行的,所以您應該在服務器上安裝該命令。
# for CentOS yum install docker-compose -y # for Ubuntu apt-get install docker-compose -y
如遇到權限問題可以執行以下命令
sudo groupadd docker sudo gpasswd -a root docker sudo systemctl restart docker newgrp - docker
如果因為yum源問題提示:沒有可用軟件包 docker-compose,錯誤:無須任何處理
可以手動去下載:https://github.com/docker/compose/releases
放在/usr/local/bin路徑下,執行下面命令(刪除了文件名后綴-linux-x86_64)
sudo chmod +x /usr/local/bin/docker-compose
還也可以通過 pip 安裝 docker-compose ,(也不一定成功)
# 添加企業版附加包 yum -y install epel-release # 安裝pip yum -y install python-pip # 更新pip pip install --upgrade pip # 安裝docker-compose pip install docker-compose # 查看docker compose的版本 docker-compose version
還可參考
3.下載並修改 docker-compose.yml
引用 Seafile 官方文檔:
下載
-
MySQL root 用戶的密碼 (MYSQL_ROOT_PASSWORD and DB_ROOT_PASSWD)
-
持久化存儲 MySQL 數據的 volumes 目錄 (volumes)
-
持久化存儲 Seafile 數據的 volumes 目錄 (volumes)
-
持久化存儲 Elasticsearch 索引數據的 volumes 目錄 (volumes)
-
默認的管理員賬號是 me@example.com 並且該賬號的密碼是 asecret
需要修改的配置有:
-
設置 mysql 的 root 密碼
-
Seafile 中需要填寫第一步設置的 mysql 密碼
-
設置 Seafile 管理員賬號郵箱
-
設置 Seafile 管理員賬號密碼
-
開啟 https 443 端口
-
設置 https 域名
version: '2.0' services: db: image: mariadb:10.1 container_name: seafile-mysql environment: - MYSQL_ROOT_PASSWORD=mysql-root-password # 1. 設置MySQL的root密碼 - MYSQL_LOG_CONSOLE=true volumes: - /opt/seafile-mysql/db:/var/lib/mysql # 指定MySQL數據持久存儲的路徑,默認即可不用修改。 networks: - seafile-net memcached: image: memcached:1.5.6 container_name: seafile-memcached entrypoint: memcached -m 256 networks: - seafile-net elasticsearch: image: seafileltd/elasticsearch-with-ik:5.6.16 container_name: seafile-elasticsearch environment: - discovery.type=single-node - bootstrap.memory_lock=true - "ES_JAVA_OPTS=-Xms1g -Xmx1g" ulimits: memlock: soft: -1 hard: -1 mem_limit: 2g volumes: - /opt/seafile-elasticsearch/data:/usr/share/elasticsearch/data # 指定Elasticsearch數據持久存儲的路徑,默認即可不用修改。 networks: - seafile-net seafile: image: docker.seafile.top/seafileltd/seafile-pro-mc:latest container_name: seafile ports: - "80:80" - "443:443" # 5.開啟 https volumes: - /opt/seafile-data:/shared # 指定Seafile數據持久存儲的路徑,默認即可不用修改。 environment: - DB_HOST=db - DB_ROOT_PASSWD=mysql-root-password # 2. 上面配置的 mysql root 密碼 # - TIME_ZONE=Asia/Shanghai # 默認為UTC。需要修改時區時設置,一般不需要設置。 - SEAFILE_ADMIN_EMAIL=me@example.com # 3. 設置 Seafile 管理員賬號郵箱 - SEAFILE_ADMIN_PASSWORD=asecret # 4. 設置 Seafile 管理員賬號密碼 - SEAFILE_SERVER_LETSENCRYPT=false # 使用 Let's encrypt SSL 證書開啟,使用自己的證書不用開啟 - SEAFILE_SERVER_HOSTNAME=example.seafile.com # 6. 開啟 https 后填寫你的域名 depends_on: - db - memcached - elasticsearch networks: - seafile-net networks: seafile-net:
4.啟動 Seafile 服務
必須在 **docker-compose.yml** 文件所在的 /opt 目錄進行啟動。
執行以下命令啟動 Seafile 服務
cd /opt docker-compose up -d # 啟動 seafile
需要等待幾分鍾,等容器首次啟動時的初始化操作完成后,您就可以在瀏覽器上訪問 IP+端口 或者 http://seafile.example.com 來打開 Seafile 主頁。
5.配置 Seafile https ssl 證書
1.服務初始化完成后,需要上傳自己的 SSL 證書。
# 創建 ssl 目錄,然后將證書上傳到該目錄 mkdir /opt/seafile-data/ssl
2.修改 Nginx 的配置文件,配置ssl。
vim /opt/seafile-data/nginx/conf/seafile.nginx.conf
ssl 配置如下:
server { listen 443; server_name example.seafile.com; # 你的域名 ssl on; ssl_certificate /shared/ssl/你的證書.pem; #pem 文件路徑 ssl_certificate_key /shared/ssl/你的證書.key; #pem 文件路徑 ssl_session_timeout 5m; ssl_session_cache shared:SSL:5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #按照這個協議配置 ssl_ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS; #ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#按照這個套件配置 ssl_prefer_server_ciphers on; proxy_set_header X-Forwarded-For $remote_addr; add_header Strict-Transport-Security "max-age=31536000; includeSubDomains"; server_tokens off; # 注釋掉80端口自動轉發到443端口,添加一句'error_page 497 301 https://$http_host$request_uri;',這樣就可以實現http自動跳轉到https了。 error_page 497 301 =307 https://v.itmm.wang:6443$request_uri; ... 后面的內容保持不變 location / { ... } ... }
配置完成后重啟nginx
# 配置完成后重啟nginx docker exec -it seafile /usr/sbin/nginx -s reload
6.防火牆放行端口
# 開放端口 firewall-cmd --zone=public --add-port=443/tcp --permanent # 順便把 OnlyOffice 用到的兩個端口也開放,后面就不用再開了 firewall-cmd --zone=public --add-port=8088/tcp --permanent firewall-cmd --zone=public --add-port=8443/tcp --permanent # 重載防火牆 firewall-cmd --reload
這時候應該可以通過你的服務器IP+端口 or 域名https://example.seafile.com
訪問Seafile主頁了。
配置完端口轉發后還需要在Seafile系統管理中配置一下端口。
如果你的域名沒有備案的話是無法訪問443端口的,需要在路由器里配置端口轉發到443(前提是得有公網IP和DDNS)。
7. 配置 docker-compose 開機自啟動
# 配置 docker-compose 開機自啟動 vim /etc/rc.d/rc.local # 文件后面添加下行內容,注意docker-compose.yml目錄 docker-compose -f /opt/docker-compose.yml up -d # 保存退出后,為 rc.local 文件添加執行權限 chmod +x /etc/rc.d/rc.local
至此 Seafile 安裝完成,下面開始安裝 OnlyOffice。
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
二、安裝 OnlyOffice
OnlyOffice 官方號稱完美替代 LibreOffice,100%兼容微軟三件套(Microsoft Word、Excel 和 PowerPoint)。
Seafile建議完全按照 OnlyOffice 官方文檔部署即可,沒錯我也是這么干的,但是在 ssl 配置上折騰了大半天,所以我還是再啰嗦一遍。
1. docker 拉取 onlyoffice 鏡像
# 拉取 onlyoffice 鏡像 docker pull onlyoffice/documentserver
2. 創建目錄映射 docker 容器內的目錄
# 創建幾個目錄 用於 onlyoffice 的數據卷 cd /opt # 建議與 seafile 容器都放在 /opt 目錄方便管理 mkdir seafile-onlyoffice cd seafile-onlyoffice mkdir log mkdir data mkdir lib mkdir db
3. 啟動 OnlyOffice 容器
# 啟動onlyoffice鏡像(綁定 http 8088 端口和 https 8443 端口)# 8080端口目前也被封了,所以這里用8088,不為別的就是圖個吉利 docker run -i -t -d -p 8088:80 -p 8443:443 --name onlyoffice --restart=always / -v /opt/seafile-onlyoffice/log:/var/log/onlyoffice / -v /opt/seafile-onlyoffice/data:/var/www/onlyoffice/Data / -v /opt/seafile-onlyoffice/lib:/var/lib/onlyoffice / -v /opt/seafile-onlyoffice/db:/var/lib/postgresql onlyoffice/documentserver # 當然這樣一行直接運行鏡像也是可以的 docker run -i -t -d -p 8088:80 -p 8443:443 --name onlyoffice --restart=always -v /opt/seafile-onlyoffice/log:/var/log/onlyoffice -v /opt/seafile-onlyoffice/data:/var/www/onlyoffice/Data -v /opt/seafile-onlyoffice/lib:/var/lib/onlyoffice -v /opt/seafile-onlyoffice/db:/var/lib/postgresql onlyoffice/documentserver
前面如果已經對防火牆端口放行了的話,這時候通過ip+端口應該就可以訪問到了。
4. 配置 OnlyOffice https ssl 證書(不開通https的可以跳過此步驟)
# 復制 onlyoffice容器中的 nginx 配置文件 ds.conf 到主機 docker cp onlyoffice:/etc/onlyoffice/documentserver/nginx/ds.conf /opt/seafile-onlyoffice/ # 然后修改配置文件,如下
**修改 onlyoffice nginx https 配置,**主要配置證書目錄和協議套件
## HTTPS host server { listen 0.0.0.0:443 ssl http2; listen [::]:443 ssl http2 default_server; server_name v.itmm.wang; server_tokens off; root /usr/share/nginx/html; ## Strong SSL Security ## https://raymii.org/s/tutorials/Strong_SSL_Security_On_nginx.html ssl on; ssl_certificate /var/www/onlyoffice/Data/certs/你的證書.pem; ssl_certificate_key /var/www/onlyoffice/Data/certs/你的證書.key; ssl_session_timeout 5m; ssl_session_cache shared:SSL:5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #按照這個協議配置 ssl_ciphers ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS; #ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#按照這個套件配置 ssl_prefer_server_ciphers on; proxy_set_header X-Forwarded-For $remote_addr; add_header Strict-Transport-Security "max-age=31536000; includeSubDomains"; ## [Optional] If your certficate has OCSP, enable OCSP stapling to reduce the overhead and latency of running SSL. ## Replace with your ssl_trusted_certificate. For more info see: ## - https://medium.com/devops-programming/4445f4862461 ## - https://www.ruby-forum.com/topic/4419319 ## - https://www.digitalocean.com/community/tutorials/how-to-configure-ocsp-stapling-on-apache-and-nginx # ssl_stapling on; # ssl_stapling_verify on; # ssl_trusted_certificate /etc/nginx/ssl/stapling.trusted.crt; # resolver 208.67.222.222 208.67.222.220 valid=300s; # Can change to your DNS resolver if desired # resolver_timeout 10s; ## [Optional] Generate a stronger DHE parameter: ## cd /etc/ssl/certs ## sudo openssl dhparam -out dhparam.pem 4096 ## #ssl_dhparam /var/www/onlyoffice/Data/certs/dhparam.pem; include /etc/nginx/includes/ds-*.conf; }
配置完成后文件復制回容器,然后重啟nginx。
# 配置完成后文件復制回容器 docker cp /opt/seafile-onlyoffice/ds.conf onlyoffice:/etc/onlyoffice/documentserver/nginx/ # 將證書上傳到 certs 目錄(手動創建 certs 目錄) /opt/seafile-onlyoffice/data/certs/ # 重啟 onlyoffice docker restart onlyoffice
好了,這時候用https訪問一下試試。
5. 配置 Seafile 調用 OnlyOffice
添加以下配置信息到 /opt/seafile-data/seafile/conf/seahub_settings.py
# Enable Only Office ENABLE_ONLYOFFICE = True VERIFY_ONLYOFFICE_CERTIFICATE = False # ONLYOFFICE_APIJS_URL = 'http{s}://{your OnlyOffice server's domain or IP}/web-apps/apps/api/documents/api.js' ONLYOFFICE_APIJS_URL = 'https://你的域名和端口/web-apps/apps/api/documents/api.js' ONLYOFFICE_FILE_EXTENSION = ('doc', 'docx', 'ppt', 'pptx', 'xls', 'xlsx', 'odt', 'fodt', 'odp', 'fodp', 'ods', 'fods') ONLYOFFICE_EDIT_FILE_EXTENSION = ('docx', 'pptx', 'xlsx')
配置完成后重啟 seafile,然后從 seafile 就可以正常打開編輯 office 文檔了。
# 重啟 Seafile 服務 docker-compose restart
6. 配置 OnlyOffice 自動保存
使用 OnlyOffice 打開文件時,OnlyOffice 默認只會在用戶關閉頁面后向 Seafile 發送文件保存請求。 如果用戶長時間未關閉頁面,則用戶對文件的更改將不會及時保存在Seafile上。
您現在可以通過更改 OnlyOffice 的配置來設置自動保存(實時保存)。
# 復制 onlyoffice容器中的配置文件 local.json 到主機 docker cp onlyoffice:/etc/onlyoffice/documentserver/local.json /opt/seafile-onlyoffice/
按照 Seafile 官方說明修改 local.json,json文件中增加 autoAssembly
配置
{ "services": { "CoAuthoring": { // 在 CoAuthoring 中 增加 autoAssembly 屬性配置 "autoAssembly": { "enable": true, "interval": "5m" }, //注意這個,逗號 } } }
local.json 文件傳回容器,然后重啟 OnlyOffice
# 復制 local.json 到docker容器 docker cp /opt/seafile-onlyoffice/local.json onlyoffice:/etc/onlyoffice/documentserver/ # 重啟 OnlyOffice docker restart onlyoffice
7. [可選] 開啟 onlyoffice 演示Demo
# 配置 onlyoffice 演示Demo docker exec onlyoffice supervisorctl start ds:example
三、遇到的問題
1. Seafile 初始化完成后,啟動報錯,提示沒有權限
錯誤信息:
chown: changing ownership of '/var/lib/mysql/': Permission denied
解決辦法:
# 關閉selinux vim /etc/sysconfig/selinux # SELINUX=enforcing 改為 SELINUX=disabled
2. 出現如下錯誤
/usr/bin/docker-current: Error response from daemon: error creating overlay mount to /var/lib/docker/overlay2/65f3c109fb903539820f84856d2725af784f2f03f95b1f0214e34184e4d61ff7-init/merged: invalid argument.
See '/usr/bin/docker-current run --help'.
解決辦法:
# 停止docker服務 systemctl stop docker # 清理鏡像 rm -rf /var/lib/docker # 修改存儲類型 vi /etc/sysconfig/docker-storage # 把空的DOCKER_STORAGE_OPTIONS參數改為overlay: DOCKER_STORAGE_OPTIONS="--storage-driver overlay" # 禁用selinux,去掉option的–selinux-enabled vim /etc/sysconfig/docker # 啟動docker應該就可以了 systemctl start docker
四、開啟Wiki功能
可以在 /opt/seafile-data/seafile/conf/seahub_settings.py 中添加一行配置命令開啟wiki功能
ENABLE_WIKI = True
用seafile編寫wiki / gitbook
-
新建一個資料庫 BookName
-
新建並編輯若干md文件
-
在【工具】【 已發布的資料庫】中,點擊“發布資料庫”,選擇BookOne
-
發布后,任何人都可以查看
注意!!!文件排列順序是按照文件名從小到大排序的,不是修改的時間 最好文件名用1234或者時間開頭命名