2019-05-10 21:41:24 +08:00
#!/usr/bin/env bash
2017-11-04 03:39:58 +08:00
for bin in curl dirmngr; do
if [ [ -z $( which ${ bin } ) ] ] ; then echo " Cannot find ${ bin } , exiting... " ; exit 1; fi
done
2018-02-01 20:30:27 +08:00
[ [ -z ${ 1 } ] ] && NC_HELP = y
2017-11-04 03:39:58 +08:00
while [ " $1 " != '' ] ; do
case " ${ 1 } " in
-p| --purge) NC_PURGE = y && shift; ;
-i| --install) NC_INSTALL = y && shift; ;
2020-10-14 03:31:01 +08:00
-r| --resetpw) NC_RESETPW = y && shift; ;
2018-02-01 20:30:27 +08:00
-h| --help) NC_HELP = y && shift; ;
2017-11-04 03:39:58 +08:00
*) echo " Unknown parameter: ${ 1 } " && shift; ;
esac
done
2018-02-01 20:30:27 +08:00
if [ [ ${ NC_HELP } = = "y" ] ] ; then
printf 'Usage:\n\n'
printf ' -p|--purge\n Purge Nextcloud\n'
2020-10-14 03:31:01 +08:00
printf ' -i|--install\n Install Nextcloud\n'
printf ' -r|--resetpw\n Reset password\n\n'
2018-02-01 20:30:27 +08:00
exit 0
fi
2020-10-14 03:31:01 +08:00
[ [ ${ NC_PURGE } = = "y" ] ] && [ [ ${ NC_INSTALL } = = "y" ] ] && { echo "Cannot use -p and -i at the same time!" ; exit 1; }
[ [ ${ NC_PURGE } = = "y" ] ] && [ [ ${ NC_RESETPW } = = "y" ] ] && { echo "Cannot use -p and -r at the same time!" ; exit 1; }
2017-11-04 03:39:58 +08:00
2018-01-19 05:17:23 +08:00
SCRIPT_DIR = " $( cd " $( dirname " ${ BASH_SOURCE [0] } " ) " && pwd ) "
2018-02-01 20:30:27 +08:00
cd ${ SCRIPT_DIR } /../
source mailcow.conf
2017-11-04 03:39:58 +08:00
2018-01-19 05:17:23 +08:00
if [ [ ${ NC_PURGE } = = "y" ] ] ; then
2019-01-12 15:54:48 +08:00
read -r -p "Are you sure you want to purge Nextcloud? [y/N] " response
response = ${ response ,, }
if [ [ ! " $response " = ~ ^( yes| y) $ ] ] ; then
echo "OK, aborting."
exit 1
fi
docker exec -it $( docker ps -f name = mysql-mailcow -q) mysql -uroot -p${ DBROOT } -e \
" $( docker exec -it $( docker ps -f name = mysql-mailcow -q) mysql -uroot -p${ DBROOT } -e " SELECT IFNULL(GROUP_CONCAT('DROP TABLE ', TABLE_SCHEMA, '.', TABLE_NAME SEPARATOR ';'),'SELECT NULL;') FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE 'nc_%' AND TABLE_SCHEMA = ' ${ DBNAME } '; " -BN) "
docker exec -it $( docker ps -f name = redis-mailcow -q) /bin/sh -c ' cat <<EOF | redis-cli
2018-12-13 03:24:18 +08:00
SELECT 10
FLUSHDB
EOF
'
2019-01-12 15:54:48 +08:00
if [ -d ./data/web/nextcloud/config ] ; then
mv ./data/web/nextcloud/config/ ./data/conf/nextcloud-config-folder-$( date +%s) .bak
fi
[ [ -d ./data/web/nextcloud ] ] && rm -rf ./data/web/nextcloud
2017-11-04 03:39:58 +08:00
2019-01-12 15:54:48 +08:00
[ [ -f ./data/conf/nginx/site.nextcloud.custom ] ] && mv ./data/conf/nginx/site.nextcloud.custom ./data/conf/nginx/site.nextcloud.custom-$( date +%s) .bak
[ [ -f ./data/conf/nginx/nextcloud.conf ] ] && mv ./data/conf/nginx/nextcloud.conf ./data/conf/nginx/nextcloud.conf-$( date +%s) .bak
2017-11-04 03:39:58 +08:00
2018-01-12 15:30:54 +08:00
docker restart $( docker ps -aqf name = nginx-mailcow)
2017-11-04 03:39:58 +08:00
2019-01-12 15:54:48 +08:00
elif [ [ ${ NC_UPDATE } = = "y" ] ] ; then
2019-01-13 05:47:55 +08:00
exit;
2019-01-12 15:54:48 +08:00
read -r -p "Are you sure you want to update Nextcloud? [y/N] " response
response = ${ response ,, }
if [ [ ! " $response " = ~ ^( yes| y) $ ] ] ; then
echo "OK, aborting."
exit 1
fi
if [ ! -f data/web/nextcloud/occ ] ; then
echo "Nextcloud occ not found. Is Nextcloud installed?"
exit 1
fi
2019-01-13 05:47:55 +08:00
if ! grep -q 'installed: true' <<< $( docker exec -it -u www-data $( docker ps -f name = php-fpm-mailcow -q) bash -c "/web/nextcloud/occ --no-warnings status" ) ; then
echo "Nextcloud seems not to be installed."
exit 1
2020-10-08 22:52:41 +08:00
elif ! grep -q 'version: 19\.' <<< $( docker exec -it -u www-data $( docker ps -f name = php-fpm-mailcow -q) bash -c "/web/nextcloud/occ --no-warnings status" ) ; then
2019-01-13 05:47:55 +08:00
echo "Cannot upgrade to new major version, please update manually."
exit 1
else
2020-10-08 22:52:41 +08:00
curl -L# -o nextcloud.tar.bz2 "https://download.nextcloud.com/server/releases/latest-19.tar.bz2" || { echo "Failed to download Nextcloud archive." ; exit 1; } \
2019-01-12 15:54:48 +08:00
&& tar -xjf nextcloud.tar.bz2 -C ./data/web/ \
&& rm nextcloud.tar.bz2 \
&& mkdir -p ./data/web/nextcloud/data \
2019-04-01 04:04:25 +08:00
&& chmod +x ./data/web/nextcloud/occ \
2019-04-01 04:05:35 +08:00
docker exec -it $( docker ps -f name = php-fpm-mailcow -q) bash -c "chown www-data:www-data -R /web/nextcloud" \
2019-04-01 04:04:25 +08:00
docker exec -it -u www-data $( docker ps -f name = php-fpm-mailcow -q) bash -c "/web/nextcloud/occ --no-warnings upgrade"
2019-01-12 15:54:48 +08:00
fi
2017-11-04 03:39:58 +08:00
2019-01-12 15:54:48 +08:00
elif [ [ ${ NC_INSTALL } = = "y" ] ] ; then
2019-04-14 19:26:53 +08:00
NC_SUBD =
while [ [ -z ${ NC_SUBD } ] ] ; do
read -p "Subdomain to run Nextcloud from [format: nextcloud.domain.tld]: " NC_SUBD
2019-01-12 15:54:48 +08:00
done
2019-04-14 19:26:53 +08:00
if ! ping -q -c2 ${ NC_SUBD } > /dev/null 2>& 1 ; then
read -p "Cannot ping subdomain, continue anyway? [y|N] " NC_CONT_FAIL
[ [ ! ${ NC_CONT_FAIL ,, } = ~ ^( yes| y) $ ] ] && { echo "Ok, exiting..." ; exit 1; }
2019-01-12 15:54:48 +08:00
fi
ADMIN_NC_PASS = $( </dev/urandom tr -dc A-Za-z0-9 | head -c 28)
2020-10-08 22:52:41 +08:00
curl -L# -o nextcloud.tar.bz2 "https://download.nextcloud.com/server/releases/latest-19.tar.bz2" || { echo "Failed to download Nextcloud archive." ; exit 1; } \
2019-01-12 15:54:48 +08:00
&& tar -xjf nextcloud.tar.bz2 -C ./data/web/ \
&& rm nextcloud.tar.bz2 \
&& mkdir -p ./data/web/nextcloud/data \
&& chmod +x ./data/web/nextcloud/occ
2019-04-14 19:26:53 +08:00
docker exec -it $( docker ps -f name = php-fpm-mailcow -q) /bin/bash -c "chown -R www-data:www-data /web/nextcloud"
2019-01-12 15:54:48 +08:00
docker exec -it -u www-data $( docker ps -f name = php-fpm-mailcow -q) /web/nextcloud/occ --no-warnings maintenance:install \
--database mysql \
--database-host mysql \
--database-name ${ DBNAME } \
--database-user ${ DBUSER } \
--database-pass ${ DBPASS } \
2020-10-08 22:52:41 +08:00
--database-table-prefix nc_ \
2019-01-12 15:54:48 +08:00
--admin-user admin \
--admin-pass ${ ADMIN_NC_PASS } \
2017-11-04 03:39:58 +08:00
--data-dir /web/nextcloud/data
2019-01-12 15:54:48 +08:00
docker exec -it -u www-data $( docker ps -f name = php-fpm-mailcow -q) bash -c " /web/nextcloud/occ --no-warnings config:system:set redis host --value=redis --type=string; \
/web/nextcloud/occ --no-warnings config:system:set redis port --value= 6379 --type= integer; \
/web/nextcloud/occ --no-warnings config:system:set redis timeout --value= 0.0 --type= integer; \
/web/nextcloud/occ --no-warnings config:system:set redis dbindex --value= 10 --type= integer; \
/web/nextcloud/occ --no-warnings config:system:set memcache.locking --value= '\OC\Memcache\Redis' --type= string; \
/web/nextcloud/occ --no-warnings config:system:set memcache.local --value= '\OC\Memcache\Redis' --type= string; \
2020-05-05 14:21:07 +08:00
/web/nextcloud/occ --no-warnings config:system:set trusted_domains 1 --value= ${ NC_SUBD } ; \
2019-01-12 15:54:48 +08:00
/web/nextcloud/occ --no-warnings config:system:set trusted_proxies 0 --value= ${ IPV6_NETWORK } ; \
/web/nextcloud/occ --no-warnings config:system:set trusted_proxies 1 --value= ${ IPV4_NETWORK } .0/24; \
2020-05-05 14:21:07 +08:00
/web/nextcloud/occ --no-warnings config:system:set overwritehost --value= ${ NC_SUBD } ; \
2019-01-12 15:54:48 +08:00
/web/nextcloud/occ --no-warnings config:system:set overwriteprotocol --value= https; \
2020-05-05 14:21:07 +08:00
/web/nextcloud/occ --no-warnings config:system:set overwritewebroot --value= /; \
2019-01-12 15:54:48 +08:00
/web/nextcloud/occ --no-warnings config:system:set mail_smtpmode --value= smtp; \
/web/nextcloud/occ --no-warnings config:system:set mail_smtpauthtype --value= LOGIN; \
/web/nextcloud/occ --no-warnings config:system:set mail_from_address --value= nextcloud; \
/web/nextcloud/occ --no-warnings config:system:set mail_domain --value= ${ MAILCOW_HOSTNAME } ; \
/web/nextcloud/occ --no-warnings config:system:set mail_smtphost --value= postfix; \
2019-04-14 19:26:53 +08:00
/web/nextcloud/occ --no-warnings config:system:set mail_smtpport --value= 588; \
2019-01-13 06:13:35 +08:00
/web/nextcloud/occ --no-warnings db:convert-filecache-bigint -n"
2019-01-12 15:54:48 +08:00
2019-04-14 19:26:53 +08:00
# Not installing by default, broke too often
#/web/nextcloud/occ --no-warnings app:install user_external; \
#/web/nextcloud/occ --no-warnings config:system:set user_backends 0 arguments 0 --value={dovecot:143/imap/tls/novalidate-cert}; \
#/web/nextcloud/occ --no-warnings config:system:set user_backends 0 class --value=OC_User_IMAP; \
2019-01-12 15:54:48 +08:00
cp ./data/assets/nextcloud/nextcloud.conf ./data/conf/nginx/
sed -i " s/NC_SUBD/ ${ NC_SUBD } /g " ./data/conf/nginx/nextcloud.conf
2017-11-04 03:39:58 +08:00
2019-04-14 19:26:53 +08:00
echo "Restarting Nginx..."
2018-01-12 15:30:54 +08:00
docker restart $( docker ps -aqf name = nginx-mailcow)
2017-11-04 03:39:58 +08:00
2019-01-12 15:54:48 +08:00
echo " Login as admin with password: ${ ADMIN_NC_PASS } "
2017-11-04 03:39:58 +08:00
2020-10-14 03:31:01 +08:00
elif [ [ ${ NC_RESETPW } = = "y" ] ] ; then
printf 'You are about to set a new password for a Nextcloud user.\n\nDo not use this option if your Nextcloud is configured to use mailcow for authentication.\nSet a new password for the corresponding mailbox in mailcow, instead.\n\n'
read -r -p "Continue? [y/N] " response
response = ${ response ,, }
if [ [ ! " $response " = ~ ^( yes| y) $ ] ] ; then
echo "OK, aborting."
exit 1
fi
NC_USER =
while [ [ -z ${ NC_USER } ] ] ; do
read -p "Enter the username: " NC_USER
done
docker exec -it -u www-data $( docker ps -f name = php-fpm-mailcow -q) /web/nextcloud/occ user:resetpassword ${ NC_USER }
2017-11-04 03:39:58 +08:00
fi