天天看點

基于國産銀河麒麟和開源軟體的企業雲盤部署方案

作者: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雲盤,這樣就可以很好的将企業統一認證接口內建到雲盤認證中。

繼續閱讀