Skip to content

Commit

Permalink
Merge pull request #282 from dianso/dev
Browse files Browse the repository at this point in the history
整理文档格式: README.md, docker-compose.yml
  • Loading branch information
xuewenG authored Feb 16, 2025
2 parents 0c8c035 + a59d60f commit bf4842f
Show file tree
Hide file tree
Showing 2 changed files with 97 additions and 132 deletions.
215 changes: 91 additions & 124 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,66 +1,66 @@
# Moments - 极简朋友圈
# 🌟 Moments - 极简朋友圈

[![release](https://img.shields.io/badge/release-更新记录-blue)](https://github.com/kingwrcy/moments/releases)
[![docker-release-status](https://img.shields.io/github/actions/workflow/status/kingwrcy/moments/docker-image-release.yml)](https://github.com/kingwrcy/moments/actions/workflows/docker-image-release.yml)
[![docker-pull](https://img.shields.io/docker/pulls/kingwrcy/moments)](https://hub.docker.com/repository/docker/kingwrcy/moments)
[![telegram-group](https://img.shields.io/badge/Telegram-group-blue)](https://t.me/simple_moments)
[![discussion](https://img.shields.io/badge/moments-论坛-blue)](https://discussion.mblog.club)

从 v0.2.1 开始,使用 Golang 重写了服务端,目前已经基本实现了 v0.2.0 版本的功能,同时软件包体积也更小了。
💡 **从 v0.2.1 开始,Moments 采用 Golang 重写服务端,包体积更小,功能更强!**
🔍 **仍需 v0.2.0 版本?[点这里](https://github.com/kingwrcy/moments/blob/master/README.md)**

注意:如果你在找 v0.2.0 版本,请 [点击这里](https://github.com/kingwrcy/moments/blob/master/README.md)
---

# 功能列表
## 🎯 功能亮点

## 用户
### 👤 用户系统
- 🏠 **默认账号**`admin/a123456`,登录后可在后台修改
- 👥 **支持多用户模式**,可控制是否允许注册

- 默认用户名和密码是 admin/a123456,登录后可以在后台修改
- 多用户模式,可以在后台打开或关闭用户注册功能
### 📝 Memo 记录
- 🔖 **标签管理**,让内容更清晰
- 🖼️ **支持图片上传**,可存储至本地或 S3
- 🖼️ **自动生成缩略图**(目前仅支持本地上传)
- 📝 **支持 Markdown 语法**,后续增加更多标签支持
- ❤️ **点赞 & 评论**,可在后台控制评论功能
- 🎵 **支持网易云音乐、B 站视频、外部链接嵌入**
- 📖 **支持豆瓣读书 & 豆瓣电影引用**

## Memo
### 🛠️ 其他功能
- 📱 **完美适配移动端**
- 🌙 **支持暗黑模式**
-**回到顶部按钮**
- 🗄️ **数据库采用 SQLite**,随时可备份
- 🖼️ **支持自定义头图、头像、网站标题**

- 支持设置标签
- 支持上传图片,可以上传到服务器,也可以在后台开启上传到 S3
- 支持生成缩略图,但是目前只支持直接上传到服务器时生成缩略图,将在后续版本中支持上传到 S3 时生成缩略图
- 支持 Markdown 语法,但是目前只适配了常用的几个标签,将在后续版本中支持更多的标签
- 支持点赞
- 支持评论,可以在后台打开或关闭评论功能
---

## 其他
## 🚀 快速上手

- 支持回到顶部按钮,PC 端和手机端都有
### 🛠️ 环境变量

更多说明可以[点击这里查看](https://discussion.mblog.club/post/pto2hqoFzDKzZMpvoPZKYuP)
Moments 支持以下 **环境变量** 进行配置:

# 使用教程
| 变量名 | 说明 | 默认值 |
|-----------------|---------------------|------------------------------------------------------|
| `PORT` | 监听端口 | `3000` |
| `JWT_KEY` | JWT 密钥 | **不填写则随机生成,重启后需重新登录** |
| `DB` | SQLite 数据库存放目录 | `db.sqlite`(默认 `/app/data/db.sqlite`|
| `UPLOAD_DIR` | 上传文件本地目录 | `upload`(默认 `/app/data/upload`|
| `LOG_LEVEL` | 日志级别 | `info`(可选 `debug`|
| `ENABLE_SWAGGER` | 启用 Swagger 文档 | `false`(可选 `true`,访问 `/swagger/index.html`|

## 环境变量

Moments 支持以下环境变量,可按需修改进行配置:

| 变量名 | 解释 | 默认值 |
| ----------------- | --------------------- | ------------------------------------------------------ |
| PORT | 监听端口 | 3000 |
| JWT_KEY | JWT 密钥 | 不填写则每次启动时随机生成,每次重启后需要重新登录 |
| DB | sqlite 数据库存放目录 | 工作目录下的 db.sqlite,/app/data/db.sqlite |
| UPLOAD_DIR | 上传文件本地目录 | 工作目录下的 upload,/app/data/upload |
| LOG_LEVEL | 日志级别 | info,可选 debug |
| ENABLE_SWAGGER | 是否启用 swagger 文档 | false,可选 true,启用后可访问路径 /swagger/index.html |
| ENABLE_SQL_OUTPUT | 是否启用 SQL 调试日志 | false |

除了直接配置环境变量外,还可以可选地在工作目录下创建 `.env` 文件,Moments 在启动时也会读取该文件来决定最终生效的配置,例如:

```
JWT_KEY=
**支持 `.env` 文件加载环境变量**,示例:
```env
JWT_KEY=your_secret_key
LOG_LEVEL=info
```

## 使用 Docker
---

注意:需要将以下示例中的 `$JWT_KEY` 替换为你的真实 `JWT_KEY`,生成方式可[参考这里](#jwt_key-生成)

使用命令行启动容器:
## 🐳 使用 Docker

🔹 **启动容器**(需替换 `$JWT_KEY`):
```bash
docker run -d \
-e PORT=3000 \
Expand All @@ -70,14 +70,10 @@ docker run -d \
--name moments \
kingwrcy/moments:latest
```
📌 **持久化数据:** `/app/data` 挂载至 `/var/moments`
📌 **可选:** `latest`(稳定版) 或 `dev`(开发版,功能前沿但相对不稳定)

注意:

- 容器默认的工作目录是 `/app/data`,所以示例中将 `/app/data` 目录挂载到主机的 `/var/moments` 目录,实现持久化数据的目的,可以按需修改
- 示例中使用的是 `latest` 标签来拉取最新的发布版;也可以通过 `dev` 标签来拉取最新的开发版,通常开发版会包含最新的功能和问题修复,但是相对于发布版的稳定较差
- 无论使用 `latest` 版本还是 `dev` 版本,我们都 _强烈建议将容器的数据持久化,并(定期或在升级前)备份到安全的介质中_

也可以使用 Docker Compose:
### 📝 使用 Docker Compose

```yaml
services:
Expand All @@ -94,130 +90,95 @@ services:
- /var/moments:/app/data # 持久化数据到主机的 /var/moments 目录,可以按需修改
```
## 使用可执行文件
首先在 [Release](https://github.com/kingwrcy/moments/releases) 列表根据自己的平台下载最新版本的可执行文件。
---
例如以下是用于 `windows-amd64` 的文件:
## 💻 可执行文件安装
| 文件名 | 说明 |
| -------------------------------------------- | ---------------------------------------------- |
| moments-windows-amd64-x.x.x.exe.zip | 包含可执行文件的压缩包,解压后可得到可执行文件 |
| moments-windows-amd64-x.x.x.exe-checksum.txt | 包含对应可执行文件的 `MD5` 校验码 |
🔽 **[下载最新版本](https://github.com/kingwrcy/moments/releases)**
下载并解压完成后,可以可选地检查可执行文件的校验码是否匹配,然后通过环境变量或 `.env` 文件进行配置,最后直接打开可执行文件即可。
> 示例(Windows 版):
## JWT_KEY 生成
| 文件名 | 说明 |
|----------------------------------------------|----------------------------------------------|
| `moments-windows-amd64-x.x.x.exe.zip` | **压缩包**,解压后可直接运行 |
| `moments-windows-amd64-x.x.x.exe-checksum.txt` | `MD5` 校验码,验证文件完整性 |

### 使用 OpenSSL
---

执行以下命令生成 (仅测试了 Linux):
## 🔑 生成 JWT_KEY

📌 **方法 1:OpenSSL**
```bash
openssl rand -hex 32
```

### 使用 SHA256

执行以下命令生成 (仅测试了 Linux):
```

📌 **方法 2:SHA256**
```bash
echo $RANDOM | sha256sum
```

### 在线生成

打开 [https://tool.lu/uuid](https://tool.lu/uuid) 生成不带 `-` 的 `UUID` 作为 `JWT_KEY`。

# 开发
```

## 环境
📌 **方法 3:在线生成**([点这里](https://tool.lu/uuid) 生成 UUID)

配置以下开发环境:
---

- Go 1.22.5(或更高)
- NodeJS 18(或更高)
- PNPM 包管理工具
## 🛠️ 开发

对于 `VSCode`,我们推荐安装以下插件:
### 🔧 依赖环境

- eamodio.gitlens
- esbenp.prettier-vscode
- dbaeumer.vscode-eslint
- Nuxtr.nuxt-vscode-extentions
- golang.go
- qwtel.sqlite-viewer
📌 **后端:** `Go 1.22.5+`
📌 **前端:** `NodeJS 18+`,推荐使用 `PNPM`
📌 **VSCode 推荐插件:**
- `gitlens`(Git 扩展)
- `prettier`(代码格式化)
- `eslint`(代码规范检查)
- `golang`(Go 语言支持)

另外,也可以直接通过 `VSCode` 的 [devcontainer](https://code.visualstudio.com/docs/devcontainers/containers) 来启动配置好的开发环境。
### 🏗️ 启动

## 启动

对于安装了 `make` 命令的用户,可以使用以下命令启动项目:

后端:
#### 1️⃣ 使用 `make`(推荐)

后端:
```bash
# 进入项目根目录
cd moments
# 编译并启动后端,注意此时的工作目录是项目根目录 moments
make backend-dev
```

单独创建一个终端,启动前端:

前端(新终端):
```bash
# 进入项目根目录
cd moments
# 安装前端依赖
make frontend-install
# 启动前端
make frontend-dev
```

如果没有 `make` 命令,也可以使用以下命令启动项目:

后端:
#### 2️⃣ 手动运行

后端:
```bash
# 进入后端目录
cd moments/backend
# 编译后端
go build -ldflags="-X main.version=local -X main.commitId=local" -o ./dist/moments
# 启动后端,注意此时的工作目录是后端目录 moments/backend
./dist/moments
```

单独创建一个终端,启动前端:

前端:
```bash
# 进入前端目录
cd moments/front
# 安装前端依赖
pnpm install
# 启动前端
pnpm run dev
```

## 访问
📍 启动后访问 `http://localhost:3000`

启动项目后可以通过 `http://localhost:3000` 来访问前端,并且开发环境的接口请求会通过前端代理转发到后端来避免跨域问题。
---

# 其他版本
## 🌐 其他版本

| 项目 | 演示地址 |
| --------------------------------------------------------------- | -------------------------------------------------------------------- |
|----------------------------------------------------------------|--------------------------------------------------------------------|
| [RandallAnjie/moments](https://github.com/RandallAnjie/moments) | [https://moments.randallanjie.com](https://moments.randallanjie.com) |

# Contributors
---

感谢这些贡献代码的朋友。
## ❤️ 致谢 Contributors

感谢所有贡献者!🎉

<!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section -->
<!-- prettier-ignore-start -->
Expand Down Expand Up @@ -251,6 +212,12 @@ pnpm run dev

This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!

# Star History
📌 **欢迎贡献!** 详情见 [all-contributors](https://github.com/all-contributors/all-contributors) 规范。

---

## ⭐ Star History

[![Star History](https://api.star-history.com/svg?repos=kingwrcy/moments&type=Date)](https://star-history.com/#kingwrcy/moments&Date)

[![Star History Chart](https://api.star-history.com/svg?repos=kingwrcy/moments&type=Date)](https://star-history.com/#kingwrcy/moments&Date)
🔥 **如果你觉得 Moments 还不错,欢迎点个 Star!** 🚀
14 changes: 6 additions & 8 deletions docker-compose.yml
Original file line number Diff line number Diff line change
@@ -1,14 +1,12 @@
version: '3'
services:
moments:
image: kingwrcy/moments:latest
container_name: moments
restart: always
environment:
JWT_KEY: "BbYS93dHHfIC1cQR8rI6"
PORT: 3000
JWT_KEY: $JWT_KEY
ports:
- "3000:3000"
- 3000:3000
volumes:
- moments-data:/app/data
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
volumes:
moments-data:
- /var/moments:/app/data # 持久化数据到主机的 /var/moments 目录,可以按需修改

0 comments on commit bf4842f

Please sign in to comment.