在CentOS 8上使用Nginx和SSL / TLS证书安装Nextcloud

欢迎使用我们关于另一种企业文件同步和共享解决方案的指南。了解如何安装 未来云 在CentOS 8上使用Nginx和SSL / TLS证书。

想尝试ownCloud吗?请点击以下链接获取有关在CentOS 8上设置您自己的Cloud服务器的指南。

在CentOS 8上安装ownCloud服务器

在CentOS 8上使用Nginx和SSL / TLS证书安装Nextcloud

要在具有Nginx和SSL / TLS证书的CentOS 8上安装Nextcloud,在这些环境中将使用一些过程。请根据您的环境随意更改程序。

执行系统更新

确保您的系统软件包是最新的。

dnf update

安装LEMP堆栈

要使用Nginx运行Nextcloud,首先需要设置一个LEMP堆栈。较早的指南提供了有关如何在CentOS 8上设置LEMP堆栈的指南。请点击下面的链接。

在CentOS 8上安装LEMP堆栈

安装其他必需的PHP模块

要安装其他必需的PHP模块和其他软件包,请执行以下命令。

dnf install php-gd php-json php-curl php-mbstring php-intl php-xml php-zip php-pear php-soap

安装其他必需的软件包。

dnf install zip wget tar policycoreutils-python-utils

配置PHP

编辑 /etc/php.ini 设定值 cgi.fix_pathinfo0

vim /etc/php.ini
...
;cgi.fix_pathinfo=1
cgi.fix_pathinfo=0
...

编辑 /etc/php-fpm.d/www.conf 然后进行以下更改:

vim /etc/php-fpm.d/www.conf
...
user = nginx
group = nginx
...
# Uncomment these lines by removing the ; at the beginning of the lines.
env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp
...

创建Nextcloud数据库和数据库用户

在为Nextcloud创建MariaDB / MySQL数据库之前,请确保InnoDB是默认存储引擎。

mysql -u root -p
show engines;
+--------------------+---------+----------------------------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                                          | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------------------------+--------------+------+------------+
...
...
| InnoDB             | DEFAULT | Supports transactions, row-level locking, foreign keys and encryption for tables | YES          | YES  | YES        |
...

确保支持设置如下 默认值

接下来,创建Nextcloud数据库(此处使用的数据库名称和数据库用户名称不是标准的,请使用任意名称)。

create database ncdb;

创建具有授予Nextcloud数据库的所有特权的Nextcloud数据库用户。

grant all privileges on ncdb.* to [email protected] identified by '[email protected]';

重新加载特权表并终止数据库。

flush privileges;
quit

下载并安装Nextcloud

在本指南中,我们将从源代码安装Nextcloud。因此,在撰写本文时,请下载Nextcloud的最新稳定发行版v17.0.2。 发布页面

wget https://download.nextcloud.com/server/releases/latest.zip

将Nextcloud提取到Web根目录

由于我们使用Nginx作为Web服务器,因此Nextcloud文件和配置位于下面。 /usr/share/nginx/html/nextcloud。路径因情况而异。

unzip latest.zip -d /usr/share/nginx/html/

生成SSL / TLS证书

现在,要使用SSL / TLS证书设置Nextcloud,首先需要生成一个证书。本指南使用自签名证书进行演示。如果您在生产环境中运行Nextcloud,请考虑使用首选CA中的公共信任证书。

openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/pki/tls/nc-selfsigned.key -out /etc/pki/tls/nc-selfsigned.crt

为Nextcloud配置Nginx

Nextcloud是 Nextcloud示例Nginx配置代码。只需捕获配置并将其调整为您的首选项即可。

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

确保替换服务器名称,Web根目录以及SSL / TLS证书的路径。

upstream php-handler {
    server unix:/run/php-fpm/www.sock;
}

server {
    listen 80;
    server_name nextcloud.kifarunix-demo.com;
    # enforce https
    return 301 https://$server_name:443$request_uri;
}

