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

目录

 一键安装nextcloud

出现错误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已经关闭

#!/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 导致的,修复此问题的脚本为(依赖于上述步骤)

# 关闭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

内容如下(实例)

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
nginx -t  # 检查配置是否正确
systemctl reload nginx  # 重新加载配置
systemctl start nginx
systemctl enable nginx  # 开机自启
systemctl status nginx.service  # 查看运行状态

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

<think>好的,我现在需要帮助用户解决在CentOS 7.9上非Docker部署DeepSeek和Dify的问题。首先,我得确认用户的需求是什么。用户可能希望了解如何在CentOS系统上手动部署这两个服务,而不使用Docker,可能是因为他们对Docker不熟悉,或者有特定的环境要求。 接下来,我需要回忆一下DeepSeek和Dify的基本信息。DeepSeek可能是一个大语言模型,而Dify可能是一个用于构建和部署AI应用的开源平台。不过,用户提到的具体版本或项目可能需要进一步确认,因为可能存在拼写错误或名称混淆的情况。假设DeepSeek指的是深度求索公司的某个模型,而Dify是Dify.ai这个平台。 接下来,我需要考虑非Docker部署的一般步骤。通常,这包括安装依赖项、下载源代码、配置环境变量、设置数据库、安装Python依赖、配置反向代理(如Nginx)、设置守护进程(如systemd)以及SSL证书等。但具体步骤可能因项目而异。 首先,系统依赖方面,CentOS 7.9可能需要更新EPEL仓库,安装Python 3.7+、Git、Nginx、Redis、PostgreSQL等。需要注意的是CentOS 7默认的Python版本可能较低,需要升级到Python 3.7或更高版本,可能需要通过SCL或源码编译安装。 然后是获取DeepSeek和Dify的源代码,用户可能需要从GitHub克隆仓库,但需要确认仓库的正确地址。例如,Dify的官方仓库是https://github.com/langgenius/dify,而DeepSeek的模型可能需要从HuggingFace或官方渠道下载。 接下来是Python虚拟环境的创建和依赖安装。使用venv模块创建虚拟环境,然后通过pip安装requirements.txt中的依赖。需要确保所有依赖正确安装,特别是PyTorch等可能涉及CUDA的库,如果用户使用GPU的话。 配置环境变量是关键步骤,Dify可能需要设置数据库连接、Redis、API密钥等。用户需要创建.env文件,并正确填写数据库信息、密钥等。这里需要确保数据库(PostgreSQL)和Redis服务已正确安装并运行,可能需要初始化数据库,运行迁移脚本。 Web服务部分,Dify可能使用Gunicorn作为应用服务器,需要配置Gunicorn服务文件,并通过systemd管理。同时,配置Nginx作为反向代理,处理静态文件和SSL终止(如果需要HTTPS)。需要编写Nginx配置文件,设置代理到Gunicorn的端口,并重启服务。 DeepSeek模型的集成可能需要将模型文件放置在特定目录,并在Dify的配置中指定模型路径。如果DeepSeek需要单独的API服务,可能需要运行额外的服务,并配置Dify与之通信。这部分可能需要查阅DeepSeek的部署文档,确保模型加载正确,并处理相关依赖如transformers库。 可能遇到的问题包括Python版本兼容性、依赖冲突、数据库连接错误、权限问题、端口冲突等。例如,CentOS 7默认的Firewalld可能需要配置开放相关端口,如80、443、3000等。另外,SELinux可能会阻止某些操作,需要调整策略或禁用。 用户还可能遇到模型加载的问题,比如显存不足,或者缺少特定的CUDA驱动。需要确保GPU驱动、CUDA工具包和PyTorch版本兼容。如果使用CPU模式,可能需要调整模型加载参数以减少内存占用。 测试部署是否成功,可以通过访问Nginx配置的域名或IP,检查Dify的Web界面是否正常,并尝试创建应用、选择DeepSeek模型进行推理测试。查看日志文件(Gunicorn、Nginx的error.log,以及应用的日志)有助于排查问题。 最后,安全性方面,需要提醒用户配置防火墙、使用非root用户运行服务、定期更新系统和软件包、备份重要数据,以及使用HTTPS加密传输。 总结来说,步骤大致包括:系统准备、安装依赖、获取代码、配置环境、数据库设置、启动服务、反向代理配置、模型集成、测试和优化。需要分步骤详细说明,并指出可能遇到的常见问题及解决方法。</think>以下是在CentOS 7.9系统上非Docker部署DeepSeek模型与Dify平台的详细步骤指南: --- ### 一、系统环境准备 #### 1. 更新系统及安装基础工具 ```bash sudo yum update -y sudo yum install -y epel-release git curl wget gcc make openssl-devel bzip2-devel libffi-devel ``` #### 2. 安装Python 3.8+ ```bash # 通过SCL安装 sudo yum install -y centos-release-scl sudo yum install -y rh-python38 scl enable rh-python38 bash echo "source scl_source enable rh-python38" >> ~/.bashrc ``` #### 3. 安装数据库与中间件 ```bash # PostgreSQL sudo yum install -y postgresql-server postgresql-contrib sudo postgresql-setup initdb sudo systemctl start postgresql sudo systemctl enable postgresql # Redis sudo yum install -y redis sudo systemctl start redis sudo systemctl enable redis ``` --- ### 二、部署Dify平台 #### 1. 克隆代码仓库 ```bash git clone https://github.com/langgenius/dify.git cd dify ``` #### 2. 创建Python虚拟环境 ```bash python -m venv venv source venv/bin/activate ``` #### 3. 安装Python依赖 ```bash pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple ``` #### 4. 配置环境变量 创建 `.env` 文件: ```bash cp .env.example .env vim .env ``` 关键配置项: ```ini DB_HOST=localhost DB_PORT=5432 DB_NAME=dify DB_USER=postgres DB_PASSWORD=your_password REDIS_HOST=localhost REDIS_PORT=6379 API_KEY=your_api_key_here ``` #### 5. 初始化数据库 ```bash # 创建数据库用户 sudo -u postgres psql -c "CREATE DATABASE dify;" sudo -u postgres psql -c "ALTER USER postgres WITH PASSWORD &#39;your_password&#39;;" # 执行数据库迁移 flask db upgrade ``` #### 6. 启动服务 ```bash # 启动Gunicorn gunicorn -w 4 -k gevent -b 0.0.0.0:5000 wsgi:app # 启动异步Worker celery -A app.celery worker -l info ``` --- ### 三、集成DeepSeek模型 #### 1. 下载模型文件 从HuggingFace或官方渠道获取模型: ```bash git lfs install git clone https://huggingface.co/deepseek-ai/deepseek-llm-7b-base ``` #### 2. 配置模型路径 在Dify的 `.env` 文件中添加: ```ini MODEL_PATH=/path/to/deepseek-llm-7b-base ``` #### 3. 安装推理依赖 ```bash pip install transformers torch -i https://pypi.tuna.tsinghua.edu.cn/simple ``` --- ### 四、配置Nginx反向代理 #### 1. 安装Nginx ```bash sudo yum install -y nginx sudo systemctl start nginx sudo systemctl enable nginx ``` #### 2. 配置站点文件 创建 `/etc/nginx/conf.d/dify.conf`: ```nginx server { listen 80; server_name your_domain.com; location / { proxy_pass http://127.0.0.1:5000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } ``` #### 3. 重启Nginx ```bash sudo nginx -t sudo systemctl reload nginx ``` --- ### 五、系统服务配置 #### 1. 创建Systemd服务文件 `/etc/systemd/system/dify.service`: ```ini [Unit] Description=Dify Web Service After=network.target [Service] User=your_username WorkingDirectory=/path/to/dify ExecStart=/path/to/dify/venv/bin/gunicorn -w 4 -k gevent -b 0.0.0.0:5000 wsgi:app Restart=always [Install] WantedBy=multi-user.target ``` #### 2. 启动服务 ```bash sudo systemctl daemon-reload sudo systemctl start dify sudo systemctl enable dify ``` --- ### 六、验证部署 1. 访问 `http://your_domain.com` 查看Dify界面 2. 创建新应用并选择DeepSeek模型 3. 执行测试推理任务 --- ### 常见问题排查 1. **数据库连接失败**: - 检查PostgreSQL的`pg_hba.conf`是否允许本地连接 - 执行`sudo -u postgres psql -c "\l"`验证数据库状态 2. **模型加载错误**: - 确认CUDA版本与PyTorch匹配:`nvidia-smi` + `pip show torch` - 使用`fp16`模式减少显存占用 3. **端口冲突**: ```bash netstat -tulnp | grep :5000 ``` --- ### 安全建议 1. 使用非root用户运行服务 2. 配置防火墙: ```bash sudo firewall-cmd --permanent --add-service=http sudo firewall-cmd --reload ``` 3. 使用Let&#39;s Encrypt配置HTTPS 4. 定期备份`/var/lib/pgsql/data`和Dify工作目录 如需更详细的配置说明,可参考各组件官方文档: - Dify:https://docs.dify.ai - DeepSeek:https://github.com/deepseek-ai
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Franciz小测测

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值