一、环境预配置
我的虚拟机是采用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 包的好处就是它解决了应用程序之间的依赖问题,使应用程序之间更容易管理,但是由此带来的问题就是占用更多的磁盘空间。类似的应用程序容器技术还有大名鼎鼎的 Flatpak、AppImage。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私有云存储已经全部完成,软件中还有其他具体的应用与高级设置就留给诸位自行探索吧~~~~
如果要转载,请各位注明出处,谢谢~~~