docker file

This commit is contained in:
jeremygan2021
2025-11-16 18:10:29 +08:00
parent 1678d67cfa
commit 6dc4d0699a
7 changed files with 243 additions and 5 deletions

65
.dockerignore Normal file
View File

@@ -0,0 +1,65 @@
# Python
__pycache__/
*.py[cod]
*$py.class
*.so
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg
# Virtual Environment
venv/
env/
ENV/
# IDE
.vscode/
.idea/
*.swp
*.swo
*~
# OS
.DS_Store
Thumbs.db
# Git
.git/
.gitignore
# Docker
Dockerfile*
docker-compose*
.dockerignore
# Documentation
README.md
*.md
# Logs
*.log
# Environment
.env
.env.*
# Cache
.cache/
.pytest_cache/
# Temporary files
*.tmp
*.temp

32
.env.docker Normal file
View File

@@ -0,0 +1,32 @@
# Docker环境变量配置文件
# 数据库配置 - 使用外部数据库
DATABASE_URL=postgresql://luna:123luna@121.43.104.161:6432/luna
# MQTT配置 - 使用Docker内部服务名
MQTT_BROKER_HOST=luna-mqtt
MQTT_BROKER_PORT=1883
# MQTT_USERNAME=
# MQTT_PASSWORD=
# 应用配置
APP_NAME=墨水屏桌面屏幕系统
DEBUG=false
# 文件存储配置
STATIC_DIR=static
UPLOAD_DIR=static/uploads
PROCESSED_DIR=static/processed
# 墨水屏配置
INK_WIDTH=400
INK_HEIGHT=300
# 安全配置
SECRET_KEY=your-secret-key-change-in-production
ALGORITHM=HS256
ACCESS_TOKEN_EXPIRE_MINUTES=30
# 管理员配置
ADMIN_USERNAME=userName
ADMIN_PASSWORD=userPassword

View File

@@ -1,7 +1,7 @@
# 环境变量配置文件
# 数据库配置
DATABASE_URL=postgresql://luna:123luna@121.43.104.161:6432/luna_ink
DATABASE_URL=postgresql://luna:123luna@121.43.104.161:6432/luna
# MQTT配置
MQTT_BROKER_HOST=localhost
@@ -23,10 +23,10 @@ INK_WIDTH=400
INK_HEIGHT=300
# 安全配置
SECRET_KEY=your-secret-key-change-in-production
SECRET_KEY=123tangledup-ai
ALGORITHM=HS256
ACCESS_TOKEN_EXPIRE_MINUTES=30
# 管理员配置
ADMIN_USERNAME=userName
ADMIN_PASSWORD=userPassword
ADMIN_USERNAME=admin
ADMIN_PASSWORD=123456

39
Dockerfile Normal file
View File

@@ -0,0 +1,39 @@
# 使用官方Python基础镜像配置国内镜像源
FROM python:3.12-slim
# 设置工作目录
WORKDIR /app
# 设置环境变量
ENV PYTHONDONTWRITEBYTECODE=1 \
PYTHONUNBUFFERED=1 \
PIP_NO_CACHE_DIR=1 \
PIP_DISABLE_PIP_VERSION_CHECK=1
# 使用国内pip镜像源
RUN pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/ && \
pip config set global.trusted-host mirrors.aliyun.com
# 使用国内apt镜像源
RUN sed -i 's/deb.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list.d/debian.sources && \
apt-get update && \
apt-get install -y --no-install-recommends \
gcc \
libpq-dev \
&& rm -rf /var/lib/apt/lists/*
# 复制requirements文件并安装Python依赖
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# 复制项目文件
COPY . .
# 创建必要的目录
RUN mkdir -p static/uploads static/processed
# 暴露端口
EXPOSE 9999
# 启动命令
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "9999"]

58
README-Docker.md Normal file
View File

@@ -0,0 +1,58 @@
# Docker 部署指南
本项目已配置 Docker 和 Docker Compose可以一键部署整个应用环境。
## 快速启动
1. 确保已安装 Docker 和 Docker Compose
2. 在项目根目录执行以下命令:
```bash
# 构建并启动所有服务
docker-compose up -d
# 查看服务状态
docker-compose ps
# 查看应用日志
docker-compose logs -f luna-app
```
3. 访问应用:
- API 文档http://localhost:9999/docs
- 管理后台http://localhost:9999/admin
## 服务说明
- **luna-app**: 主应用服务,运行在 9999 端口
- **luna-mqtt**: MQTT 服务,运行在 1883 端口
注意本项目使用外部PostgreSQL数据库数据库地址已在.env.docker文件中配置。
## 停止服务
```bash
# 停止所有服务
docker-compose down
# 停止并删除数据卷(注意:这将删除所有数据)
docker-compose down -v
```
## 注意事项
1. 首次启动可能需要几分钟等待数据库初始化完成
2. 应用配置通过.env.docker文件传递该文件已配置为使用Docker内部服务名
3. 静态文件通过 volume 挂载,可以直接在宿主机修改
4. 数据持久化通过 Docker volumes 实现
5. 如需修改配置,请编辑.env.docker文件而不是.env文件
## 国内镜像源
本项目已配置使用国内镜像源,包括:
- Python 基础镜像:阿里云镜像
- pip 包源:阿里云 pip 源
- PostgreSQL阿里云镜像
- Mosquitto阿里云镜像
这样可以大大提高在国内的构建和拉取速度。

42
docker-compose.yml Normal file
View File

@@ -0,0 +1,42 @@
services:
# 主应用服务
luna-app:
build:
context: .
dockerfile: Dockerfile
container_name: luna-app
ports:
- "9999:9999"
volumes:
- ./static:/app/static
env_file:
- .env.docker
depends_on:
- luna-mqtt
restart: unless-stopped
networks:
- luna-network
# MQTT服务 (使用Eclipse Mosquitto)
luna-mqtt:
image: eclipse-mosquitto:2.0
container_name: luna-mqtt
ports:
- "1883:1883"
- "9001:9001"
volumes:
- mosquitto_data:/mosquitto/data
- mosquitto_logs:/mosquitto/log
restart: unless-stopped
networks:
- luna-network
# 数据卷
volumes:
mosquitto_data:
mosquitto_logs:
# 网络
networks:
luna-network:
driver: bridge

View File

@@ -10,4 +10,6 @@ pydantic-settings==2.1.0
python-jose[cryptography]==3.3.0
passlib[bcrypt]==1.7.4
aiofiles==23.2.1
httpx==0.25.2
httpx==0.25.2
itsdangerous==2.1.2
jinja2==3.1.2