本操作的基本环境是我之前的博客: 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的容器(指定管理用户名:yourEmail@163.com,以及用户密码:123456789)

~# docker run -itd --name myseafile --net lnmp-net --ip 172.168.1.204  -e SEAFILE_ADMIN_EMAIL=yourEmail@163.com -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 文档。配置方式,这里直接上图。这也解决了通过网页无法上传文件的错误!

若配置不正确,则打开资料库中的文档时,则会出现下载失败等提示,如下图

 

配置正确,则自带的这个文档打开后如下图

 

 

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