使用 Docker 在同一台服务器上设置 NextCloud + ONLYOFFICE

嘿哈布尔! 我向您展示这篇文章的翻译 “使用 Docker 在单个服务器上设置 NextCloud 和 ONLYOFFICE”.

很难低估 Google Docs 等在线办公套件和云存储在技术型人们生活中的价值。 技术已经变得如此普遍,甚至连长期主导办公应用程序市场的微软最近也专注于开发 Office 365 Web 应用程序,并说服用户转向订阅模式来使用自己的服务。 我们邀请那些对在 cat 下安装和配置自己的存储过程感兴趣的人。

不久前,我们研究了云存储解决方案和开源网络办公套件,它们可以轻松部署以供微型企业使用。 将所有文档保留在网上的主要动机是尽量减少文书工作,并在交易量较低的情况下实施良好的业务实践。 硬币的另一面是,租用云服务器来提供此服务比直接将其存储在企业场所安全性较低,因为您没有任何方法来审核对服务器或流量的物理访问。 因此,还需要端到端加密和开源软件。

考虑到有关开源解决方案的所有可用信息,我们发现了两个针对云存储开发的活跃项目(过去 12 个月在 git 存储库中提交):NextCloud 和 OwnCloud,以及唯一活跃的 ONLYOFFICE 办公套件。 这两种云存储工具具有大致相同的功能,选择 NextCloud 的决定是基于有证据表明它可以与 ONLYOFFICE 集成,以便用户与软件进行舒适的交互。 然而,当我们开始部署服务时,缺乏有关集成上述服务的信息就变得很明显。 我们找到了 3 个有关如何集成的教程视频:

这三个视频都没有回答在与 NextCloud 相同的物理服务器上使用共享 nginx 安装 ONLYOFFICE 文档服务的问题。 相反,他们使用了分离技术,例如为文档服务 API 使用单独的端口。 另一个建议是为文档服务部署单独的服务器,手动配置文档服务内置的 nginx 实例来安装访问密钥(确认访问数据云的权限的预先已知的访问密钥)和 TLS 证书。 上述方法被认为不安全且不够有效,因此我们集成了 NextCloud、ONLYOFFICE 和一个使用 docker-compose 按域名分隔请求的通用 nginx。 以下是有关如何操作的分步信息。

第1步:nginx容器

这是一个非常简单的设置,但这一步需要最多的工作来配置反向代理服务器。 我们首先为 nginx:stable 镜像创建 docker-compose 配置。

version: '2'
services:
  nginx:
    image : nginx:stable
    restart: always
    volumes:
      - ./nginx/nginx-vhost.conf:/etc/nginx/conf.d/default.conf:ro
      - ./nginx/certificates:/mycerts 
    ports:
      - 443:443
      - 80:80

这将创建一个向公众开放端口 80 和 443 的容器,将配置映射到 nginx/nginx-vhost.conf ,并为作为自签名证书生成的证书或使用 /nginx/certificates 中的 Let's encrypt 的 certbot 定义证书存储。 此位置应包含 office.yourdomain.com 和 cloud.yourdomain.com 的文件夹,其中分别包含用于证书链和服务器私钥的 fullchain1.pem 和 privkey1.pem 文件。 您可以在此处阅读有关如何生成自签名证书的更多信息。 www.akadia.com/services/ssh_test_certificate.html (将 .key 和 .crt 重命名为 .pem 无需转换 nginx 的文件结构)。

之后,我们定义了vhost文件。 我们首先将端口 80 的行为定义为简单重定向到 https,因为我们不想允许任何 http 流量

server {
    listen 80;
    location / {
        return 301
            https://$host$request_uri;
    }
}

然后我们在端口 443 上为我们的服务创建了两个虚拟服务器:

