diff --git a/affine/backup.sh b/affine/backup.sh new file mode 100755 index 0000000..1203661 --- /dev/null +++ b/affine/backup.sh @@ -0,0 +1,35 @@ +#!/bin/bash + +# Note: use rclone for backup, needs manually configuration. + +UPLOAD="" +CONFIG="" +LOCAL_BACKUP="$HOME/.local/backup" +REMOTE="" + +DB_USERNAME="" +DB_PASSWORD="" +DB_DATABASE="" +CONTAINER_POSTGRES="" +SERVICE_SERVER="" + +STAGING_DIR=$(mktemp -d) +mkdir -p $LOCAL_BACKUP +DATE=$(date +%F-%H-%M-%S) +BACKUP_NAME="backup_$DATE.tar.gz" + +systemctl --user stop $SERVICE_SERVER +podman exec $CONTAINER_POSTGRES pg_dump -U $DB_USERNAME -F c -d $DB_DATABASE > $STAGING_DIR/db.dump + +cp -r "$UPLOAD" "$STAGING_DIR/upload" +cp -r "$CONFIG" "$STAGING_DIR/config" +tar -czf "$LOCAL_BACKUP/$BACKUP_NAME" -C "$STAGING_DIR" . + +ls -1t "$LOCAL_BACKUP"/backup_*.tar.gz | tail -n +6 | xargs -r rm -- + + +/usr/bin/rclone sync $LOCAL_BACKUP $REMOTE > /dev/null + +rm -rf $STAGING_DIR + +systemctl --user start $SERVICE_SERVER \ No newline at end of file diff --git a/affine/deploy.sh b/affine/deploy.sh index 43c8d1f..9acd795 100755 --- a/affine/deploy.sh +++ b/affine/deploy.sh @@ -3,21 +3,34 @@ set -e . ./env.sh -if systemctl --user list-units --full --all | grep -q "$CONTAINER_PREFIX-$CONTAINER_SERVER.service"; then - systemctl --user stop $CONTAINER_PREFIX-$CONTAINER_SERVER.service -fi +services=("$CONTAINER_PREFIX-$CONTAINER_SERVER.service" + "$CONTAINER_PREFIX-$CONTAINER_POSTGRES.service" + "$CONTAINER_PREFIX-$CONTAINER_REDIS.service" +) -if systemctl --user list-units --full --all | grep -q "$CONTAINER_PREFIX-$CONTAINER_POSTGRES.service"; then - systemctl --user stop $CONTAINER_PREFIX-$CONTAINER_POSTGRES.service -fi +for service in "${services[@]}"; do + if systemctl --user list-units --full --all | grep -q "$service"; then + echo "Stopping $service..." + systemctl --user stop $service + echo "$service stopped." + fi +done -if systemctl --user list-units --full --all | grep -q "$CONTAINER_PREFIX-$CONTAINER_REDIS.service"; then - systemctl --user stop $CONTAINER_PREFIX-$CONTAINER_REDIS.service -fi +containers=( + "$CONTAINER_SERVER", + "$CONTAINER_POSTGRES", + "$CONTAINER_REDIS" +) -if ! podman network exists $NETWORK; then - podman network create $NETWORK +for container in "${containers[@]}"; do + if podman container exists "$containers"; then + echo "Stop and delete existing container $containers" + if podman inspect -f '{{.State.Running}}' "$containers" | grep -q true; then + podman stop "$containers" + fi + podman rm "$containers" fi +done mkdir -p ./systemd-units podman create \ @@ -136,4 +149,21 @@ EOF ) echo "$BACKEND_CFG" | sudo tee $SERVICE_DIR/backend.block > /dev/null -sudo loginctl enable-linger $USER \ No newline at end of file +sudo loginctl enable-linger $USER + +echo "Generate backup script" +BACKUP_FILE="affine_backup.sh" +cp backup.sh $BACKUP_FILE +sed -i "s|^UPLOAD=\"\"|UPLOAD=\"$UPLOAD_LOCATION\"|" "$BACKUP_FILE" +sed -i "s|^CONFIG=\"\"|CONFIG=\"$CONFIG_LOCATION\"|" "$BACKUP_FILE" +sed -i "s|^DB_USERNAME=\"\"|DB_USERNAME=\"$DB_USERNAME\"|" "$BACKUP_FILE" +sed -i "s|^DB_DATABASE=\"\"|DB_DATABASE=\"$DB_DATABASE\"|" "$BACKUP_FILE" +sed -i "s|^LOCAL_BACKUP=\"\$HOME/.local/backup\"|LOCAL_BACKUP=\"\$HOME/.local/backup/$CONTAINER_PREFIX\"|" "$BACKUP_FILE" +sed -i "s|^CONTAINER_POSTGRES=\"\"|CONTAINER_POSTGRES=\"$CONTAINER_POSTGRES\"|" "$BACKUP_FILE" +sed -i "s|^REMOTE=\"\"|REMOTE=\"$BACKUP_REMOTE\"|" "$BACKUP_FILE" +sed -i "s|^SERVICE_SERVER=\"\"|SERVICE_SERVER=\"${CONTAINER_PREFIX}-${CONTAINER_SERVER}.service\"|" "$BACKUP_FILE" + +mv $BACKUP_FILE $AFFINE_ROOT +(crontab -l 2>/dev/null; echo "0 3 * * * $AFFINE_ROOT/$BACKUP_FILE") | crontab - + +echo "Deploy completed, manually run haproxy to generate new config." \ No newline at end of file diff --git a/affine/uninstall.sh b/affine/uninstall.sh new file mode 100755 index 0000000..26abfa5 --- /dev/null +++ b/affine/uninstall.sh @@ -0,0 +1,52 @@ +#!/bin/bash + +set -e + +. ./env.sh + +services=( + "$CONTAINER_PREFIX-$CONTAINER_SERVER.service" + "$CONTAINER_PREFIX-$CONTAINER_POSTGRES.service" + "$CONTAINER_PREFIX-$CONTAINER_REDIS.service" +) + +for service in "${services[@]}"; do + if systemctl --user list-units --full --all | grep -q "$service"; then + echo "Stopping $service..." + systemctl --user stop $service + echo "$service stopped." + fi +done + +containers=( + "$CONTAINER_SERVER", + "$CONTAINER_POSTGRES", + "$CONTAINER_REDIS" +) + +for container in "${containers[@]}"; do + if podman container exists "$containers"; then + echo "Stop and delete existing container $containers" + if podman inspect -f '{{.State.Running}}' "$containers" | grep -q true; then + podman stop "$containers" + fi + podman rm "$containers" +fi +done + +for service in "${services[@]}"; do + systemctl --user disable --now $service + rm $USER_SYSTEMD/$service +done + +systemctl --user daemon-reload + +sudo rm -r $SERVICE_DIR +crontab -l | grep -v "$AFFINE_ROOT/$BACKUP_FILE" | crontab - + +echo "Uninstall complete. Manually run haproxy config to rebuild config. Manually remove data directory + - $AFFINE_ROOT + - $DB_DATA_LOCATION + - $UPLOAD_LOCATION + - $CONFIG_LOCATION +if needed." \ No newline at end of file