用Docker搭建企业私有云盘NextCloud
前言
本文涉及的操作系统、软件平台和其他环境如下:
- 云盘服务器
- CentOS 7
- WD红盘/阵列盒(可选)
- 所在网络需要有公网IP
- Docker CE
- Docker Compose
- Nginx with SSL
- 阿里云
- DNS
- CA证书
一、安装Docker
1.1 关闭selinux
如果没有专业的运维,建议关闭selinux,以免后续配置引起冲突
修改” /etc/selinux/config “文件,设置SELINUX=disabled ,保存并重启服务器
1.2 删除CentOS自带Docker
CentOS 7自带了旧版本Docker,所以先删除,如果服务器已经安装Docker请谨慎执行!!!
1 | sudo yum -y remove docker docker-common container-selinux |
1.3 安装Docker CE
Docker分CE和EE两个版本,这里我们用开源免费的CE版即可
1 | sudo yum install -y yum-utils |
1.4 安装Docker Compose
Docker Compose是用来管理和配置多个Docker的工具,后面我们会用到它来部署NextCloud
1 | sudo curl -L https://github.com/docker/compose/releases/download/1.18.0/docker-compose-`uname -s`-`uname -m` -o /usr/bin/docker-compose |
二、安装NextCloud
2.1 使用docker-compose安装NextCloud
这里使用的安装方式来自https://hub.docker.com/r/wonderfall/nextcloud/
有兴趣可以了解所有的配置和相关逻辑,下面仅列出使用方法:
将存储盘或者本地磁盘的某个分区挂载到目录” /data “下
在” /etc/nextcloud “目录下创建文件” docker-compose.yml “
1
2cd /etc/nextcloud
vi docker-compose.yml1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49version: '2'
services:
nextcloud:
image: wonderfall/nextcloud
links:
- nextcloud-db
- redis
environment:
- UID=1000
- GID=1000
- UPLOAD_MAX_SIZE=30G #单个文件上传限制
- APC_SHM_SIZE=128M
- OPCACHE_MEM_SIZE=128
- CRON_PERIOD=15m
- TZ=Asia/Shanghai #修改时区
- ADMIN_USER=admin
- ADMIN_PASSWORD=admin
- DOMAIN=xxxx #需要设置的域名
- DB_TYPE=mysql
- DB_NAME=nextcloud
- DB_USER=nextcloud
- DB_PASSWORD=xxxx #数据库nextcloud用户密码
- DB_HOST=nextcloud-db
volumes:
- /data/docker/nextcloud/data:/data # /data/docker/nextcloud/XX 是挂载卷的位置
- /data/docker/nextcloud/config:/config
- /data/docker/nextcloud/apps:/apps2
- /data/docker/nextcloud/themes:/nextcloud/themes
expose:
- 8888
nextcloud-db:
image: mariadb:10
volumes:
- /data/docker/nextcloud/db:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=xxxx #数据库root用户密码
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
- MYSQL_PASSWORD=xxxx #数据库nextcloud用户密码
redis:
image: redis:alpine
container_name: redis
volumes:
- /data/docker/nextcloud/redis:/data上面的配置中使用了mysql作为数据库,redis作为缓存,加速同步效率,将容器的持久数据挂载到/data目录,没有使用默认启用的全文检索工具solr,没有将端口映射至宿主机。至于如何通过宿主机访问nextcloud,请参考第三章。
执行docker-compose命令部署docker容器
1
2cd /etc/nextcloud
docker-compose up -d查看是否部署成功
1
docker ps -a
如果三个容器的STATUS都是UP,证明容器启动成功
查看nextcloud容器ip
1
docker inspect root_nextcloud_1
如上图所示,查询并记录nextcloud容器的ip,供第三章使用
2.2 设置开机启动
编辑 /etc/rc.local
1
vi /etc/rc.local
1
2
3service docker start
cd /etc/nextcloud
docker-compose start赋予可执行权限
1
chmod +x /etc/rc.d/rc.local
三、Nginx反向代理
3.1 域名解析
将第二章docker-compose.yml 配置中的域名解析到服务器公网IP
3.2 申请CA证书
有条件可以购买收费CA证书,这里使用了阿里云的免费证书,现在(2017.12)阿里云刻意“隐藏”了免费证书的位置,按以下操作可以找到:
- 保护类型选择“1个域名”
- 选择品牌先选择赛门铁克Symantec
- 这时候才能看到证书类型出现“免费型DV SSL”
购买证书后需要进行验证,通过后才能下载使用
下载证书请选择for Nginx,解压将其中两个文件(key和pem)拷贝至服务器” /etc/cert “目录
3.3 安装Nginx
如果已经安装Nginx可以跳过该步骤,否则可以执行下面的命令安装nginx
1 | 设置rpm源 |
3.4 配置Nginx
1 | vi /etc/nginx/nginx.conf |
修改配置如下:
1 | http { |
重启nginx
1 | systemctl restart nginx |
3.5 开放防火墙端口
执行命令:
1 | firewall-cmd --zone=public --add-port=23456/tcp --permanent |
打开23456端口以免访问受限。
3.6 端口转发
最后,我们还需要把路由器的23456端口转发至NextCloud服务器(如192.168.2.254),路由器不同,配置方式也不同,下图是H3路由器配置方式:
到这里,我们就可以通过 https://pan.XXX.com:23456 访问NextCloud了,需要注意我们只配置了Nginx监听SSL,也就是输入URL时,不要忘记是https
需要提醒的是,如果服务器网络是动态IP,还需做DDNS,否则IP更换后,将不能通过域名访问NextCloud
四、DDNS
由于我们想用公司自己的二级域名,又有服务器,还有阿里云的SDK,所以我们没有使用花生壳等第三方解决方案,这里使用DDNS的方式来自https://github.com/rfancn/aliyun-ddns-client
4.1 创建阿里云AccessKey
进入阿里云访问控制页面,新建domain用户,并自动生成AccessKey,确认后记录access_key和access_id,注意保密
分配域名管理权限给domain用户
4.2 安装
安装python的requests包
1
2
3yum -y install epel-release
yum install python-pip
pip install requests下载源码到 /usr/local
1
2cd /usr/local
wget https://github.com/rfancn/aliyun-ddns-client/archive/master.zip解压源码
1
2yum install -y unzip
unzip master.zip
4.3 配置
重命名ddns.conf.example
1
2cd /usr/local/aliyun-ddns-client-master
mv ddns.conf.example ddns.conf编辑ddns.service
1
vi ddns.service
修改WorkingDirectory
1
2
3
4
5
6
7
8
9
10[Unit]
Description=Aliyun DDNS Client.
Wants=network-online.target
After=network.target network-online.target
[Service]
Type=simple
WorkingDirectory=/usr/local/aliyun-ddns-client-master #修改工作目录
ExecStart=/usr/bin/python ddns.py复制服务文件
1
2cp ddns.timer /usr/lib/systemd/system
cp ddns.service /usr/lib/systemd/system修改ddns.conf
1
vi ddns.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18[DEFAULT]
填写阿里云domain用户的access_id
access_id=XXXX
填写阿里云domain用户的access_key
access_key=XXXXX
Optional: not used now
interval=600
Optional: turn on debug mode or not
debug=true
[DomainRecord1]
填写一级域名,如google.com
domain=xxxx.com
填写子域名,如pan,注意不要写成pan.xxxx.com
sub_domain=pan
Required: resolve type, now it only supports 'A'
type=A启动服务并验证配置
1
2
3
4
5
6
7
8
9
10cd /usr/local/aliyun-ddns-client-master
python ddns.py
如果显示 2017-12-26 15:28:15 [INFO] Successfully updated DomainRecord[pan.xxxx.com]则环境正常
systemctl daemon-reload
systemctl start ddns.timer
开机自启动
systemctl enable ddns.timer
查看服务状态
systemctl status ddns.timer -l如果如下图所示,则服务正常:
最后的最后,我们可以在内网或者公网通过 https://pan.xxx.com:23456 访问NextCloud,初始管理员账号密码为admin,登陆后就可以配置和使用了。
用Docker搭建企业私有云盘NextCloud