Compare commits
3 Commits
7b6d415c87
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| cdee1885b9 | |||
| caf1eaec45 | |||
| 58b1f51d5d |
12
.claude/settings.local.json
Normal file
12
.claude/settings.local.json
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"permissions": {
|
||||||
|
"allow": [
|
||||||
|
"Bash(ansible-playbook:*)",
|
||||||
|
"WebSearch",
|
||||||
|
"WebFetch(domain:caddyserver.com)",
|
||||||
|
"Bash(ansible caddy_servers -i inventory.ini -m shell -a \"mkdir -p /var/log/caddy && chown caddy:caddy /var/log/caddy && chmod 755 /var/log/caddy\" --limit 192.168.31.101)"
|
||||||
|
],
|
||||||
|
"deny": [],
|
||||||
|
"ask": []
|
||||||
|
}
|
||||||
|
}
|
||||||
27
.gitignore
vendored
27
.gitignore
vendored
@@ -1,4 +1,27 @@
|
|||||||
.DS_Store
|
.DS_Store
|
||||||
files/.DS_Store
|
files/.DS_Store
|
||||||
.DS_Store
|
|
||||||
files/.DS_Store
|
# PyCharm
|
||||||
|
.idea/
|
||||||
|
*.iml
|
||||||
|
*.iws
|
||||||
|
.idea_modules/
|
||||||
|
|
||||||
|
# Python
|
||||||
|
__pycache__/
|
||||||
|
*.py[cod]
|
||||||
|
*$py.class
|
||||||
|
*.so
|
||||||
|
.Python
|
||||||
|
env/
|
||||||
|
venv/
|
||||||
|
ENV/
|
||||||
|
.venv
|
||||||
|
|
||||||
|
# Ansible
|
||||||
|
*.retry
|
||||||
|
ansible.cfg
|
||||||
|
|
||||||
|
# OS
|
||||||
|
Thumbs.db
|
||||||
|
|
||||||
|
|||||||
190
README.md
Normal file
190
README.md
Normal file
@@ -0,0 +1,190 @@
|
|||||||
|
# Ansible 管理项目
|
||||||
|
|
||||||
|
这是一个用于自动化部署和管理多个服务器配置的 Ansible 项目,包括 Caddy 反向代理、frpc 内网穿透和 Docker Compose 服务。
|
||||||
|
|
||||||
|
## 项目结构
|
||||||
|
|
||||||
|
```
|
||||||
|
ansible_management/
|
||||||
|
├── inventory.ini # Ansible 主机清单文件
|
||||||
|
├── deploy_caddy.yml # 部署 Caddy 配置
|
||||||
|
├── deploy_clash.yml # 部署 Clash 和 Docker Compose 服务
|
||||||
|
├── deploy_docker.yml # 部署 Docker Compose 应用
|
||||||
|
├── deploy_frpc.yml # 部署 frpc 服务
|
||||||
|
└── files/ # 配置文件目录
|
||||||
|
├── 192.168.31.101/ # 本地服务器配置
|
||||||
|
│ ├── Caddyfile
|
||||||
|
│ ├── clash/
|
||||||
|
│ ├── dify/
|
||||||
|
│ ├── frp/
|
||||||
|
│ │ ├── docker-compose.yml
|
||||||
|
│ │ └── frpc.toml
|
||||||
|
│ ├── lobe-chat-database/
|
||||||
|
│ └── openlist/
|
||||||
|
└── 192.238.204.39/ # 远程服务器配置
|
||||||
|
└── Caddyfile
|
||||||
|
```
|
||||||
|
|
||||||
|
## 前置要求
|
||||||
|
|
||||||
|
1. **Ansible**:在控制节点上安装 Ansible
|
||||||
|
```bash
|
||||||
|
# Ubuntu/Debian
|
||||||
|
sudo apt update && sudo apt install ansible
|
||||||
|
|
||||||
|
# macOS
|
||||||
|
brew install ansible
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **SSH 访问**:确保可以通过 SSH 无密码访问目标服务器
|
||||||
|
```bash
|
||||||
|
# 生成 SSH 密钥(如果还没有)
|
||||||
|
ssh-keygen -t ed25519
|
||||||
|
|
||||||
|
# 复制公钥到目标服务器
|
||||||
|
ssh-copy-id root@192.168.31.101
|
||||||
|
ssh-copy-id root@192.238.204.39
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **目标服务器要求**:
|
||||||
|
- 已安装 Python 3(Ansible 需要)
|
||||||
|
- 对于 Alpine Linux,可能需要预先安装 Python 3
|
||||||
|
|
||||||
|
## 配置说明
|
||||||
|
|
||||||
|
### 主机清单 (inventory.ini)
|
||||||
|
|
||||||
|
编辑 `inventory.ini` 文件,配置您的服务器信息:
|
||||||
|
|
||||||
|
```ini
|
||||||
|
[caddy_servers]
|
||||||
|
# 本地 1panel 服务器
|
||||||
|
192.168.31.101
|
||||||
|
|
||||||
|
# 远程 Ubuntu 服务器
|
||||||
|
192.238.204.39
|
||||||
|
|
||||||
|
[all:vars]
|
||||||
|
# 请替换成您登录服务器的用户名
|
||||||
|
ansible_user=root
|
||||||
|
|
||||||
|
# 可选:指定 SSH 密钥路径
|
||||||
|
192.168.31.101 ansible_ssh_private_key_file=~/.ssh/id_ed25519
|
||||||
|
192.168.204.39 ansible_ssh_private_key_file=~/.ssh/id_ed25519
|
||||||
|
```
|
||||||
|
|
||||||
|
### 配置文件
|
||||||
|
|
||||||
|
在 `files/` 目录下,为每个主机准备相应的配置文件:
|
||||||
|
|
||||||
|
- **Caddyfile**:Caddy 反向代理配置
|
||||||
|
- **frpc.toml**:frpc 内网穿透配置
|
||||||
|
- **docker-compose.yml**:Docker Compose 服务定义
|
||||||
|
|
||||||
|
文件命名规则:`files/<主机名>/<配置文件>`
|
||||||
|
|
||||||
|
## 部署命令
|
||||||
|
|
||||||
|
### 1. 测试连接
|
||||||
|
|
||||||
|
在部署前,先测试 Ansible 是否能连接到所有主机:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ansible caddy_servers -i inventory.ini -m ping
|
||||||
|
```
|
||||||
|
|
||||||
|
### 2. 部署 Caddy 配置
|
||||||
|
|
||||||
|
部署 Caddy 配置文件并重载服务:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ansible-playbook -i inventory.ini deploy_caddy.yml
|
||||||
|
```
|
||||||
|
|
||||||
|
### 3. 部署 frpc 服务
|
||||||
|
|
||||||
|
部署 frpc 配置并重启服务:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ansible-playbook -i inventory.ini deploy_frpc.yml
|
||||||
|
```
|
||||||
|
|
||||||
|
### 4. 部署 Docker Compose 服务
|
||||||
|
|
||||||
|
部署 Docker Compose 应用:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ansible-playbook -i inventory.ini deploy_docker.yml
|
||||||
|
```
|
||||||
|
|
||||||
|
### 5. 部署 Clash 服务
|
||||||
|
|
||||||
|
部署 Clash 相关配置:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ansible-playbook -i inventory.ini deploy_clash.yml
|
||||||
|
```
|
||||||
|
|
||||||
|
### 6. 部署所有服务
|
||||||
|
|
||||||
|
一次性部署所有服务:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ansible-playbook -i inventory.ini deploy_caddy.yml deploy_frpc.yml deploy_docker.yml deploy_clash.yml
|
||||||
|
```
|
||||||
|
|
||||||
|
## 服务说明
|
||||||
|
|
||||||
|
### Caddy
|
||||||
|
|
||||||
|
Caddy 是一个自动 HTTPS 的 Web 服务器,用于反向代理多个服务到公网域名。
|
||||||
|
|
||||||
|
- **配置文件**:`/etc/caddy/Caddyfile`
|
||||||
|
- **服务管理**:
|
||||||
|
- systemd: `systemctl reload caddy`
|
||||||
|
- OpenRC: `rc-service caddy reload`
|
||||||
|
|
||||||
|
### frpc
|
||||||
|
|
||||||
|
frpc 是 frp 的客户端,用于内网穿透,将内网服务暴露到公网。
|
||||||
|
|
||||||
|
- **配置文件**:`/root/frpc/data/frpc.toml`
|
||||||
|
- **Docker Compose**:`/root/frpc/docker-compose.yml`
|
||||||
|
- **管理命令**:`docker compose -f /root/frpc/docker-compose.yml up -d`
|
||||||
|
|
||||||
|
### Docker Compose 服务
|
||||||
|
|
||||||
|
支持通过 Docker Compose 部署的各种应用服务。
|
||||||
|
|
||||||
|
## 注意事项
|
||||||
|
|
||||||
|
1. **配置验证**:Caddyfile 会在部署前进行语法验证
|
||||||
|
2. **权限设置**:敏感配置文件(如 frpc.toml)使用 `0640` 权限
|
||||||
|
3. **系统兼容性**:
|
||||||
|
- 支持 systemd(Ubuntu/Debian)
|
||||||
|
- 支持 OpenRC(Alpine Linux)
|
||||||
|
4. **主机特定配置**:某些任务使用 `when` 条件仅在特定主机上执行
|
||||||
|
|
||||||
|
## 故障排查
|
||||||
|
|
||||||
|
### 查看详细输出
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ansible-playbook -i inventory.ini deploy_caddy.yml -vvv
|
||||||
|
```
|
||||||
|
|
||||||
|
### 检查特定主机
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ansible-playbook -i inventory.ini deploy_caddy.yml --limit 192.168.31.101
|
||||||
|
```
|
||||||
|
|
||||||
|
### 仅执行检查(不实际执行)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ansible-playbook -i inventory.ini deploy_caddy.yml --check
|
||||||
|
```
|
||||||
|
|
||||||
|
## 许可证
|
||||||
|
|
||||||
|
请参阅 [LICENSE](LICENSE) 文件了解详细信息。
|
||||||
BIN
files/.DS_Store
vendored
BIN
files/.DS_Store
vendored
Binary file not shown.
@@ -72,16 +72,6 @@ frps.10000h.de {
|
|||||||
import securityHeaders
|
import securityHeaders
|
||||||
}
|
}
|
||||||
|
|
||||||
docker.10000h.de {
|
|
||||||
reverse_proxy http://192.238.204.39:51000
|
|
||||||
# import securityHeaders
|
|
||||||
}
|
|
||||||
|
|
||||||
ghcr.10000h.de {
|
|
||||||
reverse_proxy http://192.238.204.39:52000
|
|
||||||
import securityHeaders
|
|
||||||
}
|
|
||||||
|
|
||||||
pve.10000h.de {
|
pve.10000h.de {
|
||||||
handle {
|
handle {
|
||||||
reverse_proxy https://192.168.31.2:8006 {
|
reverse_proxy https://192.168.31.2:8006 {
|
||||||
@@ -95,19 +85,6 @@ pve.10000h.de {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pvel.10000h.de {
|
|
||||||
handle {
|
|
||||||
reverse_proxy https://192.168.31.2:8006 {
|
|
||||||
transport http {
|
|
||||||
tls_insecure_skip_verify
|
|
||||||
}
|
|
||||||
header_up Host {http.reverse_proxy.host}
|
|
||||||
header_up X-Forwarded-Host {host}
|
|
||||||
}
|
|
||||||
# import securityHeaders
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fndav.10000h.de {
|
fndav.10000h.de {
|
||||||
reverse_proxy http://192.168.31.3:5005
|
reverse_proxy http://192.168.31.3:5005
|
||||||
# import securityHeaders
|
# import securityHeaders
|
||||||
@@ -118,35 +95,15 @@ fnos.10000h.de {
|
|||||||
# import securityHeaders
|
# import securityHeaders
|
||||||
}
|
}
|
||||||
|
|
||||||
fnosl.10000h.de {
|
|
||||||
reverse_proxy http://192.168.31.3:5666
|
|
||||||
# import securityHeaders
|
|
||||||
}
|
|
||||||
|
|
||||||
openwrt.10000h.de {
|
openwrt.10000h.de {
|
||||||
reverse_proxy http://192.168.31.4:80
|
reverse_proxy http://192.168.31.4:80
|
||||||
# import securityHeaders
|
# import securityHeaders
|
||||||
}
|
}
|
||||||
|
|
||||||
arch.10000h.de {
|
# ddns.10000h.de {
|
||||||
reverse_proxy http://192.168.31.4:10808
|
# reverse_proxy http://192.168.31.101:9876
|
||||||
# import securityHeaders
|
# import securityHeaders
|
||||||
}
|
# }
|
||||||
|
|
||||||
duet.10000h.de {
|
|
||||||
reverse_proxy http://NUC:3389
|
|
||||||
# import securityHeaders
|
|
||||||
}
|
|
||||||
|
|
||||||
nuc.10000h.de {
|
|
||||||
reverse_proxy http://NUC:3389
|
|
||||||
# import securityHeaders
|
|
||||||
}
|
|
||||||
|
|
||||||
ddns.10000h.de {
|
|
||||||
reverse_proxy http://192.168.31.101:9876
|
|
||||||
import securityHeaders
|
|
||||||
}
|
|
||||||
|
|
||||||
frpc.10000h.de {
|
frpc.10000h.de {
|
||||||
reverse_proxy http://192.168.31.101:7400
|
reverse_proxy http://192.168.31.101:7400
|
||||||
@@ -173,16 +130,11 @@ n8n.10000h.de {
|
|||||||
import securityHeaders
|
import securityHeaders
|
||||||
}
|
}
|
||||||
|
|
||||||
affine.10000h.de {
|
gitea.10000h.de {
|
||||||
reverse_proxy http://192.168.31.108:3010
|
reverse_proxy http://192.168.31.108:3000
|
||||||
import securityHeaders
|
import securityHeaders
|
||||||
}
|
}
|
||||||
|
|
||||||
valutwarden.10000h.de {
|
|
||||||
reverse_proxy http://192.168.31.109:11001
|
|
||||||
import securityHeaders
|
|
||||||
}
|
|
||||||
|
|
||||||
kubepi.10000h.de {
|
kubepi.10000h.de {
|
||||||
reverse_proxy http://192.168.31.110:80
|
reverse_proxy http://192.168.31.110:80
|
||||||
import securityHeaders
|
import securityHeaders
|
||||||
@@ -193,24 +145,6 @@ openlist.10000h.de {
|
|||||||
# import securityHeaders
|
# import securityHeaders
|
||||||
}
|
}
|
||||||
|
|
||||||
sp.10000h.de {
|
|
||||||
reverse_proxy http://192.168.31.112:8080
|
|
||||||
import securityHeaders
|
|
||||||
route /webdav* {
|
|
||||||
reverse_proxy http://192.168.31.112:2345
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
mattermost.10000h.de {
|
|
||||||
reverse_proxy http://192.168.31.113:8065
|
|
||||||
# import securityHeaders
|
|
||||||
}
|
|
||||||
|
|
||||||
rocketchat.10000h.de {
|
|
||||||
reverse_proxy http://192.168.31.114:3000
|
|
||||||
import securityHeaders
|
|
||||||
}
|
|
||||||
|
|
||||||
tts.10000h.de {
|
tts.10000h.de {
|
||||||
reverse_proxy http://192.168.31.115:8000
|
reverse_proxy http://192.168.31.115:8000
|
||||||
# import securityHeaders
|
# import securityHeaders
|
||||||
@@ -240,4 +174,14 @@ n8nk.10000h.de {
|
|||||||
import securityHeaders
|
import securityHeaders
|
||||||
}
|
}
|
||||||
|
|
||||||
|
duet.10000h.de {
|
||||||
|
reverse_proxy http://DUET:3389
|
||||||
|
# import securityHeaders
|
||||||
|
}
|
||||||
|
|
||||||
|
nuc.10000h.de {
|
||||||
|
reverse_proxy http://NUC:3389
|
||||||
|
# import securityHeaders
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,6 @@
|
|||||||
|
# Caddy's configuration file
|
||||||
|
# see: https://caddyserver.com/docs/caddyfile
|
||||||
|
|
||||||
# The Caddyfile is an easy way to configure your Caddy web server.
|
# The Caddyfile is an easy way to configure your Caddy web server.
|
||||||
#
|
#
|
||||||
# Unless the file starts with a global options block, the first
|
# Unless the file starts with a global options block, the first
|
||||||
@@ -8,6 +11,20 @@
|
|||||||
# this machine's public IP, then replace ":80" below with your
|
# this machine's public IP, then replace ":80" below with your
|
||||||
# domain name.
|
# domain name.
|
||||||
|
|
||||||
|
#:80 {
|
||||||
|
# # Set this path to your site's directory.
|
||||||
|
# root * /usr/share/caddy
|
||||||
|
#
|
||||||
|
# # Enable the static file server.
|
||||||
|
# file_server
|
||||||
|
#
|
||||||
|
# # Another common task is to set up a reverse proxy:
|
||||||
|
# # reverse_proxy localhost:8080
|
||||||
|
#
|
||||||
|
# # Or serve a PHP site through php-fpm:
|
||||||
|
# # php_fastcgi localhost:9000
|
||||||
|
#}
|
||||||
|
|
||||||
# Refer to the Caddy docs for more information:
|
# Refer to the Caddy docs for more information:
|
||||||
# https://caddyserver.com/docs/caddyfile
|
# https://caddyserver.com/docs/caddyfile
|
||||||
|
|
||||||
@@ -55,16 +72,11 @@ daed.10000h.de {
|
|||||||
import securityHeaders
|
import securityHeaders
|
||||||
}
|
}
|
||||||
|
|
||||||
rocketchat.10000h.de {
|
gitea.10000h.de {
|
||||||
reverse_proxy http://127.0.0.1:3000
|
reverse_proxy http://127.0.0.1:3000
|
||||||
import securityHeaders
|
import securityHeaders
|
||||||
}
|
}
|
||||||
|
|
||||||
affine.10000h.de {
|
|
||||||
reverse_proxy http://127.0.0.1:3010
|
|
||||||
import securityHeaders
|
|
||||||
}
|
|
||||||
|
|
||||||
lobe.10000h.de {
|
lobe.10000h.de {
|
||||||
reverse_proxy http://127.0.0.1:3210 {
|
reverse_proxy http://127.0.0.1:3210 {
|
||||||
transport http {
|
transport http {
|
||||||
@@ -73,10 +85,14 @@ lobe.10000h.de {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
rdp.10000h.de {
|
duet.10000h.de {
|
||||||
reverse_proxy http://127.0.0.1:3389
|
reverse_proxy http://127.0.0.1:3389
|
||||||
}
|
}
|
||||||
|
|
||||||
|
nuc.10000h.de {
|
||||||
|
reverse_proxy http://127.0.0.1:3390
|
||||||
|
}
|
||||||
|
|
||||||
fndav.10000h.de {
|
fndav.10000h.de {
|
||||||
reverse_proxy http://127.0.0.1:5005
|
reverse_proxy http://127.0.0.1:5005
|
||||||
# import securityHeaders
|
# import securityHeaders
|
||||||
@@ -97,14 +113,6 @@ n8n.10000h.de {
|
|||||||
# import securityHeaders
|
# import securityHeaders
|
||||||
}
|
}
|
||||||
|
|
||||||
vnc.10000h.de {
|
|
||||||
reverse_proxy http://127.0.0.1:5900
|
|
||||||
}
|
|
||||||
|
|
||||||
couchdb.10000h.de {
|
|
||||||
reverse_proxy http://127.0.0.1:5984
|
|
||||||
}
|
|
||||||
|
|
||||||
frps.10000h.de {
|
frps.10000h.de {
|
||||||
reverse_proxy http://127.0.0.1:7001
|
reverse_proxy http://127.0.0.1:7001
|
||||||
import securityHeaders
|
import securityHeaders
|
||||||
@@ -148,19 +156,6 @@ dify.10000h.de {
|
|||||||
import securityHeaders
|
import securityHeaders
|
||||||
}
|
}
|
||||||
|
|
||||||
mattermost.10000h.de {
|
|
||||||
reverse_proxy http://127.0.0.1:8065
|
|
||||||
import securityHeaders
|
|
||||||
}
|
|
||||||
|
|
||||||
sp.10000h.de {
|
|
||||||
reverse_proxy http://127.0.0.1:8082
|
|
||||||
import securityHeaders
|
|
||||||
route /webdav* {
|
|
||||||
reverse_proxy http://127.0.0.1:2345
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
kubepi.10000h.de {
|
kubepi.10000h.de {
|
||||||
reverse_proxy http://127.0.0.1:8084
|
reverse_proxy http://127.0.0.1:8084
|
||||||
import securityHeaders
|
import securityHeaders
|
||||||
@@ -171,16 +166,6 @@ ddns.10000h.de {
|
|||||||
import securityHeaders
|
import securityHeaders
|
||||||
}
|
}
|
||||||
|
|
||||||
arch.10000h.de {
|
|
||||||
reverse_proxy http://127.0.0.1:10808
|
|
||||||
import securityHeaders
|
|
||||||
}
|
|
||||||
|
|
||||||
vaulewarden.10000h.de {
|
|
||||||
reverse_proxy http://127.0.0.1:11001
|
|
||||||
import securityHeaders
|
|
||||||
}
|
|
||||||
|
|
||||||
# ------------------------------
|
# ------------------------------
|
||||||
# k3s Services
|
# k3s Services
|
||||||
# ------------------------------
|
# ------------------------------
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ ansible_user=root
|
|||||||
|
|
||||||
# --- 可选配置 ---
|
# --- 可选配置 ---
|
||||||
# 如果您的本地服务器不需要通过SSH,而是直接在本机执行
|
# 如果您的本地服务器不需要通过SSH,而是直接在本机执行
|
||||||
192.168.31.101 ansible_ssh_private_key_file=~/.ssh/id_ed25519.pub
|
192.168.31.101 ansible_ssh_private_key_file=~/.ssh/id_ed25519
|
||||||
|
|
||||||
# 如果您的远程服务器需要使用特定的SSH密钥
|
# 如果您的远程服务器需要使用特定的SSH密钥
|
||||||
154.204.181.192 ansible_ssh_private_key_file=~/.ssh/id_ed25519.pub
|
154.204.181.192 ansible_ssh_private_key_file=~/.ssh/id_ed25519
|
||||||
|
|||||||
Reference in New Issue
Block a user