搭建过程
所需条件:
1.一台linux主机(安装好docker环境)
2.一块大容量硬盘(云存储容量取决于此硬盘分区大小)
硬盘挂载(已挂载可以直接跳过)
我使用的是移动硬盘连接的主机的usb口,移动硬盘分了一个ext4的分区挂载到主机上。
用diskgenius或者windows上的磁盘管理都可以,分100g的空间,并格式化成ext4格式。
将硬盘插入usb口,或者差到sata口上。
使用命令查看了linux主机上的磁盘
1
fdisk -l
可以看到上图一共两块硬盘,下面/dev/sda为我的移动硬盘,此移动硬盘有两个分区。一块是/dev/sda1(ntfs格式),一块是/dev/sda2(linux文件格式)。接下来就是要将/dev/sda2 挂载到linux系统上。
我这里是挂载到主机的opt目录下,在opt目录下新建disk目录,并挂载/dev/sda2
1
2mkdir disk #新建disk文件夹
mount -t ext4 /dev/sdd2 /opt/disk #挂载
- 准备完毕。
nextcloud docker搭建
本文使用的是官方镜像,nextcloud在github上有着详细的使用说明,并提供多种使用方法example链接
选择 insecure, 是因为自动配置SSL容易出错,并且如果不把容器 443 端口直接映射到主机443 端口,仍然需要其他 Web 服务器进行端口转发,而进行转发的 Web 服务器同样需要配置 SSL。
开始搭建:
将官方提供的 docker-compose 文件下载到服务器
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16cd /opt/disk1
mkdir mycloud
cd mycloud
mkdir web
cd web
wget https://raw.githubusercontent.com/nextcloud/docker/master/.examples/docker-compose/insecure/mariadb-cron-redis/fpm/web/Dockerfile
wget https://raw.githubusercontent.com/nextcloud/docker/master/.examples/docker-compose/insecure/mariadb-cron-redis/fpm/web/nginx.conf
cd ..
wget https://raw.githubusercontent.com/nextcloud/docker/master/.examples/docker-compose/insecure/mariadb-cron-redis/fpm/db.env
wget https://raw.githubusercontent.com/nextcloud/docker/master/.examples/docker-compose/insecure/mariadb-cron-redis/fpm/docker-compose.yml
mkdir db #容器db放置的目录
mkdir nextcloud #nextcloud应用放置的目录
完成上述操作后可以看到目录结构如下:
修改db.env
修改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
49
50
51
52
53
54
55version: '2'
services:
db:
image: mariadb
command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
restart: always
volumes:
- ./db:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD= yourpassword
env_file:
- db.env
redis:
image: redis:alpine
restart: always
app:
image: nextcloud:fpm-alpine
restart: always
volumes:
- ./nextcloud:/var/www/html
environment:
- MYSQL_HOST=db
- REDIS_HOST=redis
env_file:
- db.env
depends_on:
- db
- redis
web:
build: ./web
restart: always
ports:
- 8081:80
volumes:
- ./nextcloud:/var/www/html:ro
depends_on:
- app
cron:
image: nextcloud:fpm-alpine
restart: always
volumes:
- ./nextcloud:/var/www/html
entrypoint: /cron.sh
depends_on:
- db
- redis
volumes:
db:
nextcloud:
使用docker-compose拉取镜像并安装,如果提示未安装docker-cpmpose,先安装
1
2sudo apt-get update
sudo apt-get install docker-compose
之后BUILD镜像并运行:
1
2docker-compose build --pull
docker-compose up -d
等待安装完毕,过程中可能因为网络问题没有安装成功,重试即可
安装完毕,查看运行状况:
1 | docker ps |
访问http://ip:8081 即可访问nextcloud网页
安装过程中遇到的问题
nextcloud 0770 错误,解决方案
此错误是因为数据挂载的文件夹权限的问题,本文的 db及nextcloud文件夹。需要在安装前把两个文件夹加入www-data用户组(ubuntu系统,别的系统的用户组详见nextcloud官网)
1
chown -R www-data:www-data db nextcloud
映射到外网地址后域名访问不了的问题,nextcloud对可访问域名做了限制,需要配置config.php文件的
- 更新nextcloud 出现因为数据库问题无法启动的情况,可能是因为给nextcloud创建的数据库系统权限问题,或者说可能是因为没有创建,可以进入数据库镜像执行:
script 1
2
3
4
5create database nextcloud
grant all PRIVILEGES on *nextcloud.* to nextcloud@'%' identified by 'onePassword';
flush privileges;
1 | 'trusted_domains' => |
进阶使用
- 使用nextcloud同步文件可以用网页,及客户端(各个平台都支持),但是面对大量文件同步会很慢,本地的话也比较繁琐,有个同步的过程。所有就想到是否可以在本地直接拷贝到nextcloud的data文件夹对应的用户下,
但事实是,如果直接拷贝进去,在nextcloud网页上是看不到文件的。因为拷贝进去的文件没有录入到nextcloud的数据库中,所以需要手动触发,查过官网文档后发现有个occ工具,可以直接扫描对应用户下的文件到nextcloud的
数据库中,因为完美解决此问题。
- 官网文档中对docker中使用occ提供了对应的方式,如下
docker方式
1
docker exec --user www-data CONTAINER_ID php occ file:scan userName -v
docker-compose:
1
docker-compose exec --user www-data app php occ file:scan userName -v
- 更新 nextcloud 镜像(docker-compose 方式)
script 1
2
3docker-compose build --pull
docker-compose up -d
- 参考: nextcloud docker