Using a Raspberry Pi for your own Inventory Management System

Using a Raspberry Pi for your own inventory management system.

An open-source, inventory management system written in PHP with a MySQL database has no problem operating on a Raspberry Pi. Initially, you’ll only have local network access, but if you want to allow remote web access, you can.

In order to setup a web interface to access, view, and manage the content of your inventory management system you’ll need to set up a LAMP (Linux, Apache, MySQL, PHP) stack on your Raspberry Pi and configure it to work as a web server and set up a basic website which you can access on any device on the same network as your Pi. This is a link to a nice tutorial for setting-up a L.A.M.P. server on your Pi, the WordPress portion is optional, you can stop after installing PHP.

If you plan on having access to your Raspberry Pi through the Internet, you’ll need to configure your router and DDNS settings, or use a service such as to wormhole to your pi through the web.

Next step is to use an open-source project found on GitHub to start your basic inventory management system.

“OSWA-Inv is a web based Inventory System, that will allow you to keep tracking of the quantity buying and selling price of the products existing in your warehouse or business. When creating a new products, you can set a quantity, buying and selling price.”

Included Features:

  • User Management: Groups, Basic Profile, and Change Password
  • Categories: For organizing products
  • Products: Basic product information, title, quantity, pricing.
  • Sales: Sales transactions are individual by product.
  • Reports: Daily, Monthly, and Ranged Dates Sales/Profit Report


Install the Basic Inventory Management System Web Application

After updating the Raspberry Pi and setting up the LAMP stack, installation of the inventory application is relatively painless.

If you haven’t done so, use apt-get to acquire and install the database software:

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

When the installation is complete, run a simple security script that comes pre-installed with MariaDB which will remove some insecure default settings and lock down access to your database system. Start the interactive script by running:

sudo mysql_secure_installation


Download the source-code package and then you’ll need to extract the contents to the folder. Either rename the folder to the base name now or after you move it to the web root for Apache Web Server found at /var/www/html/

example:  sudo cp -R ~/Downloads/inventory-master /var/www/html/inventory

Use the MySQL/MariaDB command line to import the database schema.

Create a database named inventory and import the schema included in the project directory inventory.sql  If you haven’t done so, installation is as easy as:

sudo mysql -uroot

mysql> CREATE DATABASE inventory;
mysql> USE inventory;
mysql> source /var/www/html/inventory/inventory.sql

mysql> CREATE USER 'webuser'@localhost IDENTIFIED BY 'p1r4sp';
mysql> GRANT ALL PRIVILEGES ON inventory.* TO 'webuser'@localhost;

Edit the /includes/config.php to match the username and password used to access your database.

The directory containing the project, especially, the uploads directory, must have write permissions on the system and let the web application be run using the www-data account by executing the following commands from the project directory:

sudo chmod -R 775 uploads/
sudo chown -R www-data:www-data *

Edit the header.php file to suit the needs of your organization. e.g. change to logo
[project folder on server]/layouts/header.php
Same folder also contains the various menus used by the system.

Edit the CSS to reflect the needs of your organization. e.g. change background colors
[project folder on server]/libs/css/main.css


Using the Inventory Management System

  • Secure the default accounts with a change password.
  • Create a user account for each person using the system, including yourself.
    Optionally upload a photo for the user.
  • Add Categories – you’ll need to add at least one category before you can add products.
  • Add Media before you Add Product if you want to associate a photo when you Add Product. Otherwise, you can elect to have no image and updated later.
  • Add Order – before you try to Add Sales.


These are the improvements I’ve added for my own system

  • Delete confirmation popup before delete actions
  • Description column for products
  • Location column for products
  • View products by category
  • Add sales from list of products – remove selected from list.
  • Add/Edit/Delete Sales also updates product’s quantity available
  • Order Management for all sales – All sales must be associated with an order number
  • View Sales by Order calculate total
  • Delete Order: deletes all sales associated with order AND restores quantity/stock
  • Add/Edit/Delete Order also updates product’s quantity available
  • Stock: Inventory Management for all products – Log of increase/decrease stock
  • Add/Edit/Delete Inventory also updates product’s quantity available

