202 lines
3.9 KiB
Markdown
202 lines
3.9 KiB
Markdown
# Write Server - Hugo Blog Admin for Linux
|
||||
|
|
# 基于 Next.js 16 的 Hugo 博客管理后台 Linux 部署版本
|
|||
|
|
|
|||
|
|
这是一个为 Linux 服务器优化的 Hugo 博客管理后台,支持 Docker 部署和 systemd 服务管理。
|
|||
|
|
|
|||
|
|
## 特性
|
|||
|
|
|
|||
|
|
- 完整的博客管理功能(文章、评论、友链、订阅源等)
|
|||
|
|
- Docker 容器化部署
|
|||
|
|
- systemd 服务支持
|
|||
|
|
- Nginx 反向代理配置
|
|||
|
|
- 自动重启和健康检查
|
|||
|
|
- 日志管理
|
|||
|
|
- 备份策略
|
|||
|
|
|
|||
|
|
## 快速开始
|
|||
|
|
|
|||
|
|
### 方式一:Docker 部署(推荐)
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 1. 克隆项目
|
|||
|
|
git clone <your-repo-url>
|
|||
|
|
cd write-server
|
|||
|
|
|
|||
|
|
# 2. 配置环境变量
|
|||
|
|
cp .env.example .env
|
|||
|
|
nano .env # 编辑配置
|
|||
|
|
|
|||
|
|
# 3. 启动服务
|
|||
|
|
docker-compose up -d
|
|||
|
|
|
|||
|
|
# 4. 查看日志
|
|||
|
|
docker-compose logs -f
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 方式二:直接部署
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 1. 安装依赖
|
|||
|
|
./scripts/install.sh
|
|||
|
|
|
|||
|
|
# 2. 配置环境变量
|
|||
|
|
cp .env.example .env
|
|||
|
|
nano .env
|
|||
|
|
|
|||
|
|
# 3. 启动服务
|
|||
|
|
./scripts/start.sh
|
|||
|
|
|
|||
|
|
# 4. 设置开机自启
|
|||
|
|
sudo ./scripts/setup-service.sh
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 目录结构
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
write-server/
|
|||
|
|
├── src/ # 源代码
|
|||
|
|
├── public/ # 静态资源
|
|||
|
|
├── scripts/ # 部署脚本
|
|||
|
|
├── nginx/ # Nginx 配置
|
|||
|
|
├── systemd/ # systemd 服务文件
|
|||
|
|
├── backups/ # 备份目录
|
|||
|
|
├── logs/ # 日志目录
|
|||
|
|
├── Dockerfile # Docker 镜像配置
|
|||
|
|
├── docker-compose.yml # Docker Compose 配置
|
|||
|
|
├── .env.example # 环境变量模板
|
|||
|
|
└── README.md # 本文档
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 配置说明
|
|||
|
|
|
|||
|
|
### 环境变量
|
|||
|
|
|
|||
|
|
复制 `.env.example` 为 `.env`,并填写以下配置:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 博客根目录(Hugo 项目路径)
|
|||
|
|
BLOG_ROOT=/path/to/your/hugo/blog
|
|||
|
|
|
|||
|
|
# 服务端口
|
|||
|
|
PORT=8016
|
|||
|
|
|
|||
|
|
# Artalk 评论系统
|
|||
|
|
ARTALK_SERVER=https://artalk.your-domain.com
|
|||
|
|
ARTALK_SITE=Your Site Name
|
|||
|
|
|
|||
|
|
# Telegram Bot(可选)
|
|||
|
|
TG_BOT_TOKEN=your-bot-token
|
|||
|
|
TG_ALLOWED_CHAT_IDS=your-chat-id
|
|||
|
|
|
|||
|
|
# 微信公众号(可选)
|
|||
|
|
WECHAT_APP_ID=your-app-id
|
|||
|
|
WECHAT_APP_SECRET=your-app-secret
|
|||
|
|
|
|||
|
|
# AI 配置(可选)
|
|||
|
|
DEEPSEEK_API_KEY=your-api-key
|
|||
|
|
DEEPSEEK_BASE_URL=https://api.deepseek.com
|
|||
|
|
DEEPSEEK_MODEL=deepseek-chat
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### Nginx 配置
|
|||
|
|
|
|||
|
|
如果需要域名访问,参考 `nginx/write-server.conf` 配置 Nginx 反向代理。
|
|||
|
|
|
|||
|
|
## 管理命令
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# Docker 方式
|
|||
|
|
docker-compose up -d # 启动
|
|||
|
|
docker-compose down # 停止
|
|||
|
|
docker-compose restart # 重启
|
|||
|
|
docker-compose logs -f # 查看日志
|
|||
|
|
docker-compose ps # 查看状态
|
|||
|
|
|
|||
|
|
# systemd 方式
|
|||
|
|
sudo systemctl start write-server # 启动
|
|||
|
|
sudo systemctl stop write-server # 停止
|
|||
|
|
sudo systemctl restart write-server # 重启
|
|||
|
|
sudo systemctl status write-server # 查看状态
|
|||
|
|
sudo journalctl -u write-server -f # 查看日志
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 备份与恢复
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 手动备份
|
|||
|
|
./scripts/backup.sh
|
|||
|
|
|
|||
|
|
# 恢复备份
|
|||
|
|
./scripts/restore.sh backups/write-server-20260101.tar.gz
|
|||
|
|
|
|||
|
|
# 自动备份(已配置 cron)
|
|||
|
|
crontab -l # 查看定时任务
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 更新升级
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 拉取最新代码
|
|||
|
|
git pull
|
|||
|
|
|
|||
|
|
# Docker 方式
|
|||
|
|
docker-compose build --no-cache
|
|||
|
|
docker-compose up -d
|
|||
|
|
|
|||
|
|
# 直接部署方式
|
|||
|
|
npm install
|
|||
|
|
npm run build
|
|||
|
|
sudo systemctl restart write-server
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 故障排查
|
|||
|
|
|
|||
|
|
### 查看日志
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 应用日志
|
|||
|
|
tail -f logs/app.log
|
|||
|
|
|
|||
|
|
# PM2 日志(直接部署方式)
|
|||
|
|
pm2 logs write-server
|
|||
|
|
|
|||
|
|
# Docker 日志
|
|||
|
|
docker-compose logs -f
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 常见问题
|
|||
|
|
|
|||
|
|
1. **端口被占用**
|
|||
|
|
```bash
|
|||
|
|
lsof -i :8016
|
|||
|
|
kill -9 <PID>
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
2. **权限问题**
|
|||
|
|
```bash
|
|||
|
|
sudo chown -R $USER:$USER /path/to/blog
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
3. **Hugo 未安装**
|
|||
|
|
```bash
|
|||
|
|
# 参考 scripts/install.sh 安装 Hugo
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 安全建议
|
|||
|
|
|
|||
|
|
1. 使用 HTTPS(配置 SSL 证书)
|
|||
|
|
2. 限制访问 IP(防火墙或 Nginx 配置)
|
|||
|
|
3. 定期更新依赖
|
|||
|
|
4. 启用访问日志
|
|||
|
|
5. 配置 fail2ban 防暴力破解
|
|||
|
|
|
|||
|
|
## 性能优化
|
|||
|
|
|
|||
|
|
1. 启用 Gzip 压缩
|
|||
|
|
2. 配置 CDN
|
|||
|
|
3. 使用 PM2 集群模式
|
|||
|
|
4. 配置 Redis 缓存(可选)
|
|||
|
|
|
|||
|
|
## 许可证
|
|||
|
|
|
|||
|
|
MIT License
|