天天看点

基于国产银河麒麟和开源软件的企业云盘部署方案

作者:Sys浆糊

系统总体设计

系统架构图

基于国产银河麒麟和开源软件的企业云盘部署方案

系统架构

网络规划

服务器名 IP地址 服务端口 端口用途 系统用途
HaproxySrv

192.168.1.222(服务地址)

200.192.168.222 (内部地址)

19000 minio服务端口 负载均衡服务器,对外提供服务地址
19001 minio控制台端口
80 云盘对外服务端口
6443 Onlyoffice服务端口
NextCloudAP 200.192.168.99(内部地址) 9980 NextCloud服务端口 NextCloud应用服务器
6443 Onlyoffice服务端口
NextCloudDB 200.192.168.100 12306 Mysql服务端口 数据库服务器
16379 Redis服务端口

Minio节点:

Node1~node6

200.192.168.1

200.192.168.2

200.192.168.3

200.192.168.4

200.192.168.5

200.192.168.6

19000 Minio api服务端口 Minio分布式存储节点服务器
19001 Minio控制台端口

系统实施工艺

基础操作系统安装

安装国产银河麒麟操作系统,根据需要创建响应的应用用户。配置yum源:

将dvd挂载到操作系统/mnt/dvd

mount /dev/sr0 /mnt/dvd

mv /etc/yum.repos.d/kylin_x86_64.repo /etc/yum.repos.d/kylin_x86_64.repo.bak

vi /etc/yum.respos.d/dvd.repo输入以下内容

[dvd]

name=dvd

baseurl=file:///mnt/dvd

enable=1

gpgcheck=0

保存退出

执行yum makecache更新yum缓存

Minio分布式存储节点安装

用虚拟机克隆6台麒麟系统服务器,或者安装6台物理服务器。

创建minio用户

useradd minio

配置环境变量

vi .bash_profile

export MINIO_ROOT_USER=minio_admin

export MINIO_ROOT_PASSWORD=minio_password

export MINIO_API_STALE_UPLOADS_EXPIRY=1

挂载数据盘

不管是使用lvm创建一个较大的逻辑卷或者直接将raid盘中的一个较大的分区,挂载到指定的文件系统,编辑/etc/fstab,添加内容如下:

/dev/vg01/lvdata /home/data xfs defaults 0 0

保存退出后

mount /home/data

创建并启动minio分布式存储服务

6台minio节点服务器完成了创建用户和数据盘挂载后,使用minio用户登陆,编辑启动脚本

vi start.sh

minio server \

http://200.192.168.1:19000/home/data \

http://200.192.168.2:19000/home/data \

http://200.192.168.3:19000/home/data \

http://200.192.168.4:19000/home/data \

http://200.192.168.5:19000/home/data \

http://200.192.168.6:19000/home/data \

--console-address ":19001" \

--address ":19000"

vi stop.sh

ps -ef|grep minio|grep -v grep|awk '{print $2}'|xargs kill -9

执行sh start.sh启动每一台的minio服务,minio启动成功

创建minio的bucket,相应的策略和用户

登陆minio控制台,随便连接任意Minio节点可登陆Minio控制台,等到负载均衡服务器安装完成后,就可以通过负载服务器连接。

基于国产银河麒麟和开源软件的企业云盘部署方案

输入之前在环境变量中配置的minio_admin和minio_password,即可登陆到Minio控制台。

用图形界面创建bucket

基于国产银河麒麟和开源软件的企业云盘部署方案

点击Buckets——>Create Bucket ——>输入BucketName:nextcloud——>设置Quota限额为1T——>最后点击Create Bucket

创建成功一个bucket为nextcloud

基于国产银河麒麟和开源软件的企业云盘部署方案

创建策略Policy——>Policy Name:nextcloud——>Raw Policy中输入策略内容:

基于国产银河麒麟和开源软件的企业云盘部署方案

{

"Version": "2012-10-17",

"Statement": [

{

"Effect": "Allow",

"Action": [

"s3:*"

],

"Resource": [

"arn:aws:s3:::nextcloud/*"

]

}

]

}

创建用户nextcloud并关联nextcloud策略

基于国产银河麒麟和开源软件的企业云盘部署方案

