centos7 安装 nextcloud13 搭建私人云盘(tengine2.2.2+php7.1.20)

本贴最后更新于 2024 天前,其中的信息可能已经事过境迁

在这篇文章中,我将向你展示如何在 CentOS 7 服务器中安装和配置最新版本的 Nextcloud 13。我会通过 Tengine/2.2.2 (nginx/1.8.1) 和 PHP7-FPM(PHP 7.1.20 ) 来运行 Nextcloud,同时使用 MariaDB 做为数据库系统。

一、环境说明

一个带有 18T 硬盘的本地服务器
CentOS 7.4
SELinux 关闭

二.安装 tengine

CentOS 7.4 编译安装 Tengine

三、安装 PHP7 和 PHP7-FPM

添加 PHP7-FPM webtatic 仓库,并安装 PHP7 以及功能相关的包。

rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm 
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

yum install php71w php71w-mysql php71w-odbc php71w-common php71w-embedded php71w-pgsql php71w-xml  php71w-ldap php71w-fpm php71w-gd php71w-pdo php71w-devel php71w-mbstring php71w-mcrypt php71w-cli php71w-json php71w-imap php71w-bcmath mod_php71w php71w-pear php71w-pecl-memcached php71w-pecl-redis php71w-opcache

验证 php7.1.x 和扩展是否安装成功

验证 php 是否安装成功

php -v

验证对应的扩展是否安装成功

php -m

设置 php-fpm 并检测 php-fpm 的运行状态

启动 php-fpm

service php-fpm start

检查启动是否成功

service php-fpm status

设置开机自启动

systemctl enable php-fpm.service

检查开机自启动是否设置成功

systemctl list-dependencies | grep php-fpm
ps -ef | grep php-fpm

四、配置 PHP-FPM

我们需要配置 php-fpm 与 Nginx 协同运行。php7-fpm 将使用 nginx 用户来运行,并监听 9000 端口。
使用 vim 编辑默认的 php7-fpm 配置文件。

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

修改以下不连续的记录点,修改用户,指定端口,启用环境变量。

#Line 8-10
user = www
group = www
#Line 22
listen = 127.0.0.1:9000
#Line 366-370
env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp

保存文件并退出 vim 编辑器.
需要在 /var/lib/ 目录下创建一个新的文件夹 session,并将其拥有者变更为 www 用户。最后启动 php-fpm 和 Nginx,并且将它们设置为随开机启动的服务。

mkdir -p /var/lib/php/session
chown www:www -R /var/lib/php/session/

sudo systemctl start php-fpm
sudo systemctl start nginx

sudo systemctl enable php-fpm
sudo systemctl enable nginx

五、安装 MariaDB

这里使用 MariaDB 作为 Nextcloud 的数据库。可以直接使用 yum 命令从 CentOS 默认远程仓库中安装 mariadb-server 包。

yum -y install mariadb mariadb-server

systemctl start mariadb
systemctl enable mariadb

CentOS7 下使用 yum 安装 MariaDB

六、安装 SSL 证书

我们可以自己生成 SSL 证书,也可以申请专业的 SSL 证书。
自签名的 SSL 证书在使用的时候会报错,建议使用有资质的 SSL 证书。

Centos7 配置 nginx 使用 let's Encrypt 证书

七、下载和初步安装 Nextcloud

找到正确的官方下载库:https://download.nextcloud.com/server/releases/

image

安装必要的下载解压工具

yum -y install wget unzip

先进入 /tmp 目录,然后使用 wget 从官网下载最新的 Nextcloud 13。

cd /tmp
wget https://download.nextcloud.com/server/releases/nextcloud-13.0.6.zip

解压 Nextcloud,并将其移动到 /var/www 目录。

mkdir /var/www/
unzip nextcloud-13.0.6.zip
mv nextcloud/ /var/www/

为 NextCloud 创建文件储存文件夹,并授予一定的权限。

cd /var/www
mkdir -p nextcloud/data
chown nginx:nginx -R nextcloud/

