史上最全Nextcloud部署方式,含snap与手动部署两种(已亲测使用)

一、环境预配置

我的虚拟机是采用AWS的EC2进行部署的,操作系统是CentOS 7.9.2009,EC2配置为4C-8G-50G(系统盘)-500G(数据盘);

因为采用snap工具在安装nextcloud时会默认将NextCloud的数据存储在/var/snap/nextcloud/common/nextcloud/data目录下,我们可以通过修改/var/snap/nextcloud/current/nextcloud/config/config.php的datadirectory所对应的参数来改变数据存储位置,在数据迁移的时候直接复制此文件夹过去。但我为了省事,直接采用的是默认的数据存储目录。但在这之前,考虑到后去数据目录的不断扩展,决定采用lvm技术,并将整个/var/snap/目录挂载在单独的lvm下,下图就是我磁盘的配置。

接下来就看看我具体的lvm创建步骤:

1.1、首先为EC2服务器添加一块新的一块盘(用途就是单独一块盘来存snap和nextcloud的数据)

1.2、格式化新添加的数据盘(我习惯用parted)

lsblk——确实具体设备

parted /dev/nvme1n1

      mklabel gpt

      mkpart

      1

       p

       xfs

     0%

     100%

      q

注:这个当时做完没有具体截图,失算了。不会的自己可以百度一下哈,在此我就不做过多的赘述,接下来就是创建lvm了。

1.3、格式化往后创建pv物理卷

(注:没有lvm相关命令的,只要服务器能联网,直接yum -y install lvm2即可,无法上网的话,就做个本地yum源吧)

pvcreate /dev/nvme1n1p1

pvscan 

pvdisplay

1.4、创建vg卷组

vgcreate nextcloud_data /dev/nvme1n1p1

vgscan

vgdisplay

1.5、创建lvm

lvcreate -n lvm01 -l 127999 /dev/nextcloud_data

lvscan

lvdisplay

1.6、将创建好的lvm进行格式化

mkfs.xfs /dev/nextcloud_data/lvm01

blkid /dev/nextcloud_data/lvm01

1.7、将/var/snap/目录挂载至新创建的lvm下

mount /dev/nextcloud_data/lvm01 /var/snap

1.8、编写开机自动挂载

###########################################################################################################

二、CentOS7安装snap工具

      简介:Snap 是 Ubuntu 母公司 Canonical 于 2016 年 4 月发布 Ubuntu-16.04 时引入的一种全新的、安全的、易于管理的、沙盒化的软件包管理方式,与传统的 dpkg/apt 有着很大的区别,背后主要的动机是解决 Linux 平台的碎片化问题。Snap 的安装包扩展名是 .snap,类似于一个容器,它包含一个应用程序需要用到的所有文件和库(Snap 包里包含一个私有的 root 文件系统,里面包含了依赖的软件包)。不管底层系统如何,Snap 都可轻松安装、升级、降级和移除应用,因此 Snap 的应用程序很容易安装在任何基于 Linux 的系统上,而且支持用户在同一个系统中安装同一应用程序的多个版本。使用 Snap 包的好处就是它解决了应用程序之间的依赖问题,使应用程序之间更容易管理,但是由此带来的问题就是占用更多的磁盘空间。类似的应用程序容器技术还有大名鼎鼎的 FlatpakAppImage。Snap 适用于 CentOS 7.6+ 和 Red Hat Enterprise Linux 7.6+,它很好地弥补了 Centos 桌面软件资源不多的缺点,可以从 Extra Packages for Enterprise Linux(EPEL)存储库安装。

2.1、安装epel-release源

yum -y install epel-release

2.2、添加copr仓库(可选)

yum install yum-plugin-copr

yum copr enable ngompa/snapcore-el7

2.3、安装snap工具

yum -y install snapd

2.4、安装Snap的其他组件(可选)

yum install snapd-glib snapd-qt snapd-qt-qmlg

2.5、启用通信套接字

systemctl enable --now snapd.socket

2.6、创建软连接

ln -s /var/lib/snapd/snap /snap

2.7、运行snapd并设置开机自启

systemctl start snapd && systemctl enable snapd

reboot——重启完在看一下snapd的状态,有时候需要重启一次

2.8、初始化环境变量

vim /etc/profile

 添加:export PATH=$PATH:/snap/bin

source /etc/profile

2.9、验证snap是否安装成功

snap --version

snap install hello

验证成功。

##################################################################

