🍊
Pleasanter With Finch on M2 Macbook Air
2022 個人アドベントカレンダー の記事です。
課題感
- 2022/12 現在、プリザンターを限界まで使いこなそうとすると SaaS では厳しい。
- 拡張 SQL 、拡張 HTML 、拡張サーバスクリプトといった "拡張*" を実装するには、ファイルアクセス(ホスティングされている環境への OS レベルアクセス)が必要
- ログ(SysLogs)の参照・取得のためにデータベースへの直接アクセスが必要
- → ホスティング自体を委託できる(*1)としても、純粋な SaaS ではない
- 逆に、オンプレミス環境でやる == ファイルでなければならない実装がしたいとき
- → そこまでの要件があるか、は見極めが必要
- この前提で開発者として欲しい環境
- ファイルを触れる環境
- → ファイルを触らなくてよいなら、検証はデモサイトで十分
- サイトパッケージという設定の可搬性を強力に担保する機能 → ノーコードツールの GUI 設定の辛みへの現実解
- → 過去の Docker 環境での公開事例は、いずれもコンテナのファイルシステムに閉じていた(*2)
⇒ アドベントカレンダーの最初の一手として、環境構築する
Install Finch
公式には、リリースパッケージを入れろと言っているが、既に homebrew の formulae があるので。
❯ brew install finch
❯ finch vm init
INFO[0000] Using default values due to missing config file at "/Users/papinianus/.finch/finch.yaml"
INFO[0000] "/Users/papinianus/.finch" directory doesn\'t exist, attempting to create it
INFO[0000] binaries directory doesn\'t exist
INFO[0000] Requesting root access to finish network dependency configuration
Password:
INFO[0006] sudoers file not found: %!w(*fs.PathError=&{open /etc/sudoers.d/finch-lima 2})
INFO[0006] Initializing and starting Finch virtual machine...
INFO[0200] Finch virtual machine started successfully
- もし、以前に入れてたら
sudo /Applications/Finch/uninstall.sh
でアンインストール
フォルダ構造
Docker の設定ファイルは以下のようなかたちで構成。
- /galapagos
- /pleasanter
- docker-compose.yml
- /postgres
- Dockerfile
- /web
- Dockerfile
- /pleasanter
- /pleasanter
/web/pleasanter
には、あらかじめ最新バージョンのリリースを展開しておきます。
設定ファイル
細かくは レポジトリ にて。
- 気にしなかったところ
- データベースパスワード
- Pleasanter のアプリファイルはクライアントから見える場所に置くので、直接設定する。環境変数とか Dockerfile での Rds.json のコピーとかは考えない。
- CodeDefiner
- コンテナに入って実行する想定
- → Dockerfile 内での RUN だと上手く実行できなかった。build 時にはコンテナには見えてないからか。
- 気にしたところ
- データベース
- ポートはホストに対して開放しない。こういう記事に惑わされるお気持ちユーザに対応するため。
-
pg_trgm
はエントリポイントの sql が実行される仕組み。15 なので public スキーマへの GRANT を設定。- DB は SQL ではなく、環境変数に書いておくと作成してくれるのに任せる。
- postgresql.conf を作ったけど、ログの書式だけだし、正直なくてもいいかも。
- DB は名前付きボリューム。
- アプリ
- 外から見えるようにバインドボリューム
- ポートは 80 だと macOS と干渉しそうだったので、デフォルトの 5000 で。
finch でのコマンド
とくに docker/docker-compose と比べて、違和感が大きくて困ることはない。
- 起動系
compose に -
がつかないが、それだけ。
finch compose build --no-cache # 設定を変えたので --no-cache したが、実際は up --build で十分
finch compose up -d
- 停止
down は docker-compose と同じだが停止は kill
finch compose kill
- その他、基本コマンド
# 動作状態の確認
finch ps
# ボリュームの確認
finch volume ls
# コンテナへのアクセス
finch exec -it web bash
ラップアップ
動作確認
- ログインの確認、テーブル・レコードの確認などざっくり調べて ok そう
- とりあえず、添付ファイルをアップロードして ↓ に一時ファイルが置かれること、それがホスト側から見えることを確認
❯ ll ~/galapagos/pleasanter/web/pleasanter/Implem.Pleasanter/App_Data/Temp
total 0
drwxr-xr-x@ 3 papinianus staff 96B 12 1 02:56 181AD90625B744DEB49ABD64EA314C52
drwxr-xr-x@ 3 papinianus staff 96B 12 1 02:56 21B9F11C181C4B81853B3660C9CCD712
おわりに
- Docker Desktop なくてもいけそう
- コンテナで作るとミドルウェアを入れなくていいのは楽だけど、プリザンターはシステム設定がファイルベースだからアップデートがしんどいのと、相殺されてる
- ToDo として、拡張スクリプトはこれまであまり試したことないのでやってみたさ。
参考にした情報
-
*1 Pleasanter のパートナーさんで Pleasanter on AWS というサービスはある。ホスティングの代行なので SaaS ではないかなと。
-
*2 Qiita でざっとみつけた記事たち
-
pleasanter+PostgreSQL+SSL+docker な構成を作ってみた(2022)
ここが出発点になる。1.2 系で更新止まってるので、いまいま誰しもが使える状態でないのは辛い。 -
Pleasanter1.3 を docker で構築してみた。
↑ の記事からの発展。zip もってくるかたちだし ssl とかなくていいならこれでよさげ。DB_EXTENSION とか EXPOSE とか謎設定が引き継がれているのはちゃんと設定見て欲しさ。 -
デモ用に Pleasanter1.2 + PostgreSQL 環境がサクッと作成できる docker-compose.yml を書いてみた!
2021 のアドベントカレンダーということで目についた。とりたてて見るべきものはない。
docker-compose.yml にtty: true
とあるが、今はstdin_open: true
が併置されないといけない。 -
プリザンター(クロスプラットフォーム版)を Docker 上で動かしてみた
みんなが公式と言う、パートナーさんの記事。SQL Server でやっている。 -
Docker(WSL2)で Pleasanter(SQLServer)環境を作成
WSL なので、プリザンターユーザに嵌りそうな環境。
-
pleasanter+PostgreSQL+SSL+docker な構成を作ってみた(2022)
finch 関係
最初、パッケージから入れるのかーと思って眺めてたけど、早々に homebrew にきてて、流石仕事が早い AWS さん。
pg 関係
- https://github.com/postgres/postgres/blob/master/src/backend/utils/misc/postgresql.conf.sample
-
https://github.com/postgres/postgres/blob/master/src/backend/libpq/pg_hba.conf.sample
postgres のデフォルト設定を参照。したせいでlisten '*'
がコメントアウトされててしばし悩んだ。 -
https://hub.docker.com/r/sameersbn/postgresql
古いバージョンでは DB_NAME, DB_EXTENSION が動作していたのか -
https://github.com/docker-library/postgres/blob/3bb48045b4dc5df24bf2271c679f7a4e9efcbe6e/14/alpine/docker-entrypoint.sh#L189
14 の時点で DB_NAME や DB_EXTENSION はない。POSTGRES_DB は"
付きで処理されるのでキャピタルを含むプリザンター DB もち -
Docker で作る postgres 環境
postgres の docker image は、docker-entrypoint-initdb.d 内に.sh ファイルを置いておくと起動時にその内容を実行してくれます
-
Postgres 公式 Docker イメージのパスワードの扱いについて
最初、認証が通らなくて調べてた。これを見て、POSTGRES_HOST_AUTH_METHOD
の環境変数にmd5
とか書くと pg_hba.conf に設定できることは分かったがそもそも listen してないだけだった。 -
Docker: PostgreSQL9.6 の container を立てる
ロケール設定のエラーの際に確認 -
PostgreSQL 15 では public スキーマへの書き込みが制限されます
そのような場合は、
GRANT CREATE ON SCHEMA public TO PUBLIC;
を実行しましょう。 -
【Mac/PostgreSQL】psql コマンドが使えないときの対処法
brew install postgresql
ってやると@14
がインストールされて psql にパスが通る。brew install postgresql@15
ってやるとこの記事のようにパスが通らないので、別途手動設定必要。バージョン違いあえて入れると考えると formulae の動きとしては合理的。
docker-compose.yml 関係
-
Docker コンテナをずっと起動しておく
Docker Compose では、docker run 時に-it オプションをつける代わりに、docker-compose.yml ファイルに、tty: true と stdin_open: true を書きます。
Discussion