Centos7.9 脚本一键部署nextcloud,配置Nginx代理Https。

目录

一键安装nextcloud

[出现错误TypeError Cannot read properties of undefined (reading 'writeText')](#出现错误TypeError Cannot read properties of undefined (reading ‘writeText‘))

生成自签名SSL证书

编辑Nginx配置文件

启动Nginx


一键安装nextcloud

本脚本参考文章,本文较长建议先看完在操作!!!

全网最详细CentOS 7下部署最新版nextcloud教程_centos7 安装nextcloud-CSDN博客

Nginx服务配置篇·第三课:NextCloud部署安装-腾讯云开发者社区-腾讯云

此安装脚本不包含安装数据库,且默认授权**/var/www/html** 为nextcloud的数据目录

并且使用官方推荐的Apache httpd代理**/var/www/html 即代理**nextcloud(这种方式非https 在v26+版本中会出现无法自动复制分享链接的问题)

且安装后最好重启下 确认SELinux已经关闭

bash 复制代码
#!/bin/bash

# 确保脚本以root权限运行
if [ "$EUID" -ne 0 ]; then
  echo "请以root用户运行此脚本"
  exit
fi

# 检查并卸载旧版本的PHP
echo "检查并卸载旧版本的PHP..."
if php -v > /dev/null 2>&1; then
  yum remove -y php*
fi

# 安装EPEL仓库和Remi仓库
echo "安装EPEL仓库和Remi仓库..."
yum install -y epel-release
yum install -y https://rpms.remirepo.net/enterprise/remi-release-7.rpm

# 安装yum-utils,如果尚未安装
echo "检查并安装yum-utils..."
if ! command -v yum-config-manager &> /dev/null; then
  yum install -y yum-utils
fi

# 启用PHP 8.0仓库并安装PHP及其扩展
echo "启用PHP 8.0仓库并安装PHP..."
yum-config-manager --enable remi-php80
yum install -y php php-bcmath php-cli php-common php-devel php-fpm php-gd php-intl php-ldap php-mbstring php-mysqlnd php-odbc php-pdo php-pear php-pecl-xmlrpc php-pecl-zip php-process php-snmp php-soap php-sodium php-xml

# 启动PHP-FPM服务并设置开机自启
echo "启动PHP-FPM服务并设置开机自启..."
systemctl start php-fpm
systemctl enable php-fpm

# 安装Apache服务器
echo "安装Apache服务器..."
yum remove httpd*
yum install httpd
systemctl start httpd
systemctl enable httpd

# 开放CentOS 7的80端口并配置防火墙
echo "开放80端口并配置防火墙..."
systemctl stop firewalld
firewall-cmd --zone=public --add-port=80/tcp --permanent
firewall-cmd --reload

# 获取Nextcloud安装包并解压
echo "获取Nextcloud安装包并解压..."
wget https://download.nextcloud.com/server/release/latest.zip
yum install -y unzip
unzip latest.zip -d /var/www/html

# 将Nextcloud文件转移到Apache根目录并设置权限
echo "设置Nextcloud文件权限..."
chown -R apache:apache /var/www/html
chmod -R 755 /var/www/html

# 关闭SELinux
echo "关闭SELinux..."
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0

echo "Nextcloud安装准备完成,现在可以进行前端配置。"

# 注意:以上脚本不包含数据库安装和配置步骤,需要用户自行配置数据库。

上述安装完成后存在一个新的问题

无法正常复制分享链接

出现错误TypeError Cannot read properties of undefined (reading 'writeText')

原因是没有https 导致的,修复此问题的脚本为(依赖于上述步骤)

bash 复制代码
# 关闭httpd的代理 关闭自启动
systemctl stop httpd
systemctl disable httpd

# 安装nginx
yum -y install nginx
生成自签名SSL证书

首先,我们需要创建一个自签名证书。在你的主机上运行以下命令:

复制代码
sudo mkdir -p /etc/nginx/certs
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/nginx/certs/nextcloud.key -out /etc/nginx/certs/nextcloud.crt

这个随便填写一下即可。

然后检查这两个文件是否存在

/etc/nginx/certs/nextcloud.crt

/etc/nginx/certs/nextcloud.key

编辑Nginx配置文件

然后,我们需要编辑Nginx的配置文件。在 /etc/nginx/conf.d/​ 或者 /etc/nginx/sites-available/​ 目录下创建一个新的配置文件,例如 nextcloud.conf​

复制代码
nano /etc/nginx/conf.d/nextcloud.conf

内容如下(实例)

bash 复制代码
upstream php-handler {
    server 127.0.0.1:9000;
    #server unix:/var/run/php/php7.4-fpm.sock;
}

# Set the `immutable` cache control options only for assets with a cache busting `v` argument
map $arg_v $asset_immutable {
    "" "";
    default "immutable";
}


server {
    listen 80;
    listen [::]:80;
    server_name 192.168.252.74;

    # Prevent nginx HTTP Server Detection
    server_tokens off;

    # Enforce HTTPS
    return 301 https://$server_name$request_uri;
}

server {
    listen 443      ssl http2;
    listen [::]:443 ssl http2;
    server_name 192.168.252.74;

    # Path to the root of your installation
    root /var/www/html;

    # Use Mozilla's guidelines for SSL/TLS settings
    # https://mozilla.github.io/server-side-tls/ssl-config-generator/
    ssl_certificate /etc/nginx/certs/nextcloud.crt;  # 与上面的相同
    ssl_certificate_key /etc/nginx/certs/nextcloud.key;   # 与上面的相同

    # Prevent nginx HTTP Server Detection
    server_tokens off;

    # HSTS settings
    # 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 Strict-Transport-Security "max-age=15768000; includeSubDomains; preload" always;

    # set max upload size and increase upload timeout:
    client_max_body_size 8192M;
    client_body_timeout 300s;
    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/wasm 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;

    # Pagespeed is not supported by Nextcloud, so if your server is built
    # with the `ngx_pagespeed` module, uncomment this line to disable it.
    #pagespeed off;

    # The settings allows you to optimize the HTTP2 bandwitdth.
    # See https://blog.cloudflare.com/delivering-http-2-upload-speed-improvements/
    # for tunning hints
    client_body_buffer_size 512k;

    # HTTP response headers borrowed from Nextcloud `.htaccess`
    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;

    # Remove X-Powered-By, which is an information leak
    fastcgi_hide_header X-Powered-By;

    # Specify how to handle directories -- specifying `/index.php$request_uri`
    # here as the fallback means that Nginx always exhibits the desired behaviour
    # when a client requests a path that corresponds to a directory that exists
    # on the server. In particular, if that directory contains an index.php file,
    # that file is correctly served; if it doesn't, then the request is passed to
    # the front-end controller. This consistent behaviour means that we don't need
    # to specify custom rules for certain paths (e.g. images and other assets,
    # `/updater`, `/ocm-provider`, `/ocs-provider`), and thus
    # `try_files $uri $uri/ /index.php$request_uri`
    # always provides the desired behaviour.
    index index.php index.html /index.php$request_uri;

    # Rule borrowed from `.htaccess` to handle Microsoft DAV clients
    location = / {
        if ( $http_user_agent ~ ^DavClnt ) {
            return 302 /remote.php/webdav/$is_args$args;
        }
    }

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

    # Make a regex exception for `/.well-known` so that clients can still
    # access it despite the existence of the regex rule
    # `location ~ /(\.|autotest|...)` which would otherwise handle requests
    # for `/.well-known`.
    location ^~ /.well-known {
        # The rules in this block are an adaptation of the rules
        # in `.htaccess` that concern `/.well-known`.

        location = /.well-known/carddav { return 301 /remote.php/dav/; }
        location = /.well-known/caldav  { return 301 /remote.php/dav/; }

        location /.well-known/acme-challenge    { try_files $uri $uri/ =404; }
        location /.well-known/pki-validation    { try_files $uri $uri/ =404; }

        # Let Nextcloud's API for `/.well-known` URIs handle all other
        # requests by passing them to the front-end controller.
        return 301 /index.php$request_uri;
    }

    # Rules borrowed from `.htaccess` to hide certain paths from clients
    location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)(?:$|/)  { return 404; }
    location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console)                { return 404; }

    # Ensure this block, which passes PHP files to the PHP process, is above the blocks
    # which handle static assets (as seen below). If this block is not declared first,
    # then Nginx will encounter an infinite rewriting loop when it prepends `/index.php`
    # to the URI, resulting in a HTTP 500 error response.
    location ~ \.php(?:$|/) {
        # Required for legacy support
        rewrite ^/(?!index|remote|public|cron|core\/ajax\/update|status|ocs\/v[12]|updater\/.+|oc[ms]-provider\/.+|.+\/richdocumentscode\/proxy) /index.php$request_uri;

        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;         # Avoid sending the security headers twice
        fastcgi_param front_controller_active true;     # Enable pretty urls
        fastcgi_pass php-handler;

        fastcgi_intercept_errors on;
        fastcgi_request_buffering off;

        fastcgi_max_temp_file_size 0;
    }

    location ~ \.(?:css|js|svg|gif|png|jpg|ico|wasm|tflite|map)$ {
        try_files $uri /index.php$request_uri;
        add_header Cache-Control "public, max-age=15778463, $asset_immutable";
        access_log off;     # Optional: Don't log access to assets

        location ~ \.wasm$ {
            default_type application/wasm;
        }
    }

    location ~ \.woff2?$ {
        try_files $uri /index.php$request_uri;
        expires 7d;         # Cache-Control policy borrowed from `.htaccess`
        access_log off;     # Optional: Don't log access to assets
    }

    # Rule borrowed from `.htaccess`
    location /remote {
        return 301 /remote.php$request_uri;
    }

    location / {
        try_files $uri $uri/ /index.php$request_uri;
    }
}

