# Install InvoiceNinja - Invoice and Payment Manager - On Linux

## What is InvoiceNinja?

> [InvoiceNinja is a] powerful suite of features to invoice clients, facilitate payment, track-time & tasks, expenses, and more. -https://www.invoiceninja.com/invoicing-features/

## Installation

1. Log into the Linux device
2. Run the following commands in a terminal window:
   # update software repositories
   sudo apt update
   # install prerequisites
   sudo apt install curl wget zip lsb-release apt-transport-https ca-certificates git -y
   # add the php gpg key
   sudo wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
   # add the php apt repository
   echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/php.list
   # update software repositories
   sudo apt update
   # install available software updates
   sudo apt upgrade -y
   # install Apache HTTPD and MySQL
   sudo apt install apache2 mariadb-server mariadb-client -y
   # install PHP components
   sudo apt install php8.2 libapache2-mod-php8.2 php8.2-common php8.2-bcmath php8.2-gmp php8.2-gd php8.2-mbstring php8.2-xml php8.2-curl php8.2-zip php8.2-gmp php8.2-mysql php8.2-fpm php8.2-imagick php8.2-soap php8.2-common php8.2-intl -y
   # configure the MySQL database
   sudo su
   mysql_secure_installation
3. Press Enter to login as root
4. Type N and press Enter to not switch to unix socket authentication
5. Type Y and press Enter to set a root password, type the password twice to confirm
6. Type Y and press Enter to remove anonymous users
7. Type Y and press Enter to disallow root login remotely
8. Type Y and press Enter to remove the test database
9. Type Y and press Enter to reload privilege tables
10. Run the following command to login into MySQL:
    mysql -u root -p
11. Authenticate with the root password set earlier
12. Run the following commands to create the InvoiceNinja database and database user
    CREATE DATABASE invoiceninja;
    GRANT ALL ON invoiceninja.* to 'invoice_ninja_rw'@'localhost' IDENTIFIED BY '!nv0ic3Ninj@!';
    FLUSH PRIVILEGES;
    EXIT;
    exit
13. Continue with the following commands:
    # lookup latest invoiceninja release URL
    regex='"browser_download_url": "(https:\/\/github.com\/invoiceninja\/invoiceninja\/releases\/download\/[^/]*\/invoiceninja\.tar)"' && response=$(curl -H "Accept: application/vnd.github.v3+json" https://api.github.com/repos/invoiceninja/invoiceninja/releases/latest) && [[ $response =~ $regex ]] && downloadURL="${BASH_REMATCH[1]}"
    # download the latest release
    wget -O /tmp/invoiceninja.tar $downloadURL
    # create target directory
    mkdir /var/www/invoiceninja -p
    # extract the download .tar archive
    tar -xvzf /tmp/invoiceninja.tar -C /var/www/invoiceninja
    # change permissions on the storage directory
    sudo chmod 755 /var/www/invoiceninja/storage/ -R
    # copy sample .env file
    sudo cp /var/www/invoiceninja/.env.example /var/www/invoiceninja/.env
    # create/edit apache site configuration
    sudo nano /etc/apache2/sites-available/invoiceninja.conf
14. Paste the following configuration into the .conf file

    <Directory /var/www/invoiceninja/public>
    DirectoryIndex index.php
    Require all granted
    Options +FollowSymLinks
    AllowOverride All
    </Directory>

15. Press CTRL+O, Enter, CTRL+X to write the changes
16. Continue with the following commands:
    # edit .htaccess file
    sudo nano /var/www/invoiceninja/public/.htaccess
17. Scroll to the bottom of the file and find the following line

    RewriteRule ^ index.php [L]

18. Replace the line with the following

    RewriteRule ^ /invoiceninja/index.php [L]

19. Press CTRL+O, Enter, CTRL+X to write the changes
20. Continue with the following commands:
    # set the owner of the invoiceninja directory
    sudo chown -R www-data:www-data /var/www/invoiceninja
    # enable mod_rewrite
    sudo a2enmod rewrite
    # enable invoiceninja site
    sudo a2ensite invoiceninja
    # restart apache2 service
    sudo systemctl restart apache2

## InvoiceNinja Web Installer

1. Open a web browser and navigate to http://DNSorIP/invoiceninja/setup
2. The InvoiceNinja web setup should be load
3. Enter the URL to use for the site (ie http://DNSorIP/invoiceninja)
4. Uncheck the Require HTTPS option > Click Test PDF
5. Complete the Database Connection form as follows

   Host: localhost
   Port: 3306
   Database: invoiceninja
   Username: invoice_ninja_rw
   Password: !nv0ic3Ninj@!

6. Click the Test connection button
7. If you have an Email server, configure it under Email Settings, otherwise leave the driver as Log and click the Send test email button
8. Completed the User Details form by entering a First Name, Last Name, Email and Password
9. Check both I Agree checkboxes > Click Submit
10. If the page redirects to http://localhost, navigate to http://localhost/invoiceninja/index.php
11. Login with the Email and Password setup earlier > Click Login with email
12. On the Welcome dialog, enter a company name and select the Light or Dark theme > Click Save
13. Welcome to InvoiceNinja

Source: https://invoiceninja.github.io/docs/self-host-installation/