Improved Version Source-Code



  1. Hi there,
    thanks to your post I found this little gem of inventory mangement. I see you have done a lot improovements. Are you willing to share your edits? Best Chris


  2. Good afternoon,
    I am very interested in getting this up and running, however I am stuck at a WordPress landing page after I have completed all the steps. Is there a checklist of where to start in my trouble shooting and audit of my work?

    It seems like I dont have any temlpates, but as I read through your guide it should have been included and defaulted in the files I downloaded.

    Thanks for reading!


    1. Hi Florian,
      Thank you for taking the time to share the issue you are having, it’s likely other people have had the same experience. The WordPress installation has over written the default settings of the web server installation. If you try the URL to your inventory management system directory, for example: http://localhost/inventory/index.php and you are redirected to WordPress then you will want to check your apache web server settings found in the /etc/apache2/apache.conf
      Let me know how it goes!


  3. Thank you for taking your time to respond .

    This is my first time but looking at the apache web server settings nothing seems to out of order . When try log in the site with localhost i get wordpress, if i try with ip adress//inventory/index.php i get a not found page .

    If i go on http://localhost/inventory/index.php i get 404

    Thank you !


  4. Mine is setup like this /var/www/html/warehouse-inventory-system , i kept the files in warehouse-inventory-system where they are .

    Thank you


  5. If i try to log in i get Database connection failed:Access denied for user ‘admin’@’localhost’ (using password: YES) where do i choose the default log in ? Should i just go and grand all permission to admin user ?
    Thank you


    1. Check your MySql databases configuration. The access is denied because the default password is set to yes for user admin. Does user admin exist, if so is the password in the conf file inside the inventory management system directory set to that password.


  6. Hi, couple of things i need help with/ask about?:
    – Is there a way to change currency to £?
    – Is there anyway of changing it so prices could be say £1.30 as at the moment it only allows me to input whole numbers?
    – When adding products to a sale is there a way as adding multiple items at once, as if i put in qty’s for severasl items then click add item on one of the items it only adds that one item even though ive put in quantities for several?

    Either way this is a very nice inventory management tool 🙂


  7. Saw you updated some of the files… went to re-downloaded and deleted current folder contents and replaced with new download. Changed config file to my database password and now getting “Error on this Query :
    INSERT INTO log (user_id,remote_ip,action,date) VALUES (”,’::1′,’/’,’2019-11-21 21:51:03′)”… any ideas?


      1. Hi I am getting the same error. I was able to edit the coinfigs.php file with the username and password.


      2. So I was able to install that missing library. but I am still getting the same error “Failed to select database”.

        https//:localhost takes me to the word press page but localhost/inventory/index.php produces the error.

        Again, Any help is appreciated. And thanks for the tutorial!


      3. “Failed to select database”
        This error message means that the database being referenced DOES NOT exist.
        Either it has not been created or the one being referenced is named differently than the one expected.


  8. Hello thanks for a great database application. I am having some problems with the side bar menu not loading the appropriate menu items such as the admin menu. when logging in as admin the admin.php file loads up as it should but the header.php file is not loading the admin side bar.


      1. I have solved the issue. I had a logo image file that was sized “100 x 200” that caused an overlap of the header over the menus frame. Duh…. Thanks for the help really like the application.


  9. after login below error :
    Error on this Query :
    SHOW TABLES FROM projects_inventory_inventory-master LIKE “users”


    1. The error message is telling you that the database: “projects_inventory_inventory-master” is invalid or doesn’t exist. Your database should be named “inventory”


  10. Hi I tried installing the application locally & I ran into this error. Is there a way around it? I am able to login to the backend just fine.
    “Notice: Undefined index: user_id in C:\xampp\htdocs\inventory-master\includes\load.php on line 24”


  11. The error still pops up sadly. However I’ve found that when I comment out this line. It no longer is there.
    $user_id = $_SESSION[‘user_id’];


      1. It says…

        PHP Fatal error: Call to undefined function mysqli_connect( ) in /var/www/html/inventory/includes/database.php on line 18


  12. Make sure that you have installed the database connector:
    sudo apt-get install php-mysql

    and then make sure that you have setup the database:

    Create a database named inventory and import the schema included in the project directory inventory.sql If you haven’t done so, installation is as easy as:

    sudo mysql -uroot

    mysql> CREATE DATABASE inventory;
    mysql> USE inventory;
    mysql> source /var/www/html/inventory/inventory.sql

    mysql> CREATE USER ‘webuser’@localhost IDENTIFIED BY ‘p1r4sp’;
    mysql> GRANT ALL PRIVILEGES ON inventory.* TO ‘webuser’@localhost;

    Edit the /includes/config.php to match the username and password used to access your database.


Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.