【搭建NextCloud私有云盘服务】采用docker在linux上进行部署,内含nextCloud移植(迁移服务器)方法

news2025/8/14 4:24:14

1、前言

完成的效果: 在linux上搭建NextCloud云盘服务,可以通过域名访问到云盘服务,并且安装有SSL证书,可进行https访问。
例如:
服务器公网ip为47.110.66.88
域名为:test.huahua.com
可直接通过访问https://cloud.huahua.com访问到私有云盘。
本实例的配置:

  • 服务器厂商:阿里云服务器

  • linux系统:Alibaba Cloud Linux 3.2104 LTS 64位

  • 使用到的工具:宝塔面板(主要做Nginx反向代理还有安装Docker管理面板,不用面板问题也不大,会Nginx就行)

  • 服务器安装有Docker和Nginx服务

架构图

在这里插入图片描述

2、首次搭建NextCloud

(1)查询并下载NextCloud镜像

docker search nextcloud
docker pull nextcloud

(2)创建并启动NextCloud容器

docker images	# 查询镜像
docker run -d --restart=always --name nextcloud -p 9090:80 nextcloud:latest

解释:

-d 表示在后台运行

nextcloud 自定义容器的名字,

nextcloud:latest 是镜像的名字,冒号后面表示版本号

9090:80 表示服务器访问端口是9090,容器内部的端口是80,就是说要访问容器内部的80端口的时候,直接访问服务器的9090端口才可以访问到。

(3)访问地址

公网:端口号形式例如

http://47.110.66.88:9090

温馨提示: 记得把公网ip的9090端口打开,在安全组那里可以添加设置。

(4)连接mysql数据库

自行创建一个数据库

数据库名:nextCloud

用户名:root

密码:f35765c5f33ed13c(自定义)

注意:

字符集选 utf8mb4

排序规则选 utf8mb4_general_ci
使用 Navicat 数据库工具创建如下
在这里插入图片描述

如果是使用宝塔创建数据库,一定要设置访问权限为本地ip或者所有人,不要设置为本地服务器,会安装失败的,因为访问权限不足,docker服务与linux服务隔开,所以docker里面的NextCloud服务准确来说不属于linux内部服务,我这里推荐使用本地ip也就是47.110.66.88

**特别注意:**在nextcloud页面上安装的时候需要填写数据库连接,

连接主机和端口号应该写(假设服务器地址是47.110.66.88):

47.110.66.88:3306

因为这是docker容器内部访问的linux数据库,如果填写localhost就相当于是docker容器内部的数据库了。

数据目录不用改,默认就好。

在这里插入图片描述
顺利的话会有一个安装成功页面,然后让你选择安装一些应用,可以跳过,如果时间允许也可以选择安装。之后进行下一步。

(5)添加Nginx反向代理以及SSL证书

可以通过域名进行访问

1.配置nginx代理模式以及添加SSL证书

在宝塔上新建一个PHP项目的网站,修改Nginx配置文件即可,主要添加的地方只有一个:

location ^~ /
{
    proxy_pass http://127.0.0.1:9090;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header REMOTE-HOST $remote_addr;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection $connection_upgrade;
    # proxy_hide_header Upgrade;

    add_header X-Cache $upstream_cache_status;

    #Set Nginx Cache
    
    
    if ( $uri ~* "\.(gif|png|jpg|css|js|woff|woff2)$" )
    {
    	expires 1m;
    }
    proxy_ignore_headers Set-Cookie Cache-Control expires;
    proxy_cache cache_one;
    proxy_cache_key $host$uri$is_args$args;
    proxy_cache_valid 200 304 301 302 1m;
}

或者 在宝塔网站里面自动生成反向代理,先创建一个PHP网站,然后在网站里面更改反向代理配置,贼方便。不过有一个条件:
安装宝塔的时候需要选择使用 LNMP环境 安装才行。

在这里插入图片描述
注意: 图片中的端口是写错的,正确应该是9090,自行更一下哈。