server {
    listen 443 ssl;
    server_name cloud.yourdomain.com ;
    root /var/www/html;

    ssl_certificate     /mycerts/cloud.yourdomain.com/fullchain1.pem;
    ssl_certificate_key /mycerts/cloud.yourdomain.com/privkey1.pem;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;

    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_pass http://app:80;
    }
}
server {
    listen 443 ssl;
    server_name office.yourdomain.com;
    root /var/www/html;

    ssl_certificate     /mycerts/office.yourdomain.com/fullchain1.pem;
    ssl_certificate_key /mycerts/office.yourdomain.com/privkey1.pem;
    ssl_protocols       TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers         HIGH:!aNULL:!MD5;

    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_pass http://onlyoffice:80;
    }
}

第二步:文件服务

现在我们需要将文档服务容器添加到我们的 docker-compose.yml 中。 这里没有什么特别需要配置的。

services:
...
  onlyoffice:
    image: onlyoffice/documentserver
    restart: always

但不要忘记将 nginx 容器链接到文档服务:

services:
...
  nginx:
    ...
    depends_on:
      - onlyoffice

第三步:NextCloud

首先,添加新服务:

services:
...
  db:
    image: mariadb
    command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
    restart: always
    volumes:
      - /data/nextcloud_db:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=#put some password here
      - MYSQL_PASSWORD=#put some other password here
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
  app:
    image: nextcloud
    depends_on:
      - db
      - onlyoffice
    restart: always

并添加 nginx 的链接:

services:
...
  nginx:
    ...
    depends_on:
      - app 

现在是时候装载集装箱了。

docker-compose up -d  

一段时间后,nginx 将开始将您重定向到 NextCloud 前端,这是默认配置页面。 您需要输入第一个管理用户的用户名和密码以及您在 docker-compose.yml 中提供的数据库凭据。设置完成后,您将能够登录。 在我们的例子中,等待时间将近一分钟,并且需要额外刷新登录页面才能登录云服务。

Next云服务设置窗口使用 Docker 在同一台服务器上设置 NextCloud + ONLYOFFICE

第4步:连接NextCloud和ONLYOFFICE

在此步骤中,您需要安装 NextCloud 应用程序,该应用程序连接 ONLYOFFICE 功能。 让我们从菜单右上角的应用程序控制面板开始。 找到 ONLYOFFICE 应用程序(在 Office 和文本下或使用搜索),安装并激活它。

之后,通过右上角的菜单进入“设置”,您应该在左侧菜单中找到 ONLYOFFICE 项目。 进去吧。 您需要注册如下所示的地址。

集成应用程序设置使用 Docker 在同一台服务器上设置 NextCloud + ONLYOFFICE

第一个地址用于直接从浏览器中运行的应用程序链接到一些js和css文件(这是我们通过nginx开放访问ONLYOFFICE服务所需要的)。 不使用密钥是因为我们更信任 Docker 隔离层而不是持久身份验证密钥。 第三个地址由 NextCloud 容器用来直接连接到 ONLYOFFICE API,它使用 Docker 的默认内部主机名。 好吧,使用最后一个字段,以便 ONLYOFFICE 可以使用外部 IP 地址或内部 Docker 地址(如果您使用 Docker 网络)向 NextCloud API 发出请求,但在我们的示例中没有使用。 确保您的防火墙设置允许此类交互。

保存后,NextCloud 将测试连接,如果一切正确,将向您显示与集成相关的设置 - 例如,此集成可以编辑哪些类型的文件。 根据您的需要进行定制。

最后一步:在哪里可以找到编辑器

如果您返回云存储文件夹并单击“+”创建新文件,那么您将有一个新选项来创建文档、电子表格或演示文稿。 在他们的帮助下,您将使用 ONLYOFFICE 创建并立即能够编辑这些类型的文件。

文件创建菜单使用 Docker 在同一台服务器上设置 NextCloud + ONLYOFFICE

补充1

docker-compose.yml 的完整内容可以在这里找到: https://pastebin.com/z1Ti1fTZ

来源: habr.com

添加评论