其中需要更改的配置为

原文中的修改的配置为

server_name cloud.example.com; #更改为自己的域名

root /var/www/nextcloud; #更改为你的nextcloud目录

ssl_certificate /etc/ssl/nginx/cloud.example.com.crt; #SSL证书目录,一般放.pem根证书 ssl_certificate_key /etc/ssl/nginx/cloud.example.com.key; #SSL证书目录,.key私钥

笔者修改的是

  • /var/www/html 你的代理的nextcloud的目录 这里面包含了启动的网页

  • 192.168.252.74 更改为你的IP或者域名,笔者这里是直接使用ip代替域名

  • client_max_body_size 8192M; 此设置为你的web端可以上传的文件大小的上限,笔者设置的是8G

  • ssl_certificate /etc/nginx/certs/nextcloud.crt; # 你的秘钥文件

    ssl_certificate_key /etc/nginx/certs/nextcloud.key; # 你的秘钥文件

启动Nginx
bash 复制代码
nginx -t  # 检查配置是否正确
systemctl reload nginx  # 重新加载配置
systemctl start nginx
systemctl enable nginx  # 开机自启
systemctl status nginx.service  # 查看运行状态

最后使用https访问你的域名/ip 比如https://192.168.252.74/

相关推荐
高梦轩3 小时前
MySQL高可用
android·运维·数据库
hsjcjh7 小时前
Nodemailer使用教程:在Node.js中发送电子邮件
linux·运维·node.js
没有梦想的咸鱼185-1037-16637 小时前
北斗高精度数据解算:破解城市峡谷/长基线/无网区难题,从毫米级定位到自动化交付——(GAMIT/GLOBK底层核心解算技术方法)
运维·arcgis·数据分析·自动化
不怕犯错,就怕不做8 小时前
linux 如何查看自己的帐号密码及samba的帐号和密码
linux·运维·服务器
实在智能RPA8 小时前
Agent 在物流行业能实现哪些自动化?——深度拆解 AI Agent 驱动的智慧物流新范式
运维·人工智能·ai·自动化
张3238 小时前
Linux 启动过程
linux·运维
李彦亮老师(本人)8 小时前
Rocky Linux 9.x 新特性详解
linux·运维·服务器·centos·rocky linux
芳草萋萋鹦鹉洲哦10 小时前
【windows】nginx如何注册为开机自启的服务(WinSW实现)
运维·windows·nginx
猩猩—点灯11 小时前
部署远程利器-RustDesk
运维·服务器·网络