implement docker cron job
This commit is contained in:
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
|||||||
|
.idea
|
||||||
39
Dockerfile
Normal file
39
Dockerfile
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
# Use Ubuntu 20.04 as the base image
|
||||||
|
FROM ubuntu:20.04
|
||||||
|
|
||||||
|
# Install dependencies
|
||||||
|
RUN apt-get update && apt-get install -y \
|
||||||
|
sqlite3 \
|
||||||
|
awscli \
|
||||||
|
cron \
|
||||||
|
tar \
|
||||||
|
gzip \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
# Create necessary directories
|
||||||
|
RUN mkdir -p /jobs/data/sqlite
|
||||||
|
RUN mkdir -p /var/tmp
|
||||||
|
|
||||||
|
# Copy the backup script into the container
|
||||||
|
COPY backup_sqlite.sh /usr/local/bin/backup_script.sh
|
||||||
|
|
||||||
|
# Make the script executable
|
||||||
|
RUN chmod +x /usr/local/bin/backup_script.sh
|
||||||
|
|
||||||
|
# Create the cron log file
|
||||||
|
RUN touch /var/log/cron.log
|
||||||
|
|
||||||
|
# Copy the cron job file into the cron.d directory
|
||||||
|
COPY backup_cron /etc/cron.d/backup_cron
|
||||||
|
|
||||||
|
# Set permissions for the cron job file
|
||||||
|
RUN chmod 0644 /etc/cron.d/backup_cron
|
||||||
|
|
||||||
|
# Apply the cron job
|
||||||
|
RUN crontab /etc/cron.d/backup_cron
|
||||||
|
|
||||||
|
# Expose the cron log file as a volume
|
||||||
|
VOLUME /var/log
|
||||||
|
|
||||||
|
# Start cron in the foreground when the container starts
|
||||||
|
CMD ["cron", "-f"]
|
||||||
1
backup_cron
Normal file
1
backup_cron
Normal file
@@ -0,0 +1 @@
|
|||||||
|
0 2 * * * root /usr/local/bin/backup_script.sh -l true >> /var/log/cron.log 2>&1
|
||||||
52
backup_sqlite.sh
Normal file
52
backup_sqlite.sh
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
DB_PATH="/jobs/data/sqlite/nkode.db"
|
||||||
|
BACKUP_DIR="/var/tmp"
|
||||||
|
|
||||||
|
BACKUP_NAME="backup_nkode_$(date +'%Y%m%d%H%M%S').tar.gz"
|
||||||
|
|
||||||
|
# Check if the database file exists
|
||||||
|
if [ ! -f "$DB_PATH" ]; then
|
||||||
|
echo "Error: Database file not found at $DB_PATH"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Perform a WAL checkpoint to flush the WAL file to the main DB file
|
||||||
|
echo "Checkpointing WAL..."
|
||||||
|
sqlite3 "$DB_PATH" "PRAGMA wal_checkpoint(FULL);"
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo "Error: Failed to checkpoint WAL"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check if related files (.wal, .shm) exist
|
||||||
|
WAL_FILE="${DB_PATH}-wal"
|
||||||
|
SHM_FILE="${DB_PATH}-shm"
|
||||||
|
|
||||||
|
# Create a list of files to back up (main DB, WAL, and SHM if they exist)
|
||||||
|
FILES_TO_BACKUP=("$DB_PATH")
|
||||||
|
if [ -f "$WAL_FILE" ]; then
|
||||||
|
FILES_TO_BACKUP+=("$WAL_FILE")
|
||||||
|
fi
|
||||||
|
if [ -f "$SHM_FILE" ]; then
|
||||||
|
FILES_TO_BACKUP+=("$SHM_FILE")
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Create a tar.gz archive of the database and related files
|
||||||
|
echo "Creating backup..."
|
||||||
|
tar -czf "$BACKUP_DIR/$BACKUP_NAME" "${FILES_TO_BACKUP[@]}"
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
echo "Backup successful: $BACKUP_DIR/$BACKUP_NAME"
|
||||||
|
else
|
||||||
|
echo "Error: Backup failed"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Upload backup to S3
|
||||||
|
aws s3 cp "$BACKUP_DIR/$BACKUP_NAME" s3://nkode-db-backup
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
echo "Backup uploaded to S3 successfully."
|
||||||
|
else
|
||||||
|
echo "Error: Failed to upload backup to S3."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
11
docker-compose.yaml
Normal file
11
docker-compose.yaml
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
services:
|
||||||
|
go-nkode:
|
||||||
|
container_name: cron-nkode
|
||||||
|
image: registry.infra.nkode.tech/cron-nkode
|
||||||
|
volumes:
|
||||||
|
- /var/go-nkode/sqlite:/jobs/data/sqlite
|
||||||
|
|
||||||
|
environment:
|
||||||
|
- AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}
|
||||||
|
- AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}
|
||||||
|
- AWS_REGION=${AWS_REGION}
|
||||||
1
docker_build.sh
Normal file
1
docker_build.sh
Normal file
@@ -0,0 +1 @@
|
|||||||
|
docker buildx build --platform linux/amd64,linux/arm64 -t registry.infra.nkode.tech/cron-nkode:latest --push .
|
||||||
Reference in New Issue
Block a user