一、背景

Nextcloud是个人云存储服务,提供云存储服务,内置了Office文档、图片相册、日历联系人、两步验证、文件管理、RSS阅读等丰富的应用。可安装在本地或云主机,本文使用Docker进行部署,一来直接在主机上部署,要安装的软件实在太多了,二来Nextcloud官方有提供好的Docker镜像。

二、docker部署

由于Nextcloud还需要数据库的支持,如果单独用docker的话,需要手动依次运行2个容器,因此使用docker-compose部署(实际上笔者几乎所有的docker应用,优选这个方式),docker-compose.yml文件内容如下:

# nextcloud docker-compose file
# by Late Lee<li@latelee.org>

version: '2'

services:
  mysql:
    image: mysql:5.7
    container_name: nextmysql
    restart: always
    volumes: # 数据库持久化存储
      - ./db:/var/lib/mysql
    environment: # 数据库账号和密码
      - MYSQL_ROOT_PASSWORD=ll123456
      - MYSQL_PASSWORD=ll123456
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
    networks:
      - nextcloud-net
  nextcloud:
    image: nextcloud:apache 
    container_name: nextcloud
    restart: always
    ports:
      - 8008:80 # 对外使用8008端口
    links:
      - mysql # 连接到数据库
    volumes:
      - ./nextcloud:/var/www/html
    networks:
      - nextcloud-net

networks:
  nextcloud-net:
    driver: bridge

关于docker-compose.yml文件,需要说明几点:

  • 1、数据使用镜像mysql:5.7,并非最新版本,服务名为mysql,这个名称是Nextcloud连接的数据库主机——注意,不是容器名称。另外需要设置数据库名称、用户和密码,因为Nextcloud要使用到。
  • 2、Nextcloud使用镜像nextcloud:apache,集成了apache服务。对外提供8008端口,因为笔者云主机的80端口需要做反向代理。
  • 3、为了持久化存储,两个容器都进行目录的挂载。

执行命令docker-compose up -d启动服务,如果镜像不存在,会自动下载。注意,2个镜像体积较大,需要一定时间。针对体积大的镜像,如果使用阿里云主机,可提交到阿里的镜像仓库,这样后续使用速度会非常快。

服务成功启动后,查看其状态:

$ docker ps              
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
8fff850ff996        nextcloud:apache    "/entrypoint.sh ap..."   42 minutes ago      Up 42 minutes       0.0.0.0:8008->80/tcp   nextcloud
09d7cd30812c        mysql:5.7           "docker-entrypoint..."   42 minutes ago      Up 42 minutes       3306/tcp               nextmysql

状态正常,可以看到,Nextcloud对外开放了8008(映射到内部的80端口),而mysql只在内部开放了3306端口,因为是部署在公网,不会直接操作数据库,所以不开放端口。

三、Nextcloud服务

使用浏览器打开http://<IP地址或域名>:8008,输入管理员账号和密码,选择Mysql数据,输入在docker-compose.yml文件设置好的参数,点击“安装完成”即可。如图1所示:
在这里插入图片描述
图1

Nextcloud主页如图2所示:
在这里插入图片描述
图2

点击右上角图标进行各项的设置,如头像、邮箱地址、修改密码,等等。这些在页面上均有提示指引,所以本文不再赘述。

四、Nextcloud客户端

Nextcloud提供了客户端,包括Windows、MacOS、Linux,也提供移动端APP下载,地址:https://nextcloud.com/install/#install-clients。安装过程十分简单,此处从略。

如此一来,服务端有了,客户端有了,在使用上跟常用的网盘没有太大的区别,不过,现在也没剩多少个网盘了,所以,自己搭建一个自己的网盘是十分有必要的。客户端界面如图3所示。
在这里插入图片描述
图3

五、小结

理论上,开放到公网的地址,最好是使用https协议,但笔者还没有解决一些问题,所以本文未涉及。

重置密码方法

Nextcloud使用命令行示例:

docker exec --user www-data <容器ID> php occ

比如查看系统用户:

$ docker exec --user www-data cab517edc9b0  php occ user:list 
  - latelee: 李迟
  - test: test

根据教程重置密码:

$ docker exec --user www-data cab517edc9b0  php occ user:resetpassword latelee
Interactive input or --password-from-env is needed for entering a new password!

提示说要添加--password-from-env选项,添加后:

docker exec --user www-data cab517edc9b0  php occ --password-from-env user:resetpa 
ssword latelee
--password-from-env given, but OC_PASS is empty!

但是,在容器里或主机中设置OC_PASS的值,均无效。因此以失败告终。

附录

Nextcloud官方镜像:https://hub.docker.com/_/nextcloud/

李迟 2019.10.17 周四,离职找工作期间

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