How to manage a big hotel with a little Raspberry Pi

Got some downtime to rethink how you manage your hotel or motel?
140 readers like this.
All Things Open speaker support 'office hours' start today

Alan Levine. CC0 1.0

Raspberry Pi with Raspbian Lite can be very versatile to install a number of useful services (see also my Raspberry Pi projects article). Some addictive features can be achieved by searching for open source software and testing it with this fantastic device. An interesting example is installing a complete open source hotel reservation and booking system with Raspberry Pi and Qloapps.

What is Qloapps?

QloApps is an open source software with numerous features that can help streamline hotel business management. Those capabilities include:

  • Launch hotel booking website
  • Manage offline booking
  • Partial payment booking
  • Integrated payment gateway
  • Multiroom/multihotel bookings in a single order
  • Manage refund rules

It is composed of a web front end, which is the page that customers can reach from the internet, and a web back-end, which is where hotel owners manage hotels, rooms, prices, and many other customizable options.

Step-by-step procedure

This project is very simple, and installing only remote web services means we need only a few cheap parts:

  • Raspberry Pi 3 Model B* with power supply
  • a micro SD card (at least 16GB recommended)

*I'm going to use a Raspberry Pi 3 Model B, but it should also work with Raspberry Pi 3 Model A+ or newer boards.

You will also need a Desktop PC with an SFTP software (for example, the free Filezilla) to transfer installation packages into your RPI.

We'll start by setting up a classic LAMP server, and then we'll set up database users and install Qloapps.

1. Install Raspbian Buster Lite OS:

For this step, refer to my Install Raspbian Buster Lite in your Raspberry Pi article.

Make sure that your system is up to date. Connect via ssh terminal and type the following commands:

sudo apt-get update
sudo apt-get upgrade

2. Install LAMP server:

LAMP (Linux, Apache, MySQL, PHP) servers usually come with MySQL database. In our project, we'll use MariaDB instead because it is lighter and works fine with Raspberry Pi. This first part will be quick because there are plenty of good instructions for installing a LAMP server on the internet.

3. Install Apache Server:

sudo apt-get install apache2 -y

You should now be able to check that Apache installation has gone correctly by browsing http://<<YouRpiIPAddress>>:

Apache default page

4. Install PHP:

sudo apt-get install php -y

5. Install MariaDB Server and PHP connector:

sudo apt-get install mariadb-server php-mysql -y

6. Install PHPMyAdmin:

sudo apt-get install phpmyadmin

In the PHPMyAdmin setup screens, follow these instructions:

  • Select Apache (mandatory) with space and press OK.
  • Select Yes to configure the database for PHPMyAdmin with dbconfig-common.
  • Insert your favorite PHPMyAdmin password and press OK.
  • Insert your PHPMyAdmin password again to confirm and press OK.

7. Grant PHPMyAdmin user database privileges to manage databases:

We'll connect to MariaDB with the root user (default password is empty) to grant permissions. Remember to use semicolons at the end of each command row as shown below:

sudo mysql -uroot -p
grant all privileges on *.* to 'phpmyadmin'@'localhost';
flush privileges;

Finally, restart Apache service:

sudo systemctl restart apache2.service

and check that PHPMyAdmin is working by browsing "http://<<YouRpiIPAddress>>/phpmyadmin/."

PHPMyAdmin default page

Default PHPMyAdmin login credentials are:

  • user: phpmyadmin
  • password: the one set up in phpmyadmin installation step

Installing other Qloapps required packages and setting up PHP

We need to prepare our system for the Qloapp installation check. So we have to install PHP Soap connector:

sudo apt-get install php-soap

Another requirement to pass the compliance check is editing the PHP max upload file size to 16 MB:

sudo nano /etc/php/7.3/apache2/php.ini

Look for the row with upload_max_filesize parameter and set it as the following:

upload_max_filesize = 16M

Qloapps also suggests the following change:

max_execution_time = 500

Save and exit. Restart Apache again:

sudo systemctl restart apache2.service

Install Qloapps

We'll follow the official Qloapps installation guide, with some minor changes to have a dedicated database application user.

Create database and set up user.  Go back to the PHPMyAdmin web page (browse "http://<<YourRpiIPAddress>>/phpmyadmin/") and log in:

  • user: phpmyadmin
  • password: the one you set up in the PHPMyAdmin installation step

Click on Database tab:

Database 1

Create a database and make a note of the database name, as you will require the same name in the further installation process:

Database 2

It's time to create a database user for Qloapps. In this example, I'll use the following credentials; you can use a login of your own choosing.

  • user: qloapps_db_user
  • password: qloapps_db_password

So, the terminal commands will be: 

sudo mysql -uroot -p
CREATE USER ‘qloapps_db_user’@‘localhost’ IDENTIFIED BY ‘qloapps_db_password’;
GRANT ALL PRIVILEGES ON qloapps_.* TO 'qloapps_db_user' @ 'localhost';
flush privileges;
quit

(The root password is still empty, if not changed by you before)

Install Qloapps Software:

Download the Qloapps installation zip file from the Qloapps download page on your local PC. At the time of this writing, this file is named "HotelCommerce-1.4.0.zip."

