-
Notifications
You must be signed in to change notification settings - Fork 45
Expand file tree
/
Copy pathDockerfile
More file actions
142 lines (122 loc) · 6.05 KB
/
Copy pathDockerfile
File metadata and controls
142 lines (122 loc) · 6.05 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
FROM python:3.10-slim AS server
WORKDIR /app
ENV PYTHONUNBUFFERED=1 \
PYTHONDONTWRITEBYTECODE=1 \
PIP_NO_CACHE_DIR=1 \
PYTHONPATH=/app
RUN set -eux; \
printf '%s\n' \
"deb https://mirrors.tuna.tsinghua.edu.cn/debian trixie main contrib non-free" \
"deb https://mirrors.tuna.tsinghua.edu.cn/debian trixie-updates main contrib non-free" \
"deb https://mirrors.tuna.tsinghua.edu.cn/debian-security trixie-security main contrib non-free" \
> /etc/apt/sources.list; \
rm -f /etc/apt/sources.list.d/*; \
apt-get update; \
apt-get install -y --no-install-recommends build-essential; \
rm -rf /var/lib/apt/lists/*
COPY requirements.txt .
RUN python -m pip install --upgrade pip -i https://mirrors.ustc.edu.cn/pypi/simple && \
pip install -r requirements.txt -i https://mirrors.ustc.edu.cn/pypi/simple
COPY gustobot ./gustobot
COPY data ./data
COPY scripts ./scripts
COPY scripts/backend_entrypoint.sh ./backend_entrypoint.sh
RUN chmod +x /app/backend_entrypoint.sh && \
sed -i 's/\r$//' /app/backend_entrypoint.sh
# Build-time arguments for LightRAG initialization (使用 .env 文件中的变量名)
ARG INIT_LIGHTRAG_ON_BUILD=false
ARG LLM_API_KEY
ARG LLM_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1
ARG LLM_MODEL=qwen3-max
ARG EMBEDDING_API_KEY
ARG EMBEDDING_MODEL=qwen/qwen3-embedding-8b
ARG EMBEDDING_BASE_URL=http://139.224.116.116:3000/v1
ARG EMBEDDING_DIMENSION=4096
ARG LIGHTRAG_INIT_LIMIT=1000
# Persist configuration for runtime
ENV LLM_BASE_URL=${LLM_BASE_URL}
ENV LLM_MODEL=${LLM_MODEL}
ENV EMBEDDING_MODEL=${EMBEDDING_MODEL}
ENV EMBEDDING_BASE_URL=${EMBEDDING_BASE_URL}
ENV EMBEDDING_DIMENSION=${EMBEDDING_DIMENSION}
ENV LIGHTRAG_BOOTSTRAP_DIR=/app/bootstrap/lightrag_template
# Initialize LightRAG data during build (if enabled)
# LightRAG 需要 OPENAI_API_KEY 环境变量,所以这里做映射
RUN if [ "$INIT_LIGHTRAG_ON_BUILD" = "true" ] && [ -n "$LLM_API_KEY" ]; then \
echo "========================================"; \
echo "Initializing LightRAG during build..."; \
echo "========================================"; \
mkdir -p ${LIGHTRAG_BOOTSTRAP_DIR} /app/data/lightrag; \
export OPENAI_API_KEY=${LLM_API_KEY}; \
export OPENAI_API_BASE=${LLM_BASE_URL}; \
export OPENAI_MODEL=${LLM_MODEL}; \
export EMBEDDING_API_KEY=${EMBEDDING_API_KEY}; \
export EMBEDDING_MODEL=${EMBEDDING_MODEL}; \
export EMBEDDING_BASE_URL=${EMBEDDING_BASE_URL}; \
export EMBEDDING_DIMENSION=${EMBEDDING_DIMENSION}; \
export LIGHTRAG_WORKING_DIR=${LIGHTRAG_BOOTSTRAP_DIR}; \
python scripts/init_lightrag.py \
--source json \
--json-path /app/data/recipe.json \
${LIGHTRAG_INIT_LIMIT:+--limit $LIGHTRAG_INIT_LIMIT} && \
cp -a ${LIGHTRAG_BOOTSTRAP_DIR}/. /app/data/lightrag/ && \
echo "========================================"; \
echo "LightRAG initialization completed!"; \
echo "Generated files:"; \
ls -lh /app/data/lightrag/; \
echo "========================================"; \
else \
echo "Skipping LightRAG initialization during build"; \
echo " INIT_LIGHTRAG_ON_BUILD=${INIT_LIGHTRAG_ON_BUILD}"; \
echo " LLM_API_KEY set: $([ -n \"${LLM_API_KEY}\" ] && echo 'yes' || echo 'no')"; \
mkdir -p ${LIGHTRAG_BOOTSTRAP_DIR} /app/data/lightrag; \
fi
# Unset API keys for security
ENV LLM_API_KEY=your_api_key_here
ENV EMBEDDING_API_KEY=your_api_key_here
EXPOSE 8000
ENTRYPOINT ["./backend_entrypoint.sh"]
CMD ["uvicorn", "gustobot.main:application", "--host", "0.0.0.0", "--port", "8000"]
FROM neo4j:5.18 AS neo4j_seeded
USER root
# Use faster mirror and install Python
RUN sed -i 's|http://deb.debian.org|https://mirrors.tuna.tsinghua.edu.cn|g' /etc/apt/sources.list && \
sed -i 's|http://security.debian.org|https://mirrors.tuna.tsinghua.edu.cn|g' /etc/apt/sources.list && \
apt-get update && \
apt-get install -y --no-install-recommends python3 python3-pip curl && \
rm -rf /var/lib/apt/lists/*
# Install APOC plugin for Neo4j
ARG APOC_VERSION=5.18.0
COPY neo4j_plugins/apoc-${APOC_VERSION}.jar /var/lib/neo4j/plugins/
RUN ln -sf /var/lib/neo4j/plugins/apoc-${APOC_VERSION}.jar /var/lib/neo4j/plugins/apoc.jar
WORKDIR /var/lib/neo4j/build
COPY data ./data
COPY scripts ./scripts
COPY gustobot/infrastructure/knowledge/recipe_kg ./gustobot/infrastructure/knowledge/recipe_kg
ENV PYTHONPATH=/var/lib/neo4j/build
RUN mkdir -p ./import_generated && \
rm -rf ./gustobot/infrastructure/knowledge/recipe_kg/__pycache__ && \
chown -R neo4j:neo4j /var/lib/neo4j/build
USER neo4j
RUN python3 scripts/recipe_kg_to_csv.py --recipe-json data/recipe.json --ingredient-json data/excipients.json --output-dir import_generated
USER root
RUN rm -rf /data/databases /data/transactions && mkdir -p /data/databases /data/transactions && chown -R neo4j:neo4j /data
USER neo4j
RUN neo4j-admin database import full --overwrite-destination=true --multiline-fields=true neo4j \
--nodes=Dish=import_generated/dish_nodes.csv \
--nodes=Ingredient=import_generated/ingredient_nodes.csv \
--nodes=Flavor=import_generated/flavor_nodes.csv \
--nodes=CookingMethod=import_generated/method_nodes.csv \
--nodes=DishType=import_generated/type_nodes.csv \
--nodes=CookingStep=import_generated/step_nodes.csv \
--nodes=NutritionProfile=import_generated/nutrition_nodes.csv \
--nodes=HealthBenefit=import_generated/benefit_nodes.csv \
--relationships=HAS_MAIN_INGREDIENT=import_generated/rel_has_main.csv \
--relationships=HAS_AUX_INGREDIENT=import_generated/rel_has_aux.csv \
--relationships=HAS_FLAVOR=import_generated/rel_has_flavor.csv \
--relationships=USES_METHOD=import_generated/rel_uses_method.csv \
--relationships=BELONGS_TO_TYPE=import_generated/rel_belongs_type.csv \
--relationships=HAS_STEP=import_generated/rel_has_step.csv \
--relationships=HAS_NUTRITION_PROFILE=import_generated/rel_has_nutrition.csv \
--relationships=HAS_HEALTH_BENEFIT=import_generated/rel_has_benefit.csv
WORKDIR /var/lib/neo4j