Fireflyiii教程-安装篇

发表日期:2022年3月11日 · 更新于 2022年3月12日

作者:nextleaf | 黄昭鸿

[TOC]

适用范围

  本教程基于在Ubuntu Server 20.04 LTS使用Docker部署Firefly III v5.6.16的实践,在其他平台或其他Linux未做测试。官方文档中还有使用Composer安装的教程,但笔者使用该方法未成功。本文中的MySQL也在Docker容器中运行,如需连接到宿主机的数据库或其他远程数据库,请查阅Docker官方文档自行配置。

先决条件

  本教程默认读者具有一定LinuxDocker基础,例如Linux用户管理、Linux文件管理、Linux权限管理、数据库命令行操作、Docker容器等。
  开始之前,请使用一个非root用户登录到Linux,并且由该用户执行本文正文所有的操作,如果你还没有普通用户,可使用root用户创建普通用户,创建普通用户命令如下:

# 新建小明用户,-m选项表示自动创建用户的主目录
useradd -m Xiaoming

# 设置小明的密码
passwd Xiaoming

# 授予小明sudo权限
usermod -a -G sudo Xiaoming

正文

Firefly III简介

  Firefly III是一个个人财务的管理器。它是自我托管和开源的。这意味着它是免费的,没有广告,没有跟踪。它可以帮助你跟踪支出、收入、预算和两者之间的一切。它支持信用卡、共享家庭账户和储蓄账户。它还有许多整洁的财务报告可用。通过记录你的支出和收入,你可以做出相应的预算并节省资金。花里胡哨的。

先安装docker引擎

 为什么先安装Docker Engine?参见本文的“适用范围”。
本节参考自Install Docker Engine on Ubuntu | Docker Documentation

步骤(共4个):

  1. 卸载旧的Docker

    如果安装了旧版本的Docker,请卸载它们,在终端执行:

    sudo apt-get remove docker docker-engine docker.io containerd runc
    

    此命令如果报告未安装这些包,则没关系。

  2. 通过设置Docker存储库并从中进行安装,以便安装和升级(官方推荐的方法)

    2.1. 设置存储库,终端执行以下两条命令。

    # 第一条,更新包索引
    sudo apt-get update 
    
    # 第二条,设置Docker存储库
    sudo apt-get install \
     ca-certificates \
     curl \
     gnupg \
     lsb-release
    
    图1-设置Docker存储库

    2.2. 添加 Docker 的官方 GPG 密钥,终端执行:

    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
    

    2.3. 在终端使用以下命令设置稳定存储库:

    echo \
      "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu \
      $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    
  3. 安装Docker引擎,终端执行以下两条命令:

    # 第一条
    sudo apt-get update
    
    # 第二条
    sudo apt-get install docker-ce docker-ce-cli containerd.io
    
  4. 安装后的配置,以root用户身份管理Docker,终端执行:

    # 在此之前,请不要使用sudo来执行docker命令
    # 将用户添加到组,$USER指向当前用户
    sudo usermod -aG docker $USER
    
    # 激活对组的更改,完成这两个命令后请注销登录,再重新登录使之生效
    newgrp docker
    
    # 开机启动docker
    sudo systemctl enable docker.service
    sudo systemctl enable containerd.service
    

    如果要更新Docker引擎,请参考官方文档。

使用Docker部署MySQL服务器

  本节参考Basic Steps for MySQL Server Deployment with Docker以及Mysql - Official Image | Docker Hub

步骤(共3个):

  1. 拉取镜像,其中latest标签是用来指定最新版本的(目前是8.0.28),执行:

    docker pull mysql/mysql-server:latest
    

    要显示已下载的镜像,请在终端执行:

    docker images
    
    图2-显示已下载的镜像

    上图可以看到,拉取的MySQL镜像名为mysql/mysql-server

  2. 从镜像启动MySQL容器并初始化该容器

    创建卷给MySQL容器使用,终端执行:

    docker volume create mysql-data
    

    要启动新的Docker容器,可在终端执行(方法1):

    docker run --name=给容器起个名 -v mysql-data:/var/lib/mysql --restart on-failure -d 镜像名:标签
    

    例如:

    docker run --name=mysql666 -v mysql-data:/var/lib/mysql --restart on-failure -d mysql/mysql-server:latest
    

  如果你不小心敲错命令了,停止该容器并删除该容器,然后重新创建新的容器。
终端使用docker ps命令,显示在正在运行的容器列表:

图3-显示在正在运行的容器

停止指定容器:docker stop mysql666;删除指定容器:docker rm mysql666

  除了上面的方法启动容器,你也可以在启动新的容器的适合指定数据库root用户的密码(方法2),命令格式如下:

docker run --name 给容器起个名 -v mysql-data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=你的密码 -d 镜像名:标签

例如:

docker run --name mysql666 -v mysql-data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=.22pT*Z\&cO1 -d mysql/mysql-server:latest

要监视容器的日志输出,可执行命令docker logs mysql666

  在方法1中,启动后 容器初始化可能需要一些时间,在docker ps命令的输出中,容器的STATUS为含有healthy时,表明服务器准备就绪可供使用(上面图3),初始化过程中MySQL为root用户生成的随机密码,等它初始化完成后,使用以下命令查看生成的密码

docker logs mysql666 2>&1 | grep GENERATED
图4-查看生成的密码

