docker
This commit is contained in:
1 parent
043898966b
commit
ba023d248d
2 files changed
+148
-83
No files matched your search
+122
-72
@@ -2,7 +2,58 @@
|
||||
|
||||
## 📦 快速开始
|
||||
|
||||
### 使用 Docker Compose(推荐)
|
||||
### 使用预构建镜像(推荐)
|
||||
|
||||
直接使用 GitHub Actions 自动构建的镜像,无需本地构建:
|
||||
|
||||
```bash
|
||||
# 拉取最新镜像
|
||||
docker pull ghcr.io/assast/outlookemail:latest
|
||||
|
||||
# 运行容器
|
||||
docker run -d \
|
||||
--name outlook-mail-reader \
|
||||
-p 5000:5000 \
|
||||
-v $(pwd)/data:/app/data \
|
||||
-e LOGIN_PASSWORD=admin123 \
|
||||
ghcr.io/assast/outlookemail:latest
|
||||
|
||||
# 查看日志
|
||||
docker logs -f outlook-mail-reader
|
||||
|
||||
# 停止容器
|
||||
docker stop outlook-mail-reader
|
||||
docker rm outlook-mail-reader
|
||||
```
|
||||
|
||||
**首次启动会自动:**
|
||||
- 创建数据目录
|
||||
- 初始化数据库
|
||||
- 创建默认分组
|
||||
- 设置默认密码(admin123)
|
||||
|
||||
### 使用 Docker Compose
|
||||
|
||||
修改 `docker-compose.yml` 使用预构建镜像:
|
||||
|
||||
```yaml
|
||||
version: '3.8'
|
||||
|
||||
services:
|
||||
outlook-mail-reader:
|
||||
image: ghcr.io/assast/outlookemail:latest
|
||||
container_name: outlook-mail-reader
|
||||
ports:
|
||||
- "5000:5000"
|
||||
volumes:
|
||||
- ./data:/app/data
|
||||
environment:
|
||||
- LOGIN_PASSWORD=admin123
|
||||
- FLASK_ENV=production
|
||||
restart: unless-stopped
|
||||
```
|
||||
|
||||
然后启动服务:
|
||||
|
||||
```bash
|
||||
# 启动服务
|
||||
@@ -15,25 +66,6 @@ docker-compose logs -f
|
||||
docker-compose down
|
||||
```
|
||||
|
||||
### 使用 Docker 命令
|
||||
|
||||
```bash
|
||||
# 构建镜像
|
||||
docker build -t outlook-mail-reader .
|
||||
|
||||
# 运行容器
|
||||
docker run -d \
|
||||
--name outlook-mail-reader \
|
||||
-p 5000:5000 \
|
||||
-v $(pwd)/data:/app/data \
|
||||
-e LOGIN_PASSWORD=your_password \
|
||||
outlook-mail-reader
|
||||
|
||||
# 停止容器
|
||||
docker stop outlook-mail-reader
|
||||
docker rm outlook-mail-reader
|
||||
```
|
||||
|
||||
## 🔧 配置说明
|
||||
|
||||
### 环境变量
|
||||
@@ -61,44 +93,44 @@ ports:
|
||||
- "8080:5000" # 将容器的 5000 端口映射到主机的 8080 端口
|
||||
```
|
||||
|
||||
## 🚀 GitHub Actions 自动构建
|
||||
## 🚀 镜像说明
|
||||
|
||||
项目已配置 GitHub Actions,当代码推送到 `main` 或 `master` 分支时,会自动构建并推送 Docker 镜像到 `ghcr.io/assast/outlookemail:latest`。
|
||||
项目使用 GitHub Actions 自动构建并推送 Docker 镜像到 `ghcr.io/assast/outlookemail:latest`。
|
||||
|
||||
### 使用预构建镜像
|
||||
### 可用镜像标签
|
||||
|
||||
- `ghcr.io/assast/outlookemail:latest` - 最新的主分支构建(推荐)
|
||||
- `ghcr.io/assast/outlookemail:main` - main 分支最新版本
|
||||
- `ghcr.io/assast/outlookemail:master` - master 分支最新版本
|
||||
|
||||
### 更新镜像
|
||||
|
||||
```bash
|
||||
# 拉取镜像
|
||||
# 拉取最新镜像
|
||||
docker pull ghcr.io/assast/outlookemail:latest
|
||||
|
||||
# 运行容器
|
||||
# 重启容器
|
||||
docker-compose down
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
### 自己构建镜像(可选)
|
||||
|
||||
如果需要修改代码或自定义构建:
|
||||
|
||||
```bash
|
||||
# 构建镜像
|
||||
docker build -t outlook-mail-reader .
|
||||
|
||||
# 运行自己构建的镜像
|
||||
docker run -d \
|
||||
--name outlook-mail-reader \
|
||||
-p 5000:5000 \
|
||||
-v $(pwd)/data:/app/data \
|
||||
-e LOGIN_PASSWORD=your_password \
|
||||
ghcr.io/assast/outlookemail:latest
|
||||
-e LOGIN_PASSWORD=admin123 \
|
||||
outlook-mail-reader
|
||||
```
|
||||
|
||||
### 使用生产配置
|
||||
|
||||
```bash
|
||||
# 使用 docker-compose.prod.yml
|
||||
docker-compose -f docker-compose.prod.yml up -d
|
||||
```
|
||||
|
||||
### 触发构建
|
||||
|
||||
- 推送代码到 `main` 或 `master` 分支
|
||||
- 修改 `*.py`、`requirements.txt`、`Dockerfile`、`templates/**` 文件
|
||||
- 手动触发(在 Actions 页面点击 "Run workflow")
|
||||
|
||||
### 镜像标签
|
||||
|
||||
- `latest` - 最新的主分支构建
|
||||
- `main` 或 `master` - 分支名称
|
||||
- `main-<commit-sha>` - 分支名+提交哈希
|
||||
|
||||
## 🌐 生产环境部署
|
||||
|
||||
### 使用 Nginx + HTTPS
|
||||
@@ -188,21 +220,21 @@ location / {
|
||||
**解决方法:**
|
||||
|
||||
```bash
|
||||
# 1. 重新构建镜像(已修复健康检查)
|
||||
docker-compose down
|
||||
docker-compose build
|
||||
docker-compose up -d
|
||||
|
||||
# 2. 查看健康检查日志
|
||||
# 1. 查看健康检查日志
|
||||
docker inspect outlook-mail-reader | grep -A 10 Health
|
||||
|
||||
# 3. 手动测试
|
||||
# 2. 手动测试
|
||||
docker exec outlook-mail-reader curl -f http://localhost:5000/login
|
||||
|
||||
# 3. 使用最新镜像重启
|
||||
docker pull ghcr.io/assast/outlookemail:latest
|
||||
docker-compose down
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
### 502 错误(Nginx)
|
||||
|
||||
**原因:** 应用未正常启动或使用了 Flask 开发服务器
|
||||
**原因:** 应用未正常启动
|
||||
|
||||
**解决方法:**
|
||||
|
||||
@@ -216,9 +248,9 @@ docker-compose logs
|
||||
# 3. 测试应用是否响应
|
||||
curl http://localhost:5000/login
|
||||
|
||||
# 4. 重新构建(使用 Gunicorn)
|
||||
# 4. 重新拉取镜像并重启
|
||||
docker pull ghcr.io/assast/outlookemail:latest
|
||||
docker-compose down
|
||||
docker-compose build
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
@@ -230,17 +262,28 @@ docker-compose up -d
|
||||
[INFO] Booting worker with pid: 7
|
||||
```
|
||||
|
||||
### 容器无法启动
|
||||
### 数据库表不存在错误
|
||||
|
||||
**错误信息:** `sqlite3.OperationalError: no such table: settings`
|
||||
|
||||
**原因:** 数据库未初始化
|
||||
|
||||
**解决方法:**
|
||||
|
||||
```bash
|
||||
# 查看日志
|
||||
docker-compose logs
|
||||
# 方法 1:删除旧数据库,重新初始化
|
||||
docker-compose down
|
||||
rm -rf data/outlook_accounts.db
|
||||
docker-compose up -d
|
||||
|
||||
# 检查端口占用
|
||||
lsof -i :5000
|
||||
# 方法 2:手动初始化数据库
|
||||
docker exec outlook-mail-reader python -c "from web_outlook_app import init_db; init_db()"
|
||||
docker-compose restart
|
||||
|
||||
# 检查数据目录权限
|
||||
chmod 755 ./data
|
||||
# 方法 3:使用最新镜像
|
||||
docker pull ghcr.io/assast/outlookemail:latest
|
||||
docker-compose down
|
||||
docker-compose up -d
|
||||
```
|
||||
|
||||
### 数据库问题
|
||||
@@ -254,18 +297,25 @@ docker-compose up -d
|
||||
|
||||
## 🔄 更新应用
|
||||
|
||||
### 从源码更新
|
||||
|
||||
```bash
|
||||
git pull
|
||||
docker-compose up -d --build
|
||||
```
|
||||
|
||||
### 从镜像更新
|
||||
### 更新到最新版本
|
||||
|
||||
```bash
|
||||
# 拉取最新镜像
|
||||
docker pull ghcr.io/assast/outlookemail:latest
|
||||
docker-compose -f docker-compose.prod.yml up -d
|
||||
|
||||
# 重启服务
|
||||
docker-compose down
|
||||
docker-compose up -d
|
||||
|
||||
# 或使用 Docker 命令
|
||||
docker stop outlook-mail-reader
|
||||
docker rm outlook-mail-reader
|
||||
docker run -d \
|
||||
--name outlook-mail-reader \
|
||||
-p 5000:5000 \
|
||||
-v $(pwd)/data:/app/data \
|
||||
-e LOGIN_PASSWORD=admin123 \
|
||||
ghcr.io/assast/outlookemail:latest
|
||||
```
|
||||
|
||||
## 📚 相关文档
|
||||
|
||||
+26
-11
@@ -49,6 +49,32 @@ GPTMAIL_API_KEY = os.getenv("GPTMAIL_API_KEY", "gpt-test") # 测试 API Key,
|
||||
TEMP_EMAIL_GROUP_ID = -1
|
||||
|
||||
|
||||
# ==================== 应用初始化 ====================
|
||||
|
||||
def init_app():
|
||||
"""初始化应用(确保目录和数据库存在)"""
|
||||
# 确保 templates 目录存在
|
||||
os.makedirs('templates', exist_ok=True)
|
||||
|
||||
# 确保数据目录存在
|
||||
data_dir = os.path.dirname(DATABASE)
|
||||
if data_dir:
|
||||
os.makedirs(data_dir, exist_ok=True)
|
||||
|
||||
# 初始化数据库
|
||||
init_db()
|
||||
|
||||
print("=" * 60)
|
||||
print("Outlook 邮件 Web 应用已初始化")
|
||||
print(f"数据库文件: {DATABASE}")
|
||||
print(f"GPTMail API: {GPTMAIL_BASE_URL}")
|
||||
print("=" * 60)
|
||||
|
||||
|
||||
# 在模块加载时初始化应用
|
||||
init_app()
|
||||
|
||||
|
||||
# ==================== 数据库操作 ====================
|
||||
|
||||
def get_db():
|
||||
@@ -1553,15 +1579,6 @@ def api_update_settings():
|
||||
# ==================== 主程序 ====================
|
||||
|
||||
if __name__ == '__main__':
|
||||
# 确保 templates 目录存在
|
||||
os.makedirs('templates', exist_ok=True)
|
||||
|
||||
# 确保数据目录存在
|
||||
os.makedirs('data', exist_ok=True)
|
||||
|
||||
# 初始化数据库
|
||||
init_db()
|
||||
|
||||
# 从环境变量获取配置
|
||||
port = int(os.getenv('PORT', 5000))
|
||||
host = os.getenv('HOST', '0.0.0.0')
|
||||
@@ -1571,8 +1588,6 @@ if __name__ == '__main__':
|
||||
print("Outlook 邮件 Web 应用")
|
||||
print("=" * 60)
|
||||
print(f"访问地址: http://{host}:{port}")
|
||||
print(f"数据库文件: {DATABASE}")
|
||||
print(f"GPTMail API: {GPTMAIL_BASE_URL}")
|
||||
print(f"运行模式: {'开发' if debug else '生产'}")
|
||||
print("=" * 60)
|
||||
|
||||
|
||||
Reference in new issue
Block a user