admin管理员组

文章数量:1549925

近期应主管建议,在工作环境中搭建一套个人网盘应用,用于开展日常工作。本文在私有云内完成搭建,基于CentOS8.5使用Docker 25.0.1容器承载镜像nextcloud28与onlyoffice9.0.0完成。搭建步骤分为docker的容器准备、nextcloud容器启动、onlyoffice的容器启动以及https的加密配置。将此次所踩的坑整理于此。 

一、搭建前的容器准备

1.安装dokcer

yum install -y yum-utils device-mapper-persistent-data lvm2 wget        #安装依赖
yum-config-manager --add-repo https://download.docker/linux/centos/docker-ce.repo    #将设置阿里云为docker的yum下载源
yum list docker-ce --showduplicates | sort -r            #搜索并排序输出当前的docker版本
yum install -y docker-cedocker -v            #安装docker
yum -y update                            #更新依赖库
yum makecache fast                    #yum初始化
systemctl start docker
systemctl enable docker
vi /etc/docker/daemon.json        #为docker添加国内加速器设置
{ 
"registry-mirrors":["http://hub-mirror.c.163"]
}
systemctl daemon-reload         #重新加载
systemctl restart docker             #重启docker

2.搜索并拉取容器

docker serach nextcloud
docker search    onlyoffice
docker pull    #容器名字与版本(search出来的结果),本文拉取nextcloud与onlyoffice

3.本文中用到的docker容器命令说明

docker run -d --restart=always --name #设置容器名 使用的镜像设置此容器开机自启
docker images            #查看可用镜像
docker search 镜像名字        #搜索镜像
docker pull            #拉取镜像
docker rm -f  容器名/容器id    #删除已有的容器
docker ps        #查看正在运行的容器
docker cp        #实现宿主机与容器之间的文件传输
docker exec -it  容器名称/容器id  bash        #进入该容器

二、nextcloud的容器启动

1.辅助目录的创建

在宿主机中创建nextcloud的工作目录,以便于在nextcloud容器启动时将所需的路径映射至宿主机。

mkdir -p  /home/nextcloud        #用于映射nextcloud的配置文件等工作目录
mkdir -p  /home/nextcloud_apache/ssl_certs/certs        #用于存放nextcloud再启用https时的ssl证书
mkdir -p  /home/nextcloud_apache/ssl_certs/private    #用于存放nextcloud再启用https时的秘钥

2.启动nextcloud容器

直接使用docker run +镜像名称启动容器,同时为容器挂载上所需要的路径。

docker run -d --restart=always --name nextcloud -p 8080:80 -p 8443:443 -v /home/nextcloud:/var/www/html  -v /etc/hosts:/etc/hosts -v      /home/nextcloud_apache/ssl_certs/certs:/etc/ssl/certs   -v /home/nextcloud_apache/ssl_certs/private:/etc/ssl/private   nextcloud

若有报错可以使用docker logs 容器id 查看nextcloud容器日志。

说明:

-p 8080:80 #将nextcloud容器的80端口映射至宿主机的8080端口

-p 8443:443 #将nextcloud容器的443端口映射至宿主机的8443端口

-v /home/nextcloud:/var/www/html #用于挂载nextcloud的工作目录

-v /etc/hosts:/etc/hosts #个人起容器的习惯,想把宿主机hosts文件挂载到容器,不一定用得到可以不添加

-v /home/nextcloud_apache/ssl_certs/certs:/etc/ssl/certs #用于存放nextcloud再启用https时的ssl证书

-v /home/nextcloud_apache/ssl_certs/private:/etc/ssl/private #用于存放nextcloud再启用https时的秘钥

启动容器之后,可检查本机的8080端口命令:netstat -ano | grep 8080

之后可以进一步访问web界面:http://本机ip:8080 ,可以看到nextcloud的http服务页面,按照页面提示可以设置管理员账号后,方可进入nextcloud界面。

3.关于数据库

