搭建私有云存储系统-NextCloud

这里主要介绍使用Docker方式部署NextCloud的过程。

安装启动

$docker pull nextcloud
$docker pull mysql
$mkdir /home/nextcloud

way1: basic docker

$docker run --name mysql -v ?:? -e MYSQL_ROOT_PASSWORD=12345678 -p 33306:3306 -d mysql
$docker exec -it mysql mysql -u root -p
  CREATE DATABASE nextcloud;
  GRANT ALL ON *.* TO 'root'@'%';
  flush privileges;
  exit;
$docker run --name nextcloud --link mysql:nextcloud_db -p 80:80 -v /home/nextcloud:/var/www/html/ -d nextcloud

way2: docker-compose

#mkdir -p /home/nextcloud/mysql
#mkdir -p /home/nextcloud/www/html
#chown -R www-data:root /home/nextcloud
$docker network create nextcloud_net
$cat docker-compose.yml
version: '2'

services:
        db:
                container_name: mysql_db
                image: mysql
                volumes:
                        - "/home/nextcloud/mysql:/var/lib/mysql"
                restart: always
                environment:
                        MYSQL_ROOT_PASSWORD: 12345678
                        MYSQL_DATABASE: nextcloud
        app:
                container_name: nextcloud_app
                depends_on:
                        - db
                image: nextcloud
                volumes:
                        - "/home/nextcloud/www/html:/var/www/html"
                        - "/home/share:/home/share"
                links:
                        - db
                ports:
                        - 80:80
                restart: always

networks:
        default:
                external:
                        name: nextcloud_net
$docker-compose up -d

数据库初始信息

容器内

mysql_db 启动后,立即检查初始数据库信息如下:

# mysql --user=root --password=12345678
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 9
Server version: 8.0.21 MySQL Community Server - GPL

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> select database();
+------------+
| database() |
+------------+
| NULL       |
+------------+
1 row in set (0.00 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| nextcloud          |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.01 sec)

mysql> use nextcloud
Database changed

mysql> show tables;
Empty set (0.00 sec)

宿主机

szscm@vmcnszs207:/home/nextcloud/mysql$ ls
 auto.cnf        ca-key.pem       '#ib_16384_0.dblwr'   ib_logfile0     mysql                private_key.pem   sys
 binlog.000001   ca.pem           '#ib_16384_1.dblwr'   ib_logfile1     mysql.ibd            public_key.pem    undo_001
 binlog.000002   client-cert.pem   ib_buffer_pool       ibtmp1          nextcloud            server-cert.pem   undo_002
 binlog.index    client-key.pem    ibdata1             '#innodb_temp'   performance_schema   server-key.pem

杂乱

version: '2'  
services:  
  db:  
    container_name: cloud_db  
    image: mysql:5.7
    volumes:  
      - "/home/mysql:/var/lib/mysql"  
    restart: always  
    environment:  
      MYSQL_ROOT_PASSWORD: mysql_root_pwd  #mysql root用户密码,nextcloud后续初始化需要使用。
      MYSQL_DATABASE: nextcloud   #专为nextcloud新建的数据库,nextcloud后续初始化需要使用。
  app:  
    container_name: cloud_app
    depends_on:  
      - db
    image: nextcloud
    volumes:  
      - /home/nextcloud:/var/www/html

    links:  
      - db
    ports:  
      - "80:80"  # 前一个80是宿主机也就是阿里云主机对外的端口号,需注意阿里云主机安全组规则是否开放了这个端口。
    restart: always  
  cron:  
    container_name: cloud_cron  
    image: nextcloud  
    links:  
      - db  
    volumes_from:  
      - app  
    user: www-data  
    entrypoint: |  
      bash -c 'bash -s <<EOF  
      trap "break;exit" SIGHUP SIGINT SIGTERM  
      while /bin/true; do  
        /usr/local/bin/php /var/www/html/cron.php  
        sleep 900  
      done  
      EOF'  
    restart: always  
networks:  
  default:  
    external:  
      name: nextcloud

关于容器更多使用,需要参考: https://hub.docker.com/_/nextcloud/

因为计划使用数据库,需要借助:–link db_nextcloud:db_nextcloud是因为要链接数据库的docker。

配置

数据库配置

初始化配置

首次打开网页: 172.16.246.207 进入NextCloud初始页面。

  • 设置NEXTCLOUD管理员账户密码
  • 数据目录选择: /var/www/html/data
  • 选择MySQL数据库
  • 输入MySQL的root账户密码:root/12345678
  • 选择MySQL数据库
  • 选择MySQL主机

如下:


最后点击完成。

初始化配置后的数据库信息

这里只在 mysql_db 容器内查看相关内容即可。如下

