Docker搭建记账软件Firefly III

开始

创建数据库

使用MySQL5.7创建数据库一个名为firefly_iii的数据库(数据库名可以自行定义)

docker-compose

新建/opt/docker/compose/firefly_iii工程目录并进入该目录

新建docker-compose.yml文件,内容如下:

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
version: '3.3'

services:
app:
image: fireflyiii/core:latest
hostname: app
container_name: firefly_iii_core
restart: always
volumes:
- firefly_iii_upload:/var/www/html/storage/upload

env_file: .env

networks:
- firefly_iii
ports:

- 127.0.0.1:<映射到本地的端口>:8080

depends_on:
- db
db:
image: mariadb
hostname: db
container_name: firefly_iii_db
restart: always

env_file: .db.env

networks:
- firefly_iii
volumes:
- firefly_iii_db:/var/lib/mysql
cron:
image: alpine
restart: always
container_name: firefly_iii_cron
command: sh -c "echo \"0 3 * * * wget -qO- http://app:8080/api/v1/cron/REPLACEME\" | crontab - && crond -f -L /dev/stdout"
networks:
- firefly_iii

volumes:
firefly_iii_upload:
firefly_iii_db:

networks:
firefly_iii:
driver: bridge

新建.env文件,内容如下:

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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# 推荐默认
APP_ENV=local
APP_DEBUG=false

# 根据情况自定义
SITE_OWNER=example@example.com
# 一定要保证 32 个字符

APP_KEY=SomeRandomStringOf32CharsExactly


# 语言
DEFAULT_LANGUAGE=zh_CH
DEFAULT_LOCALE=equal

# 时区
TZ=Asia/Shanghai

# 反向代理一定要开!!
TRUSTED_PROXIES=**

# 日志相关,尽量减少日志
LOG_CHANNEL=stack
APP_LOG_LEVEL=emergency
AUDIT_LOG_LEVEL=emergency

# 数据库配置,这里选择 MySQL 数据库
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306

DB_DATABASE=<数据库名称> # 自定义

DB_USERNAME=<数据库用户名>

DB_PASSWORD=<数据库用户密码>

MYSQL_USE_SSL=false

# Cookie 设置
COOKIE_PATH="/"
COOKIE_SECURE=false
COOKIE_SAMESITE=lax

SEND_ERROR_MESSAGE=true
SEND_REPORT_JOURNALS=true

ENABLE_EXTERNAL_MAP=false
ENABLE_EXTERNAL_RATES=false

# Firefly III authentication settings
AUTHENTICATION_GUARD=web
AUTHENTICATION_GUARD_HEADER=REMOTE_USER

DISABLE_FRAME_HEADER=false

# 防止 XSS 攻击,保持默认
DISABLE_CSP_HEADER=false

ALLOW_WEBHOOKS=false

DKR_BUILD_LOCALE=false
# 不用 sqllite
DKR_CHECK_SQLITE=false
# 安全相关,保持默认
DKR_RUN_MIGRATION=true
DKR_RUN_UPGRADE=true
DKR_RUN_VERIFY=true
DKR_RUN_REPORT=true
DKR_RUN_PASSPORT_INSTALL=true

# APP 配置,不要乱改
APP_NAME=FireflyIII
BROADCAST_DRIVER=log
QUEUE_DRIVER=sync
CACHE_PREFIX=firefly
FIREFLY_III_LAYOUT=v1

新建.db.env文件,内容如下:

1
2
3
4
MYSQL_RANDOM_ROOT_PASSWORD=yes
MYSQL_DATABASE=<数据库名称>
MYSQL_USER=<数据库用户名>
MYSQL_PASSWORD=<数据库用户密码>

/opt/docker/compose/firefly_iii工程目录下执行以下代码构建容器:

1
sudo docker-compose up -d

执行完成后使用sudo docker ps查看容器状态,如fireflyiii/core:latestSTATUS(healthy)即部署成功

反向代理

此时不能直接通过IP+端口的方式访问。

到域名厂商配置解析后,使用Nginx进行反向代理后才能够访问。

参考文档

官方Docker安装文档

如何利用 Docker & Nginx 在 VPS 上部署 Firefly III 记账软件