Skip to content

Instantly share code, notes, and snippets.

@Engr-AllanG
Last active December 20, 2024 19:41
Show Gist options
  • Save Engr-AllanG/34e77a08e1482284763fff429cdd92fa to your computer and use it in GitHub Desktop.
Save Engr-AllanG/34e77a08e1482284763fff429cdd92fa to your computer and use it in GitHub Desktop.
Firefly-III Ubuntu 20.04 Proxmox Installation Guide

Read all the comments first - there are a number of corrections and important points in the comment section

This is a summarized guide I created while installing Firefly-III in a Proxmox (6.2-15) container running Ubuntu 20.04.

I followed this tutorial. It has a link to this other tutorial for installing mariaDB. Furthermore, the official Firefly-iii documentation is Here

This guide has everything I did in one concise summary. Not much is explained. This will take about 1.5 hrs.

Note: I initially followed the official instructions and used a LAMP stack. I had issues with apache and getting the webserver to work (likely because I am not familiar with apache and am more comfortable with nginx).

To begin, first read through the two tutorials and official documentation so that you hav an idea of whats going on

Container

First, create a 20.04 privileged container with 1 core,  512 mb ram, and default 8GB hard disk space. CT 128 with IP 192.168.1.128

Installation Instructions

Did I mention to first read through the two tutorials and official documentation?

Prep

apt update
apt upgrade
apt install nginx curl -y
apt install software-properties-common
#add-apt-repository ppa:ondrej/php
#apt update
apt install -y php7.4 php7.4-{cli,zip,gd,fpm,json,common,mysql,zip,mbstring,curl,xml,bcmath,imap,ldap,intl}

Check to see if php is running

 php -v and systemctl status php7.4-fpm

Adjust some php settings

nano /etc/php/7.4/fpm/php.ini

use ctrl-w to search for and change or enable the following lines of code

memory_limit = 512M

[Date]
date.timezone = America/Los_Angeles

stop apache

systemctl stop apache2
systemctl disable apache2

backup nginx file

cd /etc/nginx/sites-enabled/
mv default{,.bak}

create firefly.conf in sites-enabled folder and then paste in the config below

nano /etc/nginx/sites-enabled/firefly.conf

server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        #server_name  subdomain.domain.com;
        root         /var/www/html/firefly-iii/public;
        index index.html index.htm index.php;

        location / {
                try_files $uri /index.php$is_args$args;
                autoindex on;
                sendfile off;
       }

        location ~ \.php$ {
        fastcgi_pass unix:/run/php/php7.4-fpm.sock;
        fastcgi_index index.php;
        fastcgi_read_timeout 240;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
        fastcgi_split_path_info ^(.+.php)(/.+)$;
        }

    }

restart

systemctl restart nginx php7.4-fpm

If you get an error due to duplicate web servers, you need to remove the symbolic link in sites-available (ls -l) and then rm the link

Install mariaDB

apt-key adv --fetch-keys 'https://mariadb.org/mariadb_release_signing_key.asc'
add-apt-repository 'deb [arch=amd64] http://mariadb.mirror.globo.tech/repo/10.5/ubuntu focal main'
apt update
apt install mariadb-server mariadb-client
mysql_secure_installation

test installation

mysql -u root -p

in the mysql shell, check version with the command in bold

MariaDB [(none)]> SELECT VERSION();

while still inside the mariaDB shell:

CREATE DATABASE firefly_db;
CREATE USER 'fireflyuser'@'localhost' IDENTIFIED BY 'yourpasswordhere';
GRANT ALL PRIVILEGES ON firefly_db. * TO 'fireflyuser'@'localhost';
FLUSH PRIVILEGES;
exit;

cd ~
curl -sS https://getcomposer.org/installer -o composer-setup.php
sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer

test composer

composer -V

install firefly - change the version number at the end of the command below to whatever the latest is

cd /var/www/html/
composer create-project grumpydictator/firefly-iii --no-dev --prefer-dist firefly-iii 5.4.6

cd /var/www/html/firefly-iii
php artisan migrate:refresh --seed
php artisan firefly-iii:upgrade-database
php artisan passport:install

Make sure we have the right locale enabled (currency and language?) 

First check to see what is enabled. I want (en_US.utf8, en_US.UTF-8)

locale -a

nano /etc/locale.gen and uncomment the line en_US.utf8, en_US.UTF-8 

locale-gen
systemctl restart nginx php7.4-fpm

That should be it. Navigate to the container IP address and you should get firefly Login

@Engr-AllanG
Copy link
Author

I have to more comments:

  1. As all files in /etc/nginx/sites-enabled/ are supposed to be symlinks to /etc/nginx/sites-available (to be able to conveniently enable/disable sites without moving/deleting files) I wouldn't backup the default site into this folder but rather in sites-available
  2. Same goes for creating the new Firefly site: create it in sites-available and symlink to it in sites-enabled

I agree

@Engr-AllanG
Copy link
Author

I have not been active on github in quite sometime. I am happy to see many of you have found some mistakes and improved this guide for others to use

@okothmax
Copy link

Screenshot (6)

