Host multiple apps on your Raspberry Pi

Do you know that you can host multiple apps on your Raspberry Pi and access them from outside your network? I understand that the Raspberry Pi may not be powerful enough for database-related transactions, but you can still host simple and lightweight apps on it to enhance your productivity. In this article, I will show you how to host multiple web apps on your Raspberry Pi machine using Apache as a web server.

If you wish to install Nextcloud on your Raspberry Pi, you can follow this article.

Install web server

Option 1

To install the LAMP (Apache, MariaDB, and PHP) stack, follow this article from step 2 to step 4. The rest of the steps are dependent on your requirements.

Option 2

However, we can just install Apache for static sites.

apt install apache2 zip unzip

a2enmod ssl rewrite headers proxy proxy_http deflate cache proxy_wstunnel http2 proxy_fcgi env expires

Enable Apache at boot time and restart it.

systemctl enable apache2
systemctl restart apache2

Before we proceed

If you want to access your sites over a dynamic IP, follow this guide to set it up with Cloudflare. Skip this step if you already have a static IP.

To run these sites exclusively on your network, add them to the /etc/hosts file and skip the SSL setup below. In this case, the DOMAIN.COM (Apache virtual hosts) corresponds to portfolio.local and startup.local.

127.0.0.1   portfolio.local
127.0.0.1   startup.local

Create multiple hosts

If you want to install any database-related web app, such as WordPress, Moodle, or Nextcloud, follow its respective guide. You don’t need to follow the entire guide; read through and follow the parts that are required, such as the database, download section etc.

For the sake of this guide, we will keep things simple and create two static sites with only one page. Let’s call them portfolio (site 1) and startup (site 2).

cd /var/www/html

rm index.html

mkdir portfolio
mkdir startup

Portfolio website

We will create an index.html file in it and start with the basics. You can push your own files to it or enhance it accordingly.

cd /var/www/html/portfolio
touch index.html
vim index.html

Paste the following in it:

<!DOCTYPE html>
<html>
   <head>
   </head>
   <body>

      <h1>Portfolio</h1>
      <p>Hi, my name is Admin.</p>

   </body>
</html>

Save this and change the ownership of this directory.

chown -R www-data:www-data /var/www/html/portfolio

Now, we will create a virtual host file. Switch to sites-available directory and create a portfolio.conf file.

cd /etc/apache2/sites-available
vim portfolio.conf

Paste the following into it while changing the domain name.

<VirtualHost *:80>
	ServerName DOMAIN.COM

	DocumentRoot /var/www/html/portfolio

	<Directory "/var/www/html/portfolio">
		AllowOverride All
		Options -Indexes +FollowSymLinks
	</Directory>

	ErrorLog /var/log/apache2/portfolio_error.log
</VirtualHost>

Enable this configuration:

a2dissite 000-default.conf
a2ensite portfolio.conf

apachectl -t
systemctl reload apache2

Now, if we browse the domain in a browser, we will see a basic page like the one below.

multiple-sites-raspberry-portfolio

Startup website

The process is almost the same as the portfolio website. Simply create an index.html file or push your own files to the /var/www/html/startup directory. Additionally, create a virtual host configuration file named startup.conf in the /etc/apache2/sites-available directory.

Once you are done, you can enable this site and restart Apache.

a2ensite startup.conf

apachectl -t
systemctl reload apache2

You will now be able to see the site in the browser using the domain you selected.

SSL

This is optional, but if you have a static IP or are using DDNS to access your sites outside your network, it is good to have SSL in front of them.

Please note that the IP should be pointed to the domains for this to work.

Follow the section from ‘How to install Nextcloud on Raspberry Pi‘ to obtain free certificates from Let’s Encrypt.

Once you have successfully retrieved the certificates, you can update the virtual host files with them. Follow this section to learn how to update them. Make changes where necessary, such as the path to the document root, path to certificates, etc.