使用Nginx(LEMP Stack)在CentOS 8 / RHEL 8上安装NextCloud
本教程将向您展示如何在具有Nginx Web服务器的RHEL 8 / CentOS 8上安装NextCloud。
什么是NextCloud?
NextCloud是免费的开源自托管云存储解决方案。 它在功能上类似于Dropbox。 专有的云存储解决方案(Dropbox,Google Drive等)很方便,但要付出一定的代价:它们可以用于收集个人数据,因为您的文件存储在他们的计算机上。 如果您担心隐私,则可以切换到NextCloud,您可以将其安装在私有家庭服务器或虚拟私有服务器(VPS)上。 您可以通过NextCloud将文件上传到服务器,然后将这些文件同步到台式机,笔记本电脑或智能手机。 这样,您就可以完全控制数据。
NextCloud功能
- 免费和开源
- 端到端加密,这意味着文件可以在上传到服务器之前在客户端设备上进行加密,因此即使有人偷了您的服务器,他们也看不到您的文件。
- 可以与在线办公套件(Collobora,OnlyOffice)集成,因此您可以直接从NextCloud创建和编辑doc,ppt,xls文件。
- 该应用程序商店包含数百个扩展功能的应用程序(例如日历应用程序,笔记记录应用程序,视频会议应用程序等)。
- 同步客户端可用于Linux,MacOS,Windows,iOS和android。
先决条件
NextCloud用PHP编程语言编写。 要遵循本教程,您首先需要在RHEL 8 / CentOS 8上安装LEMP堆栈。。 如果您尚未这样做,请查看以下教程。
- 如何在RHEL 8 / CentOS 8上安装LEMP堆栈
您可以在家庭服务器或VPS(虚拟专用服务器)上安装NextCloud。 您还需要一个域名。 我从NameCheap注册了我的域名,因为它价格低廉,并且终身免费提供Whois隐私保护。
本教程使用root帐户管理管理任务。 要切换到root用户,请运行以下命令并输入root密码。
su -
现在,让我们在服务器上安装NextCloud。
步骤1:在RHEL 8 / CentOS 8服务器上下载NextCloud
登录到RHEL 8 / CentOS 8服务器。 然后将NextCloud zip存档下载到您的服务器上。 在撰写本文时,最新的稳定版本是14.0.4。 您可能需要更改版本号。 转到https://nextcloud.com/install并单击 download server
按钮以查看最新版本。
您可以使用wget工具从命令行下载它。 下载链接始终以以下格式提供。 如果出现新版本,只需用新版本号替换14.0.4。
yum install wget wget https://download.nextcloud.com/server/releases/nextcloud-14.0.4.zip
下载完成后,使用 unzip
。
yum install unzip unzip nextcloud-14.0.4.zip -d /usr/share/nginx/
的 -d
选项指定目标目录。 NextCloud Web文件将被提取到 /usr/share/nginx/nextcloud/
。 然后,我们需要将此目录的所有者更改为 nginx
这样Nginx Web服务器可以写入该目录。
chown nginx:nginx /usr/share/nginx/nextcloud/ -R
步骤2:在MariaDB中创建数据库和用户
使用以下命令登录MariaDB数据库服务器。 您将需要输入MariaDB根密码才能登录。
mysql -u root -p
然后为Nextcloud创建数据库。 本教程为数据库命名 nextcloud
。 您可以使用任何喜欢的名称。
CREATE DATABASE nextcloud DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
创建数据库用户。 同样,您可以为该用户使用您的首选名称。 更换 your-password
使用您的首选密码。
CREATE USER [email protected] IDENTIFIED BY 'your-password';
授予该用户所有的权限 nextcloud
数据库。
GRANT ALL PRIVILEGES ON nextcloud.* TO [email protected];
刷新特权并退出。
flush privileges; exit;
步骤3:为Nextcloud创建Nginx配置文件
创建一个 nextcloud.conf
归档在 /etc/nginx/conf.d/
目录。 我在本文中使用Nano命令行文本编辑器。
nano /etc/nginx/conf.d/nextcloud.conf
将以下文本放入文件中。 将红色文本替换为您的实际数据。 在您的DNS管理器中,为NextCloud服务器创建一个子域,例如 nextcloud.your-domain.com
并且不要忘记为子域设置A记录。
server { listen 80; listen [::]:80; server_name nextcloud.your-domain.com; # Add headers to serve security related headers add_header X-Content-Type-Options nosniff; 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; add_header Referrer-Policy no-referrer; #I found this header is needed on Debian/Ubuntu/CentOS/RHEL, but not on Arch Linux. add_header X-Frame-Options "SAMEORIGIN"; # Path to the root of your installation root /usr/share/nginx/nextcloud/; access_log /var/log/nginx/nextcloud.access; error_log /var/log/nginx/nextcloud.error; 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; } location ~ /.well-known/acme-challenge { allow all; } # set max upload size client_max_body_size 512M; fastcgi_buffers 64 4K; # Disable gzip to avoid the removal of the ETag header gzip off; # 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; } 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)(/.*)$; try_files $fastcgi_script_name =404; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; #Avoid sending the security headers twice fastcgi_param modHeadersAvailable true; fastcgi_param front_controller_active true; fastcgi_pass unix:/run/php-fpm/www.sock; 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) add_header X-Content-Type-Options nosniff; 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; } }
在nano文本编辑器中,按 Ctrl+O
保存文件。 然后按Enter确认。 按 Ctrl+X
退出。 然后测试Nginx配置。
nginx -t
如果测试成功,请重新加载Nginx以使更改生效。
systemctl reload nginx
步骤4:安装并启用PHP模块
运行以下命令以安装NextCloud所需或推荐的PHP模块。
yum install php-common php-gd php-json php-curl php-zip php-xml php-mbstring php-bz2 php-intl
我们还需要告诉SELinux(安全性增强Linux)允许PHP-FPM使用execmem。
setsebool -P httpd_execmem 1
然后重新加载PHP-FPM
systemctl reload php-fpm
步骤5:设定权限
首先,告诉SELinux允许Nginx和PHP-FPM读写 /usr/share/nginx/nextcloud/
目录。
chcon -t httpd_sys_rw_content_t /usr/share/nginx/nextcloud/ -R
默认情况下,SELinux禁止Nginx向其他服务器发出网络请求,但是后来Nginx需要从Let’s Encrypt CA服务器请求TLS证书状态,因此我们需要通过以下命令告诉SELinux允许Nginx。
setsebool -P httpd_can_network_connect 1
默认情况下,其中有3个文件 /var/lib/php/
组所有者设置为的目录 apache
,但我们正在使用Nginx。 因此,我们需要授予nginx用户权限,以使用以下命令读取和写入3个目录 setfacl
。
setfacl -R -m u:nginx:rwx /var/lib/php/opcache/ setfacl -R -m u:nginx:rwx /var/lib/php/session/ setfacl -R -m u:nginx:rwx /var/lib/php/wsdlcache/
步骤6:启用HTTPS
现在,您可以通过输入Nextcloud安装的域名来访问浏览器中的Nextcloud Web安装向导。
nextcloud.your-domain.com
如果无法加载网页,则可能需要在防火墙中打开端口80。
firewall-cmd --permanent --zone=public --add-service=http
还有端口443。
firewall-cmd --permanent --zone=public --add-service=https
的 --permanent
选项将使该防火墙规则在系统重新引导后持续存在。 接下来,重新加载防火墙守护程序,以使更改生效。
systemctl reload firewalld
现在,NextCloud安装向导应该已成功加载。 在输入任何敏感信息之前,我们应该在Nextcloud上启用安全的HTTPS连接。 我们可以从Let’s Encrypt获得免费的TLS证书。
下载“让我们加密客户端” certbot-auto
从EFF网站。
wget https://dl.eff.org/certbot-auto
授予执行权限。
chmod a+x certbot-auto
将其移至用户的PATH,例如 /usr/local/bin/
并将其重命名为 certbot
。
sudo mv certbot-auto /usr/local/bin/certbot
将root设置为所有者,并将权限更改为0755。
sudo chown root /usr/local/bin/certbot sudo chmod 0755 /usr/local/bin/certbot
现在我们可以使用 certbot
命令以使用Nginx插件获取免费的TLS证书。
sudo /usr/local/bin/certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email your-email-address -d nextcloud.your-domain.com
哪里:
- –nginx:使用Nginx身份验证器和安装程序
- –同意:同意让我们加密服务条款
- –重定向:添加301重定向,以便将HTTP请求重定向到HTTPS。
- –hsts:将Strict-Transport-Security标头添加到每个HTTP响应。
- –staple-ocsp:启用OCSP装订以改善性能和用户隐私。
- -d 标志后面是域名列表,以逗号分隔。 您最多可以添加100个域名。
- -电子邮件:用于注册和恢复联系的电子邮件。
如果这是第一次在RHEL 8 / CentOS 8系统上运行,则可能会要求您安装一些依赖程序包。 按 y
接着说。
系统将询问您是否要接收来自EFF(电子前沿基金会)的电子邮件。 选择Y或N后,将自动为您获取并配置您的TLS证书,如以下消息所示。
在Web浏览器中完成安装
现在,您可以使用HTTPS连接访问Nextcloud Web安装向导。 要完成安装,您需要创建一个管理员帐户,输入Nextcloud数据文件夹的路径,输入先前创建的数据库详细信息。 您可以使用默认 localhost
作为主机地址,也可以输入 localhost:3306
,因为MariaDB监听端口3306。
数据文件夹是存储用户文件的位置。 为了安全起见,最好将数据目录放置在Nextcloud Web根目录之外。 因此,与其将用户文件存储在 /usr/share/nginx/nextcloud/data/
,我们可以将其更改为 / usr / share / nginx / nextcloud-data。 可以使用以下命令创建:
mkdir /usr/share/nginx/nextcloud-data
然后确保Nginx用户具有对数据目录的写权限。
chown nginx:nginx /usr/share/nginx/nextcloud-data -R chcon -t httpd_sys_rw_content_t /usr/share/nginx/nextcloud-data/ -R
完成后,您将看到Nextcloud的Web界面。 恭喜! 您可以开始将其用作私有云存储。
如何设置NextCloud电子邮件通知
如果您的NextCloud实例将被多个人使用,那么NextCloud服务器可以发送交易电子邮件,例如密码重置电子邮件,这一点很重要。 要配置电子邮件设置,请转到 设定值 -> 基本设置。 您将找到电子邮件服务器设置。
有两种发送模式: sendmail
和 smtp
。 的 sendmail
如果您的NextCloud主机正在运行SMTP服务器,则此模式可用。
如果要使用在另一台主机上运行的SMTP服务器,请选择 smtp
模式,然后输入登录凭据,如下所示。
您还需要告诉SELinux允许Nginx使用以下命令发送邮件。
setsebool -P httpd_can_sendmail on
有关如何设置自己的电子邮件服务器的信息,请阅读以下教程:
- 如何使用Modoboa在CentOS上快速设置邮件服务器
增加上传文件大小限制
Nginx设置的默认最大上传文件大小限制为1MB。 要允许将大文件上传到您的NextCloud服务器,请编辑NextCloud的Nginx配置文件。
nano /etc/nginx/conf.d/nextcloud.conf
我们已经在此文件中设置了最大文件大小,如
client_max_body_size 512M;
您可以根据需要更改它,例如1G。
client_max_body_size 1024M;
保存并关闭文件。 然后重新加载Nginx以使更改生效。
systemctl reload nginx
PHP还设置了上传文件大小的限制。 上载的默认最大文件大小为2MB。 要增加上传大小限制,请编辑PHP配置文件。
nano /etc/php.ini
找到以下行(第827行)。
upload_max_filesize = 2M
如下更改值:
upload_max_filesize = 1024M
保存并关闭文件。 或者,您可以运行以下命令来更改值,而无需手动打开文件。
sed -i 's/upload_max_filesize = 2M/upload_max_filesize = 1024M/g' /etc/php.ini
然后重新启动PHP-FPM。
systemctl restart php-fpm
自动续订让我们加密证书
编辑root用户的crontab文件。
sudo crontab -e
在文件末尾添加以下行,以每天运行Cron作业。 如果证书将在30天后过期,certbot将尝试续订证书。 有必要重新加载Nginx服务以获取新的证书和密钥文件。
@daily certbot renew --quiet && systemctl reload nginx
包起来
我希望本教程可以帮助您在RHEL 8 / CentOS 8服务器上安装NextCloud。 您可能还想使用Nginx Amplify监视Nextcloud后端性能。
- 在CentOS 8 / RHEL 8上安装Nginx Amplify以监视LEMP性能
与往常一样,如果您发现这篇文章很有用,请订阅我们的免费新闻通讯以获取更多提示和技巧。 保重🙂