root@3159365f7181:/# mysql --user=root --password=12345678
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 60
Server version: 8.0.21 MySQL Community Server - GPL

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> select database();
+------------+
| database() |
+------------+
| NULL       |
+------------+
1 row in set (0.00 sec)

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| nextcloud          |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

mysql> use nextcloud
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> show tables;
+-----------------------------+
| Tables_in_nextcloud         |
+-----------------------------+
| oc_accounts                 |
| oc_activity                 |
| oc_activity_mq              |
| oc_addressbookchanges       |
| oc_addressbooks             |
| oc_appconfig                |
| oc_authtoken                |
| oc_bruteforce_attempts      |
| oc_calendar_invitations     |
| oc_calendar_reminders       |
| oc_calendar_resources       |
| oc_calendar_resources_md    |
| oc_calendar_rooms           |
| oc_calendar_rooms_md        |
| oc_calendarchanges          |
| oc_calendarobjects          |
| oc_calendarobjects_props    |
| oc_calendars                |
| oc_calendarsubscriptions    |
| oc_cards                    |
| oc_cards_properties         |
| oc_collres_accesscache      |
| oc_collres_collections      |
| oc_collres_resources        |
| oc_comments                 |
| oc_comments_read_markers    |
| oc_credentials              |
| oc_dav_cal_proxy            |
| oc_dav_shares               |
| oc_direct_edit              |
| oc_directlink               |
| oc_federated_reshares       |
| oc_file_locks               |
| oc_filecache                |
| oc_filecache_extended       |
| oc_files_trash              |
| oc_flow_checks              |
| oc_flow_operations          |
| oc_flow_operations_scope    |
| oc_group_admin              |
| oc_group_user               |
| oc_groups                   |
| oc_jobs                     |
| oc_login_flow_v2            |
| oc_migrations               |
| oc_mimetypes                |
| oc_mounts                   |
| oc_notifications            |
| oc_notifications_pushtokens |
| oc_oauth2_access_tokens     |
| oc_oauth2_clients           |
| oc_preferences              |
| oc_privacy_admins           |
| oc_properties               |
| oc_recent_contact           |
| oc_schedulingobjects        |
| oc_share                    |
| oc_share_external           |
| oc_storages                 |
| oc_systemtag                |
| oc_systemtag_group          |
| oc_systemtag_object_mapping |
| oc_text_documents           |
| oc_text_sessions            |
| oc_text_steps               |
| oc_trusted_servers          |
| oc_twofactor_backupcodes    |
| oc_twofactor_providers      |
| oc_user_transfer_owner      |
| oc_users                    |
| oc_vcategory                |
| oc_vcategory_to_object      |
| oc_webauthn                 |
| oc_whats_new                |
+-----------------------------+
74 rows in set (0.00 sec)

mysql> 
mysql> select * from oc_users;
+-------+-------------+-----------------------------------------------------------------------------------------------------+-----------+
| uid   | displayname | password                                                                                            | uid_lower |
+-------+-------------+-----------------------------------------------------------------------------------------------------+-----------+
| szscm | NULL        | 3|$argon2id$v=19$m=65536,t=4,p=1$Z1pnTGovd0ZDT1g0LmpqbQ$nDjmkB85OP6Lm8DDImFh/60QxHDU0D21HIiErTuNNcA | szscm     |
+-------+-------------+-----------------------------------------------------------------------------------------------------+-----------+
1 row in set (0.00 sec)

mysql> select * from oc_accounts;
Empty set (0.01 sec)

mysql> select * from oc_group_admin;
Empty set (0.00 sec)

mysql> select * from oc_group_user;
+-------+-------+
| gid   | uid   |
+-------+-------+
| admin | szscm |
+-------+-------+
1 row in set (0.00 sec)

mysql> select * from oc_groups;
+-------+-------------+
| gid   | displayname |
+-------+-------------+
| admin | admin       |
+-------+-------------+
1 row in set (0.00 sec)

mysql> select * from oc_credentials;
Empty set (0.00 sec)

mysql> select * from oc_user_transfer_owner;
Empty set (0.00 sec)

可见,建立了很多表。

用户管理

方法一:图形界面

在浏览器登入NextCloud的管理员用户后,新建 test 用户, 分组为 szic 。

过程如下:

添加szic群组

选择 配置->添加分组, 输入 szic

如下:

添加test用户

选择 配置->新建用户, 输入 test 以及相关信息。这里密码设置是: 123456

如下:

注意: 由于默认要求必须用8位高强度密码,如果想要去掉这个限制,需要在页面中找到 设置->管理->安全 进行密码规则设定:

方法二:命令行方式