使用nextcloud的用户密码登陆minio控制台,可以看到它具有在nextcloud上的增删改权限。

基于国产银河麒麟和开源软件的企业云盘部署方案

数据库配置

mysql的数据库安装不再赘述,网上自己查工艺。

创建nextcloud用户和数据库。

create database nextcloud;

use nextcloud;

grant all privileges on nextcloud.* to nextcloud identified by 'xxxxx';

记录nextcloud用户密码,等会儿配置nextcloud有用。

启动redis服务

创建redis文件系统/home/db/redis

将redis-5.0.9.tar.gz解压到/home/db/redis目录下

修改/home/db/redis/redis-5.0.9/etc/redis.conf

将requirepass “XXXX”修改成复杂密码,记录下来。

编辑启动脚本start.sh如下:

cd /home/db/redis/redis-5.0.9

check_exist()

{

res=`ps -ef|grep "./bin/redis-server"|grep -v grep`

if [ "$res" != "" ]

then

echo "redis is running : $res"

exit

fi

}

check_exist

nohup ./bin/redis-server ./etc/redis.conf --protected-mode no > r.log &

安装Haproxy负载均衡服务器

在haproxysrv服务器上,创建haproxy用户,并分配文件系统到/home/ap/haproxy

mkdir /home/ap/haproxy/haproxy

使用haproxy用户登陆,将haproxy程序文件复制到/home/ap/haproxy/haproxy下

包含执行程序haproxy和配置文件haproxy.conf

编辑配置haproxy.conf文件:

global

#log 127.0.0.1 local0 err

log 127.0.0.1:514 local0 info

ulimit-n 65536

maxconn 32000

daemon

nbproc 2

cpu-map 1 0

cpu-map 2 1

pidfile /home/ap/haproxy/haproxy/haproxy.pid

quiet

#

defaults

log global

mode http

option httplog

option dontlognull

option redispatch

option abortonclose

option nolinger

retries 3

timeout connect 5000

timeout client 300s

timeout server 300s

timeout check 6000

balance leastconn

#balance source

#

listen AdminListener01

bind 192.168.1.222:19999

stats uri /stats

stats refresh 30s

stats realm message\ Haproxy

stats auth admin:xxxxxx

stats hide-version

#

backend Backend19000

#option httpchk GET /ecpweb/Index1.jsp status

http-check expect status 200

server node1 200.192.168.1:19000 check port 19000 inter 2000 rise 2 fall 2

server node2 200.192.168.2:19000 check port 19000 inter 2000 rise 2 fall 2

server node3 200.192.168.3:19000 check port 19000 inter 2000 rise 2 fall 2

server node4 200.192.168.4:19000 check port 19000 inter 2000 rise 2 fall 2

server node5 200.192.168.5:19000 check port 19000 inter 2000 rise 2 fall 2

server node6 200.192.168.6:19000 check port 19000 inter 2000 rise 2 fall 2

frontend Proxy19001

bind 200.192.168.222:19001

#option forwardfor

default_backend Backend19001

#

backend Backend19001

http-check expect status 200

server node1 200.192.168.1:19001 check port 19001 inter 2000 rise 2 fall 2

server node2 200.192.168.2:19001 check port 19001 inter 2000 rise 2 fall 2

server node3 200.192.168.3:19001 check port 19001 inter 2000 rise 2 fall 2

server node4 200.192.168.4:19001 check port 19001 inter 2000 rise 2 fall 2

server node5 200.192.168.5:19001 check port 19001 inter 2000 rise 2 fall 2

server node6 200.192.168.6:19001 check port 19001 inter 2000 rise 2 fall 2

#

frontend Proxy80

bind 128.1.100.222:80

#option forwardfor

default_backend Backend9980

#

backend Backend9980

http-check expect status 200

server nextcloud 200.192.168.99:9980 check port 9980 inter 2000 rise 2 fall 2

#start frontend Proxy6443

frontend Proxy6443

bind 0.0.0.0:6443

mode tcp

option tcplog

default_backend Backend6443

#

##Backend6443

backend Backend6443

mode tcp

server nextcloud 200.192.168.99:6443 maxconn 204800 check port 6443 inter 2000 rise 2 fall 2