因为本文的部署需求为面向小范围使用,故使用了nextcloud自带的SQlite数据库,若是面向大范围使用需求,可以按照其他博客的介绍搭建并使用mysql数据库。

三、nextcloud容器https服务配置

此处可以采用新起一个nginx容器,代理nextcloud服务的思路实现https目的。本文中使用的是nextcloud镜像上自带的apache来实现。

1、创建自己https的ssl证书

openssl genrsa -des3 -out nextcloud.key 4096
openssl req -new -key nextcloud.key -out nextcloud.csr
cp nextcloud.key nextcloud.key
openssl rsa -in nextcloud.key -out nextcloud.key                #生成key私钥
openssl x509 -req -days 3650 -in nextcloud.csr -signkey nextcloud.key -out nextcloud.crt            #生成crt公钥
cp nextcloud.crt /home/nextcloud_apache/ssl_certs/certs        #将证书复制到映射的证书路径
cp nextcloud.key /home/nextcloud_apache/ssl_certs/private        #将秘钥复制到映射的证书路径

2、nextcloud容器的apache服务配置

因为nextcloud容器镜像中使用的是apache而非nginx,所以需要在容器中的apache上配置https服务。

  • 进入容器执行
a2enmod ssl #开启ssl模块

a2ensite default-ssl #应用一下ssl配置
  • 将容器内的ssl.load文件修改为如下配置
vim /etc/apache2/mods-available/ssl.load

LoadModule ssl_module /usr/lib/apache2/modules/mod_ssl.so
  • 将apache的ssl服务文件拷贝至宿主机并配置(注意文件权限)
docker cp nextcloud:/etc/apache2/sites-available/default-ssl.conf ./
  • 找到SSLEngine on内容,修改配置文件内容
SSLProtocol all -SSLv2 -SSLv3

SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM

SSLEngine on

SSLCertificateFile /etc/apache2/cert/nextcloud.crt #设置证书名称

SSLCertificateKeyFile /etc/apache2/cert/nextcloud.key #设置秘钥名称

  • 开启hsts(上一步)
Header always set Strict-Transport-Security "max-age=15552000; includeSubdomains; preload"
  • 将配置文件复制进容器中,并重启容器(似乎可以不用重启容器)
docker cp default-ssl.conf nextcloud:/etc/apache2/sites-available/

docker restart nextcloud

3、验证https服务与证书

https访问nextcloud容器443映射的端口web。

4、调试“Nextcloud 您正在访问来自不信任域名的服务器”

若启动https服务后,提示Nextcloud 您正在访问来自不信任域名的服务器。可在/config/config.php中添加白名单域名、ip。此处是本文映射出来的文件(/home/nextcloud/config/config.php),也可以进入容器修改。

四、onlyoffice的容器启动

1、onlyoffice介绍

ONLYOFFICE是一套在线办公软件,它允许用户创建、阅读和编辑文档、表格和幻灯片文件。该软件支持多种文件格式,包括但不限于.docx文档、.pptx幻灯片以及.xlsx表格。本文所起应用需求主打在线编辑功能,故需要安装onlyoffice。

2、onlyoffice的容器准备与启动

创建onlyoffice的工作目录,此处需要创建5个路径用于onlyoffice的挂载。

mkdir -p /home/onlyoffice/logs

mkdir -p /home/onlyoffice/data

mkdir -p /home/onlyoffice/lib

mkdir -p /home/onlyoffice/db

mkdir -p /home/onlyoffice/fonts/

直接命令启动onlyoffice容器:

docker run -d -i -t -e TZ="Asia/Shanghai" --restart=always --name onlyoffice -p 9080:80 -p 9443:443 -v /home/onlyoffice/logs:/var/log/onlyoffice -v /home/onlyoffice/data:/var/www/onlyoffice/Data -v /home/onlyoffice/lib:/var/lib/onlyofficeonly -v /home/onlyoffice/db:/var/lib/postgresql -v /etc/localtime:/etc/localtime:ro -v /home/onlyoffice/fonts/:/usr/share/fonts/truetype/custom/ onlyoffice/documentserver

