Hugo + 宝塔 Nginx 最小安全配置指南(2026 年版)

我们来一步步搭建一个高性能、轻量、完全静态的 Hugo 影视站点。
  1. 重装系统 推荐系统:Ubuntu 22.04 LTS 或 CentOS 7/8 Stream 不要保留旧数据!

  2. 更新系统 & 设置时区

# Ubuntu
# 自动回答“保留旧配置”或使用默认策略,不卡住
sudo apt update
sudo DEBIAN_FRONTEND=noninteractive apt upgrade -y -o Dpkg::Options::="--force-confdef" -o Dpkg::Options::="--force-confold"

# CentOS
sudo yum update -y
sudo timedatectl set-timezone Asia/Shanghai
  1. 创建非 root 用户(禁用 root 登录)这个使用宝塔的root+密匙也可以。新建用户配置麻烦。
adduser hugo   # 按提示设密码
usermod -aG sudo hugo  # Ubuntu
# usermod -aG wheel hugo  # CentOS

# 切换到新用户
su - hugo

然后记得安装BBR网络加速

wget --no-check-certificate -O /opt/bbr.sh https://github.com/teddysun/across/raw/master/bbr.sh
chmod 755 /opt/bbr.sh
/opt/bbr.sh
  1. 安装宝塔(仅 Nginx)这去官网自己去安装,安装完之后,记得禁用 root 登录。

把宝塔的登录安全设置都设置好,

    1. 安装 Node.js 20.x(用于运行采集脚本)
curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | sudo gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg

echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_20.x nodistro main" | sudo tee /etc/apt/sources.list.d/nodesource.list

sudo apt update

sudo apt install -y nodejs

node -v → 应输出 v20.x.x
npm -v → 应输出 10.x.x
  1. 安装 Hugo v0.154 Extended(Linux 64位)
wget https://github.com/gohugoio/hugo/releases/download/v0.154.0/hugo_extended_0.154.0_linux-amd64.tar.gz

tar -xzf hugo_extended_0.154.0_linux-amd64.tar.gz

sudo mv hugo /usr/local/bin/

rm hugo_extended_0.154.0_linux-amd64.tar.gz

hugo version → 应输出 hugo v0.154.0-... extended
  1. 然后创建hugo文件夹,建议在home目录下,根据自己创建你的站点文件夹,然后在宝塔目录指向就 可以了。
# 1. 创建项目目录(在 /home 下)
mkdir -p /home/hugo-drama

# 2. 设置所有权(虽然 root 默认就有权限,显式设置更规范)
chown root:root /home/hugo-drama

# 3. 进入目录
cd /home/hugo-drama

# 4. 上传你的 Hugo 项目(通过 SFTP 或 git clone)
#    包含:config.toml, content/, scripts/, static/ 等

# 5. 安装 Node.js 依赖(如果用了 pinyin 等)
npm install
  1. 把hugo源码目录上传到新建的目录,删除里面的.user.ini文件,需要执行以下命令删除
# 取消不可变属性
# 1. 进入站点目录
cd /www/wwwroot/你的站点目录

# 2. 查看文件属性(通常有i属性,不可更改)
lsattr .user.ini

# 3. 如果显示有'i'属性,需要先取消
chattr -i .user.ini

# 4. 删除文件
rm -f .user.ini

# 5. 可选:删除其他可能的锁定文件
chattr -i .htaccess 2>/dev/null

批量删除所有站点的.user.ini文件

# 查找并显示所有.user.ini文件
find /www/wwwroot -name ".user.ini" -type f

# 批量取消属性并删除
find /www/wwwroot -name ".user.ini" -exec chattr -i {} \;
find /www/wwwroot -name ".user.ini" -exec rm -f {} \;
  1. 安装 pypinyin 库以支持采集回来的自动转为拼音这是个python库,如果是node.js采集就需要安装其他依赖。
请立即运行以下命令安装全部依赖:
npm install axios fs-extra date-fns pinyin slugify

虽然 pinyin 已存在,但再装一次也没问题,npm 会自动去重。

验证成功:ls node_modules | grep -E 'axios|fs-extra|date-fns|slugify'

你当前的 package.json 是自动生成的,内容没问题。
后续如果想清理或重装依赖,可以:

# 删除依赖
rm -rf node_modules package-lock.json

# 重新安装
npm install axios fs-extra date-fns pinyin slugify

以下是python库pinyin的安装方法

pip3: command not found,先装 pip:

sudo apt update
sudo apt install -y python3-pip

pip3 install pypinyin

这时候会提示错误,需要安装使用虚拟环境(最推荐)

安装 python3-venv(如果还没装)

sudo apt update
sudo apt install -y python3-venv

cd /home/hugo-yutuq
python3 -m venv .pyenv

这会在 /home/hugo-yutuq/.pyenv/ 下创建独立 Python 环境
激活虚拟环境并安装 pypinyin

source .pyenv/bin/activate
pip install pypinyin

输出应类似:Successfully installed pypinyin-0.50.0 ...

验证安装:python -c "from pypinyin import lazy_pinyin; print(lazy_pinyin('末日逃生'))"

→ 应输出 ['mo', 'ri', 'tao', 'sheng']
  1. 安装JQ(用于解析 JSON)解决方案:立即安装 jq