#end frontend Proxy6443

保存退出。

以上配置主要是把minio的api端口19000,控制台端口19001,nextcloud应用服务器9980端口,onlyoffice的6443端口映射出来。

安装nextcloud应用服务器

在nextcloudap应用服务器200.192.168.99执行以下操作

安装docker服务

从docker官网上下载docker-20.10.23.tgz,解压后将里面的文件复制到/usr/bin目录下

containerd

containerd-shim

containerd-shim-runc-v2

ctr

docker

dockerd

docker-init

docker-proxy

runc

然后vi /usr/lib/systemd/system/docker.service贴入以下内容:

[Unit]

Description=Docker Application Container Engine

Documentation=https://docs.docker.com

After=network-online.target firewalld.service

Wants=network-online.target

[Service]

Type=notify

ExecStart=/usr/bin/dockerd

ExecReload=/bin/kill -s HUP $MAINPID

LimitNOFILE=infinity

LimitNPROC=infinity

TimeoutStartSec=0

Delegate=yes

KillMode=process

Restart=on-failure

StartLimitBurst=3

StartLimitInterval=60s

[Install]

WantedBy=multi-user.target

保存退出后

systemctl enable docker

systemctl start docker

将docker服务启动起来

导入docker镜像

从外网下载nextcloud和onlyoffice镜像,然后用docker image save >nextcloud.tar保存,然后传到企业内网。

使用docker image load<nextcloud.tar

docker image load<onlyoffice.tar导入

然后用docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]为导入的镜像打标签,结果如下:

REPOSITORY TAG IMAGE ID CREATED SIZE

nextcloud latest 1ab67f263045 2 months ago 1e+03MB

onlyoffice latest 0da47c251add 2 months ago 2.84GB

onlyoffice/documentserver latest 0da47c251add 2 months ago 2.84GB

将minio共享存储挂载成s3fs文件系统

首先安装s3fs程序,官网下载s3fs-fuse-1.91.tar.gz,解压编译安装

./autogen.sh

./configure

make&&make install

安装后就可以使用s3fs程序进行minio挂载

将minio的用户nextcloud密码保存在/etc/passwod-s3fs文件

编写挂载程序mnt.sh

s3fs -o passwd_file=/etc/passwd-s3fs -o use_path_request_style -o url=http://200.192.168.222:19000 -o bucket=nextcloud /s3fs -o use_xattr -o allow_other

创建ap文件系统

lvcreate -L 10G -n lvap vg00

mkfs.xfs /dev/vg00/lvap

vi /etc/fstab追加如下内容:

/dev/vg00/lvap /home/ap xfs defaults 0 0

保存退出后

mount /home/ap

然后

mkdir /home/ap/nextcloud /home/ap/onlyoffice

创建nextcloud容器应用

docker run -d \

--name ncloud \

-v /home/ap/nextcloud:/var/www/html \

-v /s3fs/data:/var/www/html/data \

-v /etc/localtime:/etc/localtime \

-e REDIS_HOST=200.192.168.100 \

-e REDIS_HOST_PASSWORD=xxxxx \

-p 9980:80 \

nextcloud

配置nextcloud

https://200.192.168.99:9080

按照提示设置管理员用户,密码,配置mysql数据库的用户密码,使用我们刚才配置的mysql数据库nextcloud,用户nextcloud,密码xxxxx,数据库连接200.192.168.100:12306

这里不赘述

点击install后过段时间,nextcloud就可以进入用户管理界面了

基于国产银河麒麟和开源软件的企业云盘部署方案

安装onlyoffice

创建onlyoffice容器

docker run -i -t -d --privileged -p 6680:80 -p 6443:443 --restart=unless-stopped \

-v /home/ap/onlyoffice/logs:/var/log/onlyoffice \

-v /home/ap/onlyoffice/data:/var/www/onlyoffice/Data \

-v /home/ap/onlyoffice/db:/var/lib/postgresql \

-v /etc/localtime:/etc/localtime \

--name myoffice \

onlyoffice/documentserver

创建onlyoffice私有证书

mkdir /home/ap/onlyoffice/data/certs

cd /home/ap/onlyoffice/data/certs

