c
This commit is contained in:
1 parent
2e9c775599
commit
9a59b2932a
10 files changed
+499
No files matched your search
Executable
+74
@@ -0,0 +1,74 @@
|
||||
#!/bin/bash
|
||||
# Usage: odoo/restore <container_id> <file>
|
||||
# Restores an Odoo database from a backup zip inside the container.
|
||||
|
||||
if [ -z "$2" ]; then
|
||||
echo "Usage: $0 <container_id> <file>"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
CONTAINER_ID="$1"
|
||||
|
||||
_self="$(realpath "${BASH_SOURCE[0]:-$0}")"; SBIN_ROOT="$(dirname "$(dirname "$_self")")" # parent of odoo/
|
||||
source "$SBIN_ROOT/helpers"
|
||||
|
||||
load_container_config "$CONTAINER_ID"
|
||||
get_contract_info
|
||||
|
||||
DB_NAME="${DB_NAME:-$CONTAINER_ID}"
|
||||
|
||||
log "Restoring $2 into CONTAINER_ID=$CONTAINER_ID DB_NAME=$DB_NAME"
|
||||
log "Postgres host: $POSTGRES_HOST"
|
||||
|
||||
BACKUP="/mnt/backup/$2"
|
||||
TEMPLATE="/mnt/db_images/$2"
|
||||
|
||||
if doas docker exec "$CONTAINER_ID" /bin/bash -c "[ -f $BACKUP ]"; then
|
||||
FILENAME="$BACKUP"
|
||||
elif doas docker exec "$CONTAINER_ID" /bin/bash -c "[ -f $TEMPLATE ]"; then
|
||||
FILENAME="$TEMPLATE"
|
||||
else
|
||||
die "restore: file $2 not found at $BACKUP or $TEMPLATE inside container $CONTAINER_ID"
|
||||
fi
|
||||
|
||||
log "Using file: $FILENAME"
|
||||
|
||||
# Terminate active connections then drop/recreate
|
||||
PGPASSWORD="$POSTGRES_ADMIN_PASSWORD" psql \
|
||||
-h "$POSTGRES_HOST" -U "$POSTGRES_ADMIN_USER" -d postgres -c "
|
||||
SELECT pg_terminate_backend(pid) FROM pg_stat_activity
|
||||
WHERE datname = '$DB_NAME' AND pid <> pg_backend_pid();" \
|
||||
|| die "restore: failed to terminate connections on $DB_NAME"
|
||||
|
||||
PGPASSWORD="$POSTGRES_ADMIN_PASSWORD" psql \
|
||||
-h "$POSTGRES_HOST" -U "$POSTGRES_ADMIN_USER" -d postgres \
|
||||
-c "DROP DATABASE IF EXISTS \"$DB_NAME\";" \
|
||||
|| die "restore: failed to drop database $DB_NAME"
|
||||
|
||||
PGPASSWORD="$POSTGRES_ADMIN_PASSWORD" psql \
|
||||
-h "$POSTGRES_HOST" -U "$POSTGRES_ADMIN_USER" -p "$POSTGRES_PORT" -d postgres \
|
||||
-c "ALTER ROLE \"$DB_NAME\" CREATEDB;" \
|
||||
|| die "restore: failed to grant CREATEDB on $DB_NAME"
|
||||
|
||||
doas docker exec "$CONTAINER_ID" rm -rf /home/odoo/.local/share/Odoo/filestore
|
||||
doas docker exec "$CONTAINER_ID" rm -rf /root/.local/share/Odoo/filestore
|
||||
|
||||
doas docker exec "$CONTAINER_ID" odoo db \
|
||||
--db_host beedb \
|
||||
-w "$ODOO_DB_PASSWORD" \
|
||||
-r "$DB_NAME" \
|
||||
load "$DB_NAME" "$FILENAME" -f \
|
||||
|| die "restore: odoo db load failed for $DB_NAME"
|
||||
|
||||
PGPASSWORD="$POSTGRES_ADMIN_PASSWORD" psql \
|
||||
-h "$POSTGRES_HOST" -U "$POSTGRES_ADMIN_USER" -p "$POSTGRES_PORT" -d postgres \
|
||||
-c "ALTER ROLE \"$DB_NAME\" NOCREATEDB;" \
|
||||
|| die "restore: failed to revoke CREATEDB on $DB_NAME"
|
||||
|
||||
doas docker exec "$CONTAINER_ID" cp -r /root/.local/share/Odoo/filestore /home/odoo/.local/share/Odoo/filestore
|
||||
doas docker exec "$CONTAINER_ID" chown -R odoo:odoo /home/odoo/.local
|
||||
doas docker exec "$CONTAINER_ID" mkdir -p /var/lib/odoo/.local/share/Odoo/
|
||||
doas docker exec "$CONTAINER_ID" ln -s /home/odoo/.local/share/Odoo/filestore /var/lib/odoo/.local/share/Odoo/filestore
|
||||
|
||||
log "Restore complete, restarting container $CONTAINER_ID"
|
||||
docker restart "$CONTAINER_ID"
|
||||
Reference in new issue
Block a user