Fireflyiii教程-安裝篇

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

作者:nextleaf | 黃昭鴻

[TOC]

適用范圍

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

先決條件

??本教程默認(rèn)讀者具有一定LinuxDocker基礎(chǔ)岔乔,例如Linux用戶管理酥筝、Linux文件管理、Linux權(quán)限管理雏门、數(shù)據(jù)庫(kù)命令行操作嘿歌、Docker容器等。
??開(kāi)始之前茁影,請(qǐng)使用一個(gè)非root用戶登錄到Linux搅幅,并且由該用戶執(zhí)行本文正文所有的操作,如果你還沒(méi)有普通用戶呼胚,可使用root用戶創(chuàng)建普通用戶茄唐,創(chuàng)建普通用戶命令如下:

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

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

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

正文

Firefly III簡(jiǎn)介

??Firefly III是一個(gè)個(gè)人財(cái)務(wù)的管理器。它是自我托管和開(kāi)源的沪编。這意味著它是免費(fèi)的呼盆,沒(méi)有廣告,沒(méi)有跟蹤蚁廓。它可以幫助你跟蹤支出访圃、收入、預(yù)算和兩者之間的一切相嵌。它支持信用卡腿时、共享家庭賬戶和儲(chǔ)蓄賬戶。它還有許多整潔的財(cái)務(wù)報(bào)告可用饭宾。通過(guò)記錄你的支出和收入批糟,你可以做出相應(yīng)的預(yù)算并節(jié)省資金】疵花里胡哨的徽鼎。

先安裝docker引擎

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

步驟(共4個(gè)):

  1. 卸載舊的Docker

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

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

    此命令如果報(bào)告未安裝這些包棠隐,則沒(méi)關(guān)系石抡。

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

    2.1. 設(shè)置存儲(chǔ)庫(kù)助泽,終端執(zhí)行以下兩條命令汁雷。

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

    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)定存儲(chǔ)庫(kù):

    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í)行:

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

    如果要更新Docker引擎架谎,請(qǐng)參考官方文檔炸宵。

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

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

步驟(共3個(gè)):

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

    docker pull mysql/mysql-server:latest
    

    要顯示已下載的鏡像土全,請(qǐng)?jiān)诮K端執(zhí)行:

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

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

  2. 從鏡像啟動(dòng)MySQL容器并初始化該容器

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

    docker volume create mysql-data
    

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

    docker run --name=給容器起個(gè)名 -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
    

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

圖3-顯示在正在運(yùn)行的容器

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

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

docker run --name 給容器起個(gè)名 -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中,啟動(dòng)后 容器初始化可能需要一些時(shí)間秃臣,在docker ps命令的輸出中涧衙,容器的STATUS為含有healthy時(shí)哪工,表明服務(wù)器準(zhǔn)備就緒可供使用(上面圖3)奥此,初始化過(guò)程中MySQL為root用戶生成的隨機(jī)密碼,等它初始化完成后雁比,使用以下命令查看生成的密碼

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

在將mysql客戶端連接到服務(wù)器(見(jiàn)下面)后稚虎,必須通過(guò)發(fā)出以下語(yǔ)句來(lái)重置服務(wù)器root密碼:

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

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

docker exec -it mysql666 bash

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

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

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

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

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

    "Query OK"表明更改成功祭钉。

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

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

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

    然后exit返回終端申尼,測(cè)試fireflyuser能不能連接:

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

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

使用Docker部署Firefly III

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

