Now that I have a LAMP server set up at home, I’ll need to install my own instance of NextCloud. For self hosting, they have three different sets of instructions on their website, depending on your needs. I went with manual installation on Linux, which you can find here. Your needs may vary, and I’m no expert, but this worked for me. My installation follows.
First, I needed to download the latest version, unzip it, and copy it to my directory for web files: (Don’t forget to change the ownership!)
30 cd Downloads/
31 wget https://download.nextcloud.com/server/releases/nextcloud-20.0.6.zip
32 sudo apt install unzip
33 sudo unzip nextcloud-20.0.6.zip -d /var/www/
34 sudo chown www-data:www-data /var/www/nextcloud/ -R
Then I had to set up the mysql/mariadb with a nextcloud user and nextcloud database.
35 sudo mysql
MariaDB [(none)]> create database nextcloud;
MariaDB [(none)]> create user nextclouduser@localhost identified by 'MYPASSWORD';
MariaDB [(none)]> grant all privileges on nextcloud.* to nextclouduser@localhost identified by 'MYPASSWORD';
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> exit;
And of course, set up Apache to serve that website:
36 sudo nano /etc/apache2/sites-available/nextcloud.conf
37 sudo a2ensite nextcloud.conf
38 sudo a2enmod rewrite headers env dir mime setenvif ssl
39 sudo apache2ctl -t
40 sudo systemctl restart apache2
My nextcloud.conf file looked like this:
<VirtualHost *:80>
DocumentRoot "/var/www/nextcloud"
ServerName (MYSERVERNAME)
ErrorLog ${APACHE_LOG_DIR}/nextcloud.error
CustomLog ${APACHE_LOG_DIR}/nextcloud.access combined
<Directory /var/www/nextcloud/>
Require all granted
Options FollowSymlinks MultiViews
AllowOverride All
<IfModule mod_dav.c>
Dav off
</IfModule>
SetEnv HOME /var/www/nextcloud
SetEnv HTTP_HOME /var/www/nextcloud
Satisfy Any
</Directory>
</VirtualHost>
It was missing the portions you may be used to seeing if you use HTTPS, which is because the next thing I needed to do was add a certificate from Let’s Encrypt:
41 sudo apt install php-imagick libapache2-mod-php7.4 php7.4-common php7.4-mysql php7.4-fpm php7.4-gd php7.4-json php7.4-curl php7.4-zip php7.4-xml php7.4-mbstring php7.4-bz2 php7.4-intl php7.4-bcmath php7.4-gmp
42 sudo systemctl reload apache2
43 sudo apt install certbot python3-certbot-apache
44 sudo certbot --apache --agree-tos --redirect --staple-ocsp --email (MYEMAIL) -d (MYSERVER)
45 sudo nano /etc/apache2/sites-enabled/nextcloud-le-ssl.conf
46 sudo apache2ctl -t
47 sudo systemctl reload apache2
Now that changed my nextcloud.conf file to look like this:
<VirtualHost *:80>
DocumentRoot "/var/www/nextcloud"
ServerName (MYSERVER)
ErrorLog ${APACHE_LOG_DIR}/nextcloud.error
CustomLog ${APACHE_LOG_DIR}/nextcloud.access combined
<Directory /var/www/nextcloud/>
Require all granted
Options FollowSymlinks MultiViews
AllowOverride All
<IfModule mod_dav.c>
Dav off
</IfModule>
SetEnv HOME /var/www/nextcloud
SetEnv HTTP_HOME /var/www/nextcloud
Satisfy Any
</Directory>
RewriteEngine on
RewriteCond %{SERVER_NAME} =(MYSERVER)
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>
And created a secure version for HTTPS traffic, called nextcloud-le-ssl.conf:
<IfModule mod_ssl.c>
SSLStaplingCache shmcb:/var/run/apache2/stapling_cache(128000)
<VirtualHost *:443>
DocumentRoot "/var/www/nextcloud"
ServerName (MYSERVER)
ErrorLog ${APACHE_LOG_DIR}/nextcloud.error
CustomLog ${APACHE_LOG_DIR}/nextcloud.access combined
<Directory /var/www/nextcloud/>
Require all granted
Options FollowSymlinks MultiViews
AllowOverride All
<IfModule mod_dav.c>
Dav off
</IfModule>
SetEnv HOME /var/www/nextcloud
SetEnv HTTP_HOME /var/www/nextcloud
Satisfy Any
</Directory>
SSLCertificateFile /etc/letsencrypt/live/(MYSERVER)/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/(MYSERVER)/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf
SSLUseStapling on
Header always set Strict-Transport-Security "max-age=31536000"
</VirtualHost>
</IfModule>
Now that it was set up to receive standard and secure traffic, I could get to setting up nextcloud itself:
48 sudo mkdir /<SOMEPLACE/ELSE>/nextcloud-data
49 sudo chown www-data:www-data /<SOMEPLACE/ELSE>/nextcloud-data -R
57 sudo mysql
That just set up the data directory and changed the ownership. The system was ready for me to log into and set it up on the web gui! The web gui steps are covered from NextCloud’s instruction page as well, but essentially, you log in as the admin and put in your mariadb credentials. It was really straight forward and simple to do at this point. Praise God it all worked, and now NextCloud was up and running!
Linux – keep it simple.