跳至正文
首页 » 在树莓派使用Docker上搭建 Firefly-iii 服务器

在树莓派使用Docker上搭建 Firefly-iii 服务器

Firefly-iii 是一个开源的记账软件,可以自主搭建的个人财务管理服务,可以帮助用户记录追踪收入与开销。可以在LAMP环境或者使用 docker 进行搭建。Firefly-iii要求使用的 PHP 7.4,目前还没有加入树莓派的官方软件。而且我的服务器的上已经搭建了很多服务,不想因为新加的功能影响已经在使用的功能,所以本文着重介绍 在树莓派使用Docker上搭建 Firefly-iii 服务器 。

在树莓派使用Docker上搭建 Firefly-iii 服务器 _ LOGO

1 直接使用 Docker Hub 镜像

镜像中不包含数据库,所以直接使用 Docker Hub 镜像需要使用外部数据库。数据库搭建过程参照 Nextcloud 搭建 中的第二节。其中创建的是本地访问的账户,这里从 Docker 中访问本机中的数据库不属于本地访问,需要进行一点修改。

将账户权限设置

grant all privileges on nextcloud.* to nxtcloudadmin@localhost identified by 'admin123';

更换为

grant all privileges on nextcloud.* to 'nxtcloudadmin'@'%' identified by 'admin123';

其中 ‘%’ 意为不限制访问来源。

还需要修改 /etc/mysql/mariadb.conf.d/50-server.cnf 将其中 bind-address 修改为 0.0.0.0

接下来运行后即可使用 http://server_ip:81 访问 firefly-iii 服务了。

docker run -d
-v firefly_iii_upload:/var/www/fireflyiii
-p 81:8080
-e APP_KEY=appkey
-e DB_HOST=172.17.0.1
-e DB_PORT=3306
-e DB_CONNECTION=mysql
-e DB_DATABASE=firefly
-e DB_USERNAME=fireflyadmin
-e DB_PASSWORD=passwd
jc5x/firefly-iii:latest
  1. firefly_iii_upload 用于存储用户上传的附件,将其镜像到本机目录中方便备份。注意需要将所建文件夹所属用户修改为 web 服务软件所属用户。通常用户名和用户组为 www-data,则使用 sudo chown www-data:www-data /var/www/fireflyiii 修改文件夹所属用户。
  2. -p 属性用于对应 docker 与本机的端口。默认 Firefly-iii 使用 8080 端口,这里将其对应到了本机的 81 端口。
  3. APP_KEY 为严格的32个字符,可以使用 head /dev/urandom | LANG=C tr -dc 'A-Za-z0-9' | head -c 32 生成。
  4. DB_HOST 为本机在 Docker 中的地址,可以使用 ifconfig 查看。

2 使用 Docker Compose

使用 wget 下载官方的配置文件,并命名为 .env。下载 compose 配置文件,维持原文件命名。配置文件中的空格非常重要,不要使用复制粘贴的方式导入文件。

通过 docker-compose -f docker-compose.yml up -d 建立docker。与 Nextcloud 默认使用的数据库镜像不同, Firefly 使用的数据库有 Arm 版本,可以在树莓派上运行。

3 反向代理

如果使用域名访问服务器,则需要使用方向代理。直接使用 Docker Hub 镜像时,添加

-e APP_URL=https://firefly.example.com \
-e TRUSTED_PROXIES=** \

使用 Docker Compose 时在 .env 中添加

APP_URL=https://firefly.example.com
TRUSTED_PROXIES=**

其中 APP_URL 为访问所使用的域名。如果没有添加的话可以访问网站,无法进行注册和登录操作。

使用 HTTPS 访问服务,则需添加

# APACHE
RequestHeader set X-Forwarded-Proto "https"

# NGINX
proxy_set_header X-Forwarded-Proto $scheme;

这是我现在使用的 Nginx 配置

upstream docker-firefly {
    server 127.0.0.1:81;
}

server {
    listen 80;
    listen [::]:80;
    server_name firefly.beekc.top;

    # Enforce HTTPS
    return 301 https://$server_name$request_uri;
}

server {
    listen 443      ssl http2;
    listen [::]:443 ssl http2;
    server_name firefly.beekc.top;

    ssl_certificate     /etc/nginx/ssl/beekc.crt;
    ssl_certificate_key /etc/nginx/ssl/beekc.key;

    location / {
#rewrite ^/geld(/.*)$ $1 break;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $host;
        client_max_body_size 64M;
        proxy_pass http://127.0.0.1:81;
        proxy_read_timeout 300s;
    }
}

4 参考

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注