步驟(共4個(gè)):

  1. 創(chuàng)建用于持久存儲(chǔ)上傳的文件和導(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ù)制下來(lái)備用,我這里是172.17.0.2

    在終端執(zhí)行以下命令钾怔,生成一串32個(gè)字符的隨機(jī)字符串備用碱呼。

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

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

  3. 啟動(dòng)Firefly III容器

    下面命令將拉取Firefly III最新版鏡像并啟動(dòng)Firefly III容器愚臀,請(qǐng)小心填寫(xiě)所需值,如不小心填錯(cuò)后執(zhí)行矾利,請(qǐng)停止并刪除錯(cuò)誤的容器姑裂,然后重試。

    # docker pull fireflyiii/core:latest
    docker run -d \
    -v firefly_iii_upload:/var/www/html/storage/upload \
    -p 80:8080 \
    -e APP_KEY=你的32位隨機(jī)字符串 \
    -e DB_HOST=MySQL容器的IP \
    -e DB_PORT=3306 \
    -e DB_CONNECTION=mysql \
    -e DB_DATABASE=firefly所使用的數(shù)據(jù)庫(kù)名 \
    -e DB_USERNAME=firefly所使用的數(shù)據(jù)庫(kù)用戶 \
    -e DB_PASSWORD=該數(shù)據(jù)庫(kù)用戶的密碼 \
    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以查看正在運(yùn)行的容器男旗。

    圖10-查看正在運(yùn)行的容器

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

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

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

    例如我的:

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

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

php artisan migrate:refresh --seed

php artisan firefly-iii:upgrade-database

php artisan passport:install

部分截圖:


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

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

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

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

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

如圖


部署FireflyIII后首次訪問(wèn)的頁(yè)面

結(jié)語(yǔ)

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

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

?? Firefly III教程的安裝部分到這里便告一段落了束倍,Firefly III的教程的使用部分正在編寫(xiě),敬請(qǐng)期待茶没。


最后肌幽,原創(chuàng)不易,請(qǐng)規(guī)范轉(zhuǎn)載抓半。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末喂急,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子笛求,更是在濱河造成了極大的恐慌廊移,老刑警劉巖糕簿,帶你破解...
    沈念sama閱讀 218,451評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異狡孔,居然都是意外死亡懂诗,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)苗膝,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)殃恒,“玉大人,你說(shuō)我怎么就攤上這事辱揭±胩疲” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,782評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵问窃,是天一觀的道長(zhǎng)亥鬓。 經(jīng)常有香客問(wèn)我,道長(zhǎng)域庇,這世上最難降的妖魔是什么嵌戈? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,709評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮听皿,結(jié)果婚禮上熟呛,老公的妹妹穿的比我還像新娘。我一直安慰自己写穴,他們只是感情好惰拱,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,733評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布雌贱。 她就那樣靜靜地躺著啊送,像睡著了一般。 火紅的嫁衣襯著肌膚如雪欣孤。 梳的紋絲不亂的頭發(fā)上馋没,一...
    開(kāi)封第一講書(shū)人閱讀 51,578評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音降传,去河邊找鬼篷朵。 笑死,一個(gè)胖子當(dāng)著我的面吹牛婆排,可吹牛的內(nèi)容都是我干的声旺。 我是一名探鬼主播,決...
    沈念sama閱讀 40,320評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼段只,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼腮猖!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起赞枕,我...
    開(kāi)封第一講書(shū)人閱讀 39,241評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤澈缺,失蹤者是張志新(化名)和其女友劉穎坪创,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體姐赡,經(jīng)...
    沈念sama閱讀 45,686評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡莱预,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,878評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了项滑。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片依沮。...
    茶點(diǎn)故事閱讀 39,992評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖枪狂,靈堂內(nèi)的尸體忽然破棺而出悉抵,到底是詐尸還是另有隱情,我是刑警寧澤摘完,帶...
    沈念sama閱讀 35,715評(píng)論 5 346
  • 正文 年R本政府宣布姥饰,位于F島的核電站,受9級(jí)特大地震影響孝治,放射性物質(zhì)發(fā)生泄漏列粪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,336評(píng)論 3 330
  • 文/蒙蒙 一谈飒、第九天 我趴在偏房一處隱蔽的房頂上張望岂座。 院中可真熱鬧,春花似錦杭措、人聲如沸费什。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,912評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)鸳址。三九已至,卻和暖如春泉懦,著一層夾襖步出監(jiān)牢的瞬間稿黍,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,040評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工崩哩, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留巡球,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,173評(píng)論 3 370
  • 正文 我出身青樓邓嘹,卻偏偏與公主長(zhǎng)得像酣栈,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子汹押,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,947評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容