Firefly iii(財務管理システム)
財務管理システム、Firefly iiiについて
Fifefly iii インストール関係
Ubuntu 20.04にfirefly-iiiをインストール(PHP8.1対応版)
概要
家計簿的なシステムをオープンソースで作れないものかと思っていたところ、
というシステムを発見しました。
無事に動かすことができたので、メモを残します。
インストールの前に
このシステムは、ローカル環境で利用することを強くお勧めします。(金融情報を記録するため)
環境
以下、既に構築済みという状況です。
- Ubuntu 20.04
- Apache 2.4
- MySQL 8.3
- PHP 8.1
- Composer 2.6.5
そして、以下を準備済みです。
- サイトにアクセスするドメインとDNS登録
- 上記に沿った適切な証明書
さっくりとした手順
- プログラムをダウンロードします。
- composerでインストールします。
- DBを作成します。
- .envを設定します。
- DBのマイグレーションを行います。
- ログファイルの格納ディレクトリを設定します。
- ApacheでWebサーバの設定を行います。
- アクセスを確認します。
Firefly III のダウンロード
- ディレクトリ移動
cd /home/www-data
Web公開用のディレクトリを指定します。
- プログラムのダウンロード
sudo -u www-data git clone https://github.com/firefly-iii/firefly-iii.git -b 5.7.9
※PHP8.1で稼働するバージョンを指定しています。
- ダウンロード確認
ls -ld firefly-iii
ディレクトリが作成されていること、Web実行ユーザ(www-data)であることを確認します。
Firefly III のインストール
- ディレクトリ移動
cd firefly-iii && pwd
- Composerでインストール
sudo -u www-data composer install --no-dev --prefer-dist
エラーがないことを確認します。
DB作成
- mysqlログイン
mysql -u root -p
- DB作成
CREATE DATABASE firefly character set utf8mb4;
CREATE USER 'firefly'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON firefly.* TO 'firefly'@'localhost';
FLUSH PRIVILEGES;
EXIT;
ポリシーに合わせて強固なパスワードを指定します。
.env設定
- .envのサンプルをコピー
sudo cp -pi .env.example .env
- ファイル修正
- .env を教義・信仰に沿ったエディタで修正します。
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=firefly
DB_USERNAME=firefly
DB_PASSWORD=your_password
最低限、上記を指定します。パスワードはDB作成時のものです。
DBマイグレーション
sudo -u www-data php artisan firefly-iii:upgrade-database
sudo -u www-data php artisan firefly-iii:correct-database
sudo -u www-data php artisan firefly-iii:report-integrity
sudo -u www-data php artisan passport:install
ログファイルの格納ディレクトリを作成
- ディレクトリ作成
sudo mkdir /var/log/firefly
- ディレクトリの所有者変更
sudo chown -R www-data www-data /var/log/firefly
- ディレクトリ作成確認
ls -ld /var/log/firefly
Apache設定
- 以下のファイルを作成します。
- /etc/apache2/sites-available/firefly-iii.conf
- 【】の箇所は、自分の環境に合わせて修正してください。
cat <<- __EOF__ | sudo tee -a /etc/apache2/sites-available/firefly-iii.conf
<VirtualHost *:80>
servername 【bank.example.com】
# ドメイン名を指定します
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# HTTPアクセスを強制的にHTTPSにリダイレクトします
</VirtualHost>
<VirtualHost *:443>
ServerName 【bank.example.com】
# ドメイン名を指定します
CustomLog 【/var/log/firefly/firefly_access.log】 combined
ErrorLog 【/var/log/firefly/firefly_error.log】
DocumentRoot 【/home/www-data/firefly-iii/public】
# 自身の環境に合わせます
<Directory 【/home/www-data/firefly-iii/public】>
# 自身の環境に合わせます
AllowOverride All
Require all granted
</Directory>
#SSL設定
SSLEngine on
Protocols h2 http/1.1
# SSLを有効化します
SSLCertificateFile 【/etc/certs/bank.example.com.crt】
# SSL証明書を指定します
SSLCertificateKeyFile 【/etc/private/bank.example.com.key】
# 秘密鍵を指定します
# SSLCACertificateFile 【/etc/certs/bank.example.com.crt】
# 中間証明書が発行元から別ファイルで提供されている場合は、この直上をコメントアウトして中間証明書を指定します
#セキュリティヘッダー付与
Header always set Strict-Transport-Security "max-age=63072000"
Header set X-Content-Type-Options "nosniff"
Header always append X-Frame-Options "SAMEORIGIN"
Header set X-XSS-Protection "1; mode=block"
</VirtualHost>
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1 -TLSv1.2
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:EC6-GCM-SHA384
SSLHonorCipherOrder off
SSLSessionTickets off
SSLUseStapling On
SSLStaplingCache "shmcb:logs/ssl_stapling(32768)"
__EOF__
設定反映
- 設定反映
sudo a2ensite firefly-iii.conf
- Webサービス再起動
sudo systemctl restart apache2
インストール確認
設定したURLにアクセスします。(ここではbank.example.com)
- Email address
- パスワード(16文字以上)
を設定して、「Register」をクリックします。
続いて初期設定(メインバンクや通貨、言語の指定など)完了後、ダッシュボードが出てくればインストール完了です。
Ubuntu24.04にfirefly-iiiをインストール。(php8.3対応版)
概要
家計簿的なシステムをオープンソースで作れないものかと思っていたところ、
というシステムを発見しました。
無事に動かすことができたので、メモを残します。
インストールの前に
このシステムは、ローカル環境で利用することを強くお勧めします。(金融情報を記録するため)
環境
以下、既に構築済みという状況です。
- Ubuntu 20.04
- Apache 2.4
- MySQL 8.3
- PHP 8.3
- Composer 2.7.9
そして、以下を準備済みです。
- サイトにアクセスするドメインとDNS登録
- 上記に沿った適切な証明書
さっくりとした手順
- プログラムをダウンロードします。
- composerでインストールします。
- DBを作成します。
- .envを設定します。
- DBのマイグレーションを行います。
- ログファイルの格納ディレクトリを設定します。
- ApacheでWebサーバの設定を行います。
- アクセスを確認します。
Firefly III のダウンロード
- ディレクトリ移動
cd /home/www-data
Web公開用のディレクトリを指定します。
- プログラムのダウンロード
git clone https://github.com/firefly-iii/firefly-iii.git -b v6.1.19
※PHP8.3で稼働するバージョンを指定しています。
- ダウンロード確認
ls -ld firefly-iii
ディレクトリが作成されていること、Web実行ユーザ(www-data)であることを確認します。
DB作成
- mysqlログイン
mysql -u root -p
- DB作成
CREATE DATABASE firefly character set utf8mb4;
CREATE USER 'firefly'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON firefly.* TO 'firefly'@'localhost';
FLUSH PRIVILEGES;
EXIT;
ポリシーに合わせて強固なパスワードを指定します。
.env設定
- .envのサンプルをコピー
sudo cp -pi .env.example .env
- ファイル修正
- .env を教義・信仰に沿ったエディタで修正します。
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=firefly
DB_USERNAME=firefly
DB_PASSWORD=your_password
最低限、上記を指定します。パスワードはDB作成時のものです。
DBマイグレーション
sudo -u www-data php artisan firefly-iii:upgrade-database
sudo -u www-data php artisan firefly-iii:correct-database
sudo -u www-data php artisan firefly-iii:report-integrity
sudo -u www-data php artisan passport:install
ログファイルの格納ディレクトリを作成
- ディレクトリ作成
sudo mkdir /var/log/firefly
- ディレクトリの所有者変更
sudo chown -R www-data www-data /var/log/firefly
- ディレクトリ作成確認
ls -ld /var/log/firefly
Apache設定
- 以下のファイルを作成します。
- /etc/apache2/sites-available/firefly-iii.conf
- 【】の箇所は、自分の環境に合わせて修正してください。
cat <<- __EOF__ | sudo tee -a /etc/apache2/sites-available/firefly-iii.conf
<VirtualHost *:80>
servername 【bank.example.com】
# ドメイン名を指定します
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# HTTPアクセスを強制的にHTTPSにリダイレクトします
</VirtualHost>
<VirtualHost *:443>
ServerName 【bank.example.com】
# ドメイン名を指定します
CustomLog 【/var/log/firefly/firefly_access.log】 combined
ErrorLog 【/var/log/firefly/firefly_error.log】
DocumentRoot 【/home/www-data/firefly-iii/public】
# 自身の環境に合わせます
<Directory 【/home/www-data/firefly-iii/public】>
# 自身の環境に合わせます
AllowOverride All
Require all granted
</Directory>
#SSL設定
SSLEngine on
Protocols h2 http/1.1
# SSLを有効化します
SSLCertificateFile 【/etc/certs/bank.example.com.crt】
# SSL証明書を指定します
SSLCertificateKeyFile 【/etc/private/bank.example.com.key】
# 秘密鍵を指定します
# SSLCACertificateFile 【/etc/certs/bank.example.com.crt】
# 中間証明書が発行元から別ファイルで提供されている場合は、この直上をコメントアウトして中間証明書を指定します
#セキュリティヘッダー付与
Header always set Strict-Transport-Security "max-age=63072000"
Header set X-Content-Type-Options "nosniff"
Header always append X-Frame-Options "SAMEORIGIN"
Header set X-XSS-Protection "1; mode=block"
</VirtualHost>
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1 -TLSv1.2
SSLCipherSuite ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:EC6-GCM-SHA384
SSLHonorCipherOrder off
SSLSessionTickets off
SSLUseStapling On
SSLStaplingCache "shmcb:logs/ssl_stapling(32768)"
__EOF__
設定反映
- 設定反映
sudo a2ensite firefly-iii.conf
- Webサービス再起動
sudo systemctl restart apache2
インストール確認
設定したURLにアクセスします。(ここではbank.example.com)
- Email address
- パスワード(16文字以上)
を設定して、「Register」をクリックします。
続いて初期設定(メインバンクや通貨、言語の指定など)完了後、ダッシュボードが出てくればインストール完了です。
Fifefly iii メンテナンス
Firefly-iiiのアップデート。(6.1.2→6.2.1)
LAMP環境で動く財務管理システム、firefly-iiiを6.1.2→6.2.1にアップグレードしたときの手順メモです。
参考:Upgrade a self-managed server/Firefly III documentation
環境
- Ubuntu 24.04
- Apache 2.4
- MySQL 8.0.39
- PHP 8.3.12
- Composer 2.7.9
- firefly-iii 6.1.2
さっくりとした手順
- DBのバックアップを取得します。
- 最新版のパッケージをダウンロードして展開します。
- 利用中のfirefly-iiiを待避させます。
- 待避させたfirefly-iiiからファイル/ディレクトリをコピーします。
- アップグレードを行います。
DBのバックアップ
- 作業ディレクトリに移動
cd /hoge && pwd
任意の作業ディレクトリに移動します。
- DBバックアップ
mysqldump --no-tablespaces --single-transaction -u username -h localhost -p database_name > DB_Backup.$(date +%Y%m%d).sql
usename
、database_name
、及びDB_Backup
は自分の環境に合わせます。
- バックアップ確認
head -100 DB_Backup.$(date +%Y%m%d).sql
バックアップができていること、平文でSQLが読めることを確認します。
パッケージ取得
- 作業ディレクトリに移動
cd /hoge && pwd
任意の作業ディレクトリに移動します。
- wget
wget https://github.com/firefly-iii/firefly-iii/releases/download/v6.1.21/FireflyIII-v6.1.21.zip
- ファイル所有者変更
sudo chown www-data:www-data FireflyIII-v6.1.21.zip
- ファイル確認
ls -l FireflyIII-v6.1.21.zip
ファイルがあること、所有者がWebアプリ実行ユーザ(www-data)であることを確認します。
アップデート前のfirefly-iiiを待避
- ディレクトリごと待避
sudo mv /home/www-data/firefly-iii /home/www-data/firefly-iii.$(date +%Y%m%d)
自分の環境に合わせます。firefly-iiiがインストールされているディレクトリをまるごと移動します。
- 待避確認
ls -ld /home/www-data/firefly-iii
→ ディレクトリが無いこと
ls -ld /home/www-data/firefly-iii.$(date +%Y%m%d)
→ ディレクトリがあること
アップデートパッケージの解凍と配置
- 解凍
sudo -u www-data unzip -o /hoge/FireflyIII-v6.1.21.zip -x "storage/*" -d /home/www-data/firefly-iii
/hoge
は先ほど取得したパッケージがある場所です。アップデート前と同じ位置、名前に解凍します。
- 解凍・配置確認
ls -l /home/www-data/firefly-iii
ファイル一式があり、www-dataが所有者になっていること
アップデート前のファイル・ディレクトリをコピー
- 待避させたディレクトリに移動
cd /home/www-data/firefly-iii.$(date +%Y%m%d) && pwd
自分の環境に合わせます。
-
.env
ファイルをコピー
sudo cp -pi .env /home/www-data/firefly-iii/.env
コピー先のディレクトリは自分の環境に合わせます。
-
.env
ファイルコピー確認
ls -l /home/www-data/firefly-iii/.env
ファイルがあることを確認します。
- storageディレクトリのコピー
sudo cp -pir storage /home/www-data/firefly-iii/
- storageディレクトリのコピー確認
ls -l /home/www-data/firefly-iii/storage
ファイルやディレクトリがあることを確認します。
アップグレード
- アップグレード後のディレクトリに移動
cd /home/www-data/firefly-iii && pwd
先ほど展開したディレクトリに移動します。
- DBマイグレーション
sudo -u www-data php artisan migrate --seed
Yesが見えるようにして実行します。
- 一時複合化
sudo -u www-data php artisan firefly-iii:decrypt-all
- アプリケーションキャッシュクリア
sudo -u www-data php artisan cache:clear
- コンパイルされたビューのキャッシュクリア
sudo -u www-data php artisan view:clear
- DBアップグレード
sudo -u www-data php artisan firefly-iii:upgrade-database
- Laravel assportのキー生成
sudo -u www-data php artisan firefly-iii:laravel-passport-keys
アップグレード反映・確認
- Webサービス再起動
sudo systemctl restart apache2.service
- Webサービス再起動確認
systemctl status apache2.service
- アップデート確認
- アップデートを行ったfirefly-iiiサイトにブラウザでアクセスします。
- ログインできることを確認します。
- バージョンが上がっていることを確認します。
- 登録操作などができることを確認します。
アップデート後の処理:mysqldumpの削除
- バックアップしたDBの削除
cd /hoge && pwd
mysqldumpを実行したディレクトリに移動します。
- dump削除
rm DB_Backup.$(date +%Y%m%d).sql
- バックアップ削除確認
head -100 DB_Backup.$(date +%Y%m%d).sql
ファイルが読めないことを確認します。
アップデート後の処理待避させたディレクトリの削除
- 削除前:待避ディレクトリ確認
ls -ld /home/www-data/firefly-iii.$(date +%Y%m%d)
ディレクトリがあることを確認します。(自分の環境に合わせます。)
- 待避させたディレクトリの削除
[ -d "/home/www-data/firefly-iii.$(date +%Y%m%d)" ] && sudo rm -rf "/home/www-data/firefly-iii.$(date +%Y%m%d)"
それぞれ、待避させたディレクトリであることを入念に確認してから行ってください。
- 削除前:待避ディレクトリ確認
ls -l /home/www-data/firefly-iii.$(date +%Y%m%d)
ディレクトリがないことを確認します。