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/

相关推荐
longze_724 分钟前
国产信创实践(国能磐石服务器操作系统CEOS +东方通TongHttpServer)
linux·服务器·nginx·ubuntu·centos·操作系统·openeuler
幽弥千月1 小时前
【Docker】Dockerfile ENV环境变量传递问题
运维·docker·容器
WhoisXMLAPI2 小时前
新的 WhoisXML API 白皮书重点分析了主要 gTLD 和 ccTLD 注册趋势
运维·服务器·网络·数据库·网络协议·安全
梦游钓鱼2 小时前
Ubuntu中批量重命名,rename
linux·运维·ubuntu
Victor随笔集3 小时前
Linux常用指令
linux·运维·服务器
gis分享者3 小时前
linux nginx 安装后,发现SSL模块未安装,如何处理?
linux·nginx·ssl
浪浪山小白兔4 小时前
使用Supervisor在Ubuntu中实现后台自启动服务
运维·服务器·ubuntu
Juicedata4 小时前
多云架构,JuiceFS 如何实现一致性与低延迟的数据分发
运维·云原生·架构
大熊程序猿4 小时前
drawDB docker部属
运维·docker·容器
Flaky55915 小时前
基于 docker 搭建 rails 开发环境(两种方法)
运维·docker·容器·php·php开发·servbay·php本地开发环境