Docker系列 搭建个人云盘服务nextcloud

这篇具有很好参考价值的文章主要介绍了Docker系列 搭建个人云盘服务nextcloud。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

转自我的个人博客https://blognas.hwb0307.com。欢迎关注!

前言

虽然我们前面介绍了图床之类的Docker应用,但其实云盘服务才是更加贴近大众生活的Docker应用。

Nextcloud是一个类似于百度网盘、阿里云盘的服务,可以通过docker容器的方式搭建在自己的个人服务器或NAS上,有安卓和IOS客户端。我不知道有没有人在VPS上布署nextcloud。一般都是NAS用户吧!有中文界面。我个人一般是用于进行手机照片的云同步,同时还储存一些小文件,并且偶尔可以分享文件给朋友,此时朋友下载文件的速度不像免费百度云那样受到限制。

Nextcloud除了基本的文件云同步和云储存的功能外,其实还有很多进阶功能,以后有机会再开系列博文来描述它的使用吧。

本篇博文主要讲述如何通过docker来安装Nextcloud,并且借助NPM进行ssl证书的申请和自动续期。安装docker应用往往不是难事,难就难在如何方便地获得https,而这个和个人信息安全密切相关的主题在多数教程中均少有提及。

Nextcloud的特别之处还在于:Nextcloud仅仅提供特色功能。它的性能提升往往依赖其它应用,比如MYSQL和Redis;它的拓展性往往依赖强大的插件。如果你用默认的方法安装docker nextcloud,那么它的性能会受到较大的限制。

如果你可以熟练使用原生Nginx,可参考这位大佬的方案:使用docker-compose搭建nextcloud+Nginx+MySQL+Redis。我请了杜比的ZoniNG大佬测试,这个博客的方案是有效的,只是数据库权限的设置方法要变通一下。由于我对于原生Nginx的配置并不熟悉,所以并没有采用他的方案。对于新手而言,他的设置过于复杂。本回的安装方法是一种对Nextcloud性能有较大提升并且较为简便的方法。原理上,唯一不同的是我们采用Nextcloud原生app,即使用Apache进行80端口映射,而不是像大佬那样采用Nginx+Nextcloud:fpm的方法。

最后提醒一下:这个方法配置的Nextcloud对内存的占用还是比较大的。如果你觉得安装完卡顿的话,可以到htop看看是不是Nextcloud的问题。这里我大致展示一下(不知道是不是和Nextcloud有关):

Docker系列 搭建个人云盘服务nextcloud

不知长期使用会怎么样,现阶段感觉对其它应用没有明显的不良影响。

其它关于nextcloud的其它信息,可以访问:

  • 官方网站:https://nextcloud.com/
  • 官网github仓库(docker镜像):https://github.com/nextcloud/docker

另外,**如果有使用非443端口的NAS的童鞋在安装Nextcloud中有任何问题的,欢迎评论区留言。**我什么坑都踩过!

测试环境

我是在VPS里演示Nextcloud安装的:

uname -a # Linux VM-12-8-ubuntu 5.4.0-42-generic #46-Ubuntu SMP Fri Jul 10 00:24:02 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

docker --version # Docker version 20.10.5, build 55c4c88

docker-compose --version # docker-compose version 1.28.6, build 5db8d86f

准备工作

# 工作目录请按需修改
work=~/docker/nextcloud && mkdir -p $work && cd $work

# 防火墙
sudo ufw allow 7602/tcp comment 'nextcloud' && sudo ufw reload
sudo ufw allow 6379/tcp comment 'nextcloud' && sudo ufw reload

# 提前拉取镜像
docker pull nextcloud:latest
docker pull mariadb:latest
docker pull redis

配置yml文件

添加一个docker-compose文件:

vim $work/docker-compose.yml

添加以下内容:

---
version: '3.2'

networks:
  default:
    name: nextcloud

