From 7aa24af69f9921ef841f3512730d0188e6254f7b Mon Sep 17 00:00:00 2001 From: TGY Date: Wed, 11 Jun 2025 16:10:04 +0800 Subject: [PATCH] add ech0 --- ech0/README.md | 184 +++++++++++++++++++++++++++++++++ ech0/data.yml | 19 ++++ ech0/latest/.env.sample | 4 + ech0/latest/data.yml | 26 +++++ ech0/latest/docker-compose.yml | 15 +++ ech0/logo.png | Bin 0 -> 26132 bytes 6 files changed, 248 insertions(+) create mode 100644 ech0/README.md create mode 100644 ech0/data.yml create mode 100644 ech0/latest/.env.sample create mode 100644 ech0/latest/data.yml create mode 100644 ech0/latest/docker-compose.yml create mode 100644 ech0/logo.png diff --git a/ech0/README.md b/ech0/README.md new file mode 100644 index 000000000..c7edf7b05 --- /dev/null +++ b/ech0/README.md @@ -0,0 +1,184 @@ +# Ech0 - 开源、自托管、专注思想流动的轻量级发布平台 + +

+ Ech0 +

+ +Ech0 是一款专为轻量级分享而设计的开源自托管平台,支持快速发布与分享你的想法、文字与链接。简单直观的操作界面,轻松管理你的内容,让分享变得更加自由,确保数据完全掌控,随时随地与世界连接。 + +![界面预览](./docs/imgs/screenshot.png) + +[预览地址](https://memo.vaaat.com/) +[官网地址](https://echo.soopy.cn/) + +--- + +## 核心优势 + +☁️ **原子级轻量**:内存占用、可执行文件、镜像大小均不到**30MB**,单SQLite文件存储架构 +🚀 **极速部署**:无需配置,从安装到使用只需1条命令 +✍️ **零干扰写作**:纯净的在线Markdown编辑器,**支持丰富的Markdown插件与预览** +📦 **数据主权**:所有内容存储于本地SQLite文件,支持RSS订阅 +🎉 **永久免费**:MIT协议开源,无追踪/无订阅/无服务依赖 +🌍 **跨端适配**:完美兼容桌面/移动浏览器,支持手机、iPad、PC三端响应式布局 +👾 **WPA适配**:支持作为Web应用安装 +📝 **内置Todo管理**:轻松记录、管理每日待办事项,帮助你高效规划和追踪任务进度 +🔗 **Ech0 Connect**:全新内容聚合与互联功能,支持多实例间互通、内容订阅与同步,打造属于你的去中心化内容网络 +🎵 **无缝音乐集成**: 内置超低资源占用的音乐播放器,支持本地音频流解析,提供沉浸式背景音乐与专注模式 +🎥 **即时视频分享**: 原生支持哔哩哔哩视频智能解析,输入BV号/链接即可自动提取并嵌入 +🃏 **丰富的快捷卡片**:支持网站链接、GitHub项目等多种富媒体内容一键分享,让信息展示更加直观生动 +⚙️ **高级自定义功能**:为高级用户提供便捷自定义样式与脚本,分享更具表现力 + +--- + +## 3秒极速部署 + +### 🧙 脚本一键部署(推荐) +```shell +curl -fsSL "http://echo.soopy.cn/install.sh" -o install_ech0.sh && bash install_ech0.sh +``` + +### 🐳 docker部署(推荐) + +```shell +docker run -d \ + --name ech0 \ + -p 6277:6277 \ + -v /opt/ech0/data:/app/data \ + -e JWT_SECRET="Hello Echos!" \ + sn0wl1n/ech0:latest +``` + +> 💡 部署完成后访问 ip:6277 即可使用 +> 🚷 建议把`-e JWT_SECRET="Hello Echos!"`里的`Hello Echos!`改成别的内容以提高安全性 +> 📍 首次使用注册的账号会被设置为管理员(目前仅管理员支持发布内容) +> 🎈 数据存储在/opt/ech0/data下 + +### 🐋 docker-componse部署 + +创建一个新目录并将 `docker-compose.yml` 文件放入其中 + +在该目录下执行以下命令启动服务: + +```shell +docker-compose up -d +``` + +## 如何更新 + +### 🔄 Docker部署如何更新 + +```shell +# 停止当前的容器 +docker stop ech0 + +# 移除容器 +docker rm ech0 + +# 拉取最新的镜像 +docker pull sn0wl1n/ech0:latest + +# 启动新版本的容器 +docker run -d \ + --name ech0 \ + -p 6277:6277 \ + -v /opt/ech0/data:/app/data \ + -v /opt/ech0/config/config.yaml:/app/data/config/config.yaml \ + -e JWT_SECRET="Hello Echos!" \ + sn0wl1n/ech0:latest +``` + +### 💎 Docker Compose部署如何更新 + +```shell +# 进入 compose 文件目录 +cd /path/to/compose + +# 拉取最新镜像并重启 +docker-compose pull && \ +docker-compose up -d --force-recreate + +# 清理旧镜像 +docker image prune -f +``` + +--- + +# 🦖 未来目标 + +- [x] 使用裸Vue3重写整个前端 +- [x] 修复一个安全性的问题 +- [x] 重构后端,使其更加优雅高效 +- [ ] 优化各项画面细节 && 增加更多实用功能 +- [ ] 性能优化 && 美化界面 + +--- + +# ❓ 常见问题 + +1. **Ech0是什么?** + Ech0 是一款轻量级的开源自托管平台,专为快速发布与分享个人想法、文字和链接而设计。它提供简洁的界面,支持零干扰的写作体验,所有数据存储于本地,确保用户对内容的完全控制。 + +2. **Ech0 是免费的吗?** + 是的,Ech0 完全免费且开源,遵循 MIT 协议。它没有广告、追踪、订阅或服务依赖。 + +3. **如何进行备份和恢复数据?** + 由于所有内容都存储在本地 SQLite 文件中,您只需备份/opt/ech0/data目录中的文件即可(具体选择部署时的映射路径)。在需要恢复时,直接将备份文件还原即可。 + +4. **Ech0 支持 RSS 吗?** + 是的,Ech0 支持 RSS 订阅,您可以通过 RSS 阅读器订阅您的内容更新。 + +5. **为什么发布失败,提示联系管理员?** + 当前版本设计上,只有管理员可以发布内容。部署后,首个注册的用户会自动被设置为系统管理员,其他用户无法发布内容(可在设置中分配权限)。 + +6. **为什么没有明确的权限划分?** + Ech0 旨在保持简洁和轻量,因此在设计时没有复杂的权限系统。我们希望用户能够专注于分享内容,而不是被复杂的权限管理所困扰。为了保持流畅的使用体验,Ech0 尽量精简了功能,避免不必要的复杂性。(因此目前只有管理员与非管理员之分,所以请谨慎分配你的权限) + +--- + +# 🛠️ 开发 + +🔧 依赖环境 +📌 后端: `Go 1.24.3+` +📌 前端: `NodeJS v22.15.0, PNPM` + +🏗️ 启动 +在Ech0根目录下: + +后端: +```shell +go run cmd/ech0/main.go +``` + +前端(新终端): +```shell +cd web # 进入前端目录 + +pnpm install + +pnpm dev +``` + +--- + +# 🥰 致谢 + +- 感谢 [Gin](https://github.com/gin-gonic/gin) 提供高性能的后端框架支持 +- 感谢 [Md-Editor-V3](https://github.com/imzbf/md-editor-v3) 提供强大易用的 Markdown 编辑器 +- 感谢 [Figma](https://www.figma.com/) 提供便捷的 Logo 设计工具 +- 感谢舍友的 Logo 设计 +- 感谢所有开源社区的贡献者与支持者 + +--- + +# ☕ 支持 + + +🌟 如果你觉得 **Ech0** 不错,欢迎为项目点个 Star!🚀 + +Ech0 完全开源且免费,持续维护和优化离不开大家的支持。如果这个项目对你有所帮助,也欢迎通过赞助支持项目的持续发展。你的每一份鼓励和支持,都是我们前进的动力! +你可以向打赏二维码付款,然后备注你的github名称,将在首页 `README.md` 页面向所有展示你的贡献 + +| 支持平台 | 二维码 | +| :------: | :-------------: | +| [**爱发电**](https://afdian.com/a/l1nsn0w) | Pay | diff --git a/ech0/data.yml b/ech0/data.yml new file mode 100644 index 000000000..92ca12389 --- /dev/null +++ b/ech0/data.yml @@ -0,0 +1,19 @@ +name: ech0 +tags: + - 实用工具 +title: Ech0 - 开源、自托管、专注思想流动的轻量级发布平台 +description: Ech0 - 开源、自托管、专注思想流动的轻量级发布平台 +additionalProperties: + key: ech0 + name: ech0 + tags: + - Tool + shortDescZh: Ech0 是一款专为轻量级分享而设计的开源自托管平台,支持快速发布与分享你的想法、文字与链接。简单直观的操作界面,轻松管理你的内容,让分享变得更加自由,确保数据完全掌控,随时随地与世界连接。 + shortDescEn: Ech0 is an open source hosting platform designed for lightweight sharing, supporting the rapid publishing and sharing of your ideas, text and links. With a simple and intuitive interface, it's easy to manage your content, make sharing more free, ensure full control of your data, and connect with the world anytime, anywhere. + type: tool + crossVersionUpdate: true + limit: 1 + recommend: 0 + website: https://memo.vaaat.com/ + github: https://github.com/lin-snow/Ech0 + document: https://github.com/lin-snow/Ech0/blob/main/README.md diff --git a/ech0/latest/.env.sample b/ech0/latest/.env.sample new file mode 100644 index 000000000..b97016182 --- /dev/null +++ b/ech0/latest/.env.sample @@ -0,0 +1,4 @@ +CONTAINER_NAME="ech0" +DATA_PATH="./data" +PANEL_APP_PORT_HTTP="40120" +JWT_SECRET="secret" diff --git a/ech0/latest/data.yml b/ech0/latest/data.yml new file mode 100644 index 000000000..ecb3baf59 --- /dev/null +++ b/ech0/latest/data.yml @@ -0,0 +1,26 @@ +additionalProperties: + formFields: + - default: "./data" + edit: true + envKey: DATA_PATH + labelEn: Data Path + labelZh: 数据路径 + required: true + type: text + - default: 40120 + edit: true + envKey: PANEL_APP_PORT_HTTP + labelEn: Port + labelZh: 端口 + required: true + rule: paramPort + type: number + - default: "secret" + edit: true + envKey: JWT_SECRET + labelEn: JWT Secret + labelZh: JWT密钥 + random: true + required: true + rule: paramComplexity + type: password diff --git a/ech0/latest/docker-compose.yml b/ech0/latest/docker-compose.yml new file mode 100644 index 000000000..621c82293 --- /dev/null +++ b/ech0/latest/docker-compose.yml @@ -0,0 +1,15 @@ +services: + ech0: + image: sn0wl1n/ech0:latest + container_name: ${CONTAINER_NAME} + restart: always + ports: + - "${PANEL_APP_PORT_HTTP}:6277" + volumes: + - ${DATA_PATH}/data:/app/data + environment: + - JWT_SECRET="${JWT_SECRET}" + networks: + - 1panel-network + labels: + createdBy: "Apps" diff --git a/ech0/logo.png b/ech0/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..8ea37192452137714aef53dcbacc4223c8bea68b GIT binary patch literal 26132 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 m=1EpEK