# 查看 jq 版本
jq --version

# 在新、旧服务器都运行:
echo '{"list":[]}' | jq empty

如果新服务器报错而旧的不报 → 就是 jq 问题。

安装jq:

sudo apt update
sudo apt install -y jq

验证:jq --version  # 应输出 jq-1.6 或类似

再次运行采集脚本就正常了

./sync-from-api.sh --type 6 --limit 5

安装宝塔,配置环境

  • 安装完宝塔之后只需要安装nginx即可,其他不需要。

写个采集脚本执行定时任务

# 每天凌晨 2 点同步最近 7 天的新剧
0 2 * * * /home/ubuntu/movie-site/sync-from-api.sh --last-days 7

都按完记得按个插件 实现方案:用 pypinyin 自动生成拼音 slug

第一步:安装 pypinyin(只需一次)

pip3 install pypinyin

如果没有 pip3,先装 Python3:

sudo apt update && sudo apt install -y python3-pip

新服务器记得安装jq

你的采集脚本 sync-from-api.sh 里调用了 Python,所以运行脚本时必须保持虚拟环境激活,或者在脚本内部自动激活。

先取消不可变属性

chattr -i /home/hugo-yutuq/public/.user.ini

再删除

rm -f /home/hugo-yutuq/public/.user.ini

使用宝塔搭建nginx缓存CDN教程和配置

使用宝塔搭建nginx缓存CDN教程和配置,自建CDN加速网站,解决国内访问慢的问题。

首先购买香港VPS即可,省钱,安装宝塔面板就不在这里阐述了,都会,如果不会也就没必要自建网站或是CDN了。安装完宝塔之后别的都不需要安装就把nginx安装上,然后安装好nginx之后,我们就可以开始配置nginx缓存了。

配置CDN服务器的nginx的缓存

NGINX的缓存配置如下:首先是进到网站的设置里,点左边的配置文件,直接复制以下代码覆盖原代码即可,记得域名修改下你自己的。

server {
    listen 443 ssl ;
    http2 on;
    server_name cdn.maccmsrust.com;

    ssl_certificate    /www/server/panel/vhost/cert/cdn.maccmsrust.com/fullchain.pem;
    ssl_certificate_key /www/server/panel/vhost/cert/cdn.maccmsrust.com/privkey.pem;

    # ===== 1. 首页:单独缓存 1 小时 =====
    location = / {
        proxy_cache cdn_cache;
        proxy_cache_valid 200 1h;
        proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
        proxy_cache_lock on;

        proxy_pass https://www.jljjj.com/;
        proxy_set_header Host www.jljjj.com;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Accept-Encoding "";
        proxy_hide_header Vary;               # 👈 添加这行
        gzip_vary off;                        # 👈 强烈建议添加(防 gzip 自动加 Vary)
        add_header Vary "Accept-Encoding";    # 👈 添加这行
        add_header X-Cache-Status $upstream_cache_status;
    }

    # ===== 2. 静态资源目录:缓存 7 天 =====
    location ~ ^/(static|template|upload)/ {
        proxy_cache cdn_cache;
        proxy_cache_valid 200 302 7d;
        proxy_cache_valid 404 1m;
        proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
        proxy_cache_lock on;

        proxy_pass https://www.jljjj.com;
        proxy_set_header Host www.jljjj.com;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Accept-Encoding "";
        proxy_hide_header Vary;
        add_header Vary "Accept-Encoding";
        add_header X-Cache-Status $upstream_cache_status;
    }

    # ===== 3. 其他路径(动态页面):不缓存 =====
    location / {
        proxy_pass https://www.jljjj.com;
        proxy_set_header Host www.jljjj.com;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        # 注意:这里不加 proxy_cache,避免缓存动态内容
    }

    # 安全:禁止脚本执行
    location ~* \.(php|jsp|cgi|sh|pl|py|asp|aspx)$ {
        deny all;
    }

    gzip on;
    gzip_types text/plain text/css application/json application/javascript image/svg+xml;
}

下一步修改全局的nginx配置文件,进到左边的软件商店,点nginx的设置,在http标签里添加以下代码:

    # ===== CDN 缓存区定义(全局,只需写一次)=====
