From fba074bb00e6f8ecce000781ea34eade2b80fba8 Mon Sep 17 00:00:00 2001 From: Tianyu Liu Date: Thu, 15 May 2025 17:48:49 +0200 Subject: [PATCH] should be working gitea --- gitea/backup.sh | 38 ++++++++++++++++++++++++++++++++++++++ gitea/deploy.sh | 34 ++++++++++++++++++++++++++++------ gitea/uninstall.sh | 42 +++++++++++++++++++++++++++++------------- 3 files changed, 95 insertions(+), 19 deletions(-) create mode 100755 gitea/backup.sh diff --git a/gitea/backup.sh b/gitea/backup.sh new file mode 100755 index 0000000..f87175b --- /dev/null +++ b/gitea/backup.sh @@ -0,0 +1,38 @@ +#!/bin/bash + +# Note: use rclone for backup, needs manually configuration. + +export XDG_RUNTIME_DIR="/run/user/$(id -u)" +export DBUS_SESSION_BUS_ADDRESS="unix:path=$XDG_RUNTIME_DIR/bus" + +DATA="" +CONFIG="" +DB="" +LOCAL_BACKUP="$HOME/.local/backup" +REMOTE="" +DB_USERNAME="" +DB_PASSWORD="" +DB_DATABASE="" +CONTAINER_DB="" +SERVICE_GITEA="" + +STAGING_DIR=$(mktemp -d) +mkdir -p $LOCAL_BACKUP +DATE=$(date +%F-%H-%M-%S) +BACKUP_NAME="backup_$DATE.tar.gz" + +systemctl --user stop $SERVICE_GITEA +podman exec $CONTAINER_DB pg_dump -U $DB_USERNAME -F c -d $DB_DATABASE > $STAGING_DIR/db.dump + +cp -r "$DATA" "$STAGING_DIR/data" +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_GITEA \ No newline at end of file diff --git a/gitea/deploy.sh b/gitea/deploy.sh index a32d034..9d13216 100755 --- a/gitea/deploy.sh +++ b/gitea/deploy.sh @@ -5,7 +5,7 @@ set -e services=("$CONTAINER_PREFIX-$CONTAINER_GITEA.service" - "$CONTAINER_PREFIX-$CONTAINER_DB.service", + "$CONTAINER_PREFIX-$CONTAINER_DB.service" ) for service in "${services[@]}"; do @@ -36,6 +36,7 @@ if ! podman network exists $NETWORK; then fi mkdir -p $DATA_FOLDER +mkdir -p $CONFIG_FOLDER mkdir -p $DB_FOLDER mkdir -p $USER_SYSTEMD @@ -69,9 +70,13 @@ podman create \ --name $CONTAINER_GITEA \ --network $NETWORK \ --restart=always \ + --userns=keep-id \ -p $PORT_WEB:3000 \ -p $PORT_SSH:22 \ - -v $DATA_FOLDER:/data \ + -v $DATA_FOLDER:/var/lib/gitea \ + -v $CONFIG_FOLDER:/etc/gitea \ + -e USER_UID=1000 \ + -e USER_GID=1000 \ -e GITEA__database__DB_TYPE=postgres \ -e GITEA__database__HOST=$HOST_DB:$PORT_DB \ -e GITEA__database__NAME=$DB_NAME \ @@ -79,7 +84,7 @@ podman create \ -e GITEA__database__PASSWD=$DB_PASSWORD \ -v /etc/timezone:/etc/timezone:ro \ -v /etc/localtime:/etc/localtime:ro \ - docker.gitea.com/gitea:latest + docker.gitea.com/gitea:latest-rootless podman generate systemd \ --new \ @@ -117,7 +122,24 @@ EOF ) echo "$BACKEND_CFG" | sudo tee $SERVICE_DIR/backend.block > /dev/null -echo "Deploy completed, manually run haproxy to generate new config." +echo "Generate backup script" +BACKUP_FILE="gitea_backup.sh" +cp backup.sh $BACKUP_FILE +sed -i "s|^DATA=\"\"|DATA=\"$DATA_FOLDER\"|" "$BACKUP_FILE" +sed -i "s|^CONFIG=\"\"|CONFIG=\"$CONFIG_FOLDER\"|" "$BACKUP_FILE" +sed -i "s|^DB=\"\"|DB=\"$DB_FOLDER\"|" "$BACKUP_FILE" +sed -i "s|^DB_USERNAME=\"\"|DB_USERNAME=\"$DB_USER\"|" "$BACKUP_FILE" +sed -i "s|^DB_DATABASE=\"\"|DB_DATABASE=\"$DB_NAME\"|" "$BACKUP_FILE" +sed -i "s|^DB_PASSWORD=\"\"|DB_PASSWORD=\"$DB_PASSWORD\"|" "$BACKUP_FILE" +sed -i "s|^LOCAL_BACKUP=\"\$HOME/.local/backup\"|LOCAL_BACKUP=\"\$HOME/.local/backup/$CONTAINER_PREFIX\"|" "$BACKUP_FILE" +sed -i "s|^CONTAINER_DB=\"\"|CONTAINER_DB=\"$CONTAINER_DB\"|" "$BACKUP_FILE" +sed -i "s|^REMOTE=\"\"|REMOTE=\"$BACKUP_REMOTE\"|" "$BACKUP_FILE" +sed -i "s|^SERVICE_GITEA=\"\"|SERVICE_GITEA=\"${CONTAINER_PREFIX}-${CONTAINER_GITEA}.service\"|" "$BACKUP_FILE" +mv $BACKUP_FILE $GITEA_FOLDER +echo "Backup script generated at $GITEA_FOLDER/$BACKUP_FILE" +echo "Backup script will be run every day at 2:00 AM" +crontab -l | grep -v "$GITEA_FOLDER/$BACKUP_FILE" | crontab - +(crontab -l 2>/dev/null; echo "0 2 * * * $GITEA_FOLDER/$BACKUP_FILE") | crontab - +echo "Backup script added to crontab" -# on local, allow ufw port from wireguard -echo "Manually config backup remote." \ No newline at end of file +echo "Deploy completed, manually run haproxy to generate new config." diff --git a/gitea/uninstall.sh b/gitea/uninstall.sh index 72a6e6f..b8711ea 100755 --- a/gitea/uninstall.sh +++ b/gitea/uninstall.sh @@ -2,24 +2,40 @@ . ./env.sh -if systemctl --user list-units --full --all | grep -q "${CONTAINER_PREFIX}-${CONTAINER_NAME}.service"; then - systemctl --user stop ${CONTAINER_PREFIX}-${CONTAINER_NAME}.service -fi +services=("$CONTAINER_PREFIX-$CONTAINER_GITEA.service" + "$CONTAINER_PREFIX-$CONTAINER_DB.service" +) -if podman container exists "$CONTAINER_NAME"; then - echo "Stop and delete existing container $CONTAINER_NAME" - if podman inspect -f '{{.State.Running}}' "$CONTAINER_NAME" | grep -q true; then - podman stop "$CONTAINER_NAME" +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 - podman rm "$CONTAINER_NAME" +done + +containers=( + "$CONTAINER_GITEA" + "$CONTAINER_DB" +) + +for container in "${containers[@]}"; do + if podman container exists "$container"; then + echo "Stop and delete existing container $container" + if podman inspect -f '{{.State.Running}}' "$container" | grep -q true; then + podman stop "$container" + fi + podman rm "$container" fi +done -systemctl --user disable --now ${CONTAINER_PREFIX}-$CONTAINER_NAME.service -rm $USER_SYSTEMD/${CONTAINER_PREFIX}-$CONTAINER_NAME.service -systemctl --user daemon-reload +for service in "${services[@]}"; do + systemctl --user disable --now $service + rm $USER_SYSTEMD/$service +done -# sudo rm -r $SERVICE_DIR -# crontab -l | grep -v "$VW_FOLDER/$BACKUP_FILE" | crontab - +sudo rm -r $SERVICE_DIR +crontab -l | grep -v "$GITEA_FOLDER/$BACKUP_FILE" | crontab - echo "Uninstall complete. Manually run haproxy config to rebuild config. Manually remove data directory - $GITEA_FOLDER