Spaces:
Running
Running
| 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 \ | |
| "] |