| 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 |
|
|
| |
| RUN cat <<'EOF' > /usr/local/bin/home-save |
| |
| 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 |
|
|
| |
| RUN cat <<'EOF' > /usr/local/bin/home-restore |
| |
| set -e |
| if [ -f /data/home-backup.tar.gz ]; then |
| tar -xzpf /data/home-backup.tar.gz -C /home/coder |
| fi |
| EOF |
|
|
| |
| RUN cat <<'EOF' > /usr/local/bin/home-save-daemon |
| |
| 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 ["/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 \ |
| "] |
| |