soxogvv commited on
Commit
fb61f9e
Β·
verified Β·
1 Parent(s): a2cf0cf

Update Dockerfile

Browse files
Files changed (1) hide show
  1. Dockerfile +72 -29
Dockerfile CHANGED
@@ -117,52 +117,95 @@ COPY package*.json /root/app/
117
  RUN cd /root/app && npm install --omit=dev
118
  COPY . /root/app/
119
 
 
120
  # ── Entrypoint ────────────────────────────────────────────────────────────────
121
  RUN printf '%s\n' \
122
  '#!/bin/sh' \
123
  'set -e' \
124
  '' \
125
  'mkdir -p /data/persist' \
 
 
 
126
  '' \
127
- '(' \
128
- ' if [ -d "/data/persist/venv" ] && [ ! -L "/data/persist/venv" ]; then' \
129
- ' rsync -a --ignore-existing /data/persist/venv/ /root/venv/ 2>/dev/null || true' \
130
- ' fi' \
131
- ' if [ -d "/data/persist/cache" ] && [ ! -L "/data/persist/cache" ]; then' \
132
- ' rsync -a --ignore-existing /data/persist/cache/ /root/.cache/ 2>/dev/null || true' \
133
- ' fi' \
134
  '' \
135
- ' rm -f /root/venv/lib/python*/EXTERNALLY-MANAGED' \
136
- '' \
137
- ' rm -rf /data/persist/venv /data/persist/cache' \
138
- ' cp -a /root/venv /data/persist/venv' \
139
- ' cp -a /root/.cache /data/persist/cache 2>/dev/null || true' \
140
- '' \
141
- ' APT_FILE="/data/apt.txt"' \
142
- ' if [ ! -f "$APT_FILE" ]; then touch "$APT_FILE"; fi' \
143
- ' if [ -s "$APT_FILE" ]; then' \
144
- ' /usr/bin/apt-get update -qq 2>/dev/null' \
145
- ' while IFS= read -r pkg || [ -n "$pkg" ]; do' \
146
- ' pkg=$(echo "$pkg" | tr -d "[:space:]")' \
147
- ' [ -z "$pkg" ] && continue' \
148
- ' [ "${pkg#\#}" != "$pkg" ] && continue' \
149
- ' /usr/bin/apt-get install -y --no-install-recommends "$pkg" >/dev/null 2>&1 || true' \
150
- ' done < "$APT_FILE"' \
151
- ' rm -rf /var/lib/apt/lists/*' \
152
- ' fi' \
 
 
 
 
 
 
 
 
 
 
153
  '' \
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
154
  ' while true; do' \
155
  ' sleep 60' \
156
- ' mkdir -p /data/persist/venv /data/persist/cache' \
157
- ' rsync -a --delete /root/venv/ /data/persist/venv/ 2>/dev/null' \
158
- ' rsync -a --delete /root/.cache/ /data/persist/cache/ 2>/dev/null' \
 
 
 
 
 
 
 
 
 
 
 
 
159
  ' done' \
160
  ') &' \
161
  '' \
162
  'exec "$@"' \
163
  > /usr/local/bin/docker-entrypoint.sh && \
164
  chmod +x /usr/local/bin/docker-entrypoint.sh
165
-
166
  # ── Runtime ───────────────────────────────────────────────────────────────────
167
  WORKDIR /data
168
  EXPOSE 7860
 
117
  RUN cd /root/app && npm install --omit=dev
118
  COPY . /root/app/
119
 
120
+ # ── Entrypoint ────────────────────────────────────────────────────────────────
121
  # ── Entrypoint ────────────────────────────────────────────────────────────────
122
  RUN printf '%s\n' \
123
  '#!/bin/sh' \
124
  'set -e' \
125
  '' \
126
  'mkdir -p /data/persist' \
127
+ 'mkdir -p /data/persist/cache' \
128
+ 'mkdir -p /data/persist/venv' \
129
+ 'mkdir -p /root/.cache' \
130
  '' \
