Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >利用NextCloud配置私有云 【原创】

利用NextCloud配置私有云 【原创】

作者头像
CS逍遥剑仙
发布于 2018-04-28 04:02:38
发布于 2018-04-28 04:02:38
7.3K00
代码可运行
举报
文章被收录于专栏:禅林阆苑禅林阆苑
运行总次数:0
代码可运行

利用NextCloud配置私有云

Write By CS逍遥剑仙 我的主页: www.csxiaoyao.com GitHub: github.com/csxiaoyaojianxian Email: sunjianfeng@csxiaoyao.com QQ: 1724338257

目录导航

NextCloud (https://nextcloud.com/) 是开源云盘服务器,此处利用 LEMP 搭建 NextCloud 运行环境-MariaDB, PHP-FPM 和 Nginx (Ubuntu 16.04)

1. 搭建 LEMP 并配置 https

略,参考csxiaoyao.com服务器迁移记录

2. 为NextCloud创建数据库和用户

创建数据库nextcloud;用户名nextcloud,密码XXXXXXXX

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ sudo mysql -u root -p
mysql> CREATE DATABASE nextcloud;
mysql> GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextcloud'@'localhost' IDENTIFIED BY 'XXXXXXXX';
mysql> FLUSH PRIVILEGES;
mysql> exit;

3. 配置PHP

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ sudo apt-get -y install php-fpm php-cli php-json php-curl php-imap php-gd php-mysql php-xml php-zip php-intl php-mcrypt php-imagick php-mbstring

配置PHP:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ sudo sed -i "s/memory_limit = .*/memory_limit = 512M/" /etc/php/7.0/fpm/php.ini
$ sudo sed -i "s/;date.timezone.*/date.timezone = UTC/" /etc/php/7.0/fpm/php.ini
$ sudo sed -i "s/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=1/" /etc/php/7.0/fpm/php.ini
$ sudo sed -i "s/upload_max_filesize = .*/upload_max_filesize = 200M/" /etc/php/7.0/fpm/php.ini
$ sudo sed -i "s/post_max_size = .*/post_max_size = 200M/" /etc/php/7.0/fpm/php.ini

重启PHP-FPM:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ sudo service php7.0-fpm reload

4. 下载NextCloud

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ cd /tmp
$ wget https://download.nextcloud.com/server/releases/nextcloud-12.0.0.zip

解压并更改权限:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ unzip nextcloud-12.0.0.zip
$ sudo mv nextcloud /var/www/html/
$ sudo chown -R www-data: /var/www/html/nextcloud

设置data目录在非程序目录并修改权限

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ sudo mkdir /CloudDiskData
$ sudo chown -R www-data: /CloudDiskData

5. 修复问题

1. The test with getenv(“PATH”) only returns an empty response

在php-fpm配置中添加:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ sudo vi /etc/php/7.0/fpm/php-fpm.conf
env[PATH] = /usr/local/bin:/usr/bin:/bin

2. .htaccess未生效

将data数据目录放到非程序目录下

? 修改nginx配置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ sudo vi /etc/nginx/sites-enabled/default
location  ~ ^/(data|config|\.ht|db_structure\.xml|README) { deny all; }

? 在data目录中新建文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ touch .ocdata

3. The “Strict-Transport-Security” HTTP header is not configured to at least “15552000” seconds.

修改nginx配置,添加并重启

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
server {
    add_header Strict-Transport-Security max-age=15552000;
}

4. No memory cache has been configured.

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ sudo vi /var/www/html/owncloud/config/config.php
# 添加
'memcache.local' => '\OC\Memcache\APCu',

5. The PHP Opcache is not properly configured

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ sudo vi /etc/php/7.0/fpm/php.ini
opcache.enable=1
opcache.enable_cli=1
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1

6. 浏览器访问并升级


旧的操作

1. 安装MariaDB

Ubuntu 16.04 安装 MariaDB

更新升级系统:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ sudo apt update
$ sudo apt upgrade

安装MariaDB:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ sudo apt install mariadb-server

启动MariaDB服务:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ sudo systemctl start mysql

查看状态:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ sudo systemctl status mysql

执行初始化安全脚本,默认root密码为空,设置root密码和其他选项:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ sudo mysql_secure_installation

2. 为NextCloud创建数据库和用户

创建数据库nextcloud;用户名nextcloud,密码XXXXXXXX

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ sudo mysql -u root -p
MariaDB [(none)]> CREATE DATABASE nextcloud;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextcloud'@'localhost' IDENTIFIED BY 'XXXXXXXX';
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> \q

3. 安装PHP和相关模块

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ sudo apt-get -y install php-fpm php-cli php-json php-curl php-imap php-gd php-mysql php-xml php-zip php-intl php-mcrypt php-imagick php-mbstring

配置PHP:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ sudo sed -i "s/memory_limit = .*/memory_limit = 512M/" /etc/php/7.0/fpm/php.ini
$ sudo sed -i "s/;date.timezone.*/date.timezone = UTC/" /etc/php/7.0/fpm/php.ini
$ sudo sed -i "s/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=1/" /etc/php/7.0/fpm/php.ini
$ sudo sed -i "s/upload_max_filesize = .*/upload_max_filesize = 200M/" /etc/php/7.0/fpm/php.ini
$ sudo sed -i "s/post_max_size = .*/post_max_size = 200M/" /etc/php/7.0/fpm/php.ini

重启PHP-FPM:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ sudo systemctl restart php7.0-fpm

4. 下载NextCloud

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ cd /tmp
$ wget https://download.nextcloud.com/server/releases/nextcloud-12.0.0.zip

解压到 /var/www/ 目录并更改权限:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ unzip nextcloud-12.0.0.zip
$ sudo mkdir /var/www/
$ sudo mv nextcloud /var/www/html/
$ sudo chown -R www-data: /var/www/html/nextcloud

5. 安装配置Nginx

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ sudo apt-get install nginx nginx-extras

生成自签名证书:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ sudo mkdir -p /etc/nginx/ssl
$ cd /etc/nginx/ssl
$ sudo openssl genrsa -des3 -passout pass:x -out nextcloud.pass.key 2048
$ sudo openssl rsa -passin pass:x -in nextcloud.pass.key -out nextcloud.key
$ sudo rm nextcloud.pass.key
$ sudo openssl req -new -key nextcloud.key -out nextcloud.csr
$ sudo openssl x509 -req -days 365 -in nextcloud.csr -signkey nextcloud.key -out nextcloud.crt

也可使用免费的 let encrypt,创建Nginx server block文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ sudo vim /etc/nginx/sites-available/nextcloud
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
server {
    listen 80;
    server_name pan.csxiaoyao.com;
    return 301 https: //$server_name$request_uri;
}
server {
    listen 443 ssl http2;
    server_name pan.csxiaoyao.com;
    root /
    var / www / nextcloud;
    ssl on;
    ssl_certificate / etc / nginx / ssl / nextcloud.crt;
    ssl_certificate_key / etc / nginx / ssl / nextcloud.key;
    ssl_session_timeout 5m;
    ssl_ciphers 'AES128+EECDH:AES128+EDH:!aNULL';
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_prefer_server_ciphers on;
    add_header X - Content - Type - Options nosniff;
    add_header X - Frame - Options "SAMEORIGIN";
    add_header X - XSS - Protection "1; mode=block";
    add_header X - Robots - Tag none;
    add_header X - Download - Options noopen;
    add_header X - Permitted - Cross - Domain - Policies none;
    access_log /
    var / log / nginx / nextcloud.access.log;
    error_log /
    var / log / nginx / nextcloud.error.log;
    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }
    location = /.well - known / carddav {
        return 301 $scheme: //$host/remote.php/dav; 
    }
    location = /.well-known/caldav {
        return 301 $scheme: //$host/remote.php/dav; 
    }
    client_max_body_size 512M;
    fastcgi_buffers 64 4K;
    gzip off;
    error_page 403 / core / templates / 403.php;
    error_page 404 / core / templates / 404.php;
    location / {
        rewrite ^ /index.php$uri;
    }
    location ~ ^/ ( ? : build | tests | config | lib | 3rdparty | templates | data) / {
        deny all;
    }
    location~ ^ /(?:.|autotest|occ|issue|indie|db_|console) {
        deny all;
    }
    location ~^/ ( ? : index | remote | public | cron | core / ajax / update | status | ocs / v[12] | updater / . + | ocs - provider / . + | core / templates / 40[34]).php( ? : $ | /) {
        include fastcgi_params;
        fastcgi_split_path_info ^(.+.php)(/. + ) $;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_param HTTPS on;#
        Avoid sending the security headers twice
        fastcgi_param modHeadersAvailable true;
        fastcgi_param front_controller_active true;
        fastcgi_pass unix: /var/run / php / php7.0 - fpm.sock;
        fastcgi_intercept_errors on;
        fastcgi_request_buffering off;
    }
    location~ ^ /(?:updater|ocs-provider)(?:$|/) {
        try_files $uri / = 404;
        index index.php;
    }
    location~ * .( ? : css | js) $ {
        try_files $uri / index.php$uri$is_args$args;
        add_header Cache - Control "public, max-age=7200";
        add_header X - Content - Type - Options nosniff;
        add_header X - Frame - Options "SAMEORIGIN";
        add_header X - XSS - Protection "1; mode=block";
        add_header X - Robots - Tag none;
        add_header X - Download - Options noopen;
        add_header X - Permitted - Cross - Domain - Policies none;#
        Optional: Don 't log access to assets
        access_log off;
    }
    location ~* .(?:svg|gif|png|html|ttf|woff|ico|jpg|jpeg)$ {
        try_files $uri /index.php$uri$is_args$args;
        access_log off;
    }
    location ~ /.ht {
        deny all;
    }
}