2.在docker里面的NextCloud配置文件(config/config.php)中设置访问白名单
方法一(linux手动添加):

docker ps # 查询docker运行的容器id
docker exec -it cce072c1a50c bash	# 进入docker cce072c1a50c这个是docker的id

在docker里面安装vim,如果执行不成功可重复执行,因为服务器在国外,下载难免会中断。目的在于安装vim,用来编辑config.php文件

apt-get update
apt-get install vim 

编辑config/config.php配置文件

vim config/config.php	# 编辑docker里面的文件

添加访问的域名,找到下面的代码,把1添加进去,初始化的时候只有0 => ‘localhost’

'trusted_domains' =>
  array (
   0 => 'localhost',
   1 => 'cloud.huahua.com',
),

方法二(宝塔手动添加):
安装Docker管理器
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

然后通过域名 cloud.huahua.com 就可以访问了
配置SSL证书,可以用宝塔一键自签证书,很方便的。
在这里插入图片描述
收尾工作:
使用Nginx代理之后,就可以在安全组上关闭9090端口了,避免不必要的端口暴露。

使用推荐:
在nextcloud上推荐安装的几款应用,在nextcloud右上角搜索即可

Draw.io (画图软件,可以画流程图)

Mind Map(思维导图软件)

Notes(做笔记软件)

在这里插入图片描述

3、NextCloud移植

希望此项目永远都不要用到这个移植功能,从艰辛到成果有太多的摸索了。

(1)移植的思路:

1、在MySQL数据库拿到完整备份文件。

2、在新的服务器上搭建一个新的nextcloud云服务,全部安装正常流程走,添加到一个新的数据库,设置管理账号的时候随便写(导入数据库的时候会覆盖掉的)其他的不动。还有另一种方法就是把旧的镜像拿到新的服务器上,或者把旧的容器打包成镜像移植过新的服务器上,这样就不会有版本的误差了。

3、把步骤1中的的数据库备份移植到步骤2新数据库中。

4、把docker容器中的数据文件拿出来,拷贝到对应的文件。数据文件位置例如:

 /var/lib/docker/volumes/26519262d8629e8ee3cb4451ba5a3690e327e64ef8c9bac72bb9b9aa551781fc/_data/data

因为这个文件就是全部的数据文件,数据库存放的是路径,在nextcloud上真正打开或者下载文件的时候需要真实数据文件,也就是说如果没有这个数据文件的话,就会出现一个现象:移植之后的云盘是可以看见文件的,但是要查看文件的时候会报一个错误:

在这里插入图片描述

因为在根据数据库的文件路径去找服务器路径的时候会找不到此文件。

(2)详细步骤:

1、数据库文件拿到完整备份文件。

可以使用宝塔导出数据库完整备份文件,也可以使用原生sql语句导出。自行选择即可。

2、在新服务器上搭建新的nextcloud

docker pull nextcloud	# 拉取最新的镜像
docker run -d --restart=always --name nextcloud -p 9090:80 nextcloud:latest	# 运行容器

通过域名加端口号的形式访问:47.110.66.66:9090,然后进行数据库配置、安装。数据库需要新建一个数据库。

3、把步骤1中的的数据库备份移植到步骤2中的新数据库。

4、把docker容器中的数据文件拿出来,拷贝到对应的文件。

在旧服务器上查看旧版本的数据文件(挂载目录文件):

docker ps # 查出来的容器id为cce0(取前4个字符即可)
docker inspect cce0

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W1ukrgSs-1668735689461)(./img/image-20221115143414705.png)]

然后拿_data/data文件夹内的所有文件到新服务器上,把对应的文件进行覆盖即可。怎么拿都可以,可以通过宝塔或者ftp服务,或者Samba,还可以使用U盘,或者上传到自己的git仓库(这个当心有容量上限哈),再从新服务器上拉下来都可以。姿势万千,只要思想不滑坡,办法从比困难多。