手动指定文件储存位置
若想修改文件储存的位置(比如你另外购买了一块云硬盘)
这时则需要编辑 nextcloud 的配置文件,修改 datadirectory 指向的文件夹。

vim /var/www/nextcloud/config/config.sample.php

将'datadirectory' => '/var/www/owncloud_data/'
修改为'datadirectory' => '你的路径'

八、配置 Nginx 转发规则

我们需要在 Nginx 的配置文件下写入有关 nextcloud 的转发协议。
我们可以直接新建一个配置文件并写入信息,当 Nginx 重新加载后就能使用配置文件了。

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

根据个人需要修改并写入配置:

server_name 需要改为域名
ssl_certificate 和 ssl_certificate_key 需要改为 SSL 证书对应的文件
root 需要改为 nextcloud 文件夹所在路径
配置数据来自 nextcloud 官方文档

upstream php-handler {
    server 127.0.0.1:9000;
    #server unix:/var/run/php5-fpm.sock;
}

server {
    listen 80;
    listen [::]:80;
    server_name cloud.example.com;
    # enforce https
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name cloud.example.com;

    ssl_certificate /etc/ssl/nginx/cloud.example.com.crt;
    ssl_certificate_key /etc/ssl/nginx/cloud.example.com.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;";
    #
    # WARNING: Only add the preload option once you read about
    # the consequences in https://hstspreload.org/. This option
    # will add the domain to a hardcoded list that is shipped
    # in all major browsers and getting removed from this list
    # could take several months.
    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;

    # Path to the root of your installation
    root /var/www/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;
    }

    # 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;

    # Uncomment if your server is build with the ngx_pagespeed module
    # This module is currently not supported.
    #pagespeed off;

    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/.+)\.php(?:$|/) {
        fastcgi_split_path_info ^(.+\.php)(/.*)$;
        include fastcgi_params;
        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|woff|svg|gif)$ {
        try_files $uri /index.php$uri$is_args$args;
        add_header Cache-Control "public, max-age=15778463";
        # 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;";
        #
        # WARNING: Only add the preload option once you read about
        # the consequences in https://hstspreload.org/. This option
        # will add the domain to a hardcoded list that is shipped
        # in all major browsers and getting removed from this list
        # could take several months.
        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 ~ \.(?:png|html|ttf|ico|jpg|jpeg)$ {
        try_files $uri /index.php$uri$is_args$args;
        # Optional: Don't log access to other assets
        access_log off;
    }
}

检验一下配置的正确性之后就能用域名访问网盘了

nginx -t
systemctl restart nginx

常见错误

有可能你在访问页面时可以正常显示但是提示你“内部服务器错误”,若出现这个情况有两个可能:

Nginx 对 nextcloud 文件夹的访问权限不够,使用如下操作重新给予权限

cd /var/www
mkdir -p nextcloud/data
chown nginx:nginx -R nextcloud/

SELinux 未关闭
永久关闭 SELinux 需要编辑文件/etc/selinux/config,将 SELINUX=enforcing 修改为 SELINUX=disabled,重启后生效
临时关闭 SELinux 只需要在 shell 中输入 setenforce 0 就可以临时关闭 SELinux。

  • CentOS

    CentOS(Community Enterprise Operating System)是 Linux 发行版之一,它是来自于 Red Hat Enterprise Linux 依照开放源代码规定释出的源代码所编译而成。由于出自同样的源代码,因此有些要求高度稳定的服务器以 CentOS 替代商业版的 Red Hat Enterprise Linux 使用。两者的不同在于 CentOS 并不包含封闭源代码软件。

    238 引用 • 224 回帖 • 1 关注
  • 云计算
    77 引用 • 91 回帖 • 1 关注
  • PHP

    PHP(Hypertext Preprocessor)是一种开源脚本语言。语法吸收了 C 语言、 Java 和 Perl 的特点,主要适用于 Web 开发领域,据说是世界上最好的编程语言。

    164 引用 • 406 回帖 • 523 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...