200 lines
8.3 KiB
Bash
200 lines
8.3 KiB
Bash
#!/bin/bash
|
|
|
|
echo "For the following, please only use digits, UPPERCASE and lowercase."
|
|
|
|
echo -n "Please provide a root password for your MariaDB: "
|
|
read sqlrootpass
|
|
echo -n "Please provide a name for the Nextcloud database: "
|
|
read dbname
|
|
echo -n "Please provide a user for the Nextcloud database: "
|
|
read dbuser
|
|
echo -n "Please provide a password for the Nextcloud database: "
|
|
read dbpass
|
|
echo -n "Please provide a name for the Nextcloud admin user: "
|
|
read adminuser
|
|
echo -n "Please provide a password for the Nextcloud admin user: "
|
|
read adminpass
|
|
|
|
|
|
|
|
|
|
|
|
## First we update the server
|
|
|
|
apt update && apt -y upgrade
|
|
|
|
## Now install some basic tools:
|
|
## curl - Tool for doing advanced http calls etc. Useful for working with APIs.
|
|
## wget - Tool for doing http downloads.
|
|
## apache2 - Web Server
|
|
## extrepo - Tool for automatic configuration of external repos for Debian
|
|
## unzip - Needed to extract the Nextcloud zip file
|
|
|
|
apt -y install curl wget apache2 unzip sudo
|
|
|
|
## Now we enable Sury for installing the very latest PHP files
|
|
|
|
curl -sSL https://packages.sury.org/php/README.txt | bash -x && apt update
|
|
|
|
## Now we install PHP 8.3 and required modules
|
|
|
|
apt -y install php8.3-{ctype,curl,dom,gd,common,mysql,mbstring,opcache,posix,simplexml,xmlreader,xmlwriter,xmlrpc,xml,cli,zip,bz2,fpm,intl,ldap,smbclient,ftp,imap,bcmath,gmp,exif,apcu,memcached,redis,imagick} libapache2-mod-php8.3 libapache2-mod-fcgid libxml2
|
|
|
|
## Configure Apache2 and PHP8.3
|
|
|
|
systemctl stop apache2
|
|
a2dismod php8.3
|
|
a2dismod mpm_prefork
|
|
a2enmod mpm_event proxy proxy_fcgi setenvif rewrite
|
|
a2enconf php8.3-fpm
|
|
systemctl restart apache2
|
|
cp /etc/apache2/apache2.conf /etc/apache2/apache2.conf.original
|
|
linenum=$(cat /etc/apache2/apache2.conf | grep -n '<Directory /var/www/>' | cut -d: -f1)
|
|
until sed -n "${linenum}p" /etc/apache2/apache2.conf | grep "AllowOverride"> /dev/null; do
|
|
((linenum++))
|
|
done
|
|
sed -i "${linenum}s/\bNone\b/All/" /etc/apache2/apache2.conf
|
|
systemctl restart apache2
|
|
|
|
## Set optimal settings for PHP to make Nextcloud happy...
|
|
|
|
echo "max_execution_time = 240" >> /etc/php/8.3/fpm/conf.d/99-nextcloud.ini
|
|
echo "memory_limit = 512M" >> /etc/php/8.3/fpm/conf.d/99-nextcloud.ini
|
|
echo "post_max_size = 512M" >> /etc/php/8.3/fpm/conf.d/99-nextcloud.ini
|
|
echo "upload_max_filesize = 2048M" >> /etc/php/8.3/fpm/conf.d/99-nextcloud.ini
|
|
echo "[opcache]" >> /etc/php/8.3/fpm/conf.d/99-nextcloud.ini
|
|
echo "opcache.enable=1" >> /etc/php/8.3/fpm/conf.d/99-nextcloud.ini
|
|
echo "opcache.memory_consumption=1024" >> /etc/php/8.3/fpm/conf.d/99-nextcloud.ini
|
|
echo "opcache.interned_strings_buffer=128" >> /etc/php/8.3/fpm/conf.d/99-nextcloud.ini
|
|
echo "opcache.max_accelerated_files=50000" >> /etc/php/8.3/fpm/conf.d/99-nextcloud.ini
|
|
echo "opcache.validate_timestamps=0" >> /etc/php/8.3/fpm/conf.d/99-nextcloud.ini
|
|
echo "opcache.revalidate_freq=60" >> /etc/php/8.3/fpm/conf.d/99-nextcloud.ini
|
|
echo "opcache.save_comments=1" >> /etc/php/8.3/fpm/conf.d/99-nextcloud.ini
|
|
systemctl restart php8.3-fpm.service
|
|
|
|
## Let's install MariaDB
|
|
|
|
apt -y install mariadb-server mariadb-client
|
|
|
|
## Time to harden MariaDB
|
|
|
|
systemctl enable mariadb
|
|
systemctl start mariadb
|
|
echo "UPDATE mysql.global_priv SET priv=json_set(priv, '$.password_last_changed', UNIX_TIMESTAMP(), '$.plugin', 'mysql_native_password', '$.authentication_string', 'invalid', '$.auth_or', json_array(json_object(), json_object('plugin', 'unix_socket'))) WHERE User='root';" | mysql
|
|
echo "FLUSH PRIVILEGES;" | mysql
|
|
echo "UPDATE mysql.global_priv SET priv=json_set(priv, '$.plugin', 'mysql_native_password', '$.authentication_string', PASSWORD('basic_single_escape \"$sqlrootpass\"')) WHERE User='root';" | mysql
|
|
echo "DELETE FROM mysql.global_priv WHERE User='';" | mysql
|
|
echo "DELETE FROM mysql.global_priv WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');" | mysql
|
|
echo "DROP DATABASE IF EXISTS test;" | mysql
|
|
echo "DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%'" | mysql
|
|
echo "FLUSH PRIVILEGES;" | mysql
|
|
|
|
## Let's setup the database for Nextcloud
|
|
|
|
echo "CREATE DATABASE $dbname; CREATE USER $dbuser@localhost IDENTIFIED BY '$dbpass'; GRANT ALL PRIVILEGES ON $dbname.* TO $dbuser@localhost; FLUSH PRIVILEGES;" | mysql
|
|
|
|
## Let's add support for SVG files...
|
|
|
|
apt -y install librsvg2-bin
|
|
sed -i 's|</policymap>| <policy domain="coder" rights="none" pattern="SVG" />\n</policymap>|' /etc/ImageMagick-6/policy.xml
|
|
apt -y install libmagickcore-6.q16-6-extra
|
|
systemctl restart apache2
|
|
|
|
## Let's install Redis Server to manage file locking...
|
|
|
|
apt -y install redis-server
|
|
systemctl start redis-server
|
|
systemctl enable redis-server
|
|
|
|
### Let's install APCu...
|
|
|
|
#apt -y install php-dev php-pear build-essential
|
|
#pecl install apcu
|
|
#systemctl restart apache2
|
|
#systemctl restart php8.3-fpm
|
|
#echo "[apcu]" >> /etc/php/8.3/fpm/conf.d/99-nextcloud.ini
|
|
#echo "apc.enabled=1" >> /etc/php/8.3/fpm/conf.d/99-nextcloud.ini
|
|
#echo "apc.shm_size=32M" >> /etc/php/8.3/fpm/conf.d/99-nextcloud.ini
|
|
#echo "apc.ttl=3600" >> /etc/php/8.3/fpm/conf.d/99-nextcloud.ini
|
|
#echo "apc.enable_cli=1" >> /etc/php/8.3/fpm/conf.d/99-nextcloud.ini
|
|
#systemctl restart php8.3-fpm
|
|
|
|
## Time to download the latest copy of Nextcloud
|
|
|
|
wget https://download.nextcloud.com/server/releases/latest.zip
|
|
|
|
## Unzip files to /var/www/html
|
|
|
|
unzip latest.zip -d /var/www/
|
|
rm -R /var/www/html
|
|
mv /var/www/nextcloud /var/www/html
|
|
chown -R www-data:www-data /var/www/html
|
|
|
|
## Let's create a safe place for your files
|
|
|
|
mkdir /home/nextcloudfiles
|
|
chown -R www-data:www-data /home/nextcloudfiles
|
|
|
|
## Let's do the web install without a browser
|
|
|
|
cd /var/www/html
|
|
echo "Installing Nextcloud..."
|
|
sudo -u www-data php occ maintenance:install --database="mysql" --database-host="localhost" --database-name="$dbname" --database-user="$dbuser" --database-pass="$dbpass" --admin-user="$adminuser" --admin-pass="$adminpass" --data-dir="/home/nextcloudfiles"
|
|
|
|
## Configuring Nextcloud
|
|
|
|
cp /var/www/html/config/config.php /var/www/html/config/config.php.original
|
|
echo "Configuring Trusted Domains..."
|
|
sudo -u www-data php occ config:system:set trusted_domains 0 --value="*"
|
|
echo "Configuring maintenance window..."
|
|
sudo -u www-data php occ config:system:set maintenance_window_start --type=integer --value=1
|
|
echo "Configuring debug mode off..."
|
|
sudo -u www-data php occ config:system:set debug --type=boolean --value=false
|
|
echo "Configuring local memcache as APCu..."
|
|
sudo -u www-data php occ config:system:set memcache.local --type=string --value="\OC\Memcache\APCu"
|
|
echo "Configuring locking memcache as Redis..."
|
|
sudo -u www-data php occ config:system:set memcache.locking --type=string --value="\OC\Memcache\Redis"
|
|
sudo -u www-data php occ config:system:set redis host --type=string --value=localhost
|
|
sudo -u www-data php occ config:system:set redis port --type=integer --value=6379
|
|
sudo -u www-data php occ config:system:set redis timeout --type=float --value=0.0
|
|
echo "Configuring crontab..."
|
|
( crontab -u www-data -l 2>/dev/null; echo '*/5 * * * * php -f /var/www/html/cron.php' ) | crontab -u www-data -
|
|
echo "Unabling cron for background jobs..."
|
|
sudo -u www-data php occ background:cron
|
|
echo "Running a full install check and repair..."
|
|
sudo -u www-data php occ maintenance:repair --include-expensive
|
|
|
|
## Let's make a script so you can use the occ CLI tool from anywhere on your server
|
|
|
|
echo "Creating a global script to allow occ CLI tool to be access from anywhere on the server..."
|
|
echo -e '#!/bin/bash\n\ncd /var/www/html\nsudo -u www-data php occ $@' > /usr/bin/occ && chmod +x /usr/bin/occ
|
|
|
|
## Clean up time...
|
|
|
|
echo "Cleaning up..."
|
|
apt -y autoremove
|
|
|
|
## DONE
|
|
echo
|
|
echo
|
|
echo
|
|
echo "You can now configure your networking for static IP, but what I do,"
|
|
echo "is assign a static IP by using DHCP reservation in my Router. You"
|
|
echo "can forward port 80 on your router if you want outside access."
|
|
echo
|
|
echo "To use the occ CLI tool you can simply type occ from any localtion"
|
|
echo "on the terminal."
|
|
echo
|
|
echo "Your user files are in the folder /home/nextcloudfiles"
|
|
echo
|
|
echo "To log on to your server point your browser to http://ipaddress"
|
|
echo " Admin Username : $adminuser"
|
|
echo " Admin Password : $adminpass"
|
|
echo
|
|
echo "Don't forget to give your Admin User a valid email address on the"
|
|
echo "profile page, or you will not be able to configure the mail server"
|
|
echo "settings. For the settings to be saved a test mail has to be sent"
|
|
echo "to the email address associated with the Admin User."
|
|
echo
|
|
echo "If you have any issues, DM me on Reddit u/thisiszeev"
|