# n8n Docker 安装实录

## 环境
- Ubuntu 22.04 on Linux (6.8.0)
- Docker 29.1.3
- 用户：kuhnn (uid=1000)，docker 组成员
- 无 sudo 密码缓存（sudo 需要密码）

## 问题：Docker permission denied
无法 `docker stop`/`docker kill`/`docker restart` 容器，报 "permission denied"。
- 原因：容器以 root 运行，docker socket 权限限制
- 解决：`docker rm -f <name>` 强制删除（不需要先 stop）
- 如果 `rm -f` 也失败，需要 sudo 权限

## 问题：n8n config 目录权限
n8n 容器内以 `node` 用户 (UID 1000) 运行，写入挂载的 host 目录时报 `EACCES: permission denied`。
- 原因：host 目录 `/home/kuhnn/.n8n` 由 kuhnn 拥有，但目录权限 755（drwxr-xr-x），node 用户无权写入
- 解决：改用 Docker **named卷** 而非 host 路径挂载
  ```bash
  docker volume create n8n-data
  docker run -d --name n8n -p 5678:5678 -v n8n-data:/home/node/.n8n n8nio/n8n
  ```

## 问题：Safari secure cookie
n8n 在 HTTP 下 Safari 报 "secure cookie" 错误，Chrome/Edge 正常。
- 解决：加 Caddy 反向代理 + HTTPS（需要域名）
- IP 无法申请 Let's Encrypt 证书

## 最终运行配置
- n8n-v2（带持久化）：`n8n-data` named volume，端口 5679
- n8n（旧容器，无持久化）：端口 5678
- Caddy：端口 80/443，bridge 网络 `n8n-net`
- Caddyfile: `reverse_proxy n8n-v2:5678`

## Caddy 网络配置
Caddy 和 n8n 必须同在 `n8n-net` 网络才能通过容器名通信（不用 localhost）。

```bash
docker network create n8n-net
docker network connect n8n-net n8n-v2
docker network connect n8n-net caddy
```

## Caddyfile 重载
配置文件更新后不需要重启容器：
```bash
docker exec caddy caddy reload --config /etc/caddy/Caddyfile
```

## 当前状态
- `docker ps`: n8n (5678), n8n-v2 (5679), caddy (80,443)
- HTTP `http://localhost` → Caddy → n8n-v2 → 200 OK
- HTTPS 未配置（缺域名）

## 端口占用
| 端口 | 服务 |
|------|------|
| 80 | Caddy HTTP |
| 443 | Caddy HTTPS |
| 5678 | n8n (旧，无持久化) |
| 5679 | n8n-v2 (持久化) |