创建链接:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ sudo ln -s /etc/nginx/sites-available/nextcloud /etc/nginx/sites-enabled/nextcloud

测试Nginx配置文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ sudo nginx -t

重启nginx:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ sudo systemctl restart nginx

6. 完成安装

浏览器访问 https://pan.csxiaoyao.com,设置管理员账户和数据库

【By CS逍遥剑仙】 未经允许不得转载:禅林阆苑 » 利用NextCloud配置私有云 【原创】

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-06-29分,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
经常被面试官问到的HashMap,详细解读看这一篇就够了
https://juejin.im/post/5d09f2d56fb9a07ec7551fb0
南风
2019/07/08
1.2K0
经常被面试官问到的HashMap,详细解读看这一篇就够了
Hashmap实现原理及扩容机制详解
HashMap继承了AbstractMap类,实现了Map,Cloneable,Serializable接口
全栈程序员站长
2022/07/21
8620
Hashmap实现原理及扩容机制详解
Debug HashMap
最近跟两个正在找工作的同学聊天,说起集合,都是面试的重灾区,必问的选项,而且在实际的面试中并不会单独提问某一个问题,而是围绕核心知识连环炮提问。所以背面试题治标不治本,还是得读一读源码。谁让这是个面试造火箭,工作拧螺丝的市场氛围,就连CSDN的首页第二张轮播图都在蹭这个热点:
Noneplus
2020/08/02
1.2K0
hashmap线程不安全问题_为什么HashMap线程不安全
HashMap的线程不安全主要体现在下面两个方面: 1.在JDK1.7中,当并发执行扩容操作时会造成环形链和数据丢失的情况。 2.在JDK1.8中,在并发执行put操作时会发生数据覆盖的情况。
全栈程序员站长
2022/11/10
3870
hashmap线程不安全问题_为什么HashMap线程不安全
集合框架1-- HashMap
HashMap的知识点可以说在面试中经常被问到,是Java中比较常见的一种数据结构。所以这一篇就通过源码来深入理解下HashMap。
归思君
2023/10/16
1830
集合框架1-- HashMap
基于JDK8的HashMap详解
HashMap是程序员使用频率较高的一种用于映射(键值对)处理的数据类型,随着JDK(Java Development Kit)版本的更新,HashMap也在不断被优化。其中JDK1.8在HashMap底层引入了红黑树的数据结构并对其扩容进行了优化等。本文将结合JDK1.7与JDK1.8对HashMap进行分析,浅析HashMap在JDK1.8中的改进。
Java阿呆
2020/11/04
4260
基于JDK8的HashMap详解
HashMap的扩容机制—resize()「建议收藏」
什么时候扩容:当向容器添加元素的时候,会判断当前容器的元素个数,如果大于等于阈值(知道这个阈字怎么念吗?不念fa值,念yu值四声)—即当前数组的长度乘以加载因子的值的时候,就要自动扩容啦。
全栈程序员站长
2022/07/02
3390
HashMap的扩容机制—resize()「建议收藏」
了解HashMap
HashMap 主要用来存放键值对,它基于哈希表的 Map 接口实现,是常用的 Java 集合之一,是非线程安全的。
橘子君丶
2023/03/08
4380
了解HashMap
耗时3天写完的HashMap万字解析,争取一篇文章讲透它,面试官看了都直点头!
在过去的几篇博客中,我们已经将Collection下的三大接口(List,Set,Queue)学了一遍,那么今天我们即将开启Java中另一大集合类型-Map。
JavaBuild
2024/05/27
1530
耗时3天写完的HashMap万字解析,争取一篇文章讲透它,面试官看了都直点头!
Java 8系列之重新认识HashMap
作者:美团点评技术团队 链接:https://zhuanlan.zhihu.com/p/21673805 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
bear_fish
2018/09/19
1.2K0
Java 8系列之重新认识HashMap
帮你面试——HashMap
这几天学习了HashMap的底层实现,但是发现好几个版本的,代码不一,而且看了Android包的HashMap和JDK中的HashMap的也不是一样,原来他们没有指定JDK版本,很多文章都是旧版本JDK1.6.JDK1.7的。现在我来分析一哈最新的JDK1.8的HashMap及性能优化。
小忽悠
2018/12/19
3970
八、JDK1.8中HashMap扩容机制
前面文章一、深入理解-Java集合初篇 中我们对Java的集合体系进行一个简单的分析介绍,上两篇文章二、Jdk1.7和1.8中HashMap数据结构及源码分析 、三、JDK1.7和1.8HashMap数据结构及源码分析-续 中我们分别对JDK1.7和JDK1.8中HashMap的数据结构、主要声明变量、构造函数、HashMap的put操作方法做了深入的讲解和源码分析。 四、深入理解Java中的HashMap「网易面试快答」文章中主要针对面试中常见的面试问题进行简单解答。 五、深入理解JDK1.7中HashMap哈希冲突解决方案 和 六、深入理解JDK1.8中HashMap哈希冲突解决方案 中对HashMap中哈希冲突及减少哈希冲突的解决方案做详细的介绍,并通过源码加深大家的理解。 七、JDK1.7中HashMap扩容机制 中介绍了JDK1.7中HashMap的扩容机制及扩容过程中可能出现的死锁及数据丢失问题。 本篇文章我们将要介绍JDK1.8中HashMap的扩容机制,并通过一个实例来展示链表的哈希扩容。
全栈程序员站长
2022/07/04
4850
八、JDK1.8中HashMap扩容机制
HashMap底层实现原理解析-JDK8
HashMap在平时的工作中是使用最频繁的一种数据存储结构,例如在工作中我们可以用HashMap做本地缓存,存放临时对象等等场景中,而且HashMap也是平时面试当中被经常问到的知识点。因此对HashMap的知识点掌握还是比较重要的。
Alec
2020/06/09
5100
HashMap(JDK1.8)源码+底层数据结构分析
HashMap 主要用来存放键值对,它基于哈希表的Map接口实现,是常用的Java集合之一。
黑洞代码
2021/02/09
2630
HashMap源码阅读笔记
HashMap采用 key/value 存储结构,每个key对应唯一的value。
三分恶
2020/11/03
4990
HashMap源码阅读
HashMap是Map家族中使用频度最高的一个,下文主要结合源码来讲解HashMap的工作原理。 1. 数据结构 HashMap的数据结构主要由数组+链表+红黑树(JDK1.8后新增)组成,如下图所示: 左侧数组是哈希表,数组的每个元素都是一个单链表的头节点,当不同的key映射到数组的同一位置,就将其放入单链表中来解决key的hash值的冲突。 当链表的长度>8时,JDK1.8做了数据结构的优化,会将链表转化为红黑树,利用红黑树快速增删改查的特点提升HashMap的性能,查询效率链表O(N),红黑树是O(l
butterfly100
2018/04/17
7170
HashMap源码阅读
jvm源码解析(二)HashMap
每个节点分别有hash,key,value,next这四个成员变量,next指向下一个节点
JathonKatu
2020/10/27
4160
jvm源码解析(二)HashMap
什么是HashMap容器
【1】HashMap是使用频率最高的用于映射(键值对)处理的数据类型。随着JDK(Java Developmet Kit)版本的更新,JDK1.8对HashMap底层的实现进行了优化,例如引入红黑树的数据结构和扩容的优化等。
忧愁的chafry
2022/10/30
5280
集合系列 Map(十二):HashMap
HashMap 是 Map 基于哈希散列算法的实现,其在 JDK1.7 中采用了数组+链表的数据结构。在 JDK1.8 中为了提高查询效率,采用了数组+链表+红黑树的数据结构。本文所有讲解均基于 JDK1.8 进行讲解。
陈树义
2019/08/29
4700
集合系列 Map(十二):HashMap
深入理解 HashMap
​ HashMap 是基于哈希表的 Map 接口是实现的。此实现提供所有可选操作,并允许使用 null 做为值(key)和键(value)。HashMap 不保证映射的顺序,特别是它不保证该顺序恒久不变。此实现假定哈希函数将元素适当的分布在各个桶之间,可作为基本操作(get 和 put)提供稳定的性能。在jdk1.7中的HashMap是基于数组+链表实现的,在jdk1.8中的HashMap是由数组+链表+红黑树实现的(不懂,一开始就讲那么难的谁受得了?没关系,继续往下看)
全栈程序员站长
2022/09/30
3420
深入理解 HashMap
相关推荐
经常被面试官问到的HashMap,详细解读看这一篇就够了
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验