openssl genrsa -out tls.key 2048

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

openssl x509 -req -days 365 -in tls.csr -signkey tls.key -out tls.crt

openssl dhparam -out dhparam.pem 2048

chmod 400 tls.key

docker restart myoffice

然后用浏览器访问https://192.168.1.222:6443可以看到onlyoffice访问成功界面

基于国产银河麒麟和开源软件的企业云盘部署方案

在nextcloud配置onlyoffice

从nextcloud应用商店下载onlyoffice.tar.gz,解压到/home/ap/nextcloud/apps

cd /home/ap/nextcloud/apps

tar zxvf onlyoffice.tar.gz

然后用admin登陆nextcloud,点击应用

在已禁用的应用中找到onlyoffice,点击启用,可以在已启用的栏目中找到:

基于国产银河麒麟和开源软件的企业云盘部署方案

然后点击管理设置,onlyoffice进入onlyoffice的设置

基于国产银河麒麟和开源软件的企业云盘部署方案

然后填入相应的地址:

基于国产银河麒麟和开源软件的企业云盘部署方案

密钥地址的获得,执行如下命令:

docker exec 4b7b22f7ce0d /var/www/onlyoffice/documentserver/npm/json -f /etc/onlyoffice/documentserver/local.json 'services.CoAuthoring.secret.session.string'

点击保存后提示设置已保存

基于国产银河麒麟和开源软件的企业云盘部署方案

然后随便在nextcloud上新建excel,word文档,验证onlyoffice安装成功.

配置nextcloud外部权限认证

安装python3.10.6,并创建虚拟环境

从官网下载Python-3.10.6.tgz,编译安装成功。

cd /home/ap

python3 -m venv ven

source /home/ap/ven/bin/activate

然后安装Flask和Flask_BasicAuth,从官网上下载安装包,自行编译安装

创建简单的Flask_BasicAuth认证站点:

mkdir -p /home/ap/flaskbasicauth

cd /home/ap/flaskbasicauth

vi index.py

# -*- coding: utf-8 -*-

from flask import Flask

from flask_basicauth import BasicAuth

app = Flask(__name__)

# app.config['BASIC_AUTH_FORCE'] = True # 整个站点都验证

class MyBasicAuth(BasicAuth):

def check_credentials(self,username,password):

if username=='kkk' and password=='1234567': #这里就可以扩展进行其他方式的认证

return True

else:

return False

basic_auth = MyBasicAuth(app)

@app.route('/')

@basic_auth.required

def index():

return "Success!"

if __name__ == '__main__':

app.run("200.192.168.222",port=5000)

保存后退出

编写启动脚本start.sh

source /home/ap/ven/bin/activate

python /home/ap/flaskbasicauth/index.py

保存后退出

nohup sh start.sh&

启动flask应用,tail -f nohup.out查看无报错,观察连接状态。

NextCloud安装user_external插件

从nextcloud官网应用商店下载user_external-v3.1.0.tar.gz

解压到目录/home/ap/nextcloud/custom_apps

cd /home/ap/nextcloud/custom_apps

tar zxvf user_external-v3.1.0.tar.gz

可以在nextcloud的应用管理上看到已禁用的插件External user authentication,可以启用它

基于国产银河麒麟和开源软件的企业云盘部署方案

然后再config.php配置文件追加external user的配置参数:

vi /home/ap/nextcloud/config/config.php

在下面这个参数后面

array (

0 => 'user_external',

),

追加如下参数

'user_backends'=>array(

array(

'class'=>'\OCA\UserExternal\BasicAuth',

'arguments'=>array('http://200.192.168.222:5000'), #flask basic auth安装的地址

),

),

然后重启nextcloud容器让配置生效。

docker restart nextcloud

使用kkk用户成功登陆nextcloud

管理员可以看到kkk用户登陆成功。

基于国产银河麒麟和开源软件的企业云盘部署方案

从flask的日志也可以看到如下记录:

200.192.168.99 - - [29/May/2023 11:37:19] "GET / HTTP/1.1" 200 -

可见通过外部认证也可以成功登陆nextcloud云盘,这样就可以很好的将企业统一认证接口集成到云盘认证中。

继续阅读