With your favorite SFTP software, transfer the entire zip file to a new folder in path "/home/pi/download" in your Raspberry Pi. Common (default) SFP connection parameters are:

  • host: your Raspberry Pi IP address
  • user: pi
  • password: raspberry (if you didn't change the pi default password)
  • port: 22

Back to the terminal:

cd /home/pi/download/ #Enter directory where Qloapps installation files have been transferred
unzip HotelCommerce-1.4.0.zip #Extracts all files from zip
cd /var/www/html/ #Enter Apache web directory
sudo rm index.html #Removes Apache default page - we'll use Qloapps one
sudo cp -R /home/pi/download/HotelCommerce-1.4.0/hotelcommerce/* ./ #Copy installation files to web directory
sudo chown -R www-data:www-data ./

Browse http://<<YourRpiIPAddress>> to start installation:

Qloapps installation

Select your favorite language and press Next.

Qloapps installation

Read the license agreement. If you agree, check the opposite flag and press Next.

Qloapps installation

At this step, you will need to enter your store details and the credentials by which you will access your store. At the end, press OK.

Qloapps installation

Edit database connection parameters according to what was defined in previous paragraphs. With the parameters used in this guide, I will edit:

  • Database name: qloapps_ (added the final underscore)
  • Database login: qloapps_db_user
  • Database password: qloapps_db_password

Test the database connection and it should be okay. Click Next.

Qloapps installation

The installation seems to be finished correctly, but we must remove the install folder before entering Qloapps web pages. From the terminal, type:

sudo rm -R install/

With the command "ls" from the terminal, locate a folder whose name starts with "admin." In my case, the output is the following:

Qloapps installation

but the admin folder name can vary from installation to installation.

Now your booking web server is ready, and the pages will be:

  • Front-end (for customers): http://<<YourRpiIPAddress>>
  • Back-end (for administrators): http://<<YourRpiIPAddress>>/<<AdminFolderName>>

First, access to the back-end goes in demo mode. This can be disabled with the switch button on the right side of the page labeled "Demo mode."

To customize, please use the Qloapps user guide.

What to read next
User profile image.
Lucky husband, open source passionate. Curious by nature. Proud of my roots, happy to mix and learn from different roots

10 Comments

This is just a portion of what's needed to successfully run a hotel, and needs to be integrated with the other systems.

This is an online booking engine, in other words, the hotel version of Magento/Shopify/etc., not the backend pieces that actually run the hotel.

For day-to-day you need to be able to handle checkins/checkouts, housekeeping, revenue management, property maintenance, bell desk (optional), 3rd-party charges (phone, mini-bar, restaurant charges, TV/video, etc.), groups management (including group bookings and billing), accounting, and loads of other pieces of the puzzle.

Exactly, I agree.
Even if you were a small hotel or motel even.
Your also dealing with GDPR laws if you are a registered business about handeling your customers data on the website, which will result in wanting some strong encryption.
A raspberry pi 3 will not be able to handle this on the side anyways.
This is a really cool simulation project for IT students to understand the basics.
I do a IT study myself and might prupose this to my teacher, so we have a small scale practise.

Loved the article overal but yeah running a hotel with this is far fetched.

In reply to by Nathan

Hi all.
Sure an hotel management is a job, Raspberry PI are small computers for small projects, nearer to computer technology passionates or to realize proof of concepts. I tryed this test to explore Raspberry PI capabilities and thinking this projects as a way to try (and evaluate) an open source product. Also from IT side, a business level platform should consider backup, access security, continuity and other requirements that should be considered and added for a real business.

In reply to by G.v.M (not verified)

Wouldn’t such a platform be able to hold decent encryption like "aes-cbc-essiv:sha256"? That should be more than enough.

In reply to by G.v.M (not verified)

How many users can visit such a website without noticeable performance problems. Can that to be up 100 simultaneous visits of the webpage?

Hi Vzhik,
this is a good question. Even if everyone would like to have an answer with a simple number, performance problem is something more complex. It depends heavily on what is for you an acceptable performance and what kind of service you are exposing.
For example, a Raspberry PI used as a simple web server providing static html pages could be able to handle 100 simultaneous connections managing correctly caching and queues. But response times could not be so satisfying for you (Raspberry PI has limited networking capabilities). In this configuration, using an external CDN could help in improving performances. But we are describing an example of static pages with no logging/booking services, which is completely different from QloApps case.
Consider that 100 simultaneous visits is a very heavy traffic. If you have so many visits, you should evaluate going to a business grade service.

In reply to by Vzhik (not verified)

WOW! really liked this post, I had to leave a comment - I just did it on my motel! thank you. let's see how it goes..

I also wanted to find a way to manage the Raspberry Pi itself, get alerts and change needed code/packages. I find a free platform (for our scale) that provide a really good solution for this - https://www.upswift.io/

Thank you for sharing :)

Hi Jason,
happy for your test. please remember, for a real case use, to evaluate all attention required. Above all, remember to backup frequently your data and test your restore procedure.
I've just seen upswift link you posted and I find it really interesting. Hope to be able to test it in near future.

In reply to by JasonMotelGo (not verified)

Hi Giuseppe,

Great post. I’ve been following along with the steps and am stuck at the step where you enter “sudo mysql -uroot -p
grant all privileges on . to 'phpmyadmin' @ 'localhost';
flush privileges;” into terminal. The first command goes through and when I enter the grant all, it gives me a syntax error. I did a little digging and I found some sources that show giving permissions to a particular database but not like this specifically. Would you be able to assist?

Thanks,
David

Creative Commons LicenseThis work is licensed under a Creative Commons Attribution-Share Alike 4.0 International License.