用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.3 安装Docker CE
Docker分CE和EE两个版本,这里我们用开源免费的CE版即可
|
|
1.4 安装Docker Compose
Docker Compose是用来管理和配置多个Docker的工具,后面我们会用到它来部署NextCloud
|
|
二、安装NextCloud
2.1 使用docker-compose安装NextCloud
这里使用的安装方式来自https://hub.docker.com/r/wonderfall/nextcloud/
有兴趣可以了解所有的配置和相关逻辑,下面仅列出使用方法:
- 将存储盘或者本地磁盘的某个分区挂载到目录” /data “下
在” /etc/nextcloud “目录下创建文件” docker-compose.yml “
12cd /etc/nextcloudvi docker-compose.yml
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748version: '2'services:nextcloud:image: wonderfall/nextcloudlinks:- nextcloud-db- redisenvironment:- 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-dbvolumes:- /data/docker/nextcloud/data:/data # /data/docker/nextcloud/XX 是挂载卷的位置- /data/docker/nextcloud/config:/config- /data/docker/nextcloud/apps:/apps2- /data/docker/nextcloud/themes:/nextcloud/themesexpose:- 8888nextcloud-db:image: mariadb:10volumes:- /data/docker/nextcloud/db:/var/lib/mysqlenvironment:- MYSQL_ROOT_PASSWORD=xxxx #数据库root用户密码- MYSQL_DATABASE=nextcloud- MYSQL_USER=nextcloud- MYSQL_PASSWORD=xxxx #数据库nextcloud用户密码redis:image: redis:alpinecontainer_name: redisvolumes:- /data/docker/nextcloud/redis:/data上面的配置中使用了mysql作为数据库,redis作为缓存,加速同步效率,将容器的持久数据挂载到/data目录,没有使用默认启用的全文检索工具solr,没有将端口映射至宿主机。至于如何通过宿主机访问nextcloud,请参考第三章。
执行docker-compose命令部署docker容器
12cd /etc/nextclouddocker-compose up -d查看是否部署成功
1docker ps -a如果三个容器的STATUS都是UP,证明容器启动成功
查看nextcloud容器ip
1docker inspect root_nextcloud_1如上图所示,查询并记录nextcloud容器的ip,供第三章使用
2.2 设置开机启动
编辑 /etc/rc.local
1vi /etc/rc.local123service docker startcd /etc/nextclouddocker-compose start赋予可执行权限
1chmod +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
|
|
3.4 配置Nginx
|
|
修改配置如下:
|
|
重启nginx
|
|
3.5 开放防火墙端口
执行命令:
|
|
打开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包
123yum -y install epel-releaseyum install python-pippip install requests下载源码到 /usr/local
12cd /usr/localwget https://github.com/rfancn/aliyun-ddns-client/archive/master.zip解压源码
12yum install -y unzipunzip master.zip
4.3 配置
重命名ddns.conf.example
12cd /usr/local/aliyun-ddns-client-mastermv ddns.conf.example ddns.conf编辑ddns.service
1vi ddns.service修改WorkingDirectory
123456789[Unit]Description=Aliyun DDNS Client.Wants=network-online.targetAfter=network.target network-online.target[Service]Type=simpleWorkingDirectory=/usr/local/aliyun-ddns-client-master #修改工作目录ExecStart=/usr/bin/python ddns.py复制服务文件
12cp ddns.timer /usr/lib/systemd/systemcp ddns.service /usr/lib/systemd/system修改ddns.conf
1vi ddns.conf1234567891011121314151617[DEFAULT]填写阿里云domain用户的access_idaccess_id=XXXX填写阿里云domain用户的access_keyaccess_key=XXXXXOptional: not used nowinterval=600Optional: turn on debug mode or notdebug=true[DomainRecord1]填写一级域名,如google.comdomain=xxxx.com填写子域名,如pan,注意不要写成pan.xxxx.comsub_domain=panRequired: resolve type, now it only supports 'A'type=A启动服务并验证配置
12345678910cd /usr/local/aliyun-ddns-client-masterpython ddns.py如果显示 2017-12-26 15:28:15 [INFO] Successfully updated DomainRecord[pan.xxxx.com]则环境正常systemctl daemon-reloadsystemctl start ddns.timer开机自启动systemctl enable ddns.timer查看服务状态systemctl status ddns.timer -l如果如下图所示,则服务正常:
最后的最后,我们可以在内网或者公网通过 https://pan.xxx.com:23456 访问NextCloud,初始管理员账号密码为admin,登陆后就可以配置和使用了。