Install Nextcloud on Windows with WSL2 🌱

What is Nextcloud?

Nextcloud is an open source, self-hosted file share and communication platform. Access & sync your files, contacts, calendars & communicate and collaborate across your devices. You decide what happens with your data, where it is and who can access it! -https://docs.nextcloud.com/

Installing WSL

  1. Launch Powershell as administrator
  2. Run the following command
    # enable WSL feature
    dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
    # enable virtual machine platform
    dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all
  3. Type Y to reboot the system
  4. Launch Powershell as administrator and run the following additional commands to use WSL 2
    # enable virtualization platform
    Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform
    # enable wsl2
    wsl --set-default-version 2
    # download the wsl kernel update
    $ProgressPreference = 'SilentlyContinue'; Invoke-WebRequest https://wslstorestorage.blob.core.windows.net/wslblob/wsl_update_x64.msi -OutFile .\wsl_update_x64.msi
    # reset progress preference
    $ProgressPreference = 'Continue'
    # install the downloaded file
    .\wsl_update_x64.msi
  5. Click the Start Button > Search Microsoft Store > Select Microsoft Store
  6. Search for the Linux distribution to install (Debian, Ubuntu, etc), Debian in this example
  7. Select the Linux distribution and click the Get button
  8. After the Linux distribution downloads and installs, click Open or select the distribution from the Start menu to launch it
  9. Input a username and password to be used in the Linux environment

Installing Nextcloud

  1. Continue with the following commands in WSL
    # update software repositories
    sudo apt update
    # install software updates
    sudo apt upgrade -y
    # install prerequisite packages
    sudo apt install unzip wget -y
    # install Apache HTTPD and MySQL
    sudo apt install apache2 mariadb-server mariadb-client -y
    # install PHP components
    sudo apt install php7.4 libapache2-mod-php7.4 php7.4-mysql php-common php7.4-cli php7.4-common php7.4-json php7.4-opcache php7.4-readline php7.4-intl php7.4-json php7.4-gd php7.4-mbstring php7.4-mysql php7.4-xml php7.4-zip php7.4-curl -y
    # start the mariadb service
    sudo service mariadb start
    # configure the MySQL database
    sudo su
    mysql_secure_installation
  2. Press Enter to login as root
  3. Type N and press Enter to not switch to socket authentication
  4. Type Y and press Enter to set a root password, type the password twice to confirm
  5. Type Y and press Enter to remove anonymous users
  6. Type Y and press Enter to disallow root login remotely
  7. Type Y and press Enter to remove the test database
  8. Type Y and press Enter to reload privilege tables
  9. Run the following command to login into MySQL:
    mysql -u root -p
  10. Authenticate with the root password set earlier
  11. Run the following commands to create the Nextcloud database and database user
    CREATE DATABASE nextclouddb;
    GRANT ALL ON nextclouddb.* to 'nextcloud_rw'@'localhost' IDENTIFIED BY 'N3xtCl0ud!';
    FLUSH PRIVILEGES;
    EXIT;
    exit
  12. Continue with the following commands to download and extract Nextcloud in the Apache webroot
    # download latest nextcloud version
    wget -O /tmp/nextcloud.zip https://download.nextcloud.com/server/releases/latest.zip
    # extract downloaded nextcloud archive
    sudo unzip -q /tmp/nextcloud.zip -d /var/www
    # set the owner of the new nextcloud directory to www-data
    sudo chown -R www-data:www-data /var/www/nextcloud
    # create a new nextcloud.conf file to configure the site
    sudo nano /etc/apache2/sites-available/nextcloud.conf
  13. Paste the following configuration into nextcloud.conf

    Alias /nextcloud "/var/www/nextcloud/"
    <directory /var/www/html/nextcloud/>
    Options +FollowSymlinks
    AllowOverride All
    Require all granted

    Dav off

    SetEnv HOME /var/www/nextcloud
    SetEnv HTTP_HOME /var/www/nextcloud
    </directory>

  14. Press CTRL+O, Enter, CTRL+X to write the changes to nextcloud.conf
  15. Continue with the following commands to enable the site and restart Apache:
    # enable the nextcloud config
    sudo a2ensite nextcloud
    # enable required apache modules
    sudo a2enmod rewrite headers env dir mime dav
    # restart apache2 service for the changes to take effect
    sudo service apache2 restart
  16. Open a web browser and navigate to http://DNSorIP/nextcloud
  17. The Nextcloud setup screen should be displayed
  18. Enter a username and password
  19. Click the storage & database link to expand the section
  20. Fill out the database connection information as follows

    username: nextcloud_rw
    password: N3xtCl0ud!
    database name: nextclouddb
    database host: localhost

  21. Click Finish Setup
  22. After a few moments of setup Nextcloud will be up and running
  23. Choose to install recommended apps or skip
  24. Welcome to Nextcloud running on WSL