本操作的基本环境是我之前的博客: docker 搭建多容器LNMP平台遇到的坑 https://blog.csdn.net/lggirls/article/details/89381556
在docker 构建的容器之间,内建了 lnmp-net这个虚拟局域网域。ip 为 172.168.1.0/24。
新运行的container 名称分别为 myseafile (ip:172.168.1.204) 和myonyoffice(ip:172.168.1.205)
一、主要运行容器的搭建
1. 确定 seafile 数据的存储位置,这里为 /home/myseafile
~# make dir /home/myseafile
2.设定并运行名称为myseafile的容器(指定管理用户名:[email protected],以及用户密码:123456789)
~# docker run -itd --name myseafile --net lnmp-net --ip 172.168.1.204 -e [email protected] -e SEAFILE_ADMIN_PASSWORD='123456789' -v /home/myseafile:/shared -p 10001:10001 -p 12001:12001 -p 8000:8000 -p 8082:8082 -p 8080:80 seafileltd/seafile
3.设定并运行名称为myonlyoffice的容器
~# docker run -itd --name myonlyoffice --net lnmp-net --ip 172.168.1.205 -p 7777:80 onlyoffice/documentserver
输入服务器的ip和为容器映射的端口号,以测试myonlyoffice是否正常运行: http://centos.server.ip:7777/welcome
正常将出现下图:
4.还有一个nginx 网络服务器的容器不要忘记了。
二、onlyoffice向seafile进行集成的配置操作
主要是对nginx的配置文件 /etc/nginx/conf.d/default.conf 以及 seafile容器的 /home/myseafile/seafile/conf/seahub_settings.py
1.参考官方的配置方法 https://download.seafile.com/published/seafile-manual/deploy/only_office.md
需要注意的是,官方的配置方法中涉及两种情况,一种是seafile与onlyoffice服务分别构建 在两台不同的主机上,另一种是构建在同一个主机,但没有设定容器之间的虚拟网域,这一点是和本文所进行的操作完全不同的。
2.seafile和onlyoffice在同一台主机上时,需要将onlyoffice配置为在子目录下运行的模式。原文是这么说的:
When you want to deploy OnlyOffice and Seafile on the same server, Seafile should be deployed at the root URL while OnlyOffice should be deployed using a subfolder URL.
当你想把onlyoffice和seafile架设在同一台服务器上,则seafile需要在root URL上搭建,而onlyoffice则需要在次级URL上搭建,也就是subfolder URL,或者说子目录
URL example for OnlyOffice: https://seafile.domain.com/onlyofficeds 这里给出了一个例子,子目录的名称就是 onlyofficeds 下面的配置也是围绕这个子目录进行的。
原文下面还给出了不能使用 /onlyoffice/ 作为次级目录的原因及重要提示
3. 对nginx的配置文件/etc/ngnix/conf.d/default.conf进行配置. 官方说明里是 seafile.conf ,实际上在default.conf上进行修改就可以了
~# docker cp mynginx:/etc/ngnix/conf.d/default.conf default.conf 这里是将名称为 mynginx的nginx服务容器的配置文件拉出到当前目录
~# vi default.conf 进行内容修改。 我这里直接给出我的完整配置内容,标注出添加了哪些
********************以下是文档内容******************************************************
# Required for only office document server
map $http_x_forwarded_proto $the_scheme {
default $http_x_forwarded_proto;
"" $scheme;
}
map $http_x_forwarded_host $the_host {
default $http_x_forwarded_host;
"" $host;
}
map $http_upgrade $proxy_connection {
default upgrade;
"" close;
}
#以上的内容直接复制粘贴到下面的 ‘server{ ’ 之上即可
server {
listen 80;
server_name localhost;
#charset koi8-r;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html;
index index.php index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
# root html;
fastcgi_pass 172.168.1.202:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;
include fastcgi_params;
}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
# the below is all added 2020-01-16。以下的内容是关键的配置点,复制并修改,加到最后一个“}”之上就可以了
location /onlyofficeds/ {
# THIS ONE IS IMPORTANT ! - Trailing slash !
proxy_pass http://192.168.1.251:7777/; # 指定了要进行子目录转换的地址,端口号。 我这里主机ip251,为onlyoffice映射的端口是7777
proxy_http_version 1.1;
client_max_body_size 100M; # Limit Document size to 100MB
proxy_read_timeout 3600s;
proxy_connect_timeout 3600s;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $proxy_connection;
# THIS ONE IS IMPORTANT ! - Subfolder and NO trailing slash !
proxy_set_header X-Forwarded-Host $the_host/onlyofficeds;
proxy_set_header X-Forwarded-Proto $the_scheme;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
***********************结束线*******************************************************
很明显,上面配置的内容中, 红色的文字 onlyofficeds 就是我们所指定的次级目录(subfolder URL)
配置完保存后,再将其cp进容器
~# docker cp default.conf mynginx:/etc/ngnix/conf.d/default.conf
4.对seafile 的配置文档/home/myseafile/seafile/conf/seahub_settings.py 进行修改。
我们这里是因为在建立容器时,指定了 -v /home/myseafile:/shared 这个映射关系,所以直接修改/home/myseafile/seafile/conf/seahub_settings.py即可。
~# vi /home/myseafile/seafile/conf/seahub_settings.py
只需要对下面的内容进行修改,加到最后面即可
*************************************************************************
# Enable Only Office
ENABLE_ONLYOFFICE = True
VERIFY_ONLYOFFICE_CERTIFICATE = False
ONLYOFFICE_APIJS_URL = 'http://192.168.1.251:7777/web-apps/apps/api/documents/api.js'
ONLYOFFICE_FILE_EXTENSION = ('pdf','doc', 'docx', 'ppt', 'pptx', 'xls', 'xlsx', 'odt', 'fodt', 'odp', 'fodp', 'ods', 'fods')
ONLYOFFICE_EDIT_FILE_EXTENSION = ('doc', 'docx', 'ppt', 'pptx', 'xls', 'xlsx')
*****************************************************************************
注意红色的文字部分,对应的是seafile和onlyoffice容器所在主机的ip和我们所配置的onlyoffice服务容器所映射的端口
黑色的文字 'pdf', 是新加的,默认不预览pdf格式
绿色文字部分指定的是哪些后缀的文档可以被编辑。
5. 重启相关的容器
~# docker restart mynginx myonlyoffice myseafile
6.测试onlyoffice是否在次级URL模式下正常运行
输入服务器的ip和我们所配置的次级目录,以测试myonlyoffice是否正常运行: http://centos.server.ip/onlyofficeds/welcome
运行正常则会出现下列画面:
三、关键点来了!!!!!!!!!!!!!!!
由于我们是完全以docker 容器的方式来构建的两者的组合服务,并且制定了虚拟局域网“lnmp-net”,所以需要进入seafile服务器进行设定,之后才能正确打开并编辑 office 文档。配置方式,这里直接上图。这也解决了通过网页无法上传文件的错误!
若配置不正确,则打开资料库中的文档时,则会出现下载失败等提示,如下图
配置正确,则自带的这个文档打开后如下图