我的docker随笔19:Nextcloud部署
Nextcloud是个人云存储服务,提供云存储服务,内置了Office文档、图片相册、日历联系人、两步验证、文件管理、RSS阅读等丰富的应用。可安装在本地或云主机,本文使用Docker进行部署,一来直接在主机上部署,要安装的软件实在太多了,二来Nextcloud官方有提供好的Docker镜像。
一、背景
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 周四,离职找工作期间
更多推荐
所有评论(0)