1
0
Fork 0
mirror of https://github.com/YunoHost-Apps/flohmarkt_ynh.git synced 2024-09-03 18:36:30 +02:00

Merge pull request 'backup-restore' (#20) from backup-restore into main

Reviewed-on: https://codeberg.org/ChriChri/flohmarkt_ynh/pulls/20
This commit is contained in:
Chris Vogel 2024-04-21 17:52:06 +00:00
commit c4d19c550e
8 changed files with 65 additions and 125 deletions

View file

@ -1,6 +1,6 @@
## installs
But very limited.
But very limited - see [issues](https://codeberg.org/ChriChri/flohmarkt_ynh/issues)
### Exclusive use of couchdb
@ -24,7 +24,7 @@ https://codeberg.org/ChriChri/flohmarkt_ynh/issues/5 .
**Warning:** This will probably break any existing installation of couchdb (there's an couchdb app to install just couchdb and expose its port via nginx reverse-proxy).
## no backup, yet
## read before test installation
**Another warning:** When installing flohmarkt on a a domain and letting it talk to other ActivityPub instances it will propagate a key associated to your domain. If you remove your flohmarkt from that domain and loose that key other instances might not want to talk to you anymore after you installed flohmarkt again on the same domain generating a new key.

View file

@ -1,55 +1,28 @@
#!/bin/bash
#=================================================
# GENERIC START
#=================================================
# IMPORT GENERIC HELPERS
#=================================================
# Keep this path for calling _common.sh inside the execution's context of backup and restore scripts
source ../settings/scripts/_common.sh
source /usr/share/yunohost/helpers
#=================================================
# DECLARE DATA AND CONF FILES TO BACKUP
#=================================================
ynh_print_info --message="Declaring files to be backed up..."
#=================================================
# BACKUP THE APP MAIN DIR
#=================================================
ynh_backup --src_path="$install_dir"
#=================================================
# BACKUP THE DATA DIR
#=================================================
ynh_backup --src_path="$data_dir" --is_big
#=================================================
# BACKUP THE NGINX CONFIGURATION
#=================================================
ynh_backup --src_path="/etc/nginx/conf.d/$domain.d/$app.conf"
#=================================================
# BACKUP FAIL2BAN CONFIGURATION
#=================================================
ynh_backup --src_path="/etc/fail2ban/jail.d/$app.conf"
ynh_backup --src_path="/etc/fail2ban/filter.d/$app.conf"
#=================================================
# SPECIFIC BACKUP
#=================================================
# BACKUP LOGROTATE
#=================================================
ynh_backup --src_path="/etc/logrotate.d/$app"
ynh_backup --src_path="/opt/couchdb/etc/local.d/05-flohmarkt.ini"
# ynh_backup --src_path="/etc/yunohost/apps/$app"
#=================================================
# END OF SCRIPT
#=================================================
# for the following backups we'll want to stop flohmarkt and couchdb
# to guarentee a consistant state
ynh_print_info --message="Stopping flohmarkt and couchdb to backup data..."
yunohost service stop flohmarkt
systemctl stop couchdb
ynh_backup --src_path="$data_dir" --is_big
ynh_backup --src_path="/var/lib/couchdb" --is_big
ynh_print_info --message="...done. Starting couchdb and flohmarkt."
systemctl start couchdb
yunohost service start flohmarkt
ynh_print_info --message="Backup script completed for $app. (YunoHost will then actually copy those files to the archive)."

View file

@ -27,7 +27,7 @@ ynh_script_progression --message="Installing CouchDB..." --weight=60
# This value must match for all nodes in the cluster. If they do not match,
# attempts to connect the node to the cluster will be rejected.
couchdb_magic_cookie=$(ynh_string_random --length=23 --filter='A-Za-z0-9_')
ynh_app_setting_set --app=$app --key=erlang_cookie --value="$couchdb_magic_cookie"
ynh_app_setting_set --app=$app --key=couchdb_magic_cookie --value="$couchdb_magic_cookie"
echo "\
couchdb couchdb/mode select standalone
@ -49,14 +49,9 @@ ynh_install_extra_app_dependencies \
# add couchdb configuration
ynh_script_progression --message="Adding a configuration file..." --weight=2
# customize couchdb config
ynh_add_config --template="../conf/5-flohmarkt.ini" --destination="/opt/couchdb/etc/local.d/5-flohmarkt.ini"
chown root:couchdb /opt/couchdb/etc/local.d/5-flohmarkt.ini
chmod 640 /opt/couchdb/etc/local.d/5-flohmarkt.ini
# @@ todo need to create a couchdb user and set the files to be readable/executable by it
chmod 750 "$install_dir"
chmod -R o-rwx "$install_dir"
chown -R "$app:$app" "$install_dir"
ynh_add_config --template="../conf/05-flohmarkt.ini" --destination="/opt/couchdb/etc/local.d/05-flohmarkt.ini"
chown root:couchdb /opt/couchdb/etc/local.d/05-flohmarkt.ini
chmod 640 /opt/couchdb/etc/local.d/05-flohmarkt.ini
# restart couchdb to pick up changes
systemctl restart couchdb
@ -88,7 +83,7 @@ python3 -m venv --without-pip "$install_dir/venv"
jwtsecret=$(ynh_string_random --length=344 --filter='a-zA-Z0-9/+')
password_couchdb_flohmarkt=$(ynh_string_random --length=31 --filter='A-Za-z0-9_.:,')
ynh_app_setting_set --app=$app --key=erlang_cookie --value="$password_couchdb_flohmarkt"
ynh_app_setting_set --app=$app --key=password_couchdb_flohmarkt --value="$password_couchdb_flohmarkt"
# generate flohmarkt.conf
ynh_add_config --template="../conf/flohmarkt.conf" --destination="$install_dir/$app/flohmarkt.conf"
@ -136,4 +131,3 @@ ynh_systemd_action --service_name=$app --action="start"
# @@ logrotation
ynh_script_progression --message="Installation of $app completed" --last
# qed

View file

@ -52,6 +52,10 @@ ynh_remove_nginx_config
# Remove the dedicated Fail2Ban config
ynh_remove_fail2ban_config
# Remove home
ynh_script_progression --message="Removing data directory..." --weight=2
ynh_secure_remove --file=$data_dir
#=================================================
# END OF SCRIPT
#=================================================

View file

@ -1,54 +1,13 @@
#!/bin/bash
#=================================================
# GENERIC START
#=================================================
# IMPORT GENERIC HELPERS
#=================================================
# Keep this path for calling _common.sh inside the execution's context of backup and restore scripts
source ../settings/scripts/_common.sh
source /usr/share/yunohost/helpers
#=================================================
# STANDARD RESTORATION STEPS
#=================================================
# RESTORE THE APP MAIN DIR
#=================================================
ynh_script_progression --message="Restoring the app main directory..." --weight=10
# restore couchdb directory
ynh_script_progression --message="Restoring couchdb directory..." --weight=1
ynh_restore_file --origin_path="/var/lib/couchdb"
ynh_restore_file --origin_path="$install_dir"
#=================================================
# RESTORE THE DATA DIRECTORY
#=================================================
ynh_script_progression --message="Restoring the data directory..." --weight=1
ynh_restore_file --origin_path="$data_dir" --not_mandatory
mkdir -p $data_dir
#=================================================
# RESTORE FAIL2BAN CONFIGURATION
#=================================================
ynh_script_progression --message="Restoring the Fail2Ban configuration..." --weight=2
ynh_restore_file --origin_path="/etc/fail2ban/jail.d/$app.conf"
ynh_restore_file --origin_path="/etc/fail2ban/filter.d/$app.conf"
ynh_systemd_action --action=restart --service_name=fail2ban
#=================================================
# SPECIFIC RESTORATION
#=================================================
# RESTORE THE NGINX CONFIGURATION
#=================================================
ynh_script_progression --message="Restoring the NGINX web server configuration..." --weight=1
ynh_restore_file --origin_path="/etc/nginx/conf.d/$domain.d/$app.conf"
#=================================================
# REINSTALL COUCHDB
#=================================================
# reinstall couchdb
ynh_script_progression --message="Reinstalling couchdb..." --weight=40
echo "\
@ -56,10 +15,10 @@ couchdb couchdb/mode select standalone
couchdb couchdb/mode seen true
couchdb couchdb/bindaddress string 127.0.0.1
couchdb couchdb/bindaddress seen true
couchdb couchdb/cookie string $password
couchdb couchdb/adminpass password $password
couchdb couchdb/cookie string $couchdb_magic_cookie
couchdb couchdb/adminpass password $password_couchdb_admin
couchdb couchdb/adminpass seen true
couchdb couchdb/adminpass_again password $password
couchdb couchdb/adminpass_again password $password_couchdb_admin
couchdb couchdb/adminpass_again seen true" | debconf-set-selections
DEBIAN_FRONTEND=noninteractive # apt-get install -y --force-yes couchdb
@ -68,39 +27,49 @@ ynh_install_extra_app_dependencies \
--key="https://couchdb.apache.org/repo/keys.asc" \
--package="couchdb"
chmod 750 "$install_dir"
chmod -R o-rwx "$install_dir"
chown -R $app:$app "$install_dir"
# stop couchdb
systemctl stop couchdb
chmod 750 "$data_dir"
chmod -R o-rwx "$data_dir"
chown -R $app:www-data "$data_dir"
# add couchdb configuration
ynh_script_progression --message="Adding a configuration file..." --weight=2
ynh_restore_file --origin_path="/opt/couchdb/etc/local.d/05-flohmarkt.ini"
chown root:couchdb /opt/couchdb/etc/local.d/05-flohmarkt.ini
chmod 640 /opt/couchdb/etc/local.d/05-flohmarkt.ini
# start couchdb
systemctl start couchdb
systemctl status couchdb
# RESTORE THE APP MAIN DIR
ynh_script_progression --message="Restoring the app main directory..." --weight=10
ynh_restore_file --origin_path="$install_dir"
# RESTORE THE DATA DIRECTORY
ynh_script_progression --message="Restoring the data directory..." --weight=1
ynh_restore_file --origin_path="$data_dir" --not_mandatory
mkdir -p $data_dir
# RESTORE FAIL2BAN CONFIGURATION
ynh_script_progression --message="Restoring the Fail2Ban configuration..." --weight=2
ynh_restore_file --origin_path="/etc/fail2ban/jail.d/$app.conf"
ynh_restore_file --origin_path="/etc/fail2ban/filter.d/$app.conf"
ynh_systemd_action --action=restart --service_name=fail2ban
# RESTORE THE NGINX CONFIGURATION
ynh_script_progression --message="Restoring the NGINX web server configuration..." --weight=1
ynh_restore_file --origin_path="/etc/nginx/conf.d/$domain.d/$app.conf"
#=================================================
# RESTORE THE LOGROTATE CONFIGURATION
#=================================================
ynh_script_progression --message="Restoring the logrotate configuration..." --weight=1
ynh_restore_file --origin_path="/etc/logrotate.d/$app"
#=================================================
# INTEGRATE SERVICE IN YUNOHOST
#=================================================
ynh_script_progression --message="Integrating service in YunoHost..." --weight=1
yunohost service add $app --description="A decentral federated small advertisement platform" --log="/var/log/$app/$app.log"
ynh_systemd_action --action=start --line_match="INFO: Application startup complete."
#=================================================
# GENERIC FINALIZATION
#=================================================
# RELOAD NGINX
#=================================================
ynh_script_progression --message="Reloading NGINX web server..." --weight=1
ynh_systemd_action --service_name=nginx --action=reload
#=================================================
# END OF SCRIPT
#=================================================
ynh_script_progression --message="Restoration completed for $app" --last

View file

@ -52,7 +52,7 @@ fi
#=================================================
ynh_script_progression --message="Updating a configuration file..." --weight=1
ynh_add_config --template="../conf/5-flohmarkt.ini" --destination="$install_dir/etc/local.d/5-flohmarkt.ini"
ynh_add_config --template="../conf/05-flohmarkt.ini" --destination="$install_dir/etc/local.d/05-flohmarkt.ini"
chmod 750 "$install_dir"
chmod -R o-rwx "$install_dir"

View file

@ -2,7 +2,7 @@ test_format = 1.0
[default]
# still in development
exclude = ["install.private", "install.multi", "upgrade", "backup_restore", "change_url", "install_subdir"]
exclude = ["install.private", "install.multi", "upgrade", "change_url", "install_subdir"]
args.password_couchdb_admin = "TestPasswordCouchDBadmin"
args.password_couchdb_flohmarkt = "TestPasswordCouchDBflohmarkt"