File size: 2,281 Bytes
0b6a737
 
 
4acc604
b13bc28
 
 
 
2cd30f2
 
b13bc28
 
 
 
 
 
 
2cd30f2
 
 
 
 
 
 
b13bc28
2cd30f2
 
 
 
 
 
 
 
b13bc28
2cd30f2
 
 
 
 
 
 
 
 
 
b13bc28
2cd30f2
 
 
 
0b6a737
4acc604
2cd30f2
0b6a737
 
 
b13bc28
ecf6e44
 
 
b13bc28
 
2cd30f2
 
b13bc28
ecf6e44
 
b13bc28
 
 
 
 
 
 
53cd792
 
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
FROM codercom/code-server:latest

USER root

RUN apt-get update && apt-get install -y \
    tzdata \
    && rm -rf /var/lib/apt/lists/*

ENV TZ=Europe/Oslo

RUN mkdir -p /data

# Короткий промпт
RUN echo "export PS1='\[\033[01;32m\]farid\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '" >> /home/coder/.bashrc && \
    chown coder:coder /home/coder/.bashrc

# Скрипт сохранения HOME (весь /home/coder — конфиги, vscode, extensions, opencode и т.д.)
RUN cat <<'EOF' > /usr/local/bin/home-save
#!/bin/sh
set -e
tar -czpf /data/home-backup.tar.gz.tmp -C /home/coder .
mv /data/home-backup.tar.gz.tmp /data/home-backup.tar.gz
EOF

# Скрипт восстановления HOME
RUN cat <<'EOF' > /usr/local/bin/home-restore
#!/bin/sh
set -e
if [ -f /data/home-backup.tar.gz ]; then
    tar -xzpf /data/home-backup.tar.gz -C /home/coder
fi
EOF

# Демон: бэкап каждый день в 04:00 по Europe/Oslo
RUN cat <<'EOF' > /usr/local/bin/home-save-daemon
#!/bin/sh
LOG=/data/home-backup.log
while true; do
    now=$(date +%s)
    next=$(date -d "today 04:00:00" +%s)
    if [ "$next" -le "$now" ]; then
        next=$(date -d "tomorrow 04:00:00" +%s)
    fi
    sleep "$((next - now))"
    { echo "[$(date '+%Y-%m-%d %H:%M:%S %Z')] scheduled backup"; home-save; } >> "$LOG" 2>&1
done
EOF

RUN chmod +x /usr/local/bin/home-save /usr/local/bin/home-restore /usr/local/bin/home-save-daemon

USER coder
WORKDIR /home/coder

EXPOSE 7860

# Сбрасываем entrypoint базового образа — иначе CMD ниже игнорируется
ENTRYPOINT []

CMD ["/bin/sh", "-c", "\
    mkdir -p /data; \
    mkdir -p /home/coder/.vscode/user-data /home/coder/.vscode/extensions; \
    home-restore; \
    home-save-daemon & \
    code-server \
        --bind-addr 0.0.0.0:7860 \
        --auth password \
        --config /home/coder/.vscode/config.yaml \
        --user-data-dir /home/coder/.vscode/user-data \
        --extensions-dir /home/coder/.vscode/extensions \
        /home/coder & \
    CODE_PID=$!; \
    trap 'echo [$(date \"+%Y-%m-%d %H:%M:%S %Z\")] shutdown signal, saving >> /data/home-backup.log; home-save; kill -TERM $CODE_PID 2>/dev/null; wait $CODE_PID' TERM INT; \
    wait $CODE_PID \
    "]