http
    {
        include       mime.types;
		#include luawaf.conf;
    # ===== CDN 缓存区定义(全局,只需写一次)就是这段代码=====
proxy_cache_path /www/wwwroot/cdn_cache levels=1:2 keys_zone=cdn_cache:50m max_size=20g inactive=1h use_temp_path=off;
    # ===== CDN 缓存区定义(全局,只需写一次)就是这段代码=====
		include proxy.conf;
        lua_package_path "/www/server/nginx/lib/lua/?.lua;;";

        default_type  application/octet-stream;

附赠一个图片的CDN缓存规则

server {
    listen 443 ssl ;
    http2 on;
    server_name img.maccmsrust.com;

    ssl_certificate    /www/server/panel/vhost/cert/img.maccmsrust.com/fullchain.pem;
    ssl_certificate_key /www/server/panel/vhost/cert/img.maccmsrust.com/privkey.pem;

    root /www/wwwroot/img.maccmsrust.com;  # ← 明确指定 root(即使主要用 proxy)
    # ==============================
    # 1. 字体文件:/jljjj/webfonts/ → 缓存 + CORS
    # ==============================
    location ~ ^/jljjj/webfonts/.+\.(woff2|woff|ttf|eot|otf)$ {
        # CORS 跨域头(必须)
        add_header Access-Control-Allow-Origin "https://www.jljjj.com" always;
        add_header Vary "Origin" always;  # 建议加上,避免 CDN 缓存污染

        # 启用 proxy_cache
        proxy_cache cdn_cache;
        proxy_cache_valid 200 30d;
        proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
        proxy_cache_lock on;

        # 代理到源站
        proxy_pass https://ywimg.basinhydrology.com;
        proxy_set_header Host ywimg.basinhydrology.com;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Accept-Encoding "";

        # 隐藏后端头,自定义缓存控制
        proxy_hide_header Vary;
        proxy_hide_header Cache-Control;
        gzip_vary off;

        add_header X-Cache-Status $upstream_cache_status;
        add_header Cache-Control "public, max-age=2592000";  # 30天
    }
    # ==============================
    # 1. 所有 /jljjj/upload/ 静态资源:走 proxy_cache
    # ==============================
    location ~ ^/jljjj/upload/.+\.(css|js|woff2|woff|ttf|svg|png|jpe?g|gif|webp|bmp|avif)$ {
        proxy_cache cdn_cache;
        proxy_cache_valid 200 30d;
        proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
        proxy_cache_lock on;

        proxy_pass https://ywimg.basinhydrology.com;
        proxy_set_header Host ywimg.basinhydrology.com;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Accept-Encoding "";

        proxy_hide_header Vary;
        proxy_hide_header Cache-Control;
        gzip_vary off;
        # === 新增 CORS 头 ===
    add_header Access-Control-Allow-Origin "https://www.jljjj.com" always;
    # 如果还有其他域名需要支持,可以用 map 或多个规则
        add_header Vary "Accept-Encoding";
        add_header X-Cache-Status $upstream_cache_status;
        add_header Cache-Control "public, max-age=2592000";
    }

    # ==============================
    # 2. 其他请求:透传(不缓存)
    # ==============================
    location / {
        proxy_pass https://ywimg.basinhydrology.com;
        proxy_set_header Host ywimg.basinhydrology.com;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Accept-Encoding "";
    }

    # ==============================
    # 3. 安全:禁止脚本执行
    # ==============================
    location ~* \.(php|jsp|cgi|sh|pl|py|asp|aspx)$ {
        deny all;
    }

    gzip on;
    gzip_types text/plain text/css application/json application/javascript image/svg+xml;
}

配置源站的nginx的缓存

    #ERROR-PAGE-START  错误页配置,可以注释、删除或修改
    error_page 404 /404.html;
    #error_page 502 /502.html;
    #ERROR-PAGE-END

    #PHP-INFO-START  PHP引用配置,可以注释或修改
    include enable-php-71.conf;
    #PHP-INFO-END

    #REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效
    include /www/server/panel/vhost/rewrite/www.jljjj.com.conf;
    #REWRITE-END

# ===== 自动将本地路径替换为 CDN 域名(无侵入式)=====
sub_filter_types text/html;
sub_filter_once off;

# ✅ 只替换静态资源(安全!)
sub_filter 'src="/upload/'              'src="https://cdn.maccmsrust.com/upload/';
sub_filter 'src="/template/'            'src="https://cdn.maccmsrust.com/template/';
sub_filter 'src="/static/'              'src="https://cdn.maccmsrust.com/static/';
sub_filter 'href="/template/'           'href="https://cdn.maccmsrust.com/template/';
sub_filter 'href="/static/'             'href="https://cdn.maccmsrust.com/static/';
sub_filter 'url(/upload/'               'url(https://cdn.maccmsrust.com/upload/';
sub_filter 'url(/template/'             'url(https://cdn.maccmsrust.com/template/';
sub_filter 'url(/static/'               'url(https://cdn.maccmsrust.com/static/';

# ❗ 关键防护:确保首页链接不被替换(防止跳转到 CDN 域名)
    sub_filter 'href="/"'                   'href="/"';
    sub_filter 'href="/index.html"'         'href="/index.html"';
# ===== 自动将本地路径替换为 CDN 域名(无侵入式)就是上边这段代码加到适当位置=====



    #禁止访问的文件或目录
    location ~ ^/(\.user.ini|\.htaccess|\.git|\.env|\.svn|\.project|LICENSE|README.md)
    {
        return 404;
    }

以上就是全部的配置,重启nginx即可。各个参数根据自己的实际情况修改吧。

宝塔安装Cloudreve pro 4.10.1最新教程(推荐)

使用宝塔面板在 Linux 服务器上安装 Cloudreve 最新版(Go 版本,通常称为 Cloudreve Pro) 的详细图文式教程。本教程适用于你已有一台装好 宝塔面板 的服务器(如 CentOS/Ubuntu 等),并希望部署最新版的 Cloudreve 自建网盘。

cloudreve是什么?

Cloudreve 是一款开源的云存储网盘系统,它支持多种存储方式,包括本地存储、阿里云 OSS、腾讯云 COS、七牛云 Kodo、又拍云 USS 等。Cloudreve 提供了丰富的功能,包括文件管理、用户管理、权限控制、分享链接、离线下载等,可以满足个人和团队的各种需求。

cloudreve安装

1. 安装宝塔面板

在 Linux 服务器上安装宝塔面板,宝塔面板是一个方便的 Linux 服务器管理工具,可以简化很多服务器管理任务。

2. 安装 Cloudreve

  • 使用宝塔建立个自己的网站,这个不需要多说了,都会的,不会的可以百度一下。

虽然 Cloudreve 默认使用 SQLite,但生产环境建议使用 MySQL 提高性能和稳定性。

  • 首先在宝塔里新建mysql数据库,然后进入到新建的网站目录,新建一个文件夹,名字叫data,然后进入data文件夹,新建一个文件,名字叫conf.ini,然后打开conf.ini文件,把下面的代码复制进去,然后保存。
[Database]
Type = mysql
User = cloudreve_user
Password = StrongPass123!
Host = 127.0.0.1
Name = cloudreve
TablePrefix = cd_
Port = 3306
Charset = utf8mb4

把数据库的用户名、密码、数据库名称、表前缀都改成你自己的。

  • 打开宝塔终端,使用命令:
cd /www/wwwroot/cloudreve
  • 下载 Cloudreve:登录 Pro 授权管理面板 获取主程序。版本选择 cloudreve_版本号_linux_arm64.tar.gz

  • 解压 Cloudreve:在宝塔文件夹里就执行解压了,或是者在终端执行命令:

unzip cloudreve.zip
  • 启动 Cloudreve:在终端执行命令:
# 赋予执行权限
chmod +x ./cloudreve
  • 对于 Pro 版本,在启动时需要将授权密钥通过命令行参数 –license-key 传入:
./cloudreve --license-key "你的授权密钥"
  • Cloudreve 是常驻服务,需后台运行。推荐使用 宝塔的「Supervisor」插件(进程守护):
宝塔软件商店 → 搜索 Supervisor 并安装
安装后进入 Supervisor 管理页面 → 添加进程
进程名称:cloudreve
启动命令:/www/wwwroot/cloudreve/cloudreve
启动目录:/www/wwwroot/cloudreve
用户:root(或 www-data,根据权限调整)
勾选「自动重启」
点击「启动」,状态变为「RUNNING」即成功

你可以在 Pro 授权管理面板 获取你的授权密钥。

Cloudreve 默认会监听 5212 端口记得在宝塔安全里放心,浏览器中访问 http://localhost:5212进入 Cloudreve。请注册一个账户,首个注册的账户会被设置为管理员。

以上就是使用宝塔面板在 Linux 服务器上安装 Cloudreve 最新版(Go 版本,通常称为 Cloudreve Pro) 的详细图文式教程。

宝塔安装maccms-rust版Docker 部署(推荐)

maccms-rust是一款基于rust语言开发的视频cms系统,具有高性能、高并发等特点。本文将介绍如何在宝塔面板上安装maccms-rust版Docker,并部署到服务器上。

maccms-rust是一款基于rust语言开发的视频cms系统,具有高性能、高并发等特点。本文将介绍如何在宝塔面板上安装maccms-rust版Docker,并部署到服务器上。

首先系统环境建议大家使用ubuntu22.4系统,安全稳定性,宝塔的兼容性都比较好。安装宝塔的命令去宝塔官方文档查看,这里就不多说了。

然后进入宝塔只需要安装Nginx环境即可,留作后续做反向代理使用。然后在宝塔内安装Docker即可,别的无需操作,按完以后使用以下命令:

# 创建项目文件夹
mkdir -p /home/maccms-rust

#进入文件夹,下载Dockerfile
cd /home/maccms-rust
wget https://raw.githubusercontent.com/TFTG-CLOUD/MacCMS-rust/refs/heads/main/Dockerfile
wget https://raw.githubusercontent.com/TFTG-CLOUD/MacCMS-rust/refs/heads/main/entrypoint.sh

以上2个文件暂时没更新,有问题,使用我本地上传的这2个文件到文件夹既可。

# 构建 Docker 镜像
docker build -t maccms-rust:latest .

#启动镜像
docker run -d \
  --name maccms-rust \
  --network host \
  -e ADMIN_USER=myuser \
  -e ADMIN_PASS=myuser \
  -v ./maccms_data:/var/lib/mongodb \
  -v ./maccms-rust:/app \
  -v ./maccms_logo:/var/log \
  --restart unless-stopped \
  maccms-rust:latest

以上代码可能会出现编码问题,请注意。如果出现请粘贴到QQ对话框里在复制一下即可。

#相关参数和文件夹说明
ADMIN_USER 设置后台用户名
ADMIN_PASS 设置后台密码,推荐复杂点
/var/lib/mongodb 数据库文件夹,可自行备份
/app/static 模板文件夹
/var/log 相关运行日志

# 查看容器状态
docker ps

# 查看日志
docker logs maccms-rust

# 停止容器
docker stop maccms-rust

# 启动容器
docker start maccms-rust

# 重启容器
docker restart maccms-rust

# 删除容器
docker rm maccms-rust

# 进入容器
docker exec -it maccms-rust /bin/bash

访问地址就是IP+8080,然后使用宝塔做域名的反向代理即可访问,该程序只有SSL加密域名可以访问。

使用Twonav建立自己的书签导航

搭建一个自己的简易书签,方便自己日常使用。简易网址导航网站。

前言

网址导航程序的选择也挺重要的,市面上有很多开源的导航程序,但是安全性和易用性都不尽如人意。Twonav是一个轻量级的PHP网址导航程序,界面简洁,功能实用,非常适合个人使用。


Twonav简介

Twonav是一个开源的PHP网址导航程序,具有以下特点:轻巧,数据存储在JSON文件中,无需数据库支持;界面简洁,易于使用;支持自定义分类和标签;支持搜索功能;支持多用户管理。


安装步骤

  1. 下载Twonav:从GitHub下载最新版本的Twonav。
  2. 上传文件:将下载的文件解压后,上传到你的服务器的Web根目录。
  3. 设置权限:访问您得域名自动进入安装页面,数据库可以选择SQLite,还是Mysql自己决定,个人用户简易选择Sqlite数据库,点击安装即可完成安装。
  4. 配置网站:安装完成后,登录后台,配置网站信息,如网站名称、描述等。
  5. 添加书签:在后台添加你常用的网站书签,可以按分类管理。

剩下的就没什么可说的了,这程序安装特简单,功能也挺实用,个人觉得挺不错的,推荐大家使用。参考链接肥猫书签导航

CheveretoV4的VPS脚本安装教程

Chevereto作为图库程序的领军代表,该程序功能强悍,作为图库,摄影,分享等用途得到广大好友的青睐,由于该程序功能强大导致V4版本在宝塔下安装环境极为困难还容易出错,所以官方给出Chevereto脚本安装,用于在任何 VPS(虚拟专用服务器)上安装 Chevereto 的 bash 脚本集合。

Chevereto作为图库程序的领军代表,该程序功能强悍,作为图库,摄影,分享等用途得到广大好友的青睐,由于该程序功能强大导致V4版本在宝塔下安装环境极为困难还容易出错,所以官方给出Chevereto脚本安装,用于在任何 VPS(虚拟专用服务器)上安装 Chevereto 的 bash 脚本集合。

安装环境

  • 必须以root用户登录,操作系统推荐ubuntu24.04

安装完会得到以下扩展

  • PHP
  • Apache HTTP Web server
  • MySQL Server
  • Composer
  • FFmpeg
  • Certbot
  • ExifTool
  • exiftran

然后运行以下脚本

注意: Ubuntu LTS 24.04。现在安装可能存在问题,建议使用debian12。

prepare.sh脚本用于在 Ubuntu 上安装系统堆栈。

重启VPS以确保应用所有待处理的内核更新:

systemctl reboot

请务必将其更改24.04为与您的 Ubuntu LTS 版本相匹配:

bash <(curl -s https://raw.githubusercontent.com/chevereto/vps/4.3/ubuntu/24.04/prepare.sh)

成功后将显示此消息:

[OK] Stack ready for Chevereto!

Debian系统

注:推荐使用 Debian 12。 注:Debian 使用 MariaDB。

prepare.sh脚本用于在 Debian 系统上安装系统堆栈。

重启VPS以确保应用所有待处理的内核更新:

systemctl reboot

请务必将其更改12为与您的 Debian 版本相匹配:

bash <(curl -s https://raw.githubusercontent.com/chevereto/vps/4.3/debian/12/prepare.sh)

成功后将显示此消息:

[OK] Stack ready for Chevereto!
  • 这些脚本common/可以在任何类Unix系统下运行。
  • 需要curl和unzip

安装全新脚本

new.sh脚本会下载 Chevereto 并配置 Apache HTTP Web 服务器、MySQL 和 CRON。其目的是为Chevereto 的安装做准备。

这是针对全新安装而设计的,它应该在准备步骤之后运行,因为它假定系统堆栈已准备就绪。

bash <(curl -s https://raw.githubusercontent.com/chevereto/vps/4.3/common/new.sh)

提示输入pro密匙,是专业版用户就进到chevereto.com注册账号,然后获取license,也就是授权码,按回车继续。

数据库位置服务器端:

  • 网站根目录位于/var/www/html

  • MySQL root 密码保存在/root/.mysql_password

  • 日志位于/var/log/apache2

重要的:

运行以下命令保护您的数据库:

mysql_secure_installation

你正在运行 mysql_secure_installation,这是 安全加固 MariaDB/MySQL 的标准操作,和 Chevereto 本身没有直接冲突,但需要注意:Enter current password for root (enter for none): ← 直接回车

回车以后会陆续提示以下内容

Switch to unix_socket authentication [Y/n] n

Change the root password? [Y/n]  n
然后会出现以下全部yes

Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y

这步结束如果访问IP会提示各种依赖没安装完,不要慌,继续下一步

CheveretoV4下载命令

get.sh脚本下载 Chevereto 并将其解压到当前工作文件夹。

cd放入网站项目文件夹(例如/var/www/html)

运行以下命令,中间也会提示输入授权码,粘贴完按回车即可,授权码粘贴完是不显示的。

bash <(curl -s https://raw.githubusercontent.com/chevereto/vps/4.3/common/get.sh)

https设置

运行以下命令,即可借助 certbot 获取自动续期的 HTTPS 证书。请注意替换example.com为目标域名。

certbot --apache -d example.com

第一个提示是让你输入信箱然后回车,第二个提示输入Y回车,然后在提示就选个N就可以了

如果有子域名www,也可以这样执行

certbot --apache -d example.com -d www.example.com

注意安装提示选择1-2的时候选择2,

选项 1: 000-default.conf - 这是默认的 HTTP 虚拟主机

选项 2: 000-default-le-ssl.conf | example.com | HTTPS | Enabled - 这是专门为你的域名 example.com 配置的 HTTPS 虚拟主机

后续工作

wipe-v3-leftovers.sh脚本会从当前工作文件夹中删除之前 Chevereto V3 安装留下的所有残留文件。

bash <(curl -s https://raw.githubusercontent.com/chevereto/vps/4.3/common/wipe-v3-leftovers.sh)

这时候就可以直接域名访问自动跳转到安装页面,但是这时候数据库的密码是不知道的,我们来设置下MYSQL数据库密码

设置数据库密码

  1. 生成一个高强度密码(12~16位)
生成一个安全的随机密码(不含特殊字符问题)
openssl rand -base64 18 | tr -d '/+=' | cut -c1-14
  1. 用 root 登录 MariaDB 并设置强密码,修改数据库密码
sudo mysql

然后依次执行

ALTER USER 'chevereto'@'localhost' IDENTIFIED BY '生产的密码';
FLUSH PRIVILEGES;
EXIT;
  1. 测试数据库密码是否可以链接
mysql -u chevereto -p -e "USE chevereto; SELECT 'OK';"

会提示输入密码,把你生成的密码粘贴进去回车就可以了。会出现OK字样。

现在就可以使用域名进行安装了,数据库密码就是你新生成的那个密码了。

以上就是CheveretoV4的VPS脚本安装教程,希望对您有所帮助。

mysql数据库的备份和还原

Chevereto 迁移 = 备份 3 个核心部分:数据库、文件和配置文件。

备份

  1. 备份数据库
# 导出 chevereto 数据库(替换 your_db_password)
mysqldump -u chevereto -p'your_db_password' chevereto > /root/chevereto_db_$(date +%Y%m%d).sql

如果密码含特殊字符,改用交互式:

mysqldump -u chevereto -p chevereto > /root/chevereto_db_$(date +%Y%m%d).sql
  1. 备份文件
# 打包 images 目录(包含所有图片)
tar -czf /root/chevereto_images_$(date +%Y%m%d).tar.gz -C /var/www/html images/

# (可选)备份自定义设置、logo 等
tar -czf /root/chevereto_content_$(date +%Y%m%d).tar.gz -C /var/www/html content/
  1. 备份配置文件
cp /var/www/html/app/env.php /root/chevereto_env_$(date +%Y%m%d).php

还原

  1. 还原数据库

前提:新服务器已装好 LAMP(Apache + PHP + MariaDB) Step 1: 创建数据库和用户(同旧服务器)

sudo mysql

CREATE DATABASE chevereto;
CREATE USER 'chevereto'@'localhost' IDENTIFIED BY 'your_new_strong_password';
GRANT ALL PRIVILEGES ON chevereto.* TO 'chevereto'@'localhost';
FLUSH PRIVILEGES;
EXIT;

Step 2: 导入数据库

mysql -u chevereto -p'your_new_strong_password' chevereto < /root/chevereto_db_20251223.sql

Step 3: 部署 Chevereto 程序(官方 ZIP)就是从新安装新程序。

Step 4: 恢复图片和内容

# 解压 images
sudo tar -xzf /root/chevereto_images_20251223.tar.gz -C /var/www/html/

# (可选)恢复 content
sudo tar -xzf /root/chevereto_content_20251223.tar.gz -C /var/www/html/

Step 5: 恢复或重建 env.php 方法 A(推荐):直接用备份的 env.php

sudo cp /root/chevereto_env_20251223.php /var/www/html/app/env.php
# 修改数据库密码(如果新密码不同)
sudo nano /var/www/html/app/env.php

Step 6: 修复权限

sudo chown -R www-data:www-data /var/www/html
sudo chmod -R 775 /var/www/html/images /var/www/html/content
sudo chmod 600 /var/www/html/app/env.php

Step 7: 配置 HTTPS(用 Certbot)

所有图片都在 用户账号、设置、统计全部保留 无需重新安装!

额外建议:定期自动备份(可选)

创建备份脚本 /root/backup-chevereto.sh:

#!/bin/bash
DATE=$(date +%Y%m%d)
mysqldump -u chevereto -p'your_pass' chevereto > /backups/chevereto_db_$DATE.sql
tar -czf /backups/chevereto_images_$DATE.tar.gz -C /var/www/html images/
find /backups -name "*.sql" -mtime +7 -delete  # 保留7天

加 cron 每天凌晨 2 点备份

crontab -e
# 添加:
0 2 * * * /root/backup-chevereto.sh

你现在就拥有了 完整的迁移能力!无论换 VPS、升级系统,还是灾难恢复,都能从容应对。

efvcdn出错恢复源码教程

efvcdn是EFV切片转码推出的免费CDN,用于加速视频播放。当efvcdn出错时,可以尝试使用以下方法恢复。

efvcdn是EFV切片转码推出的免费CDN,用于加速视频播放。当efvcdn出错时,可以尝试使用以下方法恢复。

根据情况删除CDN缓存

进到SSH,执行以下命令

rm -rf /home/cdn-node/public/tmp

mkdir -p /home/cdn-node/public/tmp

mongo efvcdn --eval "db.files.deleteMany({})"

依次执行以上代码,删除CDN缓存,并清空数据库。

恢复CDN源码

cd /home && wget file.querydata.org/cdn-node.tar.gz

这个地址是EFV切片转码提供的CDN源码下载地址,如果下载失败,可以尝试使用其他下载工具下载。

然后执行解压文件和重启服务的命令:

tar zxvf cdn-node.tar.gz
cd /home/cdn-node
pm2 start ecosystem.config.js --env production

然后设置开机自启:

pm2 save

pm2 startup

重启服务器

reboot

以上方法可以尝试解决efvcdn出错的问题,如果问题仍然存在,可以尝试联系EFV切片转码客服寻求帮助。

使用谷歌邮箱作为发送端设置

现在,你可以使用下面的通用SMTP服务器信息和刚刚获取的“应用专用密码”进行配置了。

在目标应用或客户端中配置SMTP服务器信息。

  • 现在,你可以使用下面的通用SMTP服务器信息和刚刚获取的“应用专用密码”进行配置了。
配置项
SMTP服务器地址smtp.gmail.com
端口号推荐587
端口号备用465
加密方式STARTTLS(推荐)或SSL/TLS
认证方式普通密码认证
用户名你的完整Gmail邮箱地址
密码你刚刚生成的“应用专用密码”

以上就是使用谷歌邮箱作为发送端的完整设置步骤。完成这些配置后,你的应用或客户端应该能够通过Gmail的SMTP服务器发送电子邮件了。如果遇到任何问题,请确保检查防火墙设置以及Gmail账户的安全设置。祝你使用愉快!

什么是Google的应用专用密码?如何设置?

Google的应用专用密码是一个16 位数的密码,可授权应用或设备访问您的 Google 帐户。如果您开启了两步验证,并且在尝试访问自己的 Google 帐户时看到了“密码不正确”的消息,那么您有可能需要使用应用专用密码而非正常的google帐户的密码。
  • Google的应用专用密码是一个16 位数的密码,可授权应用或设备访问您的 Google 帐户。如果您开启了两步验证,并且在尝试访问自己的 Google 帐户时看到了“密码不正确”的消息,那么您有可能需要使用应用专用密码而非正常的google帐户的密码。

  • 当您的google帐户开启了两步验证后,通常会通过验证码的方式完成两步验证。但是,由于部分应用(如Thunderbird 、Outlook和部分网页版的应用)并不支持这种验证码。因此,在首次使用此类应用或设备登录 Google 帐户时,您将需要通过生成并输入应用专用密码来向此类应用授权。正常情况下,您不必记住这个密码,因为每个应用只需输入一次应用专用密码。

您可以通过以下方法设置专用密码:

1、访问应用专用密码页面(https://security.google.com/settings/security/apppasswords),此时您可能需要登录自己的 Google 帐户。

2、在应用专用密码页面中点击选择设备,然后选择您要使用的设备。如:您在使用139邮箱添加Gmail为其他邮箱时选择设备时,就需选择的是Windows计算机。

3、在应用专用密码页面中点击“选择应用”,然后选择您要使用的应用。如:您要使用139邮箱收取Gmail邮箱的邮件,选择应用时,就需选择的是邮件。

4、设备和应用选择完毕,点击“生成”,会提示正在生成新的应用专用密码,生成成功,展示生成的专用密码.

maccms10苹果CMS添加播放历史详细教程

maccms10苹果CMS添加播放历史详细教程

maccms10苹果CMS添加播放历史详细教程,也算是全网最详细的,也是最有效的教程了。

使用maccms10苹果CMS原生内置系统添加

  1. 确保顶部加载JS文件里包含如果没有home.js文件,请自行添加。

  2. 确保还有3个依赖的JS,文件名 ewave-plugins.js,ewave-global.js,ewave-common.js,如果没有请自行添加。本程序就包含所需的所有JS和CSS文件,请自行下载。

  3. 在文件底部添加以下代码作为加载home.js对应的样式。

<span class="mac_hits hide" data-mid="{$maccms.mid}" data-id="{$obj.vod_id}" data-type="insert"></span> <span class="mac_ulog_set hide" data-type="4" data-mid="{$maccms.mid}" data-id="{$obj.vod_id}" data-sid="" data-nid=""></span> <span class="ewave-history-set hide" data-id="{$obj.vod_id}" data-name="{$obj.vod_name}" data-link="{$obj|mac_url_vod_detail}" data-playname="{$obj['vod_play_list'][$param['sid']]['urls'][$param['nid']]['name']}" data-link=""></span>
  1. 在导航需要添加观看历史的位置添加以下代码
 <div class="item js-history ewave-history"></div>
     <!--
      {if $GLOBALS.config.user.status==1}
      <div class="item js-user ewave-user"></div>
      {/if}
      -->

总结:以上步骤完成后,刷新页面,即可看到播放历史记录了。这个播放历史说简单也简单,说难也挺难的,因为涉及到很多JS和CSS的修改,所以需要一定的前端知识,如果你是小白,建议还是不要尝试了,直接使用本程序吧。

cloudflare + B2设置nginx反向代理

使用B2源,cloudflare作为CDN时候,nginx配置文件需要修改

使用B2源,cloudflare作为CDN时候,nginx配置文件需要修改,修改如下:

注意:反向代理都在这里设置了,不需要单独在宝塔里加反向代理了。

nginx配置文件

server
{
    listen 80;
    listen 443 ssl;
    listen 443 quic;
    http2 on;
    server_name dd.beiwopan.com;
    index index.php index.html index.htm default.php default.htm default.html;
    #root /www/wwwroot/dd.beiwopan.com;
    #CERT-APPLY-CHECK--START
    # 用于SSL证书申请时的文件验证相关配置 -- 请勿删除
    include /www/server/panel/vhost/nginx/well-known/dd.beiwopan.com.conf;
    #CERT-APPLY-CHECK--END
    include /www/server/panel/vhost/nginx/extension/dd.beiwopan.com/*.conf;
    
    # 👇 把你的代理代码放在这里
location / {
    # 1. 先设置代理目标和请求头
    proxy_pass https://cloudflare-b2.beiwopan123.workers.dev;
    proxy_set_header Host cloudflare-b2.beiwopan123.workers.dev;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header REMOTE-HOST $remote_addr;
    proxy_http_version 1.1;
    proxy_ssl_server_name on;
    proxy_ssl_name cloudflare-b2.beiwopan123.workers.dev;
    proxy_ssl_verify off;

    # 2. 关闭 Nginx 自动生成缓存头(关键!)
    expires off;

    # 3. 👇 隐藏所有不希望透传的上游响应头(包括 B2 元数据)
    proxy_hide_header Cache-Control;
    proxy_hide_header Expires;
    proxy_hide_header Pragma;
    proxy_hide_header Set-Cookie;
    proxy_hide_header X-Cache;

    # 隐藏 Backblaze B2 的私有元信息(可选但推荐)
    proxy_hide_header x-bz-upload-timestamp;
    proxy_hide_header x-bz-content-sha1;
    proxy_hide_header x-bz-file-id;
    proxy_hide_header x-bz-file-name;
    proxy_hide_header x-bz-info-src_last_modified_millis;

    # 4. 添加你自己的标准响应头
    add_header Cache-Control "public, max-age=2592000" always;
    add_header Expires "30d" always;
    add_header X-Content-Type-Options nosniff always;
}
    
    
    #SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
    #error_page 404/404.html;
    #HTTP_TO_HTTPS_START
    set $isRedcert 1;
    if ($server_port != 443) {
        set $isRedcert 2;
    }
    if ( $uri ~ /\.well-known/ ) {
        set $isRedcert 1;
    }
    if ($isRedcert != 1) {
        rewrite ^(/.*)$ https://$host$1 permanent;
    }
    #HTTP_TO_HTTPS_END
    ssl_certificate    /www/server/panel/vhost/cert/dd.beiwopan.com/fullchain.pem;
    ssl_certificate_key    /www/server/panel/vhost/cert/dd.beiwopan.com/privkey.pem;
    ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
    ssl_ciphers EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
    ssl_prefer_server_ciphers on;
    ssl_session_tickets on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    add_header Strict-Transport-Security "max-age=31536000";
    add_header Alt-Svc 'quic=":443"; h3=":443"; h3-29=":443"; h3-27=":443";h3-25=":443"; h3-T050=":443"; h3-Q050=":443";h3-Q049=":443";h3-Q048=":443"; h3-Q046=":443"; h3-Q043=":443"';
    error_page 497  https://$host$request_uri;

    #SSL-END

    #ERROR-PAGE-START  错误页配置,可以注释、删除或修改
    error_page 404 /404.html;
    #error_page 502 /502.html;
    #ERROR-PAGE-END

    #PHP-INFO-START  PHP引用配置,可以注释或修改
    #清理缓存规则

    location ~ /purge(/.*) {
        proxy_cache_purge cache_one $host$1$is_args$args;
        #access_log  /www/wwwlogs/dd.beiwopan.com_purge_cache.log;
    }
	#引用反向代理规则,注释后配置的反向代理将无效
	include /www/server/panel/vhost/nginx/proxy/dd.beiwopan.com/*.conf;

	#include enable-php-00.conf;
    #PHP-INFO-END

    #REWRITE-START URL重写规则引用,修改后将导致面板设置的伪静态规则失效
    include /www/server/panel/vhost/rewrite/dd.beiwopan.com.conf;
    #REWRITE-END

    #禁止访问的文件或目录
    location ~ ^/(\.user.ini|\.htaccess|\.git|\.env|\.svn|\.project|LICENSE|README.md)
    {
        return 404;
    }

    #一键申请SSL证书验证目录相关设置
    location ~ \.well-known{
        allow all;
    }

    #禁止在证书验证目录放入敏感文件
    if ( $uri ~ "^/\.well-known/.*\.(php|jsp|py|js|css|lua|ts|go|zip|tar\.gz|rar|7z|sql|bak)$" ) {
        return 403;
    }

    

    
    access_log  /dev/null;
    error_log  /www/wwwlogs/dd.beiwopan.com.error.log;
}

这是整个宝塔的配置文件内容,根据自己的修改。

cloudflare配置CDN

这个设置不好贴出来,详情看账户的CDN规则设置把。