登陆nextcloud的容器

$docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                 NAMES
2de00e21130c        nextcloud           "/entrypoint.sh apac…"   6 minutes ago       Up 6 minutes        0.0.0.0:80->80/tcp    nextcloud_app
3159365f7181        mysql               "docker-entrypoint.s…"   3 days ago          Up 3 days           3306/tcp, 33060/tcp   mysql_db

$docker exec -it -u www-data nextcloud_app /bin/bash
www-data@2de00e21130c:~/html$export OC_PASS="123456"
www-data@2de00e21130c:~/html$php /var/www/html/occ user:add --password-from-env --display-name="test" --group="szic"  "test"

这样便建立默认密码为 123456 用户组为 szic 的用户 test, 如果不用 --password-from-env 则需手动输入密码。

查看数据库

添加完用户后,相关的数据库信息

root@3159365f7181:/# mysql --user=root --password=12345678
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 120
Server version: 8.0.21 MySQL Community Server - GPL

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> use nextcloud
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> select * from oc_users;
+-------+-------------+-----------------------------------------------------------------------------------------------------+-----------+
| uid   | displayname | password                                                                                            | uid_lower |
+-------+-------------+-----------------------------------------------------------------------------------------------------+-----------+
| szscm | NULL        | 3|$argon2id$v=19$m=65536,t=4,p=1$Z1pnTGovd0ZDT1g0LmpqbQ$nDjmkB85OP6Lm8DDImFh/60QxHDU0D21HIiErTuNNcA | szscm     |
| test  | NULL        | 3|$argon2id$v=19$m=65536,t=4,p=1$V09Jc2IwMzZqdjVMSDNVVw$ff+VwF+3Mrj4KeOIU6GdbAyAuQCubTYbI4qu5HHIcUY | test      |
+-------+-------------+-----------------------------------------------------------------------------------------------------+-----------+
2 rows in set (0.00 sec)

mysql> select * from oc_accounts;
+-------+------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------+
| uid   | data                                                                                                                                     

                                                                                             |
+-------+------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------------------+
| szscm | {"displayname":{"value":"szscm","scope":"contacts","verified":"0"},"address":{"value":"","scope":"private","verified":"0"},"website":{"value":"","scope":"private","verified":"0"},"email":{"value":null,"scope":"contacts","verified":"0"},"avatar":{"scope":"contacts"},"phone":{"value":"","scope":"private","verified":"0"},"twitter":{"value":"","scope":"private","verified":"0"}} |
| test  | {"displayname":{"value":"test","scope":"contacts","verified":"0"},"address":{"value":"","scope":"private","verified":"0"},"website":{"value":"","scope":"private","verified":"0"},"email":{"value":null,"scope":"contacts","verified":"0"},"avatar":{"scope":"contacts"},"phone":{"value":"","scope":"private","verified":"0"},"twitter":{"value":"","scope":"private","verified":"0"}}  |
+-------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
2 rows in set (0.00 sec)

mysql> select * from oc_group_admin;
Empty set (0.01 sec)
mysql> select * from oc_group_user;
+-------+-------+
| gid   | uid   |
+-------+-------+
| admin | szscm |
| szic  | test  |
+-------+-------+
2 rows in set (0.00 sec)

mysql> select * from oc_groups;
+-------+-------------+
| gid   | displayname |
+-------+-------------+
| admin | admin       |
| szic  | szic        |
+-------+-------------+
2 rows in set (0.00 sec)

mysql> select * from oc_credentials;
Empty set (0.00 sec)

mysql> select * from oc_user_transfer_owner;
Empty set (0.00 sec)

mysql>

默认文件

某个用户登陆NextCloud后会看到默认的文件。

这些默认文件的存放在: /home/nextcloud/www/html/core/skeleton, 如果修改这里的内容,那么新用户登陆看到的默认文件也随之变化。但是,当Nextcloud升级时,这个 core/skeleton 就会被替换,你所做的修改也就不存在了。

如果自定义配置:
config/config.php,
自定义默认文件添加如下:

'skeletondirectory' => 'core/custom_skeleton',

这样,Nextcloud在安装或创建新用户时就会从core/custom_skeleton复制文件,当Nextcloud更新时,这个目录也不会被替换以至于丢失自定义的默认文件。

'skeletondirectory' => '',

这样Nextcloud就不会去复制任何文件,这样用户的文件夹默认就是空的。

使用

客户端下载: https://nextcloud.com/install/#install-clients

问题

主机与NextCloud数据同步

NEXTCLOUD数据存于磁盘,但是网页上只能看到nextcloud中上传的文件,看不到手动传输到对应数据目录的文件。

默认数据存放位置:

与主机共享数据的方案

