建站心得
Hugo + 宝塔 Nginx 最小安全配置指南(2026 年版)
重装系统 推荐系统:Ubuntu 22.04 LTS 或 CentOS 7/8 Stream 不要保留旧数据!
更新系统 & 设置时区
# 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
- 创建非 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
- 安装宝塔(仅 Nginx)这去官网自己去安装,安装完之后,记得禁用 root 登录。
把宝塔的登录安全设置都设置好,
- 安装 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
- 安装 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
- 然后创建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
- 把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 {} \;
- 安装 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']
- 安装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教程和配置
首先购买香港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最新教程(推荐)
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,并部署到服务器上。
首先系统环境建议大家使用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文件中,无需数据库支持;界面简洁,易于使用;支持自定义分类和标签;支持搜索功能;支持多用户管理。
安装步骤
- 下载Twonav:从GitHub下载最新版本的Twonav。
- 上传文件:将下载的文件解压后,上传到你的服务器的Web根目录。
- 设置权限:访问您得域名自动进入安装页面,数据库可以选择SQLite,还是Mysql自己决定,个人用户简易选择Sqlite数据库,点击安装即可完成安装。
- 配置网站:安装完成后,登录后台,配置网站信息,如网站名称、描述等。
- 添加书签:在后台添加你常用的网站书签,可以按分类管理。
剩下的就没什么可说的了,这程序安装特简单,功能也挺实用,个人觉得挺不错的,推荐大家使用。参考链接肥猫书签导航
CheveretoV4的VPS脚本安装教程
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数据库密码
设置数据库密码
- 生成一个高强度密码(12~16位)
生成一个安全的随机密码(不含特殊字符问题)
openssl rand -base64 18 | tr -d '/+=' | cut -c1-14
- 用 root 登录 MariaDB 并设置强密码,修改数据库密码
sudo mysql
然后依次执行
ALTER USER 'chevereto'@'localhost' IDENTIFIED BY '生产的密码';
FLUSH PRIVILEGES;
EXIT;
- 测试数据库密码是否可以链接
mysql -u chevereto -p -e "USE chevereto; SELECT 'OK';"
会提示输入密码,把你生成的密码粘贴进去回车就可以了。会出现OK字样。
现在就可以使用域名进行安装了,数据库密码就是你新生成的那个密码了。
以上就是CheveretoV4的VPS脚本安装教程,希望对您有所帮助。
mysql数据库的备份和还原
Chevereto 迁移 = 备份 3 个核心部分:数据库、文件和配置文件。
备份
- 备份数据库
# 导出 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
- 备份文件
# 打包 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/
- 备份配置文件
cp /var/www/html/app/env.php /root/chevereto_env_$(date +%Y%m%d).php
还原
- 还原数据库
前提:新服务器已装好 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出错时,可以尝试使用以下方法恢复。
根据情况删除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.gmail.com |
| 端口号推荐 | 587 |
| 端口号备用 | 465 |
| 加密方式 | STARTTLS(推荐)或SSL/TLS |
| 认证方式 | 普通密码认证 |
| 用户名 | 你的完整Gmail邮箱地址 |
| 密码 | 你刚刚生成的“应用专用密码” |
以上就是使用谷歌邮箱作为发送端的完整设置步骤。完成这些配置后,你的应用或客户端应该能够通过Gmail的SMTP服务器发送电子邮件了。如果遇到任何问题,请确保检查防火墙设置以及Gmail账户的安全设置。祝你使用愉快!
什么是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原生内置系统添加
确保顶部加载JS文件里包含如果没有home.js文件,请自行添加。
确保还有3个依赖的JS,文件名 ewave-plugins.js,ewave-global.js,ewave-common.js,如果没有请自行添加。本程序就包含所需的所有JS和CSS文件,请自行下载。
在文件底部添加以下代码作为加载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>
- 在导航需要添加观看历史的位置添加以下代码
<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配置文件需要修改,修改如下:
注意:反向代理都在这里设置了,不需要单独在宝塔里加反向代理了。
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规则设置把。