如何使用Docker轻松集成OnlyOffice和NextCloud

以前,我曾写过有关以传统方式集成OnlyOffice和NextCloud的过程,这是一个漫长的过程。 现在,您可以使用Docker轻松集成OnlyOffice和NextCloud。

OnlyOffice开发人员团队创建了一个新的Github存储库,以帮助将OnlyOffice文档服务器和NextCloud集成在一起,从而使用户可以直接从NextCloud创建和编辑Office文档。 实际上,它还支持OnlyOffice和OwnCloud的集成。 由于我们大多数人都是NextCloud用户,因此我将仅关注NextCloud。

使用此方法,OnlyOffice文档服务器和NextCloud都将被安装为Docker容器应用程序,而Nginx将被用作Web服务器。 我将向您展示如何将这两者整合在一起,以及如何使用Let’s Encrypt启用HTTPS。

先决条件

要遵循本教程,您需要

  • 一台服务器,其端口80和443可用,并且至少有1GB的RAM,最好是2GB的RAM。 我推荐Vultr,在那里您可以以每月10美元的价格获得高性能2GB RAM Linux VPS。
  • 域名我从NameCheap购买了域名。 他们的价格不仅低于Godaddy,而且还免费提供whois隐私保护。

在服务器上安装Docker

首先,我们需要安装Docker和Docker Compose,可以从Docker的官方存储库中安装最新版本。 以下步骤适用于Ubuntu 16.04。 其他Linux发行版的用户可以查看官方安装说明。

为Docker存储库创建源列表文件。

sudo nano /etc/apt/sources.list.d/docker.list

复制以下行并将其粘贴到文件中。

deb [arch=amd64] https://download.docker.com/linux/ubuntu xenial stable

保存并关闭文件。 然后通过运行以下命令导入Docker的PGP密钥。

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

由于此存储库使用HTTPS连接,因此我们还需要安装 apt-transport-httpsca-certificates 包。

sudo apt install apt-transport-https ca-certificates

接下来,更新软件包索引并安装最新版本的Docker CE(社区版)。

sudo apt update

sudo apt install docker-ce

要安装最新版本的Docker Compose,请运行以下命令。

sudo curl -L https://github.com/docker/compose/releases/download/1.17.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose

检查Docker版本

docker -v

样本输出:

Docker version 17.09.0-ce, build afdb6d4

检查Docker Compose版本。

docker-compose --version

样本输出:

docker-compose version 1.17.1, build 6d101fb

安装后,应自动启动Docker守护程序。 您可以使用以下方法进行检查:

systemctl status docker

输出:

● docker.service - Docker Application Container Engine
   Loaded: loaded (/lib/systemd/system/docker.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2017-11-11 12:40:23 UTC; 3min 32s ago
     Docs: https://docs.docker.com
 Main PID: 4090 (dockerd)
   CGroup: /system.slice/docker.service
           ├─4090 /usr/bin/dockerd -H fd://
           └─4159 docker-containerd -l unix:///var/run/docker/libcontainerd/docker-containerd.sock --metrics-inter

如果未运行,请使用以下命令启动守护程序:

sudo systemctl start docker

并通过系统启动启用自动启动:

sudo systemctl enable docker

克隆Github回购

我们将使用git克隆Github存储库。

git clone --recursive https://github.com/ONLYOFFICE/docker-onlyoffice-owncloud

cd docker-onlyoffice-owncloud

git submodule update --remote

编辑 docker-compose.yml 文件。

nano docker-compose.yml

找到第五行。

image: owncloud:fpm

由于我们要安装NextCloud,请将此行更改为:

image: nextcloud:fpm

如果要通过“加密”启用HTTPS,请在 nginx 服务。 这行告诉Docker挂载目录 /etc/letsencrypt 在主机上放入Nginx容器。

- /etc/letsencrypt:/etc/letsencrypt

保存并关闭文件。 然后编辑 nginx.conf 归档在 docker-onlyoffice-owncloud 目录。 该文件将被挂载为 /etc/nginx/nginx.conf 在Nginx容器中。

nano nginx.conf

添加一个 server_name 服务器块中的指令。 不要忘记为您的域名设置A记录。

server {
     listen 80;
     server_name cloud.example.com;
....

另外,在服务器块中添加以下行,因为稍后我们将使用Certbot Webroot插件获取SSL证书。

 location ~ /.well-known/acme-challenge {
       root /var/www/html/;
       allow all;
 }

保存并关闭文件。 现在启动在 docker-compose.yml 文件。

sudo docker-compose up -d

上面的命令将创建 Onlyoffice网络 并启动三个容器: 下一朵云OnlyOffice文件伺服器Nginx的,通过发出以下命令可以看出:

sudo docker network ls
sudo docker ps

现在,将您的Web浏览器指向cloud.example.com,NextCloud安装向导将为您打招呼。 在向导中输入任何内容之前,我们先使用“加密”启用HTTPS。

onlyoffice nextcloud同一服务器

让我们加密来启用HTTPS

现在,在服务器上安装“让我们加密客户端(certbot)”。 以下说明适用于Ubuntu。

sudo apt install software-properties-common

sudo add-apt-repository ppa:certbot/certbot

sudo apt update

sudo apt install certbot

由于Nginx在Docker容器中运行,因此我们将无法使用Nginx插件来获取和安装SSL / TLS证书。 相反,我们可以使用webroot插件获取证书,然后手动配置SSL / TLS。 运行以下命令以获得证书。

sudo certbot certonly --webroot --agree-tos --email your-email-address -d cloud.example.com -w /var/lib/docker/volumes/dockeronlyofficeowncloud_app_data/_data

说明:

  • certonly:获取证书。 不要安装它。
  • –webroot:使用webroot插件
  • –agree-tos:接受让我们加密服务条款
  • –email:用于帐户注册和恢复的电子邮件地址。
  • -d:您的域名。

-w 标志后跟Web根目录的路径,即 /var/www/html/ 在Nginx容器中。 它在主机上的安装点是 /var/lib/docker/volumes/dockeronlyofficeowncloud_app_data/_data。 Certbot无法访问Nginx容器中的Web根目录,必须使用其安装点。 如您所见,我已经成功获得了SSL证书。

onlyoffice nextcloud ssl

获得证书后,编辑 nginx.conf 归档在 docker-onlyoffice-owncloud 目录以配置SSL。

nano nginx.conf

在服务器块中添加以下行。 请记住用您的实际域名替换红色文本。

   listen 443 ssl http2;

   if ($scheme != "https") {
       return 301 https://$host$request_uri;
   }

   ssl_certificate /etc/letsencrypt/live/cloud.example.com/fullchain.pem; 
   ssl_certificate_key /etc/letsencrypt/live/cloud.example.com/privkey.pem; 
   ssl_session_cache shared:le_nginx_SSL:1m;
   ssl_session_timeout 1440m;

   ssl_protocols TLSv1.2;
   ssl_prefer_server_ciphers on;

  ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256';

保存并关闭文件。 然后重新启动Nginx容器。

sudo docker restart nginx-server

刷新NextCloud安装向导,您将在浏览器的地址栏中看到一个绿色的挂锁。

仅nextcloud办公室docker集成

如果有错误,您可以查看nginx-server容器的日志以找出错误。

sudo docker logs nginx-server

结合使用MariaDB数据库和NextCloud

如果要将MariaDB与NextCloud一起使用,则需要运行MariaDB Docker容器。 以下命令将运行官方的MariaDB docker容器并将其添加到 唯一办公室 网络。 用您首选的MariaDB根密码替换通行证。

sudo docker run --restart=always --net dockeronlyofficeowncloud_onlyoffice --name mariadb-server -e MYSQL_ROOT_PASSWORD=your-pass -d mariadb --log-bin --binlog-format=MIXED

检查状态。

sudo docker ps

MariaDB容器运行后,我们可以通过发出以下命令来访问它。

sudo docker exec -it mariadb-server bash

然后以root用户身份登录MariaDB服务器。

mysql -u root -p

然后为Nextcloud创建数据库。 本教程将数据库命名为nextcloud。 您可以使用任何喜欢的名称。

create database nextcloud;

创建数据库用户。 同样,您可以为该用户使用您的首选名称。 用您的首选密码替换您的密码。 注意,我们要创建一个用户,该用户能够从IP地址为172.18.0.3的NextCloud容器登录。

create user [email protected] identified by 'your-password';

注意:您的NextCloud容器可能具有不同的IP地址。 在主机上运行以下命令以查找它。

sudo docker inspect app-server | grep IPAddress

授予该用户所有的权限 nextcloud 数据库。

grant all privileges on nextcloud.* to [email protected] identified by 'your-password';

刷新特权并退出。

flush privileges;

exit;

退出MariaDB容器。

exit

现在,在NextCloud安装向导中,您可以创建一个管理员帐户并输入MariaDB数据库服务器的详细信息。 请注意,您需要更换 localhostmariadb-server,这是MariaDB容器的名称。 localhost 这里指向NextCloud容器。 因为NextCloud容器和MariaDB容器都在 唯一办公室 网络,NextCloud可以解决 mariadb-server 使用嵌入式DNS服务器。

仅限nextcloud办公室mariadb docker

现在,NextCloud已成功安装。

仅nextcloud集成办公室

使用脚本集成OnlyOffice和NextCloud

在里面 docker-onlyoffice-owncloud 目录中,有一个名为 set_configuration.sh。 运行此脚本以集成OnlyOffice和NextCloud。

sudo bash set_configuration.sh

现在,您可以从NextCloud创建和编辑Office文档。

onlyoffice文档服务器letencrypt

nextcloud only办公室同一台机器

修复错误

我发现,如果我使用301重定向强制实施HTTPS,则不会加载Office文档。

onlyoffice下载失败

看来,如果强制实施HTTPS,则NextCloud将仅在HTTPS中与OnlyOffice文档服务器通信,因为我们没有在文档服务器上安装TLS证书,所以无法完成此操作。

解决方案是注释掉以下行 nginx.conf 文件。

if ($scheme != "https") {
         return 301 https://$host$request_uri;
}

然后重新启动Nginx容器。

sudo docker restart nginx-server

这样,用户将需要手动添加 https:// 浏览器地址栏中的前缀,以便对数据通信进行加密。

而已! 我希望本教程可以帮助您使用Docker集成OnlyOffice和NextCloud。 与往常一样,如果您发现此帖子有用,请订阅我们的免费新闻通讯。

Sidebar