diff --git a/apps/collabora.sh b/apps/collabora.sh index bf2a5ddc..c43fdb91 100644 --- a/apps/collabora.sh +++ b/apps/collabora.sh @@ -64,6 +64,7 @@ install_docker # If yes, then stop and prune the docker container docker_prune_this 'collabora/code' docker_prune_this 'onlyoffice/documentserver' +occ_command_no_check app:remove documentserver_community # Disable RichDocuments (Collabora App) if activated if [ -d "$NC_APPS_PATH"/richdocuments ] diff --git a/apps/onlyoffice.sh b/apps/onlyoffice.sh index ca3e3096..737ace92 100644 --- a/apps/onlyoffice.sh +++ b/apps/onlyoffice.sh @@ -5,11 +5,8 @@ # shellcheck disable=2034,2059 true # shellcheck source=lib.sh -NC_UPDATE=1 && OO_INSTALL=1 . <(curl -sL https://raw.githubusercontent.com/nextcloud/vm/master/lib.sh) +NC_UPDATE=1 . <(curl -sL https://raw.githubusercontent.com/nextcloud/vm/master/lib.sh) unset NC_UPDATE -unset OO_INSTALL - -print_text_in_color "$ICyan" "Installing OnlyOffice..." # Check for errors + debug code and abort if something isn't right # 1 = ON @@ -20,32 +17,86 @@ debug_mode # Check if root root_check -# Nextcloud 13 is required. -lowest_compatible_nc 13 +# Nextcloud 18 is required. +lowest_compatible_nc 18 # Test RAM size (2GB min) + CPUs (min 2) ram_check 2 OnlyOffice cpu_check 2 OnlyOffice -# Notification -msg_box "Before you start, please make sure that port 80+443 is directly forwarded to this machine!" +# Check if Nextcloud is installed with SSL +if ! occ_command_no_check config:system:get overwrite.cli.url | grep -q "https" +then +msg_box "Sorry, but Nextcloud needs to be run on HTTPS which doesn't seem to be the case here. + +You easily activate TLS (HTTPS) by running the Let's Encrypt script found in $SCRIPTS. +More info here: https://bit.ly/37wRCin + +To run this script again, just exectue 'sudo bash $SCRIPTS/apps.sh' and choose OnlyOffice." + exit +fi # Get the latest packages apt update -q4 & spinner_loading -# Check if Nextcloud is installed -print_text_in_color "$ICyan" "Checking if Nextcloud is installed..." -if ! curl -s https://"${NCDOMAIN//\\/}"/status.php | grep -q 'installed":true' +# Check if OnlyOffice is installed using the old method +if does_this_docker_exist 'onlyoffice/documentserver' then -msg_box "It seems like Nextcloud is not installed or that you don't use https on: -${NCDOMAIN//\\/}. -Please install Nextcloud and make sure your domain is reachable, or activate SSL -on your domain to be able to run this script. -If you use the Nextcloud VM you can use the Let's Encrypt script to get SSL and activate your Nextcloud domain. -When SSL is activated, run these commands from your terminal: -sudo curl -sLO $APP/onlyoffice.sh -sudo bash onlyoffice.sh" - exit 1 + # Greater than 18.0.0 is 18.0.1 which is required + if version_gt "$CURRENTVERSION" "18.0.0" + then + print_text_in_color "$ICyan" "Your server is compatible with the new way of installing OnlyOffice. We will now remove the old docker and install the app from Nextcloud instead." + # Remove docker image + docker_prune_this 'onlyoffice/documentserver' + # Revoke LE + SUBDOMAIN=$(whiptail --title "T&M Hansson IT - OnlyOffice" --inputbox "Please enter the subdomain you are using for OnlyOffice, eg: office.yourdomain.com" "$WT_HEIGHT" "$WT_WIDTH" 3>&1 1>&2 2>&3) + if [ -f "$CERTFILES/$SUBDOMAIN/cert.pem" ] + then + yes no | certbot revoke --cert-path "$CERTFILES/$SUBDOMAIN/cert.pem" + rm -rf "${CERTFILES:?/}"/"${SUBDOMAIN:?}"* + fi + # Remove Apache2 config + if [ -f "$SITES_AVAILABLE/$SUBDOMAIN.conf" ] + then + a2dissite "$SUBDOMAIN".conf + restart_webserver + rm -f "$SITES_AVAILABLE/$SUBDOMAIN.conf" + fi + # Remove app + occ_command_no_check app:remove onlyoffice + fi +# Check if OnlyOffice is installed using the new method +elif version_gt "$CURRENTVERSION" "18.0.0" && ! does_this_docker_exist 'onlyoffice/documentserver' +then + install_if_not jq + if occ_command_no_check app:list --output=json | jq -e '.enabled | .documentserver_community' > /dev/null + then + choice=$(whiptail --radiolist "It seems like 'OnlyOffice' is already installed.\nChoose what you want to do.\nSelect by pressing the spacebar and ENTER" "$WT_HEIGHT" "$WT_WIDTH" 4 \ + "Uninstall OnlyOffice" "" OFF \ + "Reinstall OnlyOffice" "" ON 3>&1 1>&2 2>&3) + + case "$choice" in + "Uninstall OnlyOffice") + print_text_in_color "$ICyan" "Uninstalling OnlyOffice..." + occ_command app:remove documentserver_community + msg_box "OnlyOffice was successfully uninstalled." + exit + ;; + "Reinstall OnlyOffice") + print_text_in_color "$ICyan" "Reinstalling OnlyOffice..." + occ_command app:remove documentserver_community + ;; + *) + ;; + esac + fi +else +msg_box "You need to run at least Nextcloud 18.0.1 to be able to run OnlyOffice. Please upgrade using the built in script: + +'sudo bash $SCRIPTS/update.sh' + +You can also buy support directly in our shop: https://shop.hanssonit.se/product/upgrade-between-major-owncloud-nextcloud-versions/" + exit fi # Check if apache2 evasive-mod is enabled and disable it because of compatibility issues @@ -63,148 +114,44 @@ then fi fi -# Check if $SUBDOMAIN exists and is reachable -print_text_in_color "$ICyan" "Checking if $SUBDOMAIN exists and is reachable..." -domain_check_200 "$SUBDOMAIN" - -# Check open ports with NMAP -check_open_port 80 "$SUBDOMAIN" -check_open_port 443 "$SUBDOMAIN" - -# Install Docker -install_docker - -# Check if OnlyOffice or Collabora is previously installed -# If yes, then stop and prune the docker container -docker_prune_this 'onlyoffice/documentserver' -docker_prune_this 'collabora/code' - -# Disable RichDocuments (Collabora App) if activated -if [ -d "$NC_APPS_PATH"/richdocuments ] +# Check if collabora is installed and remove every trace of it +if does_this_docker_exist 'collabora/code' then - occ_command app:remove richdocuments -fi - -# Disable OnlyOffice (Collabora App) if activated -if [ -d "$NC_APPS_PATH"/onlyoffice ] -then - occ_command app:remove onlyoffice -fi - -# Install Onlyoffice docker -docker pull onlyoffice/documentserver:latest -docker run -i -t -d -p 127.0.0.3:9090:80 --restart always --name onlyoffice onlyoffice/documentserver - -# Install apache2 -install_if_not apache2 - -# Enable Apache2 module's -a2enmod proxy -a2enmod proxy_wstunnel -a2enmod proxy_http -a2enmod ssl - -if [ -f "$HTTPS_CONF" ] -then - a2dissite "$SUBDOMAIN.conf" - rm -f "$HTTPS_CONF" -fi - -# Create Vhost for OnlyOffice online in Apache2 -if [ ! -f "$HTTPS_CONF" ]; -then - cat << HTTPS_CREATE > "$HTTPS_CONF" - - ServerName $SUBDOMAIN:443 - - SSLEngine on - ServerSignature On - SSLHonorCipherOrder on - - SSLCertificateChainFile $CERTFILES/$SUBDOMAIN/chain.pem - SSLCertificateFile $CERTFILES/$SUBDOMAIN/cert.pem - SSLCertificateKeyFile $CERTFILES/$SUBDOMAIN/privkey.pem - SSLOpenSSLConfCmd DHParameters $DHPARAMS_SUB - - SSLProtocol all -SSLv2 -SSLv3 - SSLCipherSuite ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS - - LogLevel warn - CustomLog ${APACHE_LOG_DIR}/access.log combined - ErrorLog ${APACHE_LOG_DIR}/error.log - - # Just in case - see below - SSLProxyEngine On - SSLProxyVerify None - SSLProxyCheckPeerCN Off - SSLProxyCheckPeerName Off - - # contra mixed content warnings - RequestHeader set X-Forwarded-Proto "https" - - # basic proxy settings - ProxyRequests off - - ProxyPassMatch (.*)(\/websocket)$ "ws://127.0.0.3:9090/$1$2" - ProxyPass / "http://127.0.0.3:9090/" - ProxyPassReverse / "http://127.0.0.3:9090/" - - - ProxyPassReverse / - - -HTTPS_CREATE - - if [ -f "$HTTPS_CONF" ]; + msg_box "You can't run both Collabora and OnlyOffice on the same VM. We will now remove Collabora from the server." + # Remove docker image + docker_prune_this 'collabora/code' + # Revoke LE + SUBDOMAIN=$(whiptail --title "T&M Hansson IT - OnlyOffice" --inputbox "Please enter the subdomain you are using for Collabora, eg: office.yourdomain.com" "$WT_HEIGHT" "$WT_WIDTH" 3>&1 1>&2 2>&3) + if [ -f "$CERTFILES/$SUBDOMAIN/cert.pem" ] then - print_text_in_color "$IGreen" "$HTTPS_CONF was successfully created." - sleep 1 - else - print_text_in_color "$IRed" "Unable to create vhost, exiting..." - print_text_in_color "$IRed" "Please report this issue here $ISSUES" - exit 1 + yes no | certbot revoke --cert-path "$CERTFILES/$SUBDOMAIN/cert.pem" + rm -rf "${CERTFILES:?/}"/"${SUBDOMAIN:?}"* fi -fi - -# Install certbot (Let's Encrypt) -install_certbot - -# Generate certs, and auto-configure if successful -if generate_cert "$SUBDOMAIN" -then - # Generate DHparams chifer - if [ ! -f "$DHPARAMS_SUB" ] + # Remove Apache2 config + if [ -f "$SITES_AVAILABLE/$SUBDOMAIN.conf" ] then - openssl dhparam -dsaparam -out "$DHPARAMS_SUB" 4096 + a2dissite "$SUBDOMAIN".conf + restart_webserver + rm -f "$SITES_AVAILABLE/$SUBDOMAIN.conf" fi - printf "%b" "${IGreen}Certs are generated!\n${Color_Off}" - a2ensite "$SUBDOMAIN.conf" - restart_webserver - # Install OnlyOffice - occ_command app:install onlyoffice -else - last_fail_tls $SCRIPTS/apps/onlyoffice.sh + # Remove app + occ_command_no_check app:remove richdocuments fi -# Set config for OnlyOffice -if [ -d "$NC_APPS_PATH"/onlyoffice ] +# Install OnlyOffice +msg_box "We will now install OnlyOffice. + +Please note that it might take very long time to install it, and you will not see any progress bar. + +Please be paitent, don't abort." +install_and_enable_app onlyoffice +sleep 2 +if install_and_enable_app documentserver_community then - occ_command config:app:set onlyoffice DocumentServerUrl --value=https://"$SUBDOMAIN/" chown -R www-data:www-data "$NC_APPS_PATH" - occ_command config:system:set trusted_domains 3 --value="$SUBDOMAIN" -# Add prune command - { - echo "#!/bin/bash" - echo "docker system prune -a --force" - echo "exit" - } > "$SCRIPTS/dockerprune.sh" - chmod a+x "$SCRIPTS/dockerprune.sh" - crontab -u root -l | { cat; echo "@weekly $SCRIPTS/dockerprune.sh"; } | crontab -u root - - print_text_in_color "$ICyan" "Docker automatic prune job added." - service docker restart - docker restart onlyoffice - print_text_in_color "$IGreen" "OnlyOffice is now successfully installed." - any_key "Press any key to continue... " + occ_command config:app:set onlyoffice DocumentServerUrl --value="$(occ_command_no_check config:system:get overwrite.cli.url)apps/documentserver_community/" + msg_box "OnlyOffice was successfully installed." fi +# Just make sure the script exits exit diff --git a/lib.sh b/lib.sh index 9d0f01c5..4998290d 100644 --- a/lib.sh +++ b/lib.sh @@ -71,10 +71,6 @@ SECURE="$SCRIPTS/setup_secure_permissions_nextcloud.sh" AUT_UPDATES_TIME="18" # Keys OpenPGP_fingerprint='28806A878AE423A28372792ED75899B9A724937A' -# OnlyOffice URL (onlyoffice.sh) -[ -n "$OO_INSTALL" ] && SUBDOMAIN=$(whiptail --title "T&M Hansson IT - OnlyOffice" --inputbox "OnlyOffice subdomain eg: office.yourdomain.com\n\nNOTE: This domain must be different than your Nextcloud domain. They can however be hosted on the same server, but would require seperate DNS entries." "$WT_HEIGHT" "$WT_WIDTH" 3>&1 1>&2 2>&3) -# Nextcloud Main Domain (onlyoffice.sh) -[ -n "$OO_INSTALL" ] && NCDOMAIN=$(whiptail --title "T&M Hansson IT - OnlyOffice" --inputbox "Nextcloud domain, make sure it looks like this: cloud\\.yourdomain\\.com" "$WT_HEIGHT" "$WT_WIDTH" cloud\\.yourdomain\\.com 3>&1 1>&2 2>&3) # Collabora Docker URL (collabora.sh [ -n "$COLLABORA_INSTALL" ] && SUBDOMAIN=$(whiptail --title "T&M Hansson IT - Collabora" --inputbox "Collabora subdomain eg: office.yourdomain.com\n\nNOTE: This domain must be different than your Nextcloud domain. They can however be hosted on the same server, but would require seperate DNS entries." "$WT_HEIGHT" "$WT_WIDTH" 3>&1 1>&2 2>&3) # Nextcloud Main Domain (collabora.sh)