三、使用snap安装nextcloud

       Nextcloud简介:Nextcloud是一套用于创建和使用文件托管服务的客户端-服务器软件。它在功能上类似于Dropbox,虽然Nextcloud是免费的和开源的,允许任何人在私人服务器上安装和操作它。与Dropbox等专有服务相反,开放架构允许以应用程序的形式向                                   服务器添加附加功能。虽然Nextcloud作为ownCloud的衍生版本,在其基础上做了许多改进,但有一些差异。ownCloud提供了一个开源社区版本,但它们还提供了一个专有的企业版,具有附加功能和支持订阅。相比之下,Nextcloud是完全开                                     源的,现在也企业版。我在这里用的最新的20.0.2的,据官网所说,好像只能供10用户使用,不过这对于个人使用已经够了。并且支持跨平台使用,我用的客户端就包括Windows 10桌面端以及安卓手机端。

                                NextCloud安装方式官方有三种:1. 手动安装LAMP/LNMP+NextCloud; 2. Snap安装;3. Docker安装;

                               我这里只讲用snap部署的方式,部位别的,就因为这种方式最简单,不用去使用docker做网桥,不用去关心手动部署的依赖关系等等问题。

3.1、snap安装nextcloud

snap install nextcloud

注:这里安装完成后就可以用浏览器打开http://your_ip进入nextcloud登录页面了,如果你想用域名登录并配置SSL证书的话,先别登录,继续进行下面步骤。

3.2、配置域名并添加ssl证书

先确保你的域名已经成功解析到你的服务器上,因为我用的带公网的EC2,本身具备域名解析功能;

nextcloud.enable-https lets-encrypt

根据要求输入邮箱、域名,再次打开网站就可以见到域名前的http变成了https。这里的SSL证书是nextcloud自签名证书。

如果想用自己的证书,那就执行nextcloud.enable-https self-signed命令,在执行命令后找到SSL证书的路径,将自己的证书上传替换生成的自签名证书文件即可。(PS:因为我没有自己的证书,所以就没用这个)

四、配置Nextcloud

4.1、浏览器数据域名访问你的Nextcloud,设置管理员

4.2、安装推荐应用

4.3、登录成功

如需公网IP或私网IP进行访问,需进行一下修改:

vim /var/snap/nextcloud/current/nextcloud/config/config.php

编辑trusted_domains参数,如图。

使用snap安装nextcloud的补充说明:

1.数据库位置:使用Snap安装的Nextcloud,数据库文件在以下路径中/var/snap/nextcloud/xxxx(版本数字)/mysql,需要备份直接备份此文件夹即可。

2.Nextcloud数据位置,NextCloud存储文件夹在/var/snap/nextcloud/common/nextcloud/data,可以通过修改/var/snap/nextcloud/current/nextcloud/config/config.php的datadirectory对应的参数来改变位置,在数据迁移的时候直接复制此文件夹过去。

3.Snap安装的优缺点:snap安装快捷,傻瓜式一键安装,几分钟内搞定。同时,snap支持自动升级、回滚等,你无需使用复杂的命令工具。但是snap不能自定义,只能使用snap既定的MysqL、apache、PHP等。不过,这样的好处就是经过官方测试过的运行稳定且有利于后期自动升级。

4.我在使用snap安装nextcloud后,访问总是特别卡,所以最后我有用手动部署了一遍,两者进行对比,感觉手动部署的要比snap安装的快得多,具体手动部署方式继续见下文。

############################################################################################################################################

Next cloud之手动部署:LNMP+Next cloud+Memcache+性能调优

一、使用yum安装nginx

1.1、通过nginx官网安装nginx.repo源

rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

1.2、安装nginx

yum -y install nginx

1.3、运行nginx并验证版本

systemctl start nginx && systemctl enable nginx

nginx -v

由此可知,nginx已经安装成功。接下来,安装msyql。

######################################################################################################################

二、使用yum安装mysql5.7

2.1、移除原mariadb,避免冲突

yum remove mariadb*

2.2、通过msyql官网安装mysql5.7.repo源

rpm -Uvh http://repo.mysql.com/mysql57-community-release-el7-8.noarch.rpm

2.3、安装mysql5.7

yum -y install mysql-server

默认mysql配置文件路径: 
配置文件:/etc/my.cnf 
日志文件:/var/log/var/log/mysqld.log 
服务启动脚本:/usr/lib/systemd/system/mysqld.service 
socket文件:/var/run/mysqld/mysqld.pid

2.4、运行mysqld并设置开机自启

systemctl start mysqld && systemctl enable mysqld

netstat -anptu | grep :3306

2.5、重置root密码并进行远程访问授权

