使用Nextcloud集成OnlyOffice和Elasticsearch来构建最强大的在线存储服务器
首先
如果Markdown写作文化普及开来,构建一个可全文搜索的文档服务器并不是太困难的事情。但问题在于这并非现状。
作为技术人员,我可能会想到使用Markdown,但是观察同事和合作的系统供应商,几乎没有人使用这种方式,而更多地使用Word、Excel和PDF等形式来输出。在这种情况下,虽然可以进行宣传活动,但如果能够建立能处理MS Office文档等服务,那么这更加快捷,而且大家也会更加满意。
作为基于本地服务器构建的在线存储服务器,Nextcloud与OnlyOffice组合使用处理办公文档,以及引入ElasticSearch进行全文搜索的方法都很有名。然而,这些介绍的信息有些零零散散,有些过时,不太容易操作。因此,我想介绍一种通过公式镜像进行改进后能够实现的方法。
安装
安装Nextcloud
请克隆上述仓库。
git clone https://github.com/higebobo/docker-nextcloud.git
可以创建和编辑.env文件以更改数据库服务器的连接信息等,但可以使用默认信息(在Makefile的开头中记录)直接构建。
如果无法使用GNU Make,则可以参考Makefile的任务,并在命令行中执行它。
make up
过一段时间后,您可以在浏览器中访问Nextcloud(默认为http://localhost:8080),完成操作。
输入任意的用户名和密码,然后点击“存储和数据库”。
在环境变量中输入设置的数据库信息。在最后的主机部分,使用”db”而不是”localhost”或其他以docker-compose指定的数据库服务名称。
接下来安装应用程序。
点击“安装推荐应用”并等待片刻即可完成。
仅需要一个选项,用中文将以下内容进行释义:OnlyOffice的设置
既完成 Nextcloud 的安装后,现在要进行 OnlyOffice 的配置。
虽然可以从仪表盘中进行配置,但建议使用官方提供的脚本(请参考 Makefile 的任务)。
make onlyoffice
输出结果
+ docker exec -u www-data app-server php occ --no-warnings config:system:get trusted_domains
+ grep -q nginx trusted_domain.tmp
+ cat trusted_domain.tmp
+ wc -l
+ TRUSTED_INDEX=1
+ docker exec -u www-data app-server php occ --no-warnings config:system:set trusted_domains 1 --value=nginx
System config value trusted_domains => 1 set to string nginx
+ rm trusted_domain.tmp
+ docker exec -u www-data app-server php occ --no-warnings app:install onlyoffice
onlyoffice 7.3.0 installed
onlyoffice enabled
+ docker exec -u www-data app-server php occ --no-warnings config:system:set onlyoffice DocumentServerUrl --value=/ds-vpath/
System config value onlyoffice => DocumentServerUrl set to string /ds-vpath/
+ docker exec -u www-data app-server php occ --no-warnings config:system:set onlyoffice DocumentServerInternalUrl --value=http://onlyoffice-document-server/
System config value onlyoffice => DocumentServerInternalUrl set to string http://onlyoffice-document-server/
+ docker exec -u www-data app-server php occ --no-warnings config:system:set onlyoffice StorageUrl --value=http://nginx/
System config value onlyoffice => StorageUrl set to string http://nginx/
+ docker exec -u www-data app-server php occ --no-warnings config:system:set allow_local_remote_servers --value=true
System config value allow_local_remote_servers set to string true
通过管理界面可以查看OnlyOffice的设置。
设置全文搜索
从仪表板应用程序中搜索”全文”。
嵌入以下内容
-
- Full text search
-
- Full text search – Elasticsearch Platform
- Full text search – Files
通过仪表盘 > 设置显示“全文搜索”设置界面。
设定如下
-
- 検索プラットフォーム: Elasticsearch
-
- サーブレットのアドレス: http://elasticsearch:9200/
インデックス: nextclud(任意の名称)
アナライザトークナイザ: kuromoji_tokenizer
创建搜索索引
make index
输出结果 (shū chū jié guǒ)
Options: []
Memory:
┌─ Indexing ────
│ Action:
│ Provider: Account:
│ Document:
│ Info:
│ Title:
Options: []
...略
┌─ Results ────
│ Result: 30/30
│ Index: files:18
│ Status: ok
│ Message: {"_index":"nextcloud","_type":"_doc","_id":"files:18","_version":1,
│ "result":"created","_shards":{"total":2,"successful":1,"failed":0},"_seq_no":
│ 29,"_primary_term":1}
└──
┌─ Errors ────
│ Error: 0/0
│ Index:
│ Exception:
│ Message:
│
│
└──
## x:first result ## c/v:prec/next result ## b:last result
## f:first error ## h/j:prec/next error ## d:delete error ## l:last error
## q:quit ## p:pause
成功しているが、最初はここが30/30となり、うまくいかなかった。
make index-init
或者
make index-reset
也许做这种事情能使人感到幸福。
需要注意的是,由于需要在每次文档注册时执行索引的创建,因此应将其批量化并定期执行,例如将其集成到批处理程序中。
确认动作
从右上角的搜索图标处输入“自托管”(为什么选择这个关键词将在后文中说明)。
以下是可編輯的畫面。
本次的案例中,我們進行了從最初的內嵌文件中進行搜索,當然還可以進行日文搜索。試著上傳一個帶有「レンタル」一詞的Excel文件進行索引建立後進行搜索,結果顯示可以正確地進行搜索。
如果在显示办公文档时遇到“无法连接到ONLYOFFICE,请与管理员联系”的提示,这意味着onlyoffice-server启动需要一些时间,请耐心等待一段时间后再次尝试访问。
最后
使用docker-compose可以一键安装多个服务(Nginx/Nextcloud(PHP)/Mariadb/OnlyOffice/ElasticSearch/Kibana),这非常方便且具有高度的可移植性。
以前,我们需要一个一个地安装、配置(还需要进行验证)这些服务,因此在构建新系统或更新、迁移服务器时都是一项非常繁重的工作。
请将docker-compose.yaml最后附上。
我尽量不开放端口,并且这次我注释掉了Kibana,因为它会变得很重,但如果您喜欢,可以根据自己的需要使用。
version: "3.7"
services:
app:
image: nextcloud:23.0-fpm-alpine
container_name: ${APP_CONTAINER}
restart: always
environment:
- extra_params="--o:ssl.enable=false"
depends_on:
- db
- onlyoffice-document-server
- elasticsearch
volumes:
- "$PWD/data/web:/var/www/html"
db:
image: mariadb:10.7-focal
container_name: ${DB_CONTAINER}
command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW --innodb-file-per-table=1 --skip-innodb-read-only-compressed
restart: always
volumes:
- "$PWD/data/db:/var/lib/mysql"
#ports:
# - ${MYSQL_PORT}:3306
environment:
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_PASSWORD: ${MYSQL_PASSWORD}
MYSQL_DATABASE: ${MYSQL_DATABASE}
MYSQL_USER: ${MYSQL_USER}
onlyoffice-document-server:
image: onlyoffice/documentserver:7.0
container_name: ${DOC_CONTAINER}
restart: always
volumes:
- "$PWD/data/log/onlyoffice:/var/log/onlyoffice"
- "$PWD/data/onlyoffice:/var/www/onlyoffice/Data"
nginx:
image: nginx:1.21
container_name: ${WEB_CONTAINER}
restart: always
ports:
- "${WEB_PORT}:80"
#- "${SSL_PORT}:443"
volumes:
- "$PWD/config/nginx.conf:/etc/nginx/nginx.conf"
- "$PWD/data/web:/var/www/html"
elasticsearch:
build: ./elasticsearch
container_name: ${SEARCH_CONTAINER}
restart: always
environment:
- discovery.type=single-node
# ports:
# - "${SEARCH_PORT}:9200"
# #- "${ELASTICSEARCH_NODE_PORT}:9300"
# kibana:
# image: docker.elastic.co/kibana/kibana:7.17.0
# container_name: ${MONITOR_CONTAINER}
# restart: always
# depends_on:
# - "elasticsearch"
# ports:
# - "${MONITOR_PORT}:5601"
如果要使用kibana,请确保elasticsearch和版本匹配
FROM docker.elastic.co/elasticsearch/elasticsearch:7.17.0
RUN elasticsearch-plugin install --batch ingest-attachment &&\
elasticsearch-plugin install --batch analysis-kuromoji &&\
elasticsearch-plugin install --batch analysis-icu
提供的唯一选择。
-
- ONLYOFFICE/docker-onlyoffice-nextcloud
- docker composeを使ってonlyofficeが使用できるnextcloudを構築する | mebee