用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 "
1 2
cd /etc/nextcloud vi docker-compose.yml
1 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
version: '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 2
cd /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 3
service 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
|
|
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包
1 2 3
yum -y install epel-release yum install python-pip pip install requests
-
下载源码到 /usr/local
1 2
cd /usr/local wget https://github.com/rfancn/aliyun-ddns-client/archive/master.zip
-
解压源码
1 2
yum install -y unzip unzip master.zip
4.3 配置
-
重命名ddns.conf.example
1 2
cd /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
[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 2
cp 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
[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 10
cd /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,登陆后就可以配置和使用了。