MySQL安装完成后,初始root密码是一串随机码记录在/var/log/mysqld.log,所以我们要干的就是用这个初始密码登录数据路并重新设置你的root密码。

grep "password" /var/log/mysqld.log

mysql -u root -p

#降低MySQL密码复杂度要求为最低,只检查长度即可;

mysql> set global validate_password_policy=0;

#重置MySQL的root密码

mysql> alter user 'root'@'localhost' identified by 'Nextcloud_dbpass';

#开启远程访问

mysql> grant all privileges on *.* to 'root'@'%' identified by 'Nextcloud_dbpass';

#刷新授权表

mysql> flush privileges;

至此就完成了MySQL5.7的初始化配置,接下来就是配置nextcloud使用的数据库了。

2.6、创建nextcloud使用的数据库

#创建nextcloud_db数据库

mysql> create database nextcloud_db;

#授权访问nextcloud_db数据的远程账户(随便用一个就行)

mysql> grant all privileges on nextcloud_db.* to nextclouduser@localhost identified by 'nextclouduserpasswd';

mysql> grant all privileges on nextcloud_db.* to admin@localhost identified by 'nextcloudadminpasswd';

mysql> flush privileges;

##########################################################################################

三、安装php7.2(nextcloud20版本最低要求php7.2,从nextcloud21开始最低要求就是php7.3+了,所以最好还是选择高版本的)

3.1、安装epel-release和php源

yum -y install epel-release

rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

php高版本的yum源地址,有两部分,其中一部分是epel-release,另外一部分来自webtatic。如果跳过epel-release的话,安装webtatic的时候,会有错误爆出。

3.2、安装php7.2扩展包

yum install -y php72w-devel php72w-pear php72w-pecl php72w-gd php72w-opcache php72w-cli php72w-pdo php72w-process php72w-pecl-apcu php72w-mcrypt php72w-mysql php72w-fpm php72w-pecl-memcached php72w-common php72w-xml php72w-mbstring php72w-pecl-igbinary

3.3、验证php版本

php -v

由此可见,php已经安装成功,版本号是7.2.34

##########################################################################################

四、为nextcloud 生成自签名的ssl证书

mkdir -p /etc/nginx/cert

cd /etc/nginx/cert

openssl req -new -x509 -days 365 -nodes -out /etc/nginx/cert/nextcloud.crt -keyout /etc/nginx/cert/nextcloud.key

修改文件权限

