タグ: firefly iii

Ubuntu 20.04で動いていたfirefly-iiiをUbuntu24.04にデータ移行。

Linuxで動く財務管理システムfirefly-iii。

Ubuntu 24.04で動くことを確認したので、20.04からのデータを移行しました。(自分の手順では)

環境

移行前

  • Ubuntu 20.04
  • PHP 8.1
  • firefly-iii 5.7.9

移行先

  • Ubuntu 20.04
  • PHP 8.3
  • firefly-iii 6.1.16

その他はApache、MySQL環境です。

さっくりとした(?)手順

  1. 移行先のfirefly-iiiを構築します。
  2. 移行前のSQLダンプファイルを取得します。
  3. 移行先でダンプファイルをインポートします。
  4. 動作を確認します。

【移行先】firefly-iiiを構築します。

方法はこちらです。

【移行元】DBのダンプファイルを取得します。

  • ディレクトリ移動
cd /hoge && pwd

任意のディレクトリを指定します。

  • ダンプファイル取得
mysqldump -u firelfy -p --no-tablespaces --single-transaction firefly > firefly_$(date +%Y%m%d).sql

-u DBユーザー >の左のfireflyはDB名です。自分の環境に合わせます。

  • パスワードを入力してもファイルが取得できないときは?

パスワードに!などの特殊文字が入っていると羽の肥えるパターンがあります。passwdといったファイルを作成し、以下のように記入します。

[mysqldump]
user=DBユーザー
password=''

※パスワードはシングルクォーテーションで囲みます。

こちらのファイルを作った上で、

mysqldump --defaults-extra-file=passwd --no-tablespaces --single-transaction firefly > firefly_$(date +%Y%m%d).sql

実行します。 このpasswdファイルは作業後に削除します。

  • ファイル取得確認
head -50 firefly_$(date +%Y%m%d).sql

ダンプファイルの内容が見られることを確認します。

このダンプファイルを任意の安全な方法で移行先にコピーします。

【移行先】DBのインポートを行います。

  • ディレクトリ移動
cd /hoge && pwd

ダンプファイルを転送したディレクトリを指定します。

  • DBインポート
mysql -h localhost -u firefly -p firefly < firefly_$(date +%Y%m%d).sql 

ユーザ名やDB名は自分の環境に合わせます。

  • Webサービス(Apache)再起動
sudo systemctl restart apache2.service
  • サービス再起動確認
systemctl status apache2.service

active(running)を確認します。

動作の確認を行います。

移行先のfirefly-iiiをインストールしたドメインにアクセスして

  • 移行元のアカウントで認証できること
  • 移行元のデータが確認できること
  • データの検索や登録ができること

を確認できればOKです。

作業の後処理を行います。

  • ディレクトリ移動
cd /hoge && pwd

ダンプファイルを転送したディレクトリを指定します。

  • ダンプファイル削除
sudo rm firefly_$(date +%Y%m%d).sql 

必要に応じて、移行元サイトの閉鎖を行います。

Ubuntu24.04にfirefly-iiiをインストール。(php8.3対応版)

ここから施行を繰り返し、「結局、Ubuntu24.04でなければ動かないだろう」という結論。

無事にインストールできたので、その記録です。

環境

以下、既に構築済みという状況です。

そして、以下を準備済みです。

  • サイトにアクセスするドメインとDNS登録
  • 上記に沿った適切な証明書

さっくりとした手順

  1. プログラムをダウンロードします。
  2. composerでインストールします。
  3. DBを作成します。
  4. .envを設定します。
  5. DBのマイグレーションを行います。
  6. ログファイルの格納ディレクトリを設定します。
  7. ApacheでWebサーバの設定を行います。
  8. アクセスを確認します。

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」をクリックします。

続いて初期設定(メインバンクや通貨、言語の指定など)完了後、ダッシュボードが出てくればインストール完了です。

検証:firefly-iii v6.1.0をUbuntu 20.04にインストール(失敗)

概要

PHPもDBも入っていない検証機があったので、Firefly iii 6系を入れようとしましたが、失敗しました。

以下は失敗の記録です。

環境

  • Ubuntu 20.04
  • Nginx

結論

php8.3-bcmatchがインストールできないことによるComposerエラーです。

やってみた手順

1.Postgresqlのインストール
1.PostgresのDB作成
1.PHPのインストール
1.composerのインストール
1.firefly iiiの配置
1.Composerによるインストール

PostgreSQLのインストール

  • パッケージアップデート
sudo aptitude update
  • PostgreSQLインストール
sudo aptitude install postgresql postgresql-contrib
  • PostgreSQLの軌道確認
 systemctl status postgresql.service 

Active: active (exited) を確認します

PostgreSQLのDB作成

  • コンソールログイン
sudo -u postgres psql
  • DBとユーザ作成
CREATE DATABASE firefly;
CREATE USER firefly_user WITH PASSWORD 'your_password';
ALTER ROLE firefly_user SET client_encoding TO 'utf8';
ALTER ROLE firefly_user SET timezone TO 'Asia/Tokyo';
GRANT ALL PRIVILEGES ON DATABASE firefly TO firefly_user;
quit

パスワードはポリシーに沿って適切なものを指定します

PHP8.3インストール

  • リポジトリ追加
sudo aptitude install software-properties-common

sudo curl -sSLo /usr/share/keyrings/deb.sury.org-php.gpg https://packages.sury.org/php/apt.gpg

sudo sh -c 'echo "deb [signed-by=/usr/share/keyrings/deb.sury.org-php.gpg] https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list'
  • パッケージアップデート
sudo aptitude update
  • PHP8.3インストール
sudo aptitude install php8.3 php8.3-cli php8.3-fpm php8.3-pgsql php8.3-xml php8.3-mbstring php8.3-gd 
  • バージョン確認
php -v

8.3系であることを確認します。

Composerインストール

cd /hoge
# 任意の作業ディレクトリに移動します
sudo php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
sudo php composer-setup.php
sudo mv composer.phar /usr/bin/composer
  • パス確認
which composer

/usr/bin/composerにあることを確認します

  • バージョン確認
composer --version

2023/12/23現在、2.6.6でした

プログラム配置

  • ディレクトリ移動
cd /var/www/html/ && pwd

任意の公開用ディレクトリを指定します

  • gitでファイル取得
sudo -u www-data git clone https://github.com/firefly-iii/firefly-iii.git
  • ディレクトリ移動
cd firefly-iii && pwd

※失敗:Composerでインストール※

sudo -u www-data composer install --no-dev --prefer-dist

以下のエラーが出て来ました。

Installing dependencies from lock file
Verifying lock file contents can be installed on current platform.
Your lock file does not contain a compatible set of packages. Please run composer update.

  Problem 1
    - Root composer.json requires PHP extension ext-bcmath * but it is missing from your system. Install or enable PHP's bcmath extension.
sudo apittude install php8.3-bcmatch

としてもプログラムは見つからず。

まずは記録として遺しておきます。

今後の展望

Ubuntuそのもののバージョンアップを見据えて動きます。

Firefly III とGmail連携

概要

インストールが完了したFirefly iiiと、Gmailを連携させていきます。

基本的にRedmineのGmail連携と同じ手順でした。

前提

https://atelier.reisalin.com/projects/zettel/knowledgebase/articles/22

に従って、アプリパスワードを設定していることが条件です。

※Googleアカウントにフルアクセス可能なパスワードのため、取り扱いは注意してください。※

手順

ディレクトリ移動

cd /home/www-data/firefly-iii &&pwd

自分がインストールしたディレクトリを指定します。

ファイル編集

  • .env

以下の箇所を変更して保存します。

MAIL_MAILER=smtp
MAIL_HOST=[googleから指定されたメールアドレス]
MAIL_PORT=587
MAIL_FROM=[Gmailアドレス]
MAIL_USERNAME=[Gmailアドレス]
MAIL_PASSWORD=[アプリパスワード]
MAIL_ENCRYPTION=true

設定反映

sudo systemctl restart apache2.service

自分がインストールしているWebサービスを利用します

設定確認

  1. firefly-iiiのサイトにアクセスします。
  2. ログインします。
  3. 管理>メッセージを送信をクリックします。
  4. メールが送信されていれば設定完了です。

Firefly III をローカルサーバにインストール。(PHP8.1対応版)

概要

家計簿的なシステムをオープンソースで作れないものかと思っていたところ、

https://www.firefly-iii.org/

というシステムを発見しました。

無事に動かすことができたので、メモを残します。

インストールの前に

このシステムは、ローカル環境で利用することを強くお勧めします。(金融情報を記録するため)

環境

以下、既に構築済みという状況です。

  • Ubuntu 20.04
  • Apache 2.4
  • MySQL 8.3
  • PHP 8.1
  • Composer 2.6.5

そして、以下を準備済みです。

  • サイトにアクセスするドメインとDNS登録
  • 上記に沿った適切な証明書

さっくりとした手順

  1. プログラムをダウンロードします。
  2. composerでインストールします。
  3. DBを作成します。
  4. .envを設定します。
  5. DBのマイグレーションを行います。
  6. ログファイルの格納ディレクトリを設定します。
  7. ApacheでWebサーバの設定を行います。
  8. アクセスを確認します。

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;
CREATE USER 'firefly'@'localhost' IDENTIFIED BY 'パスワード';
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

※ドメイン名や証明書の格納場所は自分の環境に合わせてください。

<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)"

設定反映

  • 設定反映
sudo a2ensite firefly-iii.conf
  • Webサービス再起動
sudo systemctl restart apache2

インストール確認

設定したURLにアクセスします。(ここではbank.example.com)

  • Email address
  • パスワード(16文字以上)

を設定して、「Register」をクリックします。

続いて初期設定(メインバンクや通貨、言語の指定など)完了後、こちらのダッシュボードが出てくればインストール完了です。

使い勝手やカスタマイズは改めて報告します。

Powered by WordPress & Theme by Anders Norén