使用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

nextcloud centos 8

如果无法加载网页,则可能需要在防火墙中打开端口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 接着说。

nextcloud centos 8 certbot

系统将询问您是否要接收来自EFF(电子前沿基金会)的电子邮件。 选择Y或N后,将自动为您获取并配置您的TLS证书,如以下消息所示。

Rhel 8 certbot dns cloudflare

在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-centos-8-nginx-config

完成后,您将看到Nextcloud的Web界面。 恭喜! 您可以开始将其用作私有云存储。

nextcloud rhel 8

如何设置NextCloud电子邮件通知

如果您的NextCloud实例将被多个人使用,那么NextCloud服务器可以发送交易电子邮件,例如密码重置电子邮件,这一点很重要。 要配置电子邮件设置,请转到 设定值 -> 基本设置。 您将找到电子邮件服务器设置。

有两种发送模式: sendmailsmtp。 的 sendmail 如果您的NextCloud主机正在运行SMTP服务器,则此模式可用。

nextcloud电子邮件服务器

如果要使用在另一台主机上运行的SMTP服务器,请选择 smtp 模式,然后输入登录凭据,如下所示。

nextcloud重置密码电子邮件

您还需要告诉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性能

与往常一样,如果您发现这篇文章很有用,请订阅我们的免费新闻通讯以获取更多提示和技巧。 保重🙂

Sidebar