Fireflyiii教程-安裝篇

發(fā)表日期:2022年3月11日 · 更新于 2022年3月12日

作者:nextleaf | 黃昭鴻

[TOC]

適用范圍

??本教程基于在Ubuntu Server 20.04 LTS使用Docker部署Firefly III v5.6.16的實踐,在其他平臺或其他Linux未做測試。官方文檔中還有使用Composer安裝的教程,但筆者使用該方法未成功。本文中的MySQL也在Docker容器中運行,如需連接到宿主機的數(shù)據(jù)庫或其他遠(yuǎn)程數(shù)據(jù)庫,請查閱Docker官方文檔自行配置。

先決條件

??本教程默認(rèn)讀者具有一定LinuxDocker基礎(chǔ),例如Linux用戶管理、Linux文件管理、Linux權(quán)限管理、數(shù)據(jù)庫命令行操作、Docker容器等。
??開始之前,請使用一個非root用戶登錄到Linux,并且由該用戶執(zhí)行本文正文所有的操作,如果你還沒有普通用戶,可使用root用戶創(chuàng)建普通用戶,創(chuàng)建普通用戶命令如下:

# 新建小明用戶,-m選項表示自動創(chuàng)建用戶的主目錄
useradd -m Xiaoming

# 設(shè)置小明的密碼
passwd Xiaoming

# 授予小明sudo權(quán)限
usermod -a -G sudo Xiaoming

正文

Firefly III簡介

??Firefly III是一個個人財務(wù)的管理器。它是自我托管和開源的。這意味著它是免費的,沒有廣告,沒有跟蹤。它可以幫助你跟蹤支出、收入、預(yù)算和兩者之間的一切。它支持信用卡、共享家庭賬戶和儲蓄賬戶。它還有許多整潔的財務(wù)報告可用。通過記錄你的支出和收入,你可以做出相應(yīng)的預(yù)算并節(jié)省資金?;ɡ锖诘摹?/p>

先安裝docker引擎

?為什么先安裝Docker Engine?參見本文的“適用范圍”。
本節(jié)參考自Install Docker Engine on Ubuntu | Docker Documentation

步驟(共4個):

  1. 卸載舊的Docker

    如果安裝了舊版本的Docker,請卸載它們,在終端執(zhí)行:

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

    此命令如果報告未安裝這些包,則沒關(guān)系。

  2. 通過設(shè)置Docker存儲庫并從中進(jìn)行安裝,以便安裝和升級(官方推薦的方法)

    2.1. 設(shè)置存儲庫,終端執(zhí)行以下兩條命令。

    # 第一條,更新包索引
    sudo apt-get update 
    
    # 第二條,設(shè)置Docker存儲庫
    sudo apt-get install \
     ca-certificates \
     curl \
     gnupg \
     lsb-release
    
    圖1-設(shè)置Docker存儲庫

    2.2. 添加 Docker 的官方 GPG 密鑰,終端執(zhí)行:

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

    2.3. 在終端使用以下命令設(shè)置穩(wěn)定存儲庫:

    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引擎,終端執(zhí)行以下兩條命令:

    # 第一條
    sudo apt-get update
    
    # 第二條
    sudo apt-get install docker-ce docker-ce-cli containerd.io
    
  4. 安裝后的配置,以root用戶身份管理Docker,終端執(zhí)行:

    # 在此之前,請不要使用sudo來執(zhí)行docker命令
    # 將用戶添加到組,$USER指向當(dāng)前用戶
    sudo usermod -aG docker $USER
    
    # 激活對組的更改,完成這兩個命令后請注銷登錄,再重新登錄使之生效
    newgrp docker
    
    # 開機啟動docker
    sudo systemctl enable docker.service
    sudo systemctl enable containerd.service
    

    如果要更新Docker引擎,請參考官方文檔。

使用Docker部署MySQL服務(wù)器

??本節(jié)參考Basic Steps for MySQL Server Deployment with Docker以及Mysql - Official Image | Docker Hub

步驟(共3個):

  1. 拉取鏡像,其中latest標(biāo)簽是用來指定最新版本的(目前是8.0.28),執(zhí)行:

    docker pull mysql/mysql-server:latest
    

    要顯示已下載的鏡像,請在終端執(zhí)行:

    docker images
    
    圖2-顯示已下載的鏡像

    上圖可以看到,拉取的MySQL鏡像名為mysql/mysql-server。

  2. 從鏡像啟動MySQL容器并初始化該容器

    創(chuàng)建卷給MySQL容器使用,終端執(zhí)行:

    docker volume create mysql-data
    

    要啟動新的Docker容器,可在終端執(zhí)行(方法1):

    docker run --name=給容器起個名 -v mysql-data:/var/lib/mysql --restart on-failure -d 鏡像名:標(biāo)簽
    

    例如:

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

??如果你不小心敲錯命令了,停止該容器并刪除該容器,然后重新創(chuàng)建新的容器。
終端使用docker ps命令,顯示在正在運行的容器列表:

圖3-顯示在正在運行的容器

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

??除了上面的方法啟動容器,你也可以在啟動新的容器的適合指定數(shù)據(jù)庫root用戶的密碼(方法2),命令格式如下:

docker run --name 給容器起個名 -v mysql-data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=你的密碼 -d 鏡像名:標(biāo)簽

例如:

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

要監(jiān)視容器的日志輸出,可執(zhí)行命令docker logs mysql666。