services:
  app:
    image: nextcloud:latest
    restart: unless-stopped
    volumes:
      - ./app:/var/www/html
    environment:
      - MYSQL_PASSWORD=nextcloud_password # 按需修改
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
      - MYSQL_HOST=db
    ports:
      - 7602:80 # 按需修改
    networks:
      - default

  cache:
    image: redis
    restart: unless-stopped
    expose:
     - "6379" # 可用此默认。因为这是暴露而不是映射
    volumes:
     - ./cache:/data
    command: redis-server --requirepass 'redis_password' # 按需修改 
    networks:
      - default
    
  db:
    image: mariadb:latest
    restart: unless-stopped
    # 下面的command与官网略有不同。它将有助于避免MYSQL数据库的4047报错。
    command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW --innodb-file-per-table=1 --skip-innodb-read-only-compressed
    volumes:
      - ./db:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=nextcloud_password_root # 按需修改
      - MYSQL_PASSWORD=nextcloud_password  # 按需修改
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
    networks:
      - default

上线服务

cd $work && docker-compose up -d

配置NPM

ddns-go或者域名托管商后台解析好域名nextcloud.exampledomain.com

添加一个Proxy Host,反代地址是http://172.17.0.1:7602。可用泛域名的SSL证书。

Advanced中添加以下记录以增强兼容性。详见官网配置关于反代的说明。

location /.well-known/carddav {
    return 301 $scheme://$host/remote.php/dav;
}

location /.well-known/caldav {
    return 301 $scheme://$host/remote.php/dav;
}

完整配置图如下所示:

Docker系列 搭建个人云盘服务nextcloud

NPM有443端口时的Nextcloud配置

观察Nextcloud的客户端日志,当出现:

Initializing finished
New nextcloud instance

即可直接登陆网站:https://nextcloud.exampledomain.com进行设置。

我随便设置一个帐户。这个可以自定义!

admin
GoK*@s$&3%oXiQTewxoE*v*5@Q*a!D7WGLQDbwFt!NTiaQ!P6DUf5v

如图所示:

Docker系列 搭建个人云盘服务nextcloud

有些人不安装推荐应用。我这里就直接安装试试看。国内环境安装速度也还行。你也可以不点,反正你需要的话以后可以自己装嘛!最后,耐心地等待初始化的完成吧。

Docker系列 搭建个人云盘服务nextcloud

很快就成功了。有443端口就是简单!

最后,为了让redis生效,我们需要配置$work/app/config/config.php:

sudo vim $work/app/config/config.php

添加以下内容:

//'memcache.local' => '\\OC\\Memcache\\APCu' // 用本地式缓存使用APCu // 注释这行 
'memcache.local' => '\\OC\\Memcache\\Redis',
'memcache.distributed' => '\\OC\\Memcache\\Redis', // 分布式缓存使用Redis
'memcache.locking' => '\\OC\\Memcache\\Redis', // 启用Redis缓存的文件锁
'redis' => array(
  'host' => 'cache', // 这里和mariadb的逻辑相同,填写容器links时映射的主机名
  'port' => 6379,
  'password' => 'redis_password' // 这是之前在配置docker-compose时配置的redis密码
),
'filelocking.enabled' => 'true',

然后重启docker-nextcloud服务:

cd $work && docker-compose down && docker-compose up -d

NPM无443端口时的额外配置

当初我在NAS安装Nextcloud的时候,没有443端口,安装Nextcloud非常地费劲!有时跳转的时候,地址栏的<NPM-443端口>可能会消失掉。

经过一翻折腾,我发现用非443端口使用Nextcloud还要进行一些额外的配置。相关的教程非常的少,真的恶心!市面上很多Up主也是直接在自己的NAS里安装Nextcloud,但他们往往是在局域网中使用Nextcloud,不会配https。然而作为一个云盘,没有https能忍吗?

又或者他们只在VPS中演示怎么安装。如上所述,如果你有443端口,这些问题根本不可能出现。