I'm getting this error when I run:
php artisan migrate:refresh --seed

@gruentee
Copy link

Screenshot (6)

I'm getting this error when I run: php artisan migrate:refresh --seed

Looks like you're having some network trouble there, more specifically your computer can't resolve the database servers' IP address by its DNS name. I suggest entering the IP address instead.

@mrreview
Copy link

mrreview commented Jul 24, 2023

First, create a 20.04 privileged container

Also, could you explain why you would need a privileged container? It opens up an unnecessary security hole IMHO.

There's no need to create a privileged container. I'm running firefly without any issues on an unprivileged container.

@klyptonic
Copy link

Hey there,

I've updated your PHP Install Command for the newest version: apt install -y php8.0 php8.0-{cli,zip,gd,fpm,common,mysql,mbstring,curl,xml,bcmath,imap,ldap,intl}

You also had zip in there 2times and the json package always threw me an error. Leaving it out of it worked fine.

Using your help I ran into the same problem with 8.0...using the latest 8.3 instead helped:
apt install -y php8.3 php8.3-{cli,zip,gd,fpm,common,mysql,mbstring,curl,xml,bcmath,imap,ldap,intl}

If anyone else runs into this problem with later releases of Firefly-III, refer here to see the requirement for PHP:
https://packagist.org/packages/grumpydictator/firefly-iii

@lyett
Copy link

lyett commented Feb 7, 2024

Only use Ubuntu & versions supporting PHP 8.3. See this link
Prerequisites

Could not get it to work on Debian or another proxmox template stack. However, worked on Ubuntu 22.04. Ubuntu 23.10 will not work, at the time of writing this - as per the Prerequisites link above.

@puloxtor
Copy link

puloxtor commented Jun 8, 2024

Thanks for the awesome guide: I did come to a missing dependency trying to execute apt install mariadb-server mariadb-client found easy solution here -> https://askubuntu.com/questions/1405443/unable-to-install-mariadb-server-on-ubuntu-22-04

@Kmfernan5
Copy link

Hey there,
I've updated your PHP Install Command for the newest version: apt install -y php8.0 php8.0-{cli,zip,gd,fpm,common,mysql,mbstring,curl,xml,bcmath,imap,ldap,intl}
You also had zip in there 2times and the json package always threw me an error. Leaving it out of it worked fine.

Using your help I ran into the same problem with 8.0...using the latest 8.3 instead helped: apt install -y php8.3 php8.3-{cli,zip,gd,fpm,common,mysql,mbstring,curl,xml,bcmath,imap,ldap,intl}

If anyone else runs into this problem with later releases of Firefly-III, refer here to see the requirement for PHP: https://packagist.org/packages/grumpydictator/firefly-iii

https://gist.github.com/Engr-AllanG/34e77a08e1482284763fff429cdd92fa

@jamezpolley
Copy link

jamezpolley commented Nov 12, 2024

I've just set this up using debian 12. Couple of small tweaks

  • I've gone with sqlite3 (for now at least) so I've got no comments on getting any other databases working
  • Rather than add-apt-repository, I used (extrepo)[https://manpages.ubuntu.com/manpages/jammy/man1/extrepo.1p.html] (That's an Ubuntu doc so I assume this shold work similarly on Ubuntu, but I've not tested that)
apt install extrepo
extrepo enably sury
apt update'
apt install php-{cli,zip,gd,fpm,json,common,mysql,zip,mbstring,curl,xml,bcmath,imap,ldap,intl,sqlite3}
  • Rather than making my things available to the public net, I've been using (Tailscale)[https://tailscale.com] to set things up so that I can access them from anywhere (on my devices that are logged in to Tailscale) without them being publicly exposed. To get this to work in an unpriviliged container, there are (two lines of config)[https://tailscale.com/kb/1130/lxc-unprivileged?q=proxmox] to add to the conf file under /etc/pve/lxc. After that. it's the standard (install instructions for Tailscale on Bookworm)[https://tailscale.com/kb/1174/install-debian-bookworm]
  • Rather than Apache or Nginx, I've opted for Caddy as the webserver. Caddy integrates nicely with Tailscale - my container has the hostname firefly.my-tailnet.ts.net; Caddy understands that that's a Tailscale domain and works with the tailscale daemon to get a LetsEncrypt SSL cert. This does require (one line of config)[https://tailscale.com/kb/1190/caddy-certificates?q=caddy] in /etc/default/tailscaled
  • After that, the total config Caddy requires is:
firefly.my-tailnet.ts.net {
        root * /var/www/firefly-iii/public
        file_server
        php_fastcgi unix//run/php/php8.3-fpm.sock
}

I did run into an issue with locales not being set up. Looking at the settings, I saw an error message:

Invalid server configuration:  Firefly III is unable to format monetary amounts because your server is missing the required packages. There are [instructions how to do this](https://docs.firefly-iii.org/how-to/firefly-iii/advanced/locales/).

On debian, I used dpkg-reconfigure locales to pick the locales I needed, then systemctl restart php-fpm8.3 to restart PHP and pick up the new locales.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment