umami.is を FreeBSD12 にセットアップ
By takagiwa on Wednesday, January 20 2021, 21:26 - umami - Permalink
umami.is を FreeBSD12 にセットアップした。
環境は、FreeBSD 12.1-RELEASE-p11 上の jail (qjail で構築) 、node-15.6.0、npm-6.14.8、mysql57-client-5.7.32。
jail の host 側で nginx でリバースプロキシを構成。mysql サーバーは別の jail に。
最初は pkg で環境を整えたものの、色々なエラーがあったので、ひとまず ports からインストールした。
qjail の場合、ports ファイルで色々なものが REFUSE されているので、/usr/local/etc/qjail.portsnap.conf で、ローカライズ関係以外は REFUSE から除外して qjail update -p
>pkg (pkg をセットアップ) >pkg install ca_root_nss (ports の make がエラーになるので入れた) >cd /usr/ports/ports-mgmt/portupgrade >make >make install >rehash >make clean
で portinstall を入れる。
- www/node
- www/npm
- devel/git
- graphics/vips
- databases/mysql57-client
- sysutils/direnv
このあたりを portinstall でインストール。
adduser でユーザー umami を追加。umami で作業。シェルは tcsh 。
% git clone https://github.com/mikecao/umami.git % cd umami % npm install added 1894 packages from 932 contributors and audited 1900 packages in 138.58s 164 packages are looking for funding run `npm fund` for details found 0 vulnerabilities
ここまでとりあえず通った。
DB サーバーにアクセスしてデータベースを作る。
次に DBにアクセスするためのファイル umami/.env を作る。スキーマを流し込む。
% cat .env DATABASE_URL=mysql://DBユーザー名:パスワード@DBサーバーのIPアドレス:DBサーバーのポート/DB名 HASH_SALT=塩 % mysql -u DBユーザー名 -p DB名 -h DBサーバーのIPアドレス < sql/schema.mysql.sql
問題の、ビルド。
% npm run build ... Warning Precompiled binaries are not available for freebsd12. Read more about building your own binaries at https://pris.ly/d/build-binaries > Downloading Prisma engines for freebsd12 [ ] 0%Error: Not Found https://binaries.prisma.sh/all_commits/5d491261d382a2a5ffdc71de17072b0e409f1cc1/freebsd12/migration-engine.gz npm ERR! code ELIFECYCLE npm ERR! errno 1 npm ERR! umami@1.11.0 build-db-client: `dotenv prisma generate` npm ERR! Exit status 1 npm ERR! npm ERR! Failed at the umami@1.11.0 build-db-client script. npm ERR! This is probably not a problem with npm. There is likely additional logging output above. ... npm ERR! A complete log of this run can be found in: npm ERR! /home/webmanage/.npm/_logs/2021-01-20T02_28_06_971Z-debug.log
ということで、DB にアクセスする prisma のバイナリが FreeBSD 用に提供されていないのが問題らしい。
なので、prisma をビルドしてみる。
% cd .. % git clone https://github.com/prisma/prisma-engines % cd prisma-engines % cargo build % ls target/debug/ query-engine migration-engine introspection-engine prisma-fmt 等々
ビルドはできたものの、エラーにあった
npm ERR! umami@1.11.0 build-db-client: `dotenv prisma generate`
prisma という実行ファイルが無い。
Under the hood このあたりによると、環境変数で指定するらしい。
% setenv PRISMA_QUERY_ENGINE_BINARY /usr/home/umami/prisma-engines/target/debug/query-engine % setenv PRISMA_MIGRATION_ENGINE_BINARY /usr/home/umami/prisma-engines/target/debug/migration-engine % setenv PRISMA_INTROSPECTION_ENGINE_BINARY /usr/home/umami/prisma-engines/target/debug/introspection-engine % setenv PRISMA_FMT_BINARY /usr/home/umami/prisma-engines/target/debug/prisma-fmt
というわけで再度ビルド
% cd ~/umami/ % npm run build ... Warning Precompiled binaries are not available for freebsd12. Read more about building your own binaries at https://pris.ly/d/build-binaries Prisma schema loaded from prisma/schema.prisma Warning Precompiled binaries are not available for freebsd12. Read more about building your own binaries at https://pris.ly/d/build-binaries Warning Precompiled binaries are not available for freebsd12. Read more about building your own binaries at https://pris.ly/d/build-binaries ? Generated Prisma Client (2.14.0) to ./node_modules/@prisma/client in 1.37s You can now start using Prisma Client in your code. Reference: https://pris.ly/d/client ``` import { PrismaClient } from '@prisma/client' const prisma = new PrismaClient() ``` warn Prisma 2.12.0 has breaking changes. You can update your code with `npx @prisma/codemods update-2.12 ./` Read more at https://pris.ly/2.12 ... λ (Server) server-side renders at runtime (uses getInitialProps or getServerSideProps) ○ (Static) automatically rendered as static HTML (uses no initial props) ● (SSG) automatically generated as static HTML + JSON (uses getStaticProps) (ISR) incremental static regeneration (uses revalidate in getStaticProps)
ということで、prisma のバージョン違いによる Warning はあるものの、エラー無く終わったように見える。
起動してみる。
% npm start > umami@1.11.0 start /usr/home/umami/umami > next start Loaded env from /usr/home/umami/umami/.env ready - started server on http://localhost:3000
これでひとまず起動できた。また他のサイトに Tracking code を埋め込んで、認識もしてくれた。
.env ファイルには、上の環境変数を入れてもよい。
% cat .env DATABASE_URL=mysql://DBユーザー名:パスワード@DBサーバーのIPアドレス:DBサーバーのポート/DB名 HASH_SALT=塩 PRISMA_QUERY_ENGINE_BINARY=/usr/home/umami/prisma-engines/target/debug/query-engine PRISMA_MIGRATION_ENGINE_BINARY=/usr/home/umami/prisma-engines/target/debug/migration-engine PRISMA_INTROSPECTION_ENGINE_BINARY=/usr/home/umami/prisma-engines/target/debug/introspection-engine PRISMA_FMT_BINARY=/usr/home/umami/prisma-engines/target/debug/prisma-fmt