From 00c97a3667d22a07f3763c98f16596cccbf50be4 Mon Sep 17 00:00:00 2001 From: xujiang Date: Wed, 9 Jul 2025 09:57:55 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=20Caddy=20=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E6=96=87=E4=BB=B6=E5=92=8C=E9=83=A8=E7=BD=B2=E6=96=87?= =?UTF-8?q?=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 创建 Caddyfile 配置 photography.iriver.top 域名 - 配置静态文件服务指向 ~/www/photography/ - 添加性能优化:gzip 压缩、缓存控制 - 配置安全头和错误处理 - 添加详细的 Caddy 部署和配置文档 功能特性: - ✅ 自动 HTTPS (Let's Encrypt) - ✅ 静态资源缓存优化 - ✅ Gzip 压缩 - ✅ 安全头配置 - ✅ 404 错误页面处理 - ✅ 访问日志记录 使用方法: 1. 复制 Caddyfile 到服务器 /etc/caddy/ 2. 运行 sudo systemctl reload caddy 3. 访问 https://photography.iriver.top --- .gitea/workflows/deploy-frontend.yml | 2 +- Caddyfile | 60 ++++++++++++++++ docs/deployment/caddy-setup.md | 103 +++++++++++++++++++++++++++ 3 files changed, 164 insertions(+), 1 deletion(-) create mode 100644 Caddyfile create mode 100644 docs/deployment/caddy-setup.md diff --git a/.gitea/workflows/deploy-frontend.yml b/.gitea/workflows/deploy-frontend.yml index 7a6cc28..f329d09 100644 --- a/.gitea/workflows/deploy-frontend.yml +++ b/.gitea/workflows/deploy-frontend.yml @@ -65,7 +65,7 @@ jobs: echo "✅ 部署完成!" echo "📁 部署路径:~/www/photography/" - echo "🌐 访问地址:http://photography.iriver.top" + echo "🌐 访问地址:https://photography.iriver.top" - name: Notify success if: success() diff --git a/Caddyfile b/Caddyfile new file mode 100644 index 0000000..e92ecd4 --- /dev/null +++ b/Caddyfile @@ -0,0 +1,60 @@ +# Photography Portfolio Caddyfile +# 将 https://photography.iriver.top 映射到用户目录 + +photography.iriver.top { + # 静态文件服务 + root * ~/www/photography + + # 启用文件服务器 + file_server + + # 启用 gzip 压缩 + encode gzip + + # 设置默认首页 + try_files {path} {path}/ /index.html + + # 设置静态资源缓存 + @static { + path *.css *.js *.png *.jpg *.jpeg *.gif *.svg *.woff *.woff2 *.ttf *.eot *.ico + } + header @static Cache-Control "public, max-age=31536000, immutable" + + # 设置 HTML 文件缓存 + @html { + path *.html + } + header @html Cache-Control "public, max-age=3600" + + # 安全头设置 + header { + # 防止点击劫持 + X-Frame-Options "SAMEORIGIN" + # 防止 MIME 类型嗅探 + X-Content-Type-Options "nosniff" + # XSS 保护 + X-XSS-Protection "1; mode=block" + # 推荐 HTTPS + Strict-Transport-Security "max-age=31536000; includeSubDomains" + # 隐藏服务器信息 + -Server + } + + # 日志配置 + log { + output file /var/log/caddy/photography.log { + roll_size 10MB + roll_keep 5 + } + format json + } + + # 错误页面处理 + handle_errors { + @404 { + expression {http.error.status_code} == 404 + } + rewrite @404 /404.html + file_server + } +} \ No newline at end of file diff --git a/docs/deployment/caddy-setup.md b/docs/deployment/caddy-setup.md new file mode 100644 index 0000000..e7565e6 --- /dev/null +++ b/docs/deployment/caddy-setup.md @@ -0,0 +1,103 @@ +# Caddy 配置指南 + +## 配置文件位置 + +将 `Caddyfile` 复制到服务器的 Caddy 配置目录: + +### 常见位置: +- Ubuntu/Debian: `/etc/caddy/Caddyfile` +- CentOS/RHEL: `/etc/caddy/Caddyfile` +- 用户目录: `~/Caddyfile` + +## 部署步骤 + +### 1. 上传配置文件 +```bash +# 将 Caddyfile 上传到服务器 +scp Caddyfile user@server:/etc/caddy/Caddyfile +``` + +### 2. 创建日志目录 +```bash +sudo mkdir -p /var/log/caddy +sudo chown caddy:caddy /var/log/caddy +``` + +### 3. 验证配置 +```bash +sudo caddy validate --config /etc/caddy/Caddyfile +``` + +### 4. 重新加载配置 +```bash +sudo systemctl reload caddy +``` + +### 5. 检查状态 +```bash +sudo systemctl status caddy +``` + +## 配置说明 + +### 基本功能 +- **域名**: `photography.iriver.top` +- **根目录**: `~/www/photography` +- **自动 HTTPS**: Caddy 自动获取和续期 SSL 证书 +- **文件服务**: 直接提供静态文件服务 + +### 优化功能 +- **Gzip 压缩**: 减少传输大小 +- **缓存控制**: 静态资源长期缓存,HTML 短期缓存 +- **安全头**: 防止常见安全问题 +- **错误处理**: 404 错误重定向到 404.html + +### 日志功能 +- **位置**: `/var/log/caddy/photography.log` +- **格式**: JSON 格式便于分析 +- **轮转**: 10MB 轮转,保留 5 个文件 + +## 故障排除 + +### 检查配置语法 +```bash +caddy validate --config /path/to/Caddyfile +``` + +### 查看日志 +```bash +# 系统日志 +sudo journalctl -u caddy -f + +# 应用日志 +sudo tail -f /var/log/caddy/photography.log +``` + +### 测试配置 +```bash +# 测试模式启动 +sudo caddy run --config /etc/caddy/Caddyfile +``` + +## 域名解析 + +确保域名 `photography.iriver.top` 的 DNS 记录指向服务器 IP: + +``` +A photography.iriver.top YOUR_SERVER_IP +``` + +## SSL 证书 + +Caddy 会自动: +- 获取 Let's Encrypt SSL 证书 +- 自动续期证书 +- 强制 HTTPS 重定向 + +## 性能优化 + +配置包含以下优化: +- Gzip 压缩减少带宽 +- 静态资源缓存提高加载速度 +- 安全头提高安全性 +- 错误页面友好处理 \ No newline at end of file