??在方法1中,啟動后 容器初始化可能需要一些時間,在docker ps命令的輸出中,容器的STATUS為含有healthy時,表明服務(wù)器準(zhǔn)備就緒可供使用(上面圖3),初始化過程中MySQL為root用戶生成的隨機密碼,等它初始化完成后,使用以下命令查看生成的密碼

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

在將mysql客戶端連接到服務(wù)器(見下面)后,必須通過發(fā)出以下語句來重置服務(wù)器root密碼:

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

?附:可以使用 docker exec -it 命令在容器內(nèi)啟動 bash shell,例如

docker exec -it mysql666 bash

?附:刪除容器命令docker rm 容器名(要先停止它再刪除),如果希望同時刪除服務(wù)器數(shù)據(jù)目錄的數(shù)據(jù),請將-v選項添加到docker rm命令中。

  1. 啟動MySQL客戶端并將其連接到MySQL服務(wù)器,執(zhí)行后它會提示輸入密碼,輸入上述生成的那個即可。

    docker exec -it mysql666 mysql -uroot -p
    
    圖5-連接到MySQL服務(wù)器

    輸入密碼連接后,馬上更改root用戶初始密碼:

    ALTER USER 'root'@'localhost' IDENTIFIED BY 'pqyry;Bl8C7A32B~kHUD';
    
    圖6-上更改數(shù)據(jù)庫root用戶初始密碼

    "Query OK"表明更改成功。

    Firefly III不建議使用數(shù)據(jù)庫的root用戶連接,下面將創(chuàng)建新的MySQL用戶、新的數(shù)據(jù)庫,給Firefly III使用:

    -- 創(chuàng)建數(shù)據(jù)庫firefly
    CREATE DATABASE IF NOT EXISTS firefly DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
    -- 創(chuàng)建數(shù)據(jù)庫用戶fireflyuser,密碼為xW9CoF8A666
    CREATE USER 'fireflyuser'@'%' IDENTIFIED BY 'xW9CoF8A666';
    -- 授權(quán)
    grant all on firefly.* to "fireflyuser"@"%";
    

    圖7-創(chuàng)建數(shù)據(jù)庫和用戶

    然后exit返回終端,測試fireflyuser能不能連接:

    docker exec -it mysql666 mysql -ufireflyuser -p
    
    圖8-測試fireflyuser能不能連接

    到此數(shù)據(jù)庫準(zhǔn)備工作結(jié)束,接下來安裝Firefly III

使用Docker部署Firefly III

??本節(jié)參考Firefly III 官方文檔 (firefly-iii.org)

步驟(共4個):

  1. 創(chuàng)建用于持久存儲上傳的文件和導(dǎo)出的數(shù)據(jù)的

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

    圖9-查看MySQL容器的id

    查看MySQL容器的IP

    docker inspect MySQL容器的id | grep IPAddress
    

    將此ip記住或復(fù)制下來備用,我這里是172.17.0.2。

    在終端執(zhí)行以下命令,生成一串32個字符的隨機字符串備用。

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

    每次執(zhí)行都不一樣,我這里是AgXj2E9M0PGhRqhzoMtycqDRkNwIRHjO。

  3. 啟動Firefly III容器

    下面命令將拉取Firefly III最新版鏡像并啟動Firefly III容器,請小心填寫所需值,如不小心填錯后執(zhí)行,請停止并刪除錯誤的容器,然后重試。

    # 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所使用的數(shù)據(jù)庫名 \
    -e DB_USERNAME=firefly所使用的數(shù)據(jù)庫用戶 \
    -e DB_PASSWORD=該數(shù)據(jù)庫用戶的密碼 \
    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
    

    執(zhí)行docker ps以查看正在運行的容器。

    圖10-查看正在運行的容器

  1. 初始化Firefly III的數(shù)據(jù)庫

    進(jìn)入容器的shell,并切換到Firefly III所在目錄。

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

    例如我的:

    docker exec -it zen_noether bash
    
    圖11-進(jìn)入容器的shell

??可以看到,進(jìn)入后就是Firefly III項目根目錄,在容器里的shell中執(zhí)行以下3條命令初始化數(shù)據(jù)庫

php artisan migrate:refresh --seed

php artisan firefly-iii:upgrade-database

php artisan passport:install

部分截圖:


圖12-初始化數(shù)據(jù)庫部分截圖

執(zhí)行exit返回終端。

此時可以訪問服務(wù)器地址查看

http://服務(wù)器IP/

http://服務(wù)器IP/firefly-iii/

如圖


部署FireflyIII后首次訪問的頁面

結(jié)語

??筆者剛接觸Docker,并不很了解Docker。但了解到Docker容器的啟動順序很重要:默認(rèn)情況下Docker會為每個容器分配一個172.17.0.x的IP地址(內(nèi)網(wǎng)),先啟動的容器先分配地址,因此容器啟動順序?qū)⒂绊懫銲P地址。

??而本文中Firefly III的啟動命令包含了數(shù)據(jù)庫主機地址(DB_HOST),這個寫死的,讀者可以嘗試更改Firefly III配置,使其連接宿主機的數(shù)據(jù)庫或遠(yuǎn)程的數(shù)據(jù)庫,而不必安裝MySQL容器,筆者也將學(xué)習(xí)Docker Networking的知識,以便進(jìn)行這方面的嘗試。

?? Firefly III教程的安裝部分到這里便告一段落了,Firefly III的教程的使用部分正在編寫,敬請期待。


最后,原創(chuàng)不易,請規(guī)范轉(zhuǎn)載。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容