下面我们对于无443端口的NAS给另外一些配置上的建议。

首先,上线服务后不要登陆网站并注册用户。我们修改$work/app/config/config.php文件的内容:

sudo vim $work/app/config/config.php

在文件中添加以下内容:

如果内容已经有默认值,则添加或更改记录即可。比如trusted_domains。自己看着办!

每一行最后的,号一定不可以省略!

//'memcache.local' => '\\OC\\Memcache\\APCu' // 用本地式缓存使用APCu // 注释这行 
'memcache.local' => '\\OC\\Memcache\\Redis',
'memcache.distributed' => '\\OC\\Memcache\\Redis', // 分布式缓存使用Redis
'memcache.locking' => '\\OC\\Memcache\\Redis', // 启用Redis缓存的文件锁
'redis' => array(
  'host' => 'cache', // 这里和mariadb的逻辑相同,填写容器links时映射的主机名
  'port' => 6379,
  'password' => 'redis_password' // 这是之前在配置docker-compose时配置的redis密码
),
'filelocking.enabled' => 'true',
'trusted_domains' => 
array (
    0 => '<nextcloud.exampledomain.com>', // 这一般是可以识别,不用改
),
'overwritehost' => '<nextcloud.exampledomain.com>:<NPM-443端口>', // 按需修改
'overwriteprotocol' => 'https',
'overwrite.cli.url' => 'http://<nextcloud.exampledomain.com>:<NPM-443端口>', # 这里有个逗号不要忘记

为什么要特别地设置config.php文件的相关参数呢?如果访问地址带端口号且属于反向代理,nextcloud往往无法正确地识别,此时nextcloud内部将阻止此地址对nextcloud进行访问。因此,我们需要提前对overwritehost变量进行特别声明。overwriteprotocoloverwrite.cli.url是为了强制https访问,这里也顺便加上以防NPM的设置不生效(还没试过删除会不会影响登陆)。

