# Running Firefly III on Linux [PHP Based Personal Finance Manager]

## What is Firefly III?

> "Firefly III" is a (self-hosted) manager for your personal finances. It can help you keep track of your expenses and income, so you can spend less and save more. -https://docs.firefly-iii.org/firefly-iii/installation/self_hosted/?mtm_campaign=docu-internal&mtm_kwd=self_hosted

## 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 php libapache2-mod-php php8.1-common php8.1-mysql php8.1-xml php8.1-xmlrpc php8.1-curl php8.1-gd php8.1-mbstring php8.1-bcmath php8.1-zip php8.1-intl php-sodium -y
   # install composer
   curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer
   # 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 Firefly database and database user
    CREATE DATABASE firefly;
    GRANT ALL ON firefly.* to 'firefly_rw'@'localhost' IDENTIFIED BY 'f!r3f1y:)';
    FLUSH PRIVILEGES;
    EXIT;
    exit
13. Continue with the following commands:
    # create the firefly app
    sudo composer create-project grumpydictator/firefly-iii --no-dev --prefer-dist /var/www/firefly
    # set ownership of the firefly directory
    sudo chown -R www-data:www-data /var/www/firefly
    # limit permissions on storage
    sudo chmod -R 775 /var/www/firefly/storage
    # change directory to the application folder
    cd /var/www/firefly
    # edit the .env file
    sudo nano /var/www/firefly/.env
14. Scroll through the .env file and modify the following values

    SITE_OWNER=<% admin email address %>
    TZ=<% timezone %>
    DB_CONNECTION=mysql
    DB_HOST=127.0.0.1
    DB_PORT=3306
    DB_DATABASE=firefly
    DB_USERNAME=firefly_rw
    DB_PASSWORD=f!r3f1y:)

15. Press CTRL+O, Enter, CTRL+X to write the changes
16. Continue with the following commands in terminal
    # initialize the database
    php artisan migrate:refresh --seed
    php artisan firefly-iii:upgrade-database
    php artisan passport:install
    # create firefly apache configuration
    sudo nano /etc/apache2/sites-available/firefly.conf
17. Paste the following configuration into firefly.conf

    Alias /firefly "/var/www/firefly/public/"
    Options FollowSymlinks Includes ExecCGI
    AllowOverride All
    Require all granted
    Order allow,deny
    allow from all

18. Press CTRL+O, Enter, CTRL+X to write the changes
19. Run the following command to enable the Firefly site
    # enable rewrite module
    sudo a2enmod rewrite
    # enable the firefly site
    sudo a2ensite firefly
    # restart the apache2 service
    sudo systemctl restart apache2
20. Open a web browser and navigate to http://DNSorIP/firefly
21. Enter an email address and password > Click Register
22. Welcome to Firefly III