|
|
@@ -16,29 +16,29 @@
|
|
|
|
|
|
## 配置 Basic Auth
|
|
|
|
|
|
-### 1. 生成密码哈希
|
|
|
+### 1. 生成 htpasswd 文件
|
|
|
|
|
|
-Caddy 使用 bcrypt 哈希格式存储密码。使用以下命令生成:
|
|
|
+Caddy 使用 htpasswd 文件存储用户名和密码。使用以下命令生成:
|
|
|
|
|
|
```bash
|
|
|
-# 使用 Docker 生成密码哈希(推荐)
|
|
|
-docker run --rm caddy:2-alpine caddy hash-password --plaintext 'your_password'
|
|
|
+# 使用 Docker 生成 htpasswd 文件(推荐)
|
|
|
+docker run --rm httpd:alpine htpasswd -nbB admin your_password > htpasswd
|
|
|
|
|
|
-# 示例输出:
|
|
|
-# $2a$14$Z3Q7g2n8XQYuH9vJkLmNqOrStUvWxYzAbCdEfGhIjKlMnOpQrStUv
|
|
|
+# 示例输出(内容会写入 htpasswd 文件):
|
|
|
+# admin:$2y$05$xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
|
|
```
|
|
|
|
|
|
-### 2. 配置环境变量
|
|
|
+**参数说明:**
|
|
|
|
|
|
-在服务器上的 `.env` 文件中添加:
|
|
|
+- `-n`:输出到标准输出而不是文件
|
|
|
+- `-b`:使用批处理模式(密码在命令行提供)
|
|
|
+- `-B`:使用 bcrypt 加密(Caddy 要求)
|
|
|
|
|
|
-```bash
|
|
|
-# Basic Auth 配置
|
|
|
-BASIC_AUTH_USER=admin
|
|
|
-BASIC_AUTH_HASH=$2a$14$Z3Q7g2n8XQYuH9vJkLmNqOrStUvWxYzAbCdEfGhIjKlMnOpQrStUv
|
|
|
-```
|
|
|
+### 2. 配置 htpasswd 文件
|
|
|
|
|
|
-**注意**:将 `BASIC_AUTH_HASH` 替换为你实际生成的哈希值。
|
|
|
+生成的 `htpasswd` 文件会自动被 Caddy 读取(已通过 docker-compose 挂载到容器中)。
|
|
|
+
|
|
|
+**注意**:`htpasswd` 文件已添加到 `.gitignore`,不会被提交到 Git。
|
|
|
|
|
|
---
|
|
|
|
|
|
@@ -255,7 +255,19 @@ services:
|
|
|
|
|
|
## 部署步骤
|
|
|
|
|
|
-### 1. 配置环境变量
|
|
|
+### 1. 生成 htpasswd 文件
|
|
|
+
|
|
|
+在服务器上执行:
|
|
|
+
|
|
|
+```bash
|
|
|
+# 生成 htpasswd 文件
|
|
|
+docker run --rm httpd:alpine htpasswd -nbB admin your_password > htpasswd
|
|
|
+
|
|
|
+# 查看生成的文件
|
|
|
+cat htpasswd
|
|
|
+```
|
|
|
+
|
|
|
+### 2. 配置环境变量
|
|
|
|
|
|
在服务器上创建 `.env` 文件:
|
|
|
|
|
|
@@ -263,20 +275,16 @@ services:
|
|
|
# Solana 配置
|
|
|
SOL_ENDPOINT=your_solana_endpoint
|
|
|
SOL_SECRET_KEY=your_secret_key
|
|
|
-
|
|
|
-# Basic Auth 配置
|
|
|
-BASIC_AUTH_USER=admin
|
|
|
-BASIC_AUTH_HASH=$2a$14$xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
|
|
```
|
|
|
|
|
|
-### 2. 启动服务
|
|
|
+### 3. 启动服务
|
|
|
|
|
|
```bash
|
|
|
docker compose down
|
|
|
docker compose up -d
|
|
|
```
|
|
|
|
|
|
-### 3. 验证 HTTPS
|
|
|
+### 4. 验证 HTTPS
|
|
|
|
|
|
访问 `https://love.hdlife.me`,应该会自动跳转到 HTTPS 并要求 Basic Auth。
|
|
|
|
|
|
@@ -285,7 +293,7 @@ docker compose up -d
|
|
|
## 安全最佳实践
|
|
|
|
|
|
1. ✅ **使用环境变量**:永远不要在代码中硬编码密码
|
|
|
-2. ✅ **使用 `.gitignore`**:确保包含密码的 `.env` 文件不会被提交
|
|
|
+2. ✅ **使用 `.gitignore`**:确保 `htpasswd` 文件不会被提交
|
|
|
3. ✅ **使用密钥管理服务**:生产环境推荐使用 AWS Secrets Manager、Azure Key Vault 等
|
|
|
4. ✅ **定期轮换密码**:定期更换 Basic Auth 密码
|
|
|
5. ✅ **使用 HTTPS**:Caddy 自动配置 HTTPS,无需额外操作
|
|
|
@@ -315,18 +323,17 @@ curl -u "${BYREAL_API_USERNAME}:${BYREAL_API_PASSWORD}" \
|
|
|
|
|
|
### Q: 如何获取 Basic Auth 凭证?
|
|
|
|
|
|
-A: 联系项目管理员获取用户名和密码。密码哈希存储在服务器的 `.env` 文件中。
|
|
|
+A: 联系项目管理员获取用户名和密码。密码存储在服务器的 `htpasswd` 文件中。
|
|
|
|
|
|
### Q: 密码忘记了怎么办?
|
|
|
|
|
|
-A: 在服务器上重新生成哈希并更新 `.env` 文件:
|
|
|
+A: 在服务器上重新生成 htpasswd 文件:
|
|
|
|
|
|
```bash
|
|
|
-# 生成新密码哈希
|
|
|
-docker run --rm caddy:2-alpine caddy hash-password --plaintext 'new_password'
|
|
|
+# 生成新密码
|
|
|
+docker run --rm httpd:alpine htpasswd -nbB admin new_password > htpasswd
|
|
|
|
|
|
-# 更新 .env 文件中的 BASIC_AUTH_HASH
|
|
|
-# 然后重启服务
|
|
|
+# 重启服务
|
|
|
docker compose restart caddy
|
|
|
```
|
|
|
|
|
|
@@ -351,5 +358,6 @@ A: Caddy 会自动管理 Let's Encrypt 证书的续期,无需手动操作。
|
|
|
## 相关文件
|
|
|
|
|
|
- `Caddyfile` - Caddy HTTPS + Basic Auth 配置
|
|
|
+- `htpasswd` - Basic Auth 密码文件(不提交到 Git)
|
|
|
- `docker-compose.yml` - Docker 服务配置
|
|
|
- `.env` - 环境变量配置(不提交到 Git)
|