如图所示(如果没有设置管理员帐户,有些参数和值是没有;但我们要设置的几个参数的样式是类似的):

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eAtSZhID-1651276377407)(https://chevereto.hwb0307.com/images/2022/04/11/image-20220411112948184.png)]

重启服务,让config.php的改动生效:

cd $work && docker-compose down && docker-compose up -d

观察nextcloud客户端的日志(也可以用Portainer看):

docker logs -f nextcloud_app_1 # 有时候是nextcloud-app-1

当log出现Command line: 'apache2 -D FOREGROUND'的字样时,说明nextcloud已经重启成功。

此时可以访问https://<nextcloud.exampledomain.com>:<NPM-443端口>创建管理员帐户。后面的操作和VPS一样。设置完管理帐户后,可以自动登陆或者访问https://<nextcloud.exampledomain.com>:<NPM-443端口>登陆后台使用nextcloud。

如果你不小心注册了帐户再来修改config.php,在日志中很可能会有这种报错:

[access_compat:error] [pid 32] [client <你的电脑ip>] AH01797: client denied by server configuration: /var/www/html/data/htaccesstest.txt

这全是由于地址原因导致的htaccess不过关。**所以端口号的问题真的很烦!**这个时候你可以重新注册一个帐户。这个时候的系统就会有2个用户。它们的权限区别我以后再了解一下。

后台任务

Nextcloud的官话,自己感受一下:为了优化性能,正确配置后台任务非常重要。对于较大的实例,推荐配置为 ‘Cron’。详情请参考相关文档。

根据使用docker-compose搭建nextcloud+Nginx+MySQL+Redis大佬文章的建议:由于nextcloud内部的文件和配置会在用户操作过程中产生变化,所以需要启用一个定时任务去定期整理和归档这些数据到数据库或者应用到配置中。问了ZoniNG大佬,这个也是必要的,说是属于php的优化。

如果你不配置,可能在设置——管理——基本设置会有这种警告:

Docker系列 搭建个人云盘服务nextcloud

首先,使用docker ps -a查看nextcloud的容器ID。如果你按本教程,一般是nextcloud_app_1或者是nextcloud-app-1

打开crontab的配置进行编辑:

sudo vim /etc/crontab

加入如下内容:

# run nextcloud cron task every 5 min
*/5 * * * * root docker exec -u 33 nextcloud_app_1 php -f /var/www/html/cron.php 2>&1 /dev/null

这里我留个小问题:root可否换成test_user(就是你自己用的非root用户)?欢迎大家在评论区留下自己的答案!

Beta: Redis测试

个人推测,不知道没有redis的时候是否会这样

这里有一个简单的方法可以测试Redis有没有生效。你在上传很多图片后,可以在此页面快速往下滑动:

Docker系列 搭建个人云盘服务nextcloud

与此同时,可调用htop观察:

Docker系列 搭建个人云盘服务nextcloud

可看到数据被大量地调用。同时可以发现页面的刷新还是蛮快的。

小结

对于VPS用户来说,Nextcloud的安装非常容易,基本上没有什么难度。对于NAS用户来说就比较折腾;但是,如果成功安装,Nextcloud就非常有用了!

另外,我觉得非443端口使用的时候Nextcloud慢吞吞的。不知道是不是自己的NAS配置太差(蜗牛星际)。我在VPS上用还是非常流畅的。希望有NAS用户安装Nextcloud时给多些反馈!

更多进阶使用,可以看看使用docker-compose搭建nextcloud+Nginx+MySQL+Redis。我觉得这个才是完全体(羡慕)。

关于对Nextcloud的深度使用可以看我后续的更新。敬请期待喽!

附:Nextcloud团队的合体照

Docker系列 搭建个人云盘服务nextcloud文章来源地址https://www.toymoban.com/news/detail-403435.html

参考资料

  • 官方docker镜像:https://hub.docker.com/_/nextcloud
  • 使用Docker快速部署NextCloud
  • Docker:Nextcloud 网盘的安装
  • 官方docker-compose.yml示例:https://github.com/nextcloud/docker/blob/master/.examples/docker-compose/with-nginx-proxy/mariadb/fpm/docker-compose.yml
  • https://www.linuxserver.io/blog/2019-04-25-letsencrypt-nginx-starter-guide里面包含nextcloud的配置
  • Nextcloud Nginx Proxy Manager in 10 Minutes!:我的docker-compose脚本主要是根据该视频进行改进的。
  • 另一种不错的方案:Nextcloud with a MariaDB along with Nginx Proxy Manager and DuckDns Using A Portainer Stack
  • 使用docker-compose搭建nextcloud+Nginx+MySQL+Redis
  • Nextcloud fpm running on docker with nginx on host always returns 404 page
  • How to fix Nextcloud 4047 InnoDB refuses to write tables with ROW_FORMAT=COMPRESSED or KEY_BLOCK_SIZE
  • 官网:关于Nextcloud反向代理的说明

到了这里,关于Docker系列 搭建个人云盘服务nextcloud的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 云服务器基于Centos创建个人云盘实践经验分享

    执行如下命令,下载cloudreve安装包。 下载完毕后,执行如下命令,解压cloudreve安装包 解压后通过ls命令查看文件是否解压成功 执行如下命令,给cloudreve授予权限。+x表示赋予可执行权限 这里要特别记录下初始管理员账号和密码: [Info] 2024-01-15 11:04:43 初始管理员账号:admin@

    2024年01月17日
    浏览(28)
  • 搭建私有云:owncloud(用Docker构建owncloud私有云盘)

    网上各种云盘都要收费,又或有速度限制,感觉用起来不方便,想抽时间想搭建一个私有云盘。下面讲解下搭建私有云:owncloud。     搭建私有云:owncloud第一步:首先在服务器上安装docker服务,在操作yum install docker的时候,发现用service docker start的时候不成功,发现是跟操作系

    2024年02月16日
    浏览(27)
  • 基于亚马逊云EC2+Docker搭建nextcloud私有化云盘

    亚马逊云科技EC2云服务器(Elastic Compute Cloud)是亚马逊云科技AWS(Amazon Web Services)提供的一种云计算服务。EC2代表弹性计算云,它允许用户租用虚拟计算资源,包括CPU、内存、存储和网络带宽,以满足计算需求。 在日常工作中,大家使用比较多的云盘有百度网盘,阿里的夸

    2024年03月20日
    浏览(46)
  • 10分钟搭建局域网文件共享服务器,百兆网络+云盘服务+外网访问

    今天来聊一下公司内部如何通过云盒子实现局域网文件共享:百兆网络+云盘服务+旧服务器+外网访问。 网络测试环境是百兆,千兆网会更强。 各终端的数据是实时同步的,自带内网穿透技术,随时可以通过互联网访问局域网内文件服务器,当然也可以禁掉互联网访问,仅在

    2024年02月09日
    浏览(40)
  • 【服务器】零基础搭建私有云盘并内网穿透远程访问

    转载自cpolar极点云的文章:使用Nextcloud搭建私人云盘,并内网穿透实现公网远程访问 Nextcloud,它是ownCloud的一个分支,是一个文件共享服务器,允许您将个人内容(如文档和图片)存储在一个集中的位置,就像Dropbox一样。与Nextcloud的不同之处在于,它的所有功能都是开源的。它还将敏

    2024年02月07日
    浏览(30)
  • 在Ubuntu服务器上安装和配置Nextcloud- 搭建Nextcloud私有云盘并公网远程访问

    Nextcloud,它是ownCloud的一个分支,是一个文件共享服务器,允许您将个人内容(如文档和图片)存储在一个集中的位置,就像Dropbox一样。与Nextcloud的不同之处在于,它的所有功能都是开源的。它还将敏感数据的控制和安全返回给您,从而消除了对第三方云托管服务的使用。 在本教程中

    2024年02月11日
    浏览(45)
  • 搭建免费的文件自动同步服务器,无公网IP外网远程访问【Syncthing私人云盘】

    在数据爆炸的当下,每天都会产生海量的数据,这些数据可能是我们手机里新拍的照片、工作接收的文件档案、随手编辑写下的文档、或者新下载的视频等等,这些数据很快就能填满容量堪忧的智能设备(手机、平板等)。正因如此,云存储一时间风头无两,不仅能让这些海

    2024年02月06日
    浏览(43)
  • Docker实践:使用Docker搭建个人开发环境(极简版)

    本文是在服务器 已经配置好 Docker 相关环境的情况下, 简要介绍 了在服务器上如何构建 Docker 镜像来搭建个人开发环境,因此本文 不涉及 Docker 的安装、维护以及各种细节,若要 详细了解 ,请查看文章最后的 相关资料 一节。 以下所有操作均在同一文件夹(例如 /media/user

    2024年02月16日
    浏览(31)
  • 阿里云免费个人Docker镜像仓库搭建

    首先进入阿里云官网,如果没有注册的需要先注册,这里就不再讲解了,注册后点击右上角的登录,登录成功后点击右上角的“控制台”进入管理界面。如下图。 在上图管理界面中,点击左上角的三条杆,就会出现如下图的界面。 在图中有个搜索框,在框中输入“容器镜像

    2024年02月11日
    浏览(29)
  • docker项目-搭建个人搜索引擎SearXNG

    SearXNG是一个免费的互联网元搜索引擎,它汇总了来自更多 超过 70 个搜索服务。 文档地址:https://docs.searxng.org/ github地址:https://github.com/searxng/searxng Dokcer仓库:https://github.com/searxng/searxng-docker 演示Dome:https://searx.space/# Vps:一台,建议国外vps 系统:任意linux发行版,本文采用

    2024年01月16日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包