diff --git a/README.md b/README.md index 774d060..c5c72a8 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,27 @@ -# docker-playground +# 🐳 Docker Playground -玩过的 Docker 自部署项目记录(searxng/paopao-ce/misskey) \ No newline at end of file +玩过的 Docker 自部署项目记录。 + +> 目的:沉淀部署经验、踩坑记录,方便复盘和重新部署。 + +## 项目总览 + +| 项目 | 类型 | 状态 | 端口 | 部署日期 | +|------|------|------|------|----------| +| [searxng](searxng.md) | 元搜索引擎 | 🟢 运行中 | 8888 | 2026-07 部署 | +| [paopao-ce](paopao-ce.md) | 微社区平台 | ⚫ 已清理 | - | 2026-08-04 体验后删除 | +| [misskey](misskey.md) | 社交平台 | 🟢 运行中 | 3000 | 2026-08-04 部署 | + +## 环境 + +- VPS:Ubuntu 22.04,3.8G 内存 / 29G 磁盘 +- Docker + Docker Compose +- 端口安全策略:业务端口按需暴露,基础设施端口(DB/Redis)只走容器内网 + +## 通用经验 + +1. **compose 里的镜像 tag 要验证**:官方 compose 默认 tag 可能不存在(如 paopao-ce 的 `0.6-alpha` 404),改成 `latest` 或查询 Docker Hub 实际 tag +2. **端口冲突先查**:`ss -tlnp` 检查宿主机端口占用,冲突就改映射(`localhost:3307:3306` 之类) +3. **基础设施端口只绑内网**:MySQL/PostgreSQL/Redis 等不要暴露到 「全接口」,用 `internal_network` 或绑定 localhost +4. **官方示例配置常带占位账号**:复制 `example.yml` 后必须把 db 账号密码改成实际值,否则启动报 auth 失败 +5. **数据持久化**:挂载到宿主机目录或命名 volume,容器删了数据还在 diff --git a/misskey.md b/misskey.md new file mode 100644 index 0000000..f7e25f0 --- /dev/null +++ b/misskey.md @@ -0,0 +1,50 @@ +# Misskey — 开源社交平台 + +> 部署于 2026-08-04,运行中 🟢 + +## 简介 + +[misskey-dev/misskey](https://github.com/misskey-dev/misskey):日系开源社交平台(类微博/推特),界面颜值天花板,支持联邦宇宙(ActivityPub)。玩法丰富:笔记(嘟文)、反应表情、画板、主题帖等。 + +## 技术栈 + +- 后端:Node.js(NestJS)+ TypeScript +- 数据库:PostgreSQL(默认)/ 其他可选 +- 缓存/队列:Redis +- 搜索:SQL Like(默认)/ Meilisearch 可选 + +## 部署记录(Docker Compose) + +服务组成:`misskey/misskey:latest` + `postgres:18-alpine` + `redis:7-alpine` + +```yaml +services: + web: + image: misskey/misskey:latest + ports: ["3000:3000"] + volumes: ["./files:/misskey/files", "./.config:/misskey/.config:ro"] + depends_on: { db: {condition: service_healthy}, redis: {condition: service_healthy} } + db: + image: postgres:18-alpine + env_file: .config/docker.env # POSTGRES_USER/PASSWORD/DB + redis: + image: redis:7-alpine + +networks: + internal_network: { internal: true } # db/redis 只走内网 + external_network: {} +``` + +关键配置:`.config/default.yml`(复制自 `docker_example.yml`)中 `url` 必须设为对外访问地址,**启动后不可更改**;首次启动自动跑数据库迁移。 + +## 🕳️ 踩坑记录 + +1. **数据库认证失败(auth_failed)**:官方 `docker_example.yml` 里 db 账号是占位符 `example-misskey-user/example-misskey-pass`,复制后忘记改,与 docker.env 里生成的随机账号不一致,web 启动时 PG 认证失败。修复:把 `default.yml` 的 `db.user/pass` 改成与 `docker.env` 一致,`docker compose restart web` +2. **首启动迁移耗时**:web 容器启动要跑 `pnpm migrate && pnpm start`,健康检查从 starting 到 healthy 需要约 1 分钟,别急着判失败 + +## 备注 + +- 端口策略:3000 对外,PostgreSQL/Redis 全走 `internal_network`,外部不可达 +- 第一个注册的账号自动成为管理员,后台可管理站点 +- 若只想自己玩,可关闭开放注册或改邀请制 +- 数据在 `/tmp/misskey/`(files/、db/、redis/、.config/),容器删了数据还在 diff --git a/paopao-ce.md b/paopao-ce.md new file mode 100644 index 0000000..5069bc9 --- /dev/null +++ b/paopao-ce.md @@ -0,0 +1,40 @@ +# paopao-ce — 开源微社区平台 + +> 部署于 2026-08-04,体验后已清理 ⚫(容器、镜像、数据、目录全部移除) + +## 简介 + +[rocboss/paopao-ce](https://github.com/rocboss/paopao-ce):Go + Vue 3 全栈开源微社区平台,主打自部署 + 模块化裁剪(Features 特性开关)。 + +## 技术栈 + +- 后端:Go 1.24 + Gin + GORM +- 前端:Vue 3 + Naive UI(可嵌入二进制) +- 数据库:MySQL(默认)/ PostgreSQL / SQLite +- 搜索:Meilisearch;缓存:Redis;存储:LocalOSS/MinIO/云 OSS + +## 部署记录(Docker Compose) + +服务组成:`mysql:8.0` + `redis-stack` + `meili` + `backend` + +```yaml +# 核心服务(简化) +services: + db: image: mysql:8.0 # 初始化脚本 scripts/paopao-mysql.sql + redis: image: redis/redis-stack # 缓存 + RediSearch + meili: image: getmeili/meilisearch # 全文搜索 + backend: image: bitbus/paopao-ce # 主应用 +``` + +## 🕳️ 踩坑记录 + +1. **镜像 tag 404**:官方 compose 默认 `bitbus/paopao-ce:0.6-alpha` 在 Docker Hub 不存在,`docker compose up` 直接失败回滚。改成 `latest` 解决 +2. **MySQL 端口冲突**:宿主机宝塔 MySQL 已占 3306,compose 里映射改为 `localhost:3307:3306`,容器间走内网 `db:3306` 不受影响 +3. **安全收紧**:部署后把 MySQL/Redis/Meili 端口全部回绑 `localhost`,只留应用端口 8008 对外(docker 端口映射走 iptables FORWARD 链,ufw 拦不住,回绑更彻底) + +## 体验结论 + +- 功能完整(帖子/评论/点赞/关注/私信),后台管理界面齐全 +- 适合作为社区产品快速落地或 Go 全栈学习样板 +- 部分模块(Admin/Bot/SpaceX)标记 WIP +- 体验完毕,容器/镜像/目录已全部清理,端口已释放 diff --git a/searxng.md b/searxng.md new file mode 100644 index 0000000..6dc4127 --- /dev/null +++ b/searxng.md @@ -0,0 +1,28 @@ +# searxng — 元搜索引擎 + +> 部署于 2026-07,运行中 🟢 + +## 简介 + +SearXNG 是一个隐私友好的元搜索引擎,聚合多个搜索引擎结果,无追踪无广告,可自部署。同时也是 OpenClaw 的 `web_search` 后端。 + +## 部署信息 + +- 镜像:`searxng/searxng` +- 容器名:`searxng` +- 端口:`8888 -> 8080`(对外) +- 数据:命名 volume(配置 + 缓存)+ 绑定挂载 `/root/searxng/settings.yml` + +## 部署命令 + +```bash +docker run -d --name searxng \ + -p 8888:8080 \ + -v /root/searxng/settings.yml:/etc/searxng/settings.yml:ro \ + searxng/searxng +``` + +## 备注 + +- settings.yml 里配置了搜索格式和各引擎 +- 内网其他服务(如 OpenClaw 网关)通过该实例做搜索代理