注意: 我们在云盘存储的数据文件是_data/data,只要拿到里面这个数据文件就可以了,外面的是云盘的代码文件。

5、最后访问云盘即可。最后可以了再配置nginx反向代理,还有设置ssl证书。大功告成!

担心出现的问题: 可能在其他的文件也存在用户数据,比如用户的主题格式这些,如果不放心的话,也可以把整个_data文件给覆盖。


到这里已经完成了,下面是一点笔记。(感谢观看)

4、常用的命令

进入docker

docker ps
docker exec -it cce072c1a50c bash

删除镜像

docker rmi 镜像id

NextCloud官方配置(Nginx)文件(没用过,作个参考吧)

upstream php-handler {
    server 127.0.0.1:9000;
    #server unix:/var/run/php/php7.4-fpm.sock;
}

# Set the `immutable` cache control options only for assets with a cache busting `v` argument
map $arg_v $asset_immutable {
    "" "";
    default "immutable";
}


server {
    listen 80;
    listen [::]:80;
    server_name cloud.example.com;

    # Prevent nginx HTTP Server Detection
    server_tokens off;

    # Enforce HTTPS
    return 301 https://$server_name$request_uri;
}

server {
    listen 443      ssl http2;
    listen [::]:443 ssl http2;
    server_name cloud.example.com;

    # Path to the root of your installation
    root /var/www/nextcloud;

    # Use Mozilla's guidelines for SSL/TLS settings
    # https://mozilla.github.io/server-side-tls/ssl-config-generator/
    ssl_certificate     /etc/ssl/nginx/cloud.example.com.crt;
    ssl_certificate_key /etc/ssl/nginx/cloud.example.com.key;

    # Prevent nginx HTTP Server Detection
    server_tokens off;

    # HSTS settings
    # WARNING: Only add the preload option once you read about
    # the consequences in https://hstspreload.org/. This option
    # will add the domain to a hardcoded list that is shipped
    # in all major browsers and getting removed from this list
    # could take several months.
    #add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload" always;

    # set max upload size and increase upload timeout:
    client_max_body_size 512M;
    client_body_timeout 300s;
    fastcgi_buffers 64 4K;

    # Enable gzip but do not remove ETag headers
    gzip on;
    gzip_vary on;
    gzip_comp_level 4;
    gzip_min_length 256;
    gzip_proxied expired no-cache no-store private no_last_modified no_etag auth;
    gzip_types application/atom+xml application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/wasm application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy;

    # Pagespeed is not supported by Nextcloud, so if your server is built
    # with the `ngx_pagespeed` module, uncomment this line to disable it.
    #pagespeed off;

    # The settings allows you to optimize the HTTP2 bandwitdth.
    # See https://blog.cloudflare.com/delivering-http-2-upload-speed-improvements/
    # for tunning hints
    client_body_buffer_size 512k;

    # HTTP response headers borrowed from Nextcloud `.htaccess`
    add_header Referrer-Policy                      "no-referrer"   always;
    add_header X-Content-Type-Options               "nosniff"       always;
    add_header X-Download-Options                   "noopen"        always;
    add_header X-Frame-Options                      "SAMEORIGIN"    always;
    add_header X-Permitted-Cross-Domain-Policies    "none"          always;
    add_header X-Robots-Tag                         "none"          always;
    add_header X-XSS-Protection                     "1; mode=block" always;

    # Remove X-Powered-By, which is an information leak
    fastcgi_hide_header X-Powered-By;

    # Specify how to handle directories -- specifying `/index.php$request_uri`
    # here as the fallback means that Nginx always exhibits the desired behaviour
    # when a client requests a path that corresponds to a directory that exists
    # on the server. In particular, if that directory contains an index.php file,
    # that file is correctly served; if it doesn't, then the request is passed to
    # the front-end controller. This consistent behaviour means that we don't need
    # to specify custom rules for certain paths (e.g. images and other assets,
    # `/updater`, `/ocm-provider`, `/ocs-provider`), and thus
    # `try_files $uri $uri/ /index.php$request_uri`
    # always provides the desired behaviour.
    index index.php index.html /index.php$request_uri;

    # Rule borrowed from `.htaccess` to handle Microsoft DAV clients
    location = / {
        if ( $http_user_agent ~ ^DavClnt ) {
            return 302 /remote.php/webdav/$is_args$args;
        }
    }

    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }

    # Make a regex exception for `/.well-known` so that clients can still
    # access it despite the existence of the regex rule
    # `location ~ /(\.|autotest|...)` which would otherwise handle requests
    # for `/.well-known`.
    location ^~ /.well-known {
        # The rules in this block are an adaptation of the rules
        # in `.htaccess` that concern `/.well-known`.

        location = /.well-known/carddav { return 301 /remote.php/dav/; }
        location = /.well-known/caldav  { return 301 /remote.php/dav/; }

        location /.well-known/acme-challenge    { try_files $uri $uri/ =404; }
        location /.well-known/pki-validation    { try_files $uri $uri/ =404; }

        # Let Nextcloud's API for `/.well-known` URIs handle all other
        # requests by passing them to the front-end controller.
        return 301 /index.php$request_uri;
    }

    # Rules borrowed from `.htaccess` to hide certain paths from clients
    location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)(?:$|/)  { return 404; }
    location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console)                { return 404; }

    # Ensure this block, which passes PHP files to the PHP process, is above the blocks
    # which handle static assets (as seen below). If this block is not declared first,
    # then Nginx will encounter an infinite rewriting loop when it prepends `/index.php`
    # to the URI, resulting in a HTTP 500 error response.
    location ~ \.php(?:$|/) {
        # Required for legacy support
        rewrite ^/(?!index|remote|public|cron|core\/ajax\/update|status|ocs\/v[12]|updater\/.+|oc[ms]-provider\/.+|.+\/richdocumentscode\/proxy) /index.php$request_uri;

        fastcgi_split_path_info ^(.+?\.php)(/.*)$;
        set $path_info $fastcgi_path_info;

        try_files $fastcgi_script_name =404;

        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $path_info;
        fastcgi_param HTTPS on;

        fastcgi_param modHeadersAvailable true;         # Avoid sending the security headers twice
        fastcgi_param front_controller_active true;     # Enable pretty urls
        fastcgi_pass php-handler;

        fastcgi_intercept_errors on;
        fastcgi_request_buffering off;

        fastcgi_max_temp_file_size 0;
    }

    location ~ \.(?:css|js|svg|gif|png|jpg|ico|wasm|tflite|map)$ {
        try_files $uri /index.php$request_uri;
        add_header Cache-Control "public, max-age=15778463, $asset_immutable";
        access_log off;     # Optional: Don't log access to assets

        location ~ \.wasm$ {
            default_type application/wasm;
        }
    }

    location ~ \.woff2?$ {
        try_files $uri /index.php$request_uri;
        expires 7d;         # Cache-Control policy borrowed from `.htaccess`
        access_log off;     # Optional: Don't log access to assets
    }

    # Rule borrowed from `.htaccess`
    location /remote {
        return 301 /remote.php$request_uri;
    }

    location / {
        try_files $uri $uri/ /index.php$request_uri;
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/14940.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java#10(String 类的构造方法和练习)

目录 一.String类的构造方法 1.public String()空参构造 2.public String(char[ ] ch2);(对堆区已有的值没有办法复用,数据多会浪费内存空间,而直接赋值如果已有相同数据可以复用,不会在浪费太多内存) 3.public String(byte[ ] bytes) 二.字符串的比较 1.前提基础: 比较…

解决使用svg绘制后下载图片以及下载svg内部嵌套image图片失败的问题。

在使用svg进行图形绘制之后&#xff0c;可能需要下载已经绘制的svg图片&#xff0c;我们可能会遇到以下两种情况&#xff1a; 情况1&#xff1a; <svg width"640" height"400" xmlns"http://www.w3.org/2000/svg" id"svgColumn">…

解决问题 - 错误:不支持发行版本 5

文章目录一、提出问题二、解决问题&#xff08;一&#xff09;设置项目SDK与语言等级&#xff08;二&#xff09;设置模块语言等级&#xff08;三&#xff09;设置Java编译器等级&#xff08;四&#xff09;运行程序&#xff0c;测试问题是否已解决一、提出问题 基于JDK11创建…

阿里Redis最全面试全攻略,读完这个就可以和阿里面试官好好聊聊

简述Redis常用的数据结构及其如何实现的&#xff1f; Redis支持的常用5种数据类型指的是value类型&#xff0c;分别为&#xff1a;字符串String、列表List、哈希Hash、集合Set、有序集合Zset&#xff0c;但是Redis后续又丰富了几种数据类型分别是Bitmaps、HyperLogLogs、GEO。…

年搜索量超 7 亿次背后:这款 APP 用火山引擎 DataTester 完成“数据驱动”

更多技术交流、求职机会&#xff0c;欢迎关注字节跳动数据平台微信公众号&#xff0c;回复【1】进入官方交流群 双十一刚过&#xff0c;双十二在即&#xff0c;随着线上营销玩法的层出不穷&#xff0c;各平台之间的价格逐渐“内卷”。消费者对跨平台比价的需求越来越强烈&#…

【实时语音转文本】PC端实时语音转文本(麦克风外音系统内部音源)

语音转文字这个功能可以应用在视频动态字幕&#xff0c;语音快速输入&#xff0c;实时记录通话内容&#xff0c;高级应用可以在人工智能&#xff0c;语音识别&#xff0c;智能助手方面&#xff0c;还需要一点机器学习可以做出一些好玩的东西&#xff0c;比如PC端AI助理&#xf…

给开源项目做一个漂亮简洁的版本迭代更新图,生成固定链接复制到介绍中、公众号菜单链接中、博客中和网页中等

背景 开源项目的版本迭代与更新经常需要更新迭代文档&#xff0c;但是readme.md没有比较美观一点的效果&#xff0c;所以文本分享一种第三方的方式&#xff1a;用TexSpire的免费在线文档分享功能&#xff0c;手机、PC、Pad都可以适配。 效果预览 使用 视频教程 第一步&…

重磅 | 思特威获得ISO 26262:2018汽车功能安全ASIL D流程认证证书

确保安全是汽车制造商和系统供应商的责任。为了从芯片IP级开始解决功能安全问题&#xff0c;国际标准化组织&#xff08;ISO&#xff09;在2018年追加了汽车半导体的功能安全评估指南。 彼时&#xff0c;新车搭载的芯片数量、种类以及软件代码行数开始呈现倍数增长。按照ISO 2…

重磅!华秋电子再次入选“中国产业数字化百强榜”

11月16日&#xff0c;由江苏省商务厅、南京市人民政府指导&#xff0c;南京市商务局主办的江苏电子商务大会暨第九届中国产业数字化年会在南京开幕。 据了解&#xff0c;会议上公开发布了“2022中国产业数字化百强榜”&#xff0c;这也是托比网自2015年以来发布的第13个榜单。榜…

ES6解构赋值及ES6的一些简写介绍

1、ES6解构赋值&#xff1a; ● 解构赋值&#xff0c;就是快速地从对象或者数组中取出成员的一个语法方式 (1) 解构数组&#xff1a; ● 快速从数组中获取成员 <script>//ES5的方式从数组中获取成员var arr [Jack,Rose,Tom]var a arr[0] //Jackvar b arr[1] //Ro…

实验六 数组(山东建筑大学)

第1关:实验6.1 任务描述 输入3个整数,按由大到小的顺序输出。 输入样例 1 1 2 3 输出样例 1 3 2 1 开始你的任务吧,祝你成功! 第2关:实验6.2 任务描述 输入10个整数,将其中最小的数与第一个数对换,把最大的数与最后一个数对换。 输入样例 1 2 1 3 4 5 6 7 8 10 9 输…

感性认识一下Linux的进程地址空间和写时拷贝技术

虽然本篇文章对操作系统的理解不怎么深入&#xff0c;或者说仅仅是一些皮毛知识(也可能皮毛也算不上)&#xff0c;但还是需要读者有一些Linux的基础理解&#xff0c;如何确定是否有这些基础呢&#xff1f;可以参考我的这一篇博客&#xff1a;Linux —— 进程概念超详解! 1.“奇…

LeetCode 318 周赛

2460. 对数组执行操作 给你一个下标从 0 开始的数组 nums &#xff0c;数组大小为 n &#xff0c;且由 非负 整数组成。 你需要对数组执行 n - 1 步操作&#xff0c;其中第 i 步操作&#xff08;从 0 开始计数&#xff09;要求对 nums 中第 i 个元素执行下述指令&#xff1a;…

阿里 P8 架构师力荐 java 程序员人手一套 116 页 JVM 吊打面试官专属秘籍

只要是 java 程序员&#xff0c;肯定对于 JVM 来说并不陌生&#xff0c;甚至是从熟悉到陌生&#xff0c;为什么这样说呢&#xff1f;因为你看似熟悉的东西&#xff0c;其实对于源码层级了解得少之又少&#xff0c;到头来只有一种陌生的感觉&#xff0c;使用了吗&#xff1f;使用…

技术分享 | 多测试环境的动态伸缩实践

本文将从敏捷研发团队的环境需求与痛点出发&#xff0c;分享如何基于云构建可弹性伸缩的自动化生成式多测试环境&#xff1b;更在经济效益层面&#xff0c;提供了多种成本优化方案&#xff0c;以满足研发团队低成本、高效益的多测试环境运行目标。 一、当前遇到的环境问题 初…

论文阅读笔记 | 三维目标检测——AVOD算法

如有错误&#xff0c;恳请指出。 文章目录1. 背景2. 网络结构3. 实验结果paper&#xff1a;《Joint 3D Proposal Generation and Object Detection from View Aggregation》 1. 背景 AVOD同样是一个two-stage(使用了RPN提取候选框)、anchor-based网络结构。获得较高的召回率对…

【WPF】DiffPlex 文本比对工具

【WPF】DiffPlex 文本比对工具背景关于 DiffPlex准备代码实现效果图源码下载地址背景 现行的文本编辑器大多都具备文本查询的能力&#xff0c;但是并不能直观的告诉用户两段文字的细微差异&#xff0c;所以对比工具在某种情况下&#xff0c;就起到了很便捷的效率。 关于 DiffPl…

D. Extreme Subtraction(差分)

Problem - 1443D - Codeforces 给你一个由n个正整数组成的数组a。 你可以随意使用下面的操作&#xff1a;选择任何一个1≤k≤n的整数&#xff0c;做两件事中的一件。 将数组中的前k个元素递减1。 将数组的最后k个元素递减1。 例如&#xff0c;如果n5&#xff0c;a[3,2,2,1,4]…

【Pytorch with fastai】第 16 章 :训练过程

&#x1f50e;大家好&#xff0c;我是Sonhhxg_柒&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流&#x1f50e; &#x1f4dd;个人主页&#xff0d;Sonhhxg_柒的博客_CSDN博客 &#x1f4c3; &#x1f381;欢迎各位→点赞…

利用jemalloc优化mysql

此方法管理mysql内存也存在一定的弊端&#xff0c;根据自身情况进行选择 优点&#xff1a; jemalloc的确能对内存做一定优化&#xff0c;但是发现并不能解决所有内存碎片问题&#xff0c;只能说有一定缓解作用。 缺点&#xff1a; 使用jemalloc会带来内存增加问题&#xff0…