-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathDockerfile
More file actions
106 lines (89 loc) · 4.89 KB
/
Copy pathDockerfile
File metadata and controls
106 lines (89 loc) · 4.89 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
# URbot (Bot_Base + Bot_Planning_python + Bot_Presentation) — dockerized
#
# Reproduit la structure trouvée sur le VPS dans /usr/local/src/URbot :
# bot/urbot.py <- coeur du bot (repo Bot_Base ; fichier réel en
# minuscules malgré la casse "URbot" mentionnée
# dans l'investigation initiale, cf. start.py)
# bot/cogs/cog_planning <- copié depuis Bot_Planning_python/src/cog_planning (add_repo.sh)
# bot/cogs/cog_presentation <- copié depuis Bot_Presentation/src/cog_presentation (add_repo.sh)
# urpy/ <- lib interne installée dans site-packages (requirements.txt ici)
# start.py <- point d'entrée : "from bot.urbot import main"
#
# Version Python : 3.7, identique à celle codée en dur dans Bot_Base/install.sh
# ($python='python3.7'), qui est la version utilisée pour créer le venv du bot
# sur le VPS (/opt/virtualenv/URBot), même si le système hôte a depuis été mis
# à niveau vers Python 3.13.5.
#
# Build multi-stage : gcc/build-essential/git/headers -dev ne servent qu'à
# compiler lxml, jamais à l'exécution. Les garder dans l'image finale
# coûtait ~440MB pour rien (mesuré sur l'image mono-stage). Le stage final
# ne garde que les .so runtime (libxml2/libxslt1.1) et le résultat déjà
# construit.
FROM python:3.7-slim AS builder
# Dépendances système équivalentes à celles installées par install.sh
# (python3.7-dev / build-essential) pour compiler les paquets natifs (lxml).
RUN apt-get update && apt-get install -y --no-install-recommends \
git \
build-essential \
libxml2-dev \
libxslt1-dev \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /usr/local/src
# --- Récupération des 3 repos ---
# Clone direct depuis GitHub (même source que add_repo.sh sur le VPS :
# https://github.com/UnionRolistes/<repo>.git), pour rester fidèle au
# processus d'assemblage réel plutôt que de dépendre d'un contexte de build
# local qui devrait déjà contenir les 3 repos en sous-dossiers.
ARG GIT_ORG=https://github.com/UnionRolistes
RUN git clone --depth 1 ${GIT_ORG}/Bot_Base.git Bot_Base \
&& git clone --depth 1 ${GIT_ORG}/Bot_Planning_python.git Bot_Planning_python \
&& git clone --depth 1 ${GIT_ORG}/Bot_Presentation.git Bot_Presentation
# --- Assemblage façon add_repo.sh : URbot = Bot_Base + cogs copiés dedans ---
RUN mkdir -p URbot \
&& cp -r Bot_Base/src/. URbot/ \
&& mkdir -p URbot/bot/cogs \
&& cp -r Bot_Planning_python/src/cog_planning URbot/bot/cogs/cog_planning \
&& cp -r Bot_Presentation/src/cog_presentation URbot/bot/cogs/cog_presentation
WORKDIR /usr/local/src/URbot
# --- Dépendances Python : combinaison des 3 requirements.txt trouvés ---
# - urpy/requirements.txt (Bot_Base) : discord, requests, lxml
# - cog_planning/requirements.txt : vide (aucune dépendance déclarée)
# - cog_presentation/requirements.txt : vide (aucune dépendance déclarée)
RUN cat urpy/requirements.txt \
bot/cogs/cog_planning/requirements.txt \
bot/cogs/cog_presentation/requirements.txt \
2>/dev/null | sed '/^\s*$/d' | sort -u > /tmp/requirements.txt \
&& cat /tmp/requirements.txt \
&& pip install --no-cache-dir -r /tmp/requirements.txt
# urpy est une lib interne copiée dans site-packages sur le VPS
# (venv/lib/$python/site-packages) ; on reproduit ça ici.
RUN cp -r urpy "$(python3 -c 'import site; print(site.getsitepackages()[0])')/urpy"
# Fichiers de stockage webhook créés par install.sh, avec permissions larges
# (chmod 776 sur le VPS).
RUN touch wh whPrez && chmod 776 wh whPrez
FROM python:3.7-slim
# .so runtime seulement (pas les headers -dev, pas le compilateur) :
# lxml a été compilé dans le stage builder, il ne lui reste plus qu'à
# charger ces deux bibliothèques partagées au démarrage.
RUN apt-get update && apt-get install -y --no-install-recommends \
libxml2 \
libxslt1.1 \
&& rm -rf /var/lib/apt/lists/*
# bot/urbot.py fait `from Bot_Base.src.urpy import ...` (import package absolu)
# et `from cog_about import About` / `import settings` (imports bruts résolus
# via bot/ lui-même). Le clone Bot_Base original est donc conservé sur le
# disque (jamais supprimé) et /usr/local/src + /usr/local/src/URbot/bot sont
# ajoutés à PYTHONPATH pour reproduire l'environnement d'exécution du VPS.
COPY --from=builder /usr/local/lib/python3.7/site-packages /usr/local/lib/python3.7/site-packages
COPY --from=builder /usr/local/src /usr/local/src
ENV PYTHONPATH="/usr/local/src:/usr/local/src/URbot/bot"
WORKDIR /usr/local/src/URbot
# NOTE: .bot_token n'est JAMAIS copié dans l'image. Il est fourni au runtime
# via un volume monté par docker-compose (cf. docker-compose.yml).
# Point d'entrée identique à /usr/local/src/URbot/start.py sur le VPS :
# #!/opt/virtualenv/URBot/bin/python
# from bot.urbot import main
# if __name__ == '__main__':
# main()
COPY start.py /usr/local/src/URbot/start.py
CMD ["python3", "start.py"]