方案1、webdav挂载

1、安装 davfs2
2、输入命令进行挂载
mount -t davfs http://webdav地址 /挂载路径
3、根据提示输入用户名及密码

方案2、扫描文件同步

# nextcloud={nextcloud安装目录}
# cd $nextcloud
# su -s /bin/bash -c “/usr/bin/php $nextcloud/occ file:scan” apache

期间的问题

实时同步

结合 inotify,使用举例:

#!/bin/bash
#inotifywait -mr --timefmt '%d/%m/%y %H:%M' --format '%T %w %f' -e create,attrib,move,delete,modify,close_write ./notify_check | \

lastpath=""
inotifywait -mr --timefmt '%d/%m/%y %H:%M' --format '%T %w %f' -e create,modify,delete,move ./notify_check | \
        while read d t p f; do
                echo "time is:$d$t"
                echo "file path is: $p$f"
                #Don't process with action if event happens in same filepath
                if [ "x$lastpath" != "x$p$f" ]
                then
                        echo "Action path:$p$f!"
                        lastpath=$p$f
                fi
        done

其中检测到文件变化的动作,改成 occ file:scan 即可(有待实践)。

文件夹部署

默认nextcloud中上传的数据存储路径是: /var/www/html/data/<username>/files , 如果没有上传过数据,就没有 files 文件夹。

所以部署上我们可以这样:

$mkdir -p /home/share/nextcloud_files
$ln -s /var/www/html/data/<username>/files /home/share/nextcloud_files/<username>

但是问题是nextcloud的数据目录: /var/www/html/data 有权限的控制,导致其它人(除了 rootwww-data )无法访问, 进而创建的软连接也无法进行了。目前只能手动用 chmod 方式修改,过一段时间或重启后自动恢复成不可访问了。

其它

一些计划

一些参考

数据迁移:https://help.nextcloud.com/t/tutorial-how-to-migrate-mass-data-to-a-new-nextcloud-server/9418/20

参考: https://www.cnblogs.com/zhouzhifei/p/11548503.html

来源:https://wzfou.com/question/9883/

baoang54        2018年11月23日  0 个评论
站长推荐过这个私有云工具,在ownCloud 和它之间我选了后者,安装什么的照站长的说明顺利完成倒不难,但一段时间用下来有个问题。
有些东西我可以从网上下载,一般是用wget ,那我就找到它的数据目录,比如Nextcloud /data /user ,大概是这个,然后运行wget 就下到这里。我的想法是如此操作后,通过网页登陆或手机客户端登录后能在网盘里看到这个文件,可是试过之后发现网盘或网页登录后没有这个下载的文件。
想问站长,理论上我的想法应当是对的,但为什么显示不出来呢?是否Nextcloud 还需要进行其他的配置?

Avatar for 逗妇乳       
逗妇乳14        回答于2018年11月28日 1 评论
nextcloud 列出文件都是查询数据库记录的,你手动添加的文件是没有记录信息的,需要手动扫描
# nextcloud={nextcloud安装目录}
# cd $nextcloud
# su -s /bin/bash -c “/usr/bin/php $nextcloud/occ file:scan” apache

baoang 评论于 2018年11月28日
Avatar for 逗妇乳
baoang 评论于 2018年11月28日
哦,原来是这样。 看了下官方论坛的文档: https://help.nextcloud.com/t/tutorial-how-to-migrate-mass-data-to-a-new-nextcloud-server/ 结果想到那个关键的php——我编译LEMP的时候用了个参数: –disable-cli 这下使不上劲了

来源:https://www.cnblogs.com/gaosf/p/11690601.html

创建 nextcloud 所需的数据库和账户

打开数据库管理命令行,默认root没密码,回车进入
sudo mysql -u root -p

创建 nextcloud 数据库,命令包含后面的分号
CREATE DATABASE nextcloud;

//创建用户nextclouduser,password可自定义
create user nextclouduser@localhost identified by 'nextpassword';

//用以下命令授予必要的权限为数据库和用户授权
grant all privileges on nextcloud.* to nextclouduser@localhost identified by 'nextpassword'; 

//用命令更新数据库配置:
flush privileges;
注意操作时,指令后需加‘;’使执行

来源:https://blog.xiaolee.net/zt/679.html

1、安装 davfs2
2、输入命令进行挂载
mount -t davfs http://webdav地址 /挂载路径
3、根据提示输入用户名及密码
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,194评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,058评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,780评论 0 346
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,388评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,430评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,764评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,907评论 3 406
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,679评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,122评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,459评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,605评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,270评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,867评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,734评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,961评论 1 265
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,297评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,472评论 2 348

推荐阅读更多精彩内容