server {
    listen 443 ssl http2;
    server_name nextcloud.kifarunix-demo.com;

    ssl_certificate /etc/pki/tls/nc-selfsigned.crt;
    ssl_certificate_key /etc/pki/tls/nc-selfsigned.key;

    add_header Referrer-Policy "no-referrer" always;
    add_header X-Content-Type-Options "nosniff" always;
    add_header X-Download-Options "noopen" always;
    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header X-Permitted-Cross-Domain-Policies "none" always;
    add_header X-Robots-Tag "none" always;
    add_header X-XSS-Protection "1; mode=block" always;

    fastcgi_hide_header X-Powered-By;

    # Path to the root of your installation
    root /usr/share/nginx/html/nextcloud;

    access_log /var/log/nginx/nc_access_log;
    error_log /var/log/nginx/nc_error_log;

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

    location = /.well-known/carddav {
      return 301 $scheme://$host:$server_port/remote.php/dav;
    }
    location = /.well-known/caldav {
      return 301 $scheme://$host:$server_port/remote.php/dav;
    }

    # set max upload size
    client_max_body_size 512M;
    fastcgi_buffers 64 4K;

    # Enable gzip but do not remove ETag headers
    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;

    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/.+|oc[ms]-provider/.+).php(?:$|/) {
        fastcgi_split_path_info ^(.+?.php)(/.*|)$;
        set $path_info $fastcgi_path_info;
        try_files $fastcgi_script_name =404;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $path_info;
        fastcgi_param HTTPS on;
        fastcgi_param modHeadersAvailable true;
        fastcgi_param front_controller_active true;
        fastcgi_pass php-handler;
        fastcgi_intercept_errors on;
        fastcgi_request_buffering off;
    }

    location ~ ^/(?:updater|oc[ms]-provider)(?:$|/) {
        try_files $uri/ =404;
        index index.php;
    }

    location ~ .(?:css|js|woff2?|svg|gif|map)$ {
        try_files $uri /index.php$request_uri;
        add_header Cache-Control "public, max-age=15778463";
        add_header Referrer-Policy "no-referrer" always;
        add_header X-Content-Type-Options "nosniff" always;
        add_header X-Download-Options "noopen" always;
        add_header X-Frame-Options "SAMEORIGIN" always;
        add_header X-Permitted-Cross-Domain-Policies "none" always;
        add_header X-Robots-Tag "none" always;
        add_header X-XSS-Protection "1; mode=block" always;

        access_log off;
    }

    location ~ .(?:png|html|ttf|ico|jpg|jpeg|bcmap)$ {
        try_files $uri /index.php$request_uri;
        access_log off;
    }
}

保存配置文件并退出。

创建一个Nextcloud数据目录。

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

将Nextcloud目录中的用户和组的所有权设置为nginx。

chown -R nginx:nginx /usr/share/nginx/html/nextcloud

在Nextcloud目录和文件上设置适当的权限。

find /usr/share/nginx/html/nextcloud/ -type d -exec chmod 750 {} ;
find /usr/share/nginx/html/nextcloud/ -type f -exec chmod 640 {} ;

将PHP会话目录的所有权设置为nginx。

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

检查Nginx语法错误。

nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

重新启动Nginx和PHP-FPM。

systemctl restart nginx php-fpm

在FirewallD上允许Nginx HTTP / HTTPS流量

如果firewallD正在运行,请执行以下命令以打开端口80和443。

firewall-cmd --add-port={80,443}/tcp --permanent
firewall-cmd --reload

配置SELinux

还有 Nextcloud提供SELinux配置 这至少将解决Nextcloud权限问题。执行以下命令并确保 替换Nextcloud安装路径 因此。

semanage fcontext -a -t httpd_sys_rw_content_t '/usr/share/nginx/html/nextcloud/data(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/usr/share/nginx/html/nextcloud/config(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/usr/share/nginx/html/nextcloud/apps(/.*)?'
semanage fcontext -a -t httpd_sys_rw_content_t '/usr/share/nginx/html/nextcloud/.htaccess'
semanage fcontext -a -t httpd_sys_rw_content_t '/usr/share/nginx/html/nextcloud/.user.ini'
semanage fcontext -a -t httpd_sys_rw_content_t '/usr/share/nginx/html/nextcloud/3rdparty/aws/aws-sdk-php/src/data/logs(/.*)?'

restorecon -Rv '/usr/share/nginx/html/nextcloud/'

在浏览器中完成Nextcloud设置

您可以从浏览器访问Nextcloud以完成安装和设置。由于您已配置了从HTTP到HTTPS的重定向,因此在使用URL访问Nextcloud时, nextcloud.kifarunix-demo.com (相应地替换),您将被重定向到HTTPS。跳过警告,因为您使用的是自签名SSL / TLS证书。

在Nextcloud用户界面中,输入Nextcloud管理员用户的名称和密码。

接下来,您需要定义后端数据库和连接详细信息。该演示使用MariaDB, 存储和数据库 下拉菜单,设置并选择Nextcloud数据目录 MySQL/MariaDB 如上所述,将连接详细信息设置为数据库。

在CentOS 8上使用Nginx和SSL / TLS证书安装Nextcloud

请点击 完成设定 完成设置。

设置完成后,将出现一个登录窗口。

在CentOS 8上使用Nginx和SSL / TLS证书安装Nextcloud

输入在安装过程中创建的管理员凭据,然后登录Nextcloud。

在CentOS 8上使用Nginx和SSL / TLS证书安装Nextcloud

到此结束了有关如何在CentOS 8上使用Nginx和SSL / TLS证书安装Nextcloud的教程。您可以更详细地探索这个奇妙的工具。

参考资料

Nextcloud最新管理手册

Sidebar