docker run -d -i -t -e TZ="Asia/Shanghai" --restart=always --name onlyoffice -p 9080:80 -p 9443:443 -v /home/onlyoffice/logs:/var/log/onlyoffice -v /home/onlyoffice/data:/var/www/onlyoffice/Data -v /home/onlyoffice/lib:/var/lib/onlyofficeonly -v /home/onlyoffice/db:/var/lib/postgresql -v /etc/localtime:/etc/localtime:ro -v /home/onlyoffice/fonts/:/usr/share/fonts/truetype/custom/ onlyoffice/documentserver

说明:

-p 9080:80 #将onlyoffice的http(80)端口映射至宿主机的9080端口

-p 9443:443 #将onlyoffice的https(443)端口映射至宿主机的9443端口,本文仅用到了http端口,故443端口的配置不做赘述。

3、下载onlyoffice资源

访问onlyoffice官网,根据自身的版本需求下载:ONLYOFFICE - Apps - App Store - Nextcloud。

因为我的nextcloud的版本是Nextcloud version 28.0.1,所以我下载了9.0.0版本。此处下载需要梯子,我自己的梯子还不行,找朋友借的梯子。

4、上传onlyoffice,并配置

将下载的onlyoffice.tar.gz,上传至nextcloud工作路径的apps目录下。(以自己的路径为准,我的路径是在启动nextcloud容器时创建的/home/nextcloud/apps)。

将/home/nextcloud/apps/onlyoffice.tar.gz文件解压,tar -xvf onlyoffice.tar.gz。并给解压后的文件增加权限chmod 777 onlyoffice -R

登录nextcloud的web页面,右上角自己头像处,点击“应用”在搜索框里输入onlyoffice。可以看到onlyoffice已经安装完成了,点击启用即可。

5、onlyoffice的https配置

  • 创建https的ssl证书与密钥文件:(此处的证书需要与nextcloud的https证书与秘钥一致,所以建议直接将nextcloud生成的key crt org csr 直接改名字拿来用)
openssl genrsa -des3 -out onlyoffice.key 4096

openssl req -new -key onlyoffice.key -out onlyoffice.csr

cp onlyoffice.key onlyoffice.key

openssl rsa -in onlyoffice.key -out onlyoffice.key

openssl x509 -req -days 3650 -in onlyoffice.csr -signkey onlyoffice.key -out onlyoffice.crt

openssl dhparam -out dhparam.pem 2048
  • 将上一步生成的证书与密钥文件放到onlyoffice的工作目录 /home/onlyoffice/data/certs下(没有该路径可以mkdir -p 一下):
cp dhparam.pem onlyoffice.crt onlyoffice.csr onlyoffice.key onlyoffice.key /home/onlyoffice/data/certs

docker restart onlyoffice
  • 进入onlyoffice容器修改证书与密钥的挂载文件权限:
docker exec -it onlyoffice bash

cd /var/www/onlyoffice/Data

chmod 777 -R *
  • 将onlyoffice中的default.json文件拷贝到宿主机修改"rejectUnauthorized"参数后,再拷贝回去。
docker cp onlyoffice:/etc/onlyoffice/documentserver/default.json ./

"rejectUnauthorized": false

docker cp default.json onlyoffice:/etc/onlyoffice/documentserver/

docker restart onlyoffice
  • 访问onlyoffice的443映射端口验证web应用

6、在nextcloud中配置onlyoffice应用(https的nextcloud配置https的onlyoffice)

  • 右上角头像处点击“管理设置”,左侧找到onlyoffice并选择。

  • 此处在nextcloud中配置onlyoffice的应用,需要查看onlyoffice的容器秘钥:
docker exec -it onlyoffice bash #进入onlyoffice容器

cat /etc/onlyoffice/documentserver/local.json #查看密钥文件

本文标签: 容器NextcloudHTTPSONLYOFFICE