Contents

Firefly III

Contents

Setup

I’ve been a big fan of Firefly III for some time now. I was a pain to setup the first time, so here is my ’easy’ way to set it up.

My docker compose file is about the same as the previous ones.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
version: "3"

services:
  firefly_iii_app:
    container_name: firefly_iii_app
    image: jc5x/firefly-iii:latest
    environment:
      - FF_DB_HOST=firefly_iii_db:3306
      - FF_DB_NAME=firefly_db
      - FF_DB_USER=firefly_db
      - FF_DB_PASSWORD=<dbpassword>
      - FF_APP_KEY=<32char key>
      - FF_APP_ENV=local
      - APP_URL=https://firefly.domain.com
      - TRUSTED_PROXIES=**
      - MAIL_DRIVER=smtp
      - MAIL_HOST=<email server>
      - MAIL_PORT=587
      - MAIL_FROM=firefly@domain.com
      - MAIL_USERNAME=firefly@domain.com
      - MAIL_PASSWORD=<password>
      - MAIL_ENCRYPTION=tls
    links:
      - firefly_iii_db
    volumes:
      - ${PWD}/export:/var/www/firefly-iii/storage/export
      - ${PWD}/upload:/var/www/firefly-iii/storage/upload
    labels:
      - "traefik.enable=true"
      - "traefik.frontend.rule=Host:firefly.domain.com"
      - "traefik.port=80"
  firefly_iii_db:
    container_name: firefly_iii_db
    image: mysql:latest
    ports:
      - 3310:3306
    environment:
      - MYSQL_DATABASE=firefly_db
      - MYSQL_USER=firefly_db
      - MYSQL_PASSWORD=<dbpassword>
      - MYSQL_RANDOM_ROOT_PASSWORD=yes
    volumes:
      - ${PWD}/mysql:/var/lib/mysql
    labels:
      - "traefik.enable=false"

networks:
  default:
    external:
      name: webproxy

Nothing here should be new. We use a new mysql port, so we wont create conflicts when all our sql containers use port 3306. I don’t really want the sql container to be available from any subdomain, so we don’t need it to be traefik enabled.

There is a bug in Firefly currently, where we can’t send emails without a small fix. Access the container using Portainer or `docker exec -it firefly_iii_app /bin/bash``and write

1
php -r 'print_r(openssl_get_cert_locations());' | grep '\[default_cert_file\]' | awk '{print $3}'

This should print `/usr/local/ssl/cert.pem` but if we check that file, it does not exist. So we need to download the file and move it there.

1
2
3
4
cd /usr/local/ssl
wget http://curl.haxx.se/ca/cacert.pem
mv cacert.pem cert.pem
exit

Now we can restart our container `docker-compose restart` and we can send emails from the website.