在将mysql客户端连接到服务器(见下面)后,必须通过发出以下语句来重置服务器root密码:

ALTER USER 'root'@'localhost' IDENTIFIED BY '您的新密码';

 附:可以使用 docker exec -it 命令在容器内启动 bash shell,例如

docker exec -it mysql666 bash

 附:删除容器命令docker rm 容器名(要先停止它再删除),如果希望同时删除服务器数据目录的数据,请将-v选项添加到docker rm命令中。

  1. 启动MySQL客户端并将其连接到MySQL服务器,执行后它会提示输入密码,输入上述生成的那个即可。

    docker exec -it mysql666 mysql -uroot -p
    
    图5-连接到MySQL服务器

    输入密码连接后,马上更改root用户初始密码:

    ALTER USER 'root'@'localhost' IDENTIFIED BY 'pqyry;Bl8C7A32B~kHUD';
    
    图6-上更改数据库root用户初始密码

    "Query OK"表明更改成功。

    Firefly III不建议使用数据库的root用户连接,下面将创建新的MySQL用户、新的数据库,给Firefly III使用:

    -- 创建数据库firefly
    CREATE DATABASE IF NOT EXISTS firefly DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
    -- 创建数据库用户fireflyuser,密码为xW9CoF8A666
    CREATE USER 'fireflyuser'@'%' IDENTIFIED BY 'xW9CoF8A666';
    -- 授权
    grant all on firefly.* to "fireflyuser"@"%";
    

    图7-创建数据库和用户

    然后exit返回终端,测试fireflyuser能不能连接:

    docker exec -it mysql666 mysql -ufireflyuser -p
    
    图8-测试fireflyuser能不能连接

    到此数据库准备工作结束,接下来安装Firefly III

使用Docker部署Firefly III

  本节参考Firefly III 官方文档 (firefly-iii.org)

步骤(共4个):

  1. 创建用于持久存储上传的文件和导出的数据的

    docker volume create firefly_iii_upload
    
  2. 使用命令docker ps查看MySQL容器的id

    图9-查看MySQL容器的id

    查看MySQL容器的IP

    docker inspect MySQL容器的id | grep IPAddress
    

    将此ip记住或复制下来备用,我这里是172.17.0.2

    在终端执行以下命令,生成一串32个字符的随机字符串备用。

    head /dev/urandom | LC_ALL=C tr -dc 'A-Za-z0-9' | head -c 32 && echo
    

    每次执行都不一样,我这里是AgXj2E9M0PGhRqhzoMtycqDRkNwIRHjO

  3. 启动Firefly III容器

    下面命令将拉取Firefly III最新版镜像并启动Firefly III容器,请小心填写所需值,如不小心填错后执行,请停止并删除错误的容器,然后重试。

    # docker pull fireflyiii/core:latest
    docker run -d \
    -v firefly_iii_upload:/var/www/html/storage/upload \
    -p 80:8080 \
    -e APP_KEY=你的32位随机字符串 \
    -e DB_HOST=MySQL容器的IP \
    -e DB_PORT=3306 \
    -e DB_CONNECTION=mysql \
    -e DB_DATABASE=firefly所使用的数据库名 \
    -e DB_USERNAME=firefly所使用的数据库用户 \
    -e DB_PASSWORD=该数据库用户的密码 \
    fireflyiii/core:latest
    

    例如我的:

    docker run -d \
    -v firefly_iii_upload:/var/www/html/storage/upload \
    -p 80:8080 \
    -e APP_KEY=AgXj2E9M0PGhRqhzoMtycqDRkNwIRHjO \
    -e DB_HOST=172.17.0.2 \
    -e DB_PORT=3306 \
    -e DB_CONNECTION=mysql \
    -e DB_DATABASE=firefly \
    -e DB_USERNAME=fireflyuser \
    -e DB_PASSWORD=xW9CoF8A666 \
    fireflyiii/core:latest
    

    执行docker ps以查看正在运行的容器。

    图10-查看正在运行的容器

  1. 初始化Firefly III的数据库

    进入容器的shell,并切换到Firefly III所在目录。

    命令格式:docker exec -it 容器名 bash

    例如我的:

    docker exec -it zen_noether bash
    
    图11-进入容器的shell

  可以看到,进入后就是Firefly III项目根目录,在容器里的shell中执行以下3条命令初始化数据库

php artisan migrate:refresh --seed

php artisan firefly-iii:upgrade-database

php artisan passport:install

部分截图:


图12-初始化数据库部分截图

执行exit返回终端。

此时可以访问服务器地址查看

http://服务器IP/

http://服务器IP/firefly-iii/

如图


部署FireflyIII后首次访问的页面

结语

  笔者刚接触Docker,并不很了解Docker。但了解到Docker容器的启动顺序很重要:默认情况下Docker会为每个容器分配一个172.17.0.x的IP地址(内网),先启动的容器先分配地址,因此容器启动顺序将影响其IP地址

  而本文中Firefly III的启动命令包含了数据库主机地址(DB_HOST),这个写死的,读者可以尝试更改Firefly III配置,使其连接宿主机的数据库或远程的数据库,而不必安装MySQL容器,笔者也将学习Docker Networking的知识,以便进行这方面的尝试。

   Firefly III教程的安装部分到这里便告一段落了,Firefly III的教程的使用部分正在编写,敬请期待。


最后,原创不易,请规范转载。

你可能感兴趣的:(Fireflyiii教程-安装篇)