chmod 600 /etc/nginx/cert/*

chmod 700 /etc/nginx/cert

############################################################################################################################

五、下载nextcloud,并配置php和nginx

# 下载nextcloud,官网地址为: https://nextcloud.com/install/#instructions-server

5.1、安装需要使用的工具

因为我是单独使用一块盘做lvm挂载nextcloud数据存储目录,所以会用到lvm2工具

yum install -y wget unzip lvm2

parted /dev/nvme1n1

pvcreate /dev/nvme1n1p1

vgcreate nextcloud_db /dev/nvme1n1p1

lvcreate -n lvm01 -l 127999 /dev/nextcloud_db

mkfs.xfs /dev/nextcloud_db/lvm01

5.2、下载next cloud-20.0.2并解压(截止2020-12-02的最新稳定版)

cd /usr/local/src

wget https://download.nextcloud.com/server/releases/nextcloud-20.0.2.zip

unzip nextcloud-20.0.2.zip

5.3、将解压出来的nextcloud文件夹移动到nginx指定的目录下

mv /usr/local/src/nextcloud /usr/share/nginx/html/

5.4、创建nextcloud数据存储目录并挂载在lvm盘符下

mkdir -p /usr/share/nginx/html/nextcloud/data

mount /dev/nextcloud_db/lvm01 /usr/share/nginx/html/nextcloud/data/

5.5、将nextcloud目录的权限授权给nginx

5.6、配置php-fpm

vim /etc/php-fpm.d/www.conf

更改所属组和所有者

为php创建session文件夹

mkdir -p /var/lib/php/session

chown nginx:nginx -R /var/lib/php/session/

5.7、配置nginx虚拟主机

vim /etc/nginx/conf.d/nextcloud.conf

[root@ip-10-0-1-241 nextcloud]# cat /etc/nginx/conf.d/nextcloud.conf 
upstream php-handler {
    server 127.0.0.1:9000;
    #server unix:/var/run/php5-fpm.sock;
}

server {
    listen 80;
    server_name localhost;
    # enforce https
    rewrite ^(.*)$ https://$host$1 permanent;
}

server {
    listen 443 ssl;
    server_name localhost;
 
    ssl_certificate /etc/nginx/cert/nextcloud.crt;
    ssl_certificate_key /etc/nginx/cert/nextcloud.key;
 
    # Add headers to serve security related headers
    # Before enabling Strict-Transport-Security headers please read into this
    # topic first.
    add_header Strict-Transport-Security "max-age=15768000;
    includeSubDomains; preload;";
    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;
 
    # Path to the root of your installation
    root /usr/share/nginx/html/nextcloud/;

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

    # The following 2 rules are only needed for the user_webfinger app.
    # Uncomment it if you're planning to use this app.
    #rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
    #rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json
    # last;
 
 
    location = /.well-known/carddav {
      return 301 $scheme://$host/remote.php/dav;
    }
    location = /.well-known/caldav {
      return 301 $scheme://$host/remote.php/dav;
    }
 
 
    # 上传文件最大限制,php.ini中也要修改,最后优化时会提及。
    # set max upload size
    client_max_body_size 10240M;    
    fastcgi_buffers 64 4K;
 
    # Disable gzip to avoid the removal of the ETag header
    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/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;
 
 
    # Uncomment if your server is build with the ngx_pagespeed module
    # This module is currently not supported.
    #pagespeed 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 php-handler;
        fastcgi_intercept_errors on;
        fastcgi_request_buffering off;
    }
 
 
    location ~ ^/(?:updater|ocs-provider)(?:$|/) {
        try_files $uri/ =404;
        index index.php;
    }
 
 
    # Adding the cache control header for js and css files
    # Make sure it is BELOW the PHP block
    location ~* \.(?:css|js)$ {
        try_files $uri /index.php$uri$is_args$args;
        add_header Cache-Control "public, max-age=7200";
        # Add headers to serve security related headers (It is intended to
        # have those duplicated to the ones above)
        # Before enabling Strict-Transport-Security headers please read into
        # this topic first.
        add_header Strict-Transport-Security "max-age=15768000;includeSubDomains; preload;";
        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;
        # Optional: Don't log access to other assets
        access_log off;
    }
}
[root@ip-10-0-1-241 nextcloud]# 

注意变更nginx的默认端口为其他端口,避免冲突,我这里把默认端口改成了8080

5.8、启动nginx和php-fpm

nginx -t

systemctl restart nginx && systemctl enable nginx

systemctl restart php-fpm && systemctl enable php-fpm

###############################################################################

六、配置nextcloud

使用浏览器访问;https://10.0.1.241/

####################################################################################

七、其他配置

修改域名访问

vim /usr/share/nginx/html/nextcloud/config/config.php

在trusted_domains下写上自己想要访问的域名、公网IP等;

###################################################################################################################################################

八、针对nextcloud服务器进行必要的系统优化

8.1、优化php.ini参数

vim /etc/php.ini

添加如下参数:

opcache.enable=1
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.memory_consumption=128
opcache.save_comments=1
opcache.revalidate_freq=1

upload_max_filesize = 10240M    # 更改上传文件最大限制,要和/etc/nginx/conf.d/nextcloud.conf中相一致,默认为2M

memory_limit = 1024M

8.2、优化php-fpm

vim /etc/php-fpm.d/www.conf——根据官方提示进行如下调优

8.3、优化php OPcache

vim /etc/php.d/opcache.ini

8.4、设置cron后台任务(针对web所有者进行创建,别乱创建什么www-data用户)

crontab -u nginx -e

*/5  *  *  *  * php -f /usr/share/nginx/html/nextcloud/cron.php

使用systemd进行管理该计划任务,如图:

cd /etc/systemd/system

vim nextcloudcron.service

vim nextcloudcron.timer

8.5、设置memcached做nextcloud缓存后端

yum -y install memcached

vim  /etc/sysconfig/memcached

vim /usr/share/nginx/html/nextcloud/config/config.php

添加如下参数:

'memcache.local' => '\OC\Memcache\APCu',
  'memcache.distributed' => '\OC\Memcache\Memcached',
  'memcached_servers' => array(
  array('localhost','11211'),
  ),

重启生效

systemctl restart memcached && systemctl enable memcached

systemctl restart nginx && systemctl enable nginx

systemctl restart php-fpm && systemcl enale php-fpm

#################################################################################################

至此,两种方式搭建自己nextcloud私有云存储已经全部完成,软件中还有其他具体的应用与高级设置就留给诸位自行探索吧~~~~

如果要转载,请各位注明出处,谢谢~~~

 

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王大江1018

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值