美文网首页
Fireflyiii教程-安装篇

Fireflyiii教程-安装篇

作者: 黄昭鸿 | 来源:发表于2022-03-12 18:16 被阅读0次

    发表日期: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教程-安装篇

          本文链接:https://www.haomeiwen.com/subject/uqqldrtx.html