mirror of
https://github.com/nextcloud/vm.git
synced 2025-10-26 11:27:32 +00:00
181 lines
4.6 KiB
Bash
181 lines
4.6 KiB
Bash
#!/bin/bash
|
|
|
|
if [[ $EUID -ne 0 ]]; then
|
|
echo "This script must be run as root"
|
|
exit 1
|
|
fi
|
|
|
|
if [ $# -eq 0 ]
|
|
then
|
|
echo "No arguments supplied"
|
|
exit 0
|
|
elif [ $# -lt 4 ]; then
|
|
echo "Wrong number of arguments supplied"
|
|
exit 0
|
|
fi
|
|
|
|
echo "Using folder $1, and Nextcloud User $2"
|
|
|
|
DIR="$1"
|
|
NC_USER=$2
|
|
NC_PWD=$3
|
|
NC_PORT=$4
|
|
|
|
POSTGRESPATH="/etc/postgresql"
|
|
PSQLVERSION_DOCKER=13
|
|
CFG_VARS=("dbname" "dbpassword" "dbuser")
|
|
CFG_NAMES=("POSTGRES_DB" "POSTGRES_PASSWORD" "POSTGRES_USER")
|
|
CFG_NAMES_EXT=("NEXTCLOUD_ADMIN_USER" "NEXTCLOUD_ADMIN_PASSWORD")
|
|
|
|
NC_CFG_PATH="config/config.php"
|
|
PG_CFG_PATH="db/postgresql.conf"
|
|
PG_COMMENT_OUT=("data_directory" "hba_file" "ident_file" "external_pid_file" "port" "ssl" "ssl_cert_file" "ssl_key_file" "log_line_prefix" "cluster_name" "stats_temp_directory" "include_dir")
|
|
|
|
if [ -d "$POSTGRESPATH" ]
|
|
then
|
|
mapfile -t test < <(find /usr -wholename '*/bin/postgres' |grep -Eo "[0-9][0-9]")
|
|
|
|
PSQLVERSION=0
|
|
for v in "${test[@]}"; do
|
|
if (( v > PSQLVERSION )); then PSQLVERSION=$v; fi;
|
|
done
|
|
|
|
echo "Postgresql installation Version $PSQLVERSION found"
|
|
else
|
|
echo "No postgresql installation found"
|
|
exit 0
|
|
fi
|
|
|
|
PG_CFG="/etc/postgresql/$PSQLVERSION/main"
|
|
PG_DATA="/var/lib/postgresql/$PSQLVERSION/main"
|
|
|
|
|
|
if (( PSQLVERSION < PSQLVERSION_DOCKER )); then
|
|
echo "Migrating database from version $PSQLVERSION to version $PSQLVERSION_DOCKER"
|
|
|
|
sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
|
|
|
|
echo "Adding postgresql 13 repo and installing"
|
|
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
|
|
|
|
apt-get update
|
|
|
|
apt-get -y install postgresql-$PSQLVERSION_DOCKER -y
|
|
|
|
echo "Stopping Version $PSQLVERSION_DOCKER cluster"
|
|
pg_dropcluster 13 main --stop
|
|
|
|
echo "Migrating old cluster"
|
|
{
|
|
pg_upgradecluster -m upgrade "$PSQLVERSION" main
|
|
} ||
|
|
{
|
|
# could also check postgresql owner
|
|
#USER=$(stat -c '%U' "/etc/postgresql/12/main")
|
|
#echo $USER
|
|
#USER=$(stat -c '%U' "/var/lib/postgresql/12/main")
|
|
#echo $USER
|
|
chown -R postgres:postgres "$PG_CFG"
|
|
chown -R postgres:postgres "$PG_DATA"
|
|
pg_upgradecluster -m upgrade "$PSQLVERSION" main
|
|
}
|
|
fi
|
|
|
|
echo "making new folders"
|
|
mkdir "$DIR"
|
|
|
|
echo "Copying docker-compose file"
|
|
cp docker-compose.yml "$DIR"
|
|
|
|
cd "$DIR" || exit 0
|
|
mkdir db
|
|
mkdir config
|
|
|
|
|
|
|
|
echo "Copying database files"
|
|
cp -R /var/lib/postgresql/13/main db
|
|
cp /etc/postgresql/13/main/pg_hba.conf db
|
|
cp /etc/postgresql/13/main/pg_ident.conf db
|
|
cp /etc/postgresql/13/main/postgresql.conf db
|
|
|
|
echo "copying Nextcloud config file"
|
|
cp -R /var/www/nextcloud/config/* config
|
|
|
|
|
|
|
|
echo "Creating .env file"
|
|
|
|
for var in "${CFG_VARS[@]}"
|
|
do
|
|
file=$(grep "$var" < config/config.php)
|
|
IFS=" " read -r -a line <<< "$(grep "[\"'][^\"']*[\"']" <<< "$file")"
|
|
value=$(echo "${line[2]}"| sed -r "s/[\"',-]//gi")
|
|
echo "${CFG_NAMES[INDEX]}=$value saved in .env file"
|
|
echo "${CFG_NAMES[INDEX]}=$value" >> ".env"
|
|
|
|
((INDEX=INDEX+1))
|
|
done
|
|
|
|
{
|
|
echo "${CFG_NAMES_EXT[0]}=$NC_USER"
|
|
echo "${CFG_NAMES_EXT[1]}=$NC_PWD"
|
|
}>> ".env"
|
|
|
|
echo "NC_PORT=${NC_PORT}" >> ".env"
|
|
|
|
|
|
file=$(grep datadirectory < config/config.php)
|
|
IFS=" " read -r -a line <<< "$(grep "[\"'][^\"']*[\"']" <<< "$file")"
|
|
ORG_DATADIR=$(echo "${line[2]}"| sed -r "s/[\"',-]//gi")
|
|
echo "NC_DATADIR=${ORG_DATADIR}" >> ".env"
|
|
|
|
echo "Patching Nextcloud configuration file"
|
|
|
|
sed -i '/memcache.distributed/s/^/#/g' $NC_CFG_PATH
|
|
sed -i '/memcache.locking/s/^/#/g' $NC_CFG_PATH
|
|
|
|
start=$(sed -n '/redis/=' $NC_CFG_PATH| head -1)
|
|
mapfile -t ends < <(sed -n '/),/=' $NC_CFG_PATH )
|
|
|
|
for e in "${ends[@]}"
|
|
do
|
|
if [ "$e" -gt "$start" ]; then
|
|
end=$e
|
|
break
|
|
fi
|
|
done
|
|
|
|
sed -i "$start,$end s/^/#/" $NC_CFG_PATH
|
|
|
|
start=$(sed -n '/dbhost/=' $NC_CFG_PATH)
|
|
sed -i "$start s/.*/ 'dbhost' => 'db',/" $NC_CFG_PATH
|
|
|
|
start=$(sed -n '/datadirectory/=' $NC_CFG_PATH)
|
|
sed -i "$start s/.*/ 'datadirectory' => '\/var\/www\/html\/data',/" $NC_CFG_PATH
|
|
|
|
|
|
echo "Patching Postgresql configuration file"
|
|
|
|
for cmt in "${PG_COMMENT_OUT[@]}"
|
|
do
|
|
sed -i "/$cmt/s/^/#/g" $PG_CFG_PATH
|
|
done
|
|
|
|
start=$(sed -n '/listen_addresses/=' $PG_CFG_PATH)
|
|
sed -i "$start s/.*/listen_addresses = '*'/" $PG_CFG_PATH
|
|
|
|
echo "Patching Postgresql HBA file"
|
|
echo "host all all all md5" >> db/pg_hba.conf
|
|
|
|
chown -R www-data:docker ./*
|
|
|
|
echo "Disabling postgresql"
|
|
systemctl disable postgresql
|
|
systemctl stop postgresql
|
|
|
|
echo "Finished"
|
|
echo "Change the 'trusted_domains' section in the config/config.php file to match your needs"
|
|
echo "Run 'docker-compose up -d' to start the Nextcloud docker container"
|
|
echo "You may have to adjust the ownership of config and db folders"
|
|
echo "Consider changing your Apache configuration" |