131
+ 'echo "[*] Restoring persistent files..."' \
 
 
 
 
 
 
132
  '' \
133
+ '# Restore venv' \
134
+ 'if [ -d "/data/persist/venv" ]; then' \
135
+ ' rsync -aHAX /data/persist/venv/ /root/venv/ 2>/dev/null || true' \
136
+ 'fi' \
137
+ '' \
138
+ '# Restore cache' \
139
+ 'if [ -d "/data/persist/cache" ]; then' \
140
+ ' rsync -aHAX /data/persist/cache/ /root/.cache/ 2>/dev/null || true' \
141
+ 'fi' \
142
+ '' \
143
+ '# Remove externally managed restriction' \
144
+ 'rm -f /root/venv/lib/python*/EXTERNALLY-MANAGED' \
145
+ '' \
146
+ '# First immediate backup' \
147
+ 'echo "[*] Creating initial persistent backup..."' \
148
+ '' \
149
+ 'rsync -aHAX /root/venv/ /data/persist/venv/ 2>/dev/null || true' \
150
+ '' \
151
+ 'rsync -aHAX --partial --inplace \\' \
152
+ ' /root/.cache/ /data/persist/cache/ \\' \
153
+ ' 2>/dev/null || true' \
154
+ '' \
155
+ '# Restore apt packages' \
156
+ 'APT_FILE="/data/apt.txt"' \
157
+ '' \
158
+ 'if [ ! -f "$APT_FILE" ]; then' \
159
+ ' touch "$APT_FILE"' \
160
+ 'fi' \
161
  '' \
162
+ 'if [ -s "$APT_FILE" ]; then' \
163
+ ' echo "[*] Restoring apt packages..."' \
164
+ '' \
165
+ ' /usr/bin/apt-get update -qq 2>/dev/null || true' \
166
+ '' \
167
+ ' while IFS= read -r pkg || [ -n "$pkg" ]; do' \
168
+ ' pkg=$(echo "$pkg" | tr -d "[:space:]")' \
169
+ '' \
170
+ ' [ -z "$pkg" ] && continue' \
171
+ ' [ "${pkg#\#}" != "$pkg" ] && continue' \
172
+ '' \
173
+ ' echo "[*] Installing: $pkg"' \
174
+ '' \
175
+ ' /usr/bin/apt-get install -y --no-install-recommends "$pkg" \\' \
176
+ ' >/dev/null 2>&1 || true' \
177
+ '' \
178
+ ' done < "$APT_FILE"' \
179
+ '' \
180
+ ' rm -rf /var/lib/apt/lists/*' \
181
+ 'fi' \
182
+ '' \
183
+ '# Background persistence loop' \
184
+ '(' \
185
  ' while true; do' \
186
  ' sleep 60' \
187
+ '' \
188
+ ' mkdir -p /data/persist/venv' \
189
+ ' mkdir -p /data/persist/cache' \
190
+ '' \
191
+ ' echo "[*] Syncing persistent data..."' \
192
+ '' \
193
+ ' rsync -aHAX \\' \
194
+ ' /root/venv/ /data/persist/venv/ \\' \
195
+ ' 2>/dev/null || true' \
196
+ '' \
197
+ ' rsync -aHAX --partial --inplace \\' \
198
+ ' /root/.cache/ /data/persist/cache/ \\' \
199
+ ' 2>/dev/null || true' \
200
+ '' \
201
+ ' sync || true' \
202
  ' done' \
203
  ') &' \
204
  '' \
205
  'exec "$@"' \
206
  > /usr/local/bin/docker-entrypoint.sh && \
207
  chmod +x /usr/local/bin/docker-entrypoint.sh
208
+
209
  # ── Runtime ───────────────────────────────────────────────────────────────────
210
  WORKDIR /data
211
  EXPOSE 7860