Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/msyk/imapp_account

Accounting Web Application for Japanese Freelance Workers.
https://github.com/msyk/imapp_account

account inter-mediator sqlite webapp

Last synced: about 2 months ago
JSON representation

Accounting Web Application for Japanese Freelance Workers.

Awesome Lists containing this project

README

        

# IMApp_Account(IM会計)をコンテナ方式で運用

IM会計をコンテナで運用する場合のセットアップや利用方法について説明します。
ともかく、Dockerでなるべく何もしないで動かしたいという場合と、サーバ上での運用を想定しました。
前者の場合は、構築にちょっと時間がかかるのでサクっとは行きませんが、コマンド1つで稼働します。
サーバで本格的な運用をする場合は、少なくとも認証をする必要はあると思われるので、いくらかの改造が必要になります。

新居雅行 ([email protected])

## 稼働のための手順と稼働結果

Docker Desktopなど、Dockerが稼働する状況で、このレポジトリをクローンして、コンテナ構築のコマンドを入れてください。以下はその例です。
```
git clone https://github.com/msyk/IMApp_Account
cd IMApp_Account
docker compose up -d --build
```
PHPのビルドにちょっと時間が係、15分くらいかかると思います。
これで、PHPが稼働するUbuntu Serverが「php-apache_im_account」というコンテナで稼働します。
このコンテナ内にはPHPをセットアップするとともに、INTER-MediatorやIM会計も全てインストールされた状態になります。
IM会計自体もコンテナ内部にクローンされています。
言い換えれば、前述のクローンしたレポジトリのファイルを変更しても、Webアプリケーション側は反映されません。

また、MySQLにスキーマを適用したデータベースが、「mysql_im_account」というコンテナで稼働します。
データベース自体は、前述のクローンしたレポジトリの```/docker/mysql/db```ディレクトリに保存されています。
データベースのファイルはコンテナから外出ししてあるので、コンテナ自体を消去しても、データファイルは基本的には残ります。
ただし、データファイルは、```.gitignore```に含まれているので、そのままではレポジトリへは記録されません。

## アプリケーションの開始
既定値では、php-apache_im_accountコンテナは、8088番ポートを開いています。
同じMac/PC等のブラウザで「 http://localhost:8088/ 」を開くと、アプリケーションにアクセスできます。

## Setup for S3

続いてAmazonのクラウドサービスAWS内に構築するストレージ「S3」に請求書・納品書・領収書などの関連帳票類を収める仕組みを構築します。

IM会計に必要な情報は、privateディレクトリに ```aws_settings.php``` というファイルを作ってそこに記述します。
つまり、php-apache_im_accountコンテナの```/var/www/html/private```というディレクトリに ```aws_settings.php``` ファイルを作成します。
このファイルにS3のアカウント情報などを保存などを保存します。
ファイル内容の詳細は、```/private```ディレクトリにある```README.md```ファイルを読んでください。

S3側では、IAMサービスでS3のフルアクセス機能を持ったユーザを作っておく必要があります。
また、S3には帳票のファイルデータを保存するためのバケットを用意します。
バケット名は```/private```ディレクトリ内に作る```aws_settings.php```というファイル内で指定する ```$rootBucket``` と同じものを設定してください。

なお、S3のセットアップをしない場合は、ファイルのアップロードはできませんが、会計記録の作業は可能です。

### S3に関して

S3はクラウド上にファイル保存できる仕組みで、税務書類など長期間に渡って参照されることなく保存しておくだけといった利用形態ならきわめて低料金で利用できます。
青色申告に使った帳票類は7年間、法人の場合は帳票によって10年間の保存義務がありますが、その間ほとんどダウンロードして表示させることはありません。
こうした利用形態にはうってつけの仕組みです。
改正電子帳簿保存法ではタイムスタンプの付与などに関して大幅に条件が緩和されましたが、
緩和の条件としてクラウド上に保存した帳票の追加や訂正などが生じた時にその履歴が記録されるシステムであることという要件が加わりました。
S3はそうした操作記録がすべて残される上に、訂正する前のファイルも復元してダウンロードできます。
これらの機能により、立入り税務調査などの場合にも対応できるシステムを構築できます。

## データベースに対する処理

ダイレクトホスト形式の場合には、コマンドでバックアップ等をできるようにしていましたが、コンテナ方式ではそれはサポートされていません。
独自に、mysqldump等でテキストファイルにSQLダンプを取るなどの仕組みを構築してください。
また、コンテナ方式では、スキーマのアップデートには対応しない予定です。

## 「IM会計」アップデートの作業

IMApp_Accountのレポジトリをクローンして運用している場合、php-apache_im_accountコンテナで、```/var/www/html```をカレントディレクトリにして、
```composer update```コマンドを実行すれば、INTER-Mediatorを含むPHPやJavaScriptのライブラリを更新します。

## 独自のレポジトリでの運用

このレポジトリはパブリックなので、当然ながらセンシティブな情報はここにはアップロードできません。
このレポジトリがプライベートであることで問題が解決するなら、GitHubのテンプレート機能を使ってみましょう。
プライベートなレポジトリであれば、もしあなたが気にしないのであれば、プライベートな情報を保持できます。
例えば、データのバックアップや独自のページを追加できます。
一方、そのようにすると、オリジナルのレポジトリは切り離され、オリジナルのレポジトリへの更新結果を反映させるのは難しくなる点は注意が必要です。

- プライベートなレポジトリを作成するには、このレポジトリのトップページにある「Use this Template」をクリックして、レポジトリを作ります。
- 作ったレポジトリを、クローンして利用してください。もちろん、変更結果は自由にプッシュして保存しておきます。
- 作成したファイルなどをレポジトリ側に反映させるために、```.gitignore```ファイルの記述を見直してください。

レポジトリにプライベートな情報を保存するのは安全でしょうか? 
この問いへの回答は確かに難しいのですが、少なくとも管理の甘いオンプレミスなサーバよりよほど安全ではないでしょうか。

独自のレポジトリで運用する場合には、次のような変更を手作業で行ってください。

- ```/docker/php-apache/Dockerfile``` に関して、おそらく24行目くらいになりますが、レポジトリをクローンする箇所があります。
レポジトリのURLが ```https://github.com/msyk/IMApp_Account``` になっていますが、このURLを自身のレポジトリのURLに変更してください。
**この変更は必須です。**
- S3へ帳票類を保存するために```/private/aws_settings.php```を作成します。
そのような追加ファイルを管理するためには、独自レポジトリを運用するのがベストプラクティスです。

## サーバでの運用

サーバでの運用には、いくつか修正が必要です。そのためにも、独自のレポジトリで運用することが求められます。

### MySQLのパスワード

MySQLのデータベース定義は、```/docker-compose.yaml``` ファイルに記述されています。
そこに、rootのパスワードや、データベース運用のためのパスワードが記載されています。
dbコンテナのenvironmentの箇所です。
これらについては、独自のレポジトリ側でパスワードを書き換えれば良いでしょう。
データベース運用ユーザとパスワードについては、```/lib/params.php```と設定を合わせる必要があります。

### 認証機能のアクティベート

サーバで運用するには、各ページで認証が必要です。そのために、定義ファイルの以下の部分のコメントを外します。

```php
[
// 'authentication' => [
// 'authexpired' => '7200',
// 'storing' => 'credential',
// ],
],
```

この記述があるファイルは以下の通りです。

- /index_contexts.php
- /Master/master_contexts.php
- /Print/invoice.php
- /Summary/contexts.php
- /Summary/editlog.php

初期データベースには、 ユーザ名「account」、パスワード「Leyc291#B」というユーザが登録されているので、そのユーザでログインができるはずです。
もちろん、運用時には即座にパスワードは変更してください。

最初にそのユーザでログインできれば、パスワードの変更も可能です。
ユーザが一人ならそれでもいいのですが、数人分のアカウントを発行するには、ユーザ管理ページが欲しいところです。
そのサンプルは、INTER-Mediatorの/samples/Auth_Supportにありますので、そちらを参考にして構築してください。

## 謝辞

- haya-san ドキュメントの監修ありがとうございます。