搭建过程
所需条件:
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 
 2- mkdir 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
 16- cd /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
 55- version: '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 
 2- sudo apt-get update 
 sudo apt-get install docker-compose
- 之后BUILD镜像并运行: - 1 
 2- docker-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





 
        