はじめに
naritomoと申します。
本記事ではPhoenixサイトにおける以下の作業について
提示したいと思います。
- githubサイトからのソース入手方法
- github初期登録方法
- github複数アカウントでのssh鍵切り替え方法
- DB切り替え機能実装
- gigalixirデプロイ
- gifalixirサイト削除
前提作業
以下のサイトを参照し、サイト完成してること。
Elixir/Phoenixをdocker環境で立ち上げてみる。
githubサイトからのソース入手方法
githubからとあるソースをcloneではなくDLで取得したい場合、
以下のコマンドを入力する。
curl -L -o temp.zip <githubでのソース圧縮ファイルDL URL>
unzip temp.zip
rm temp.zip
mv <解凍フォルダ名> testsite
cd testsite
github初期登録
新しいターミナルを立ち上げ、作成したフォルダに移動
cd elixir-docker-db/apps/testsite
gitローカルリポジトリ作成
*初期サイト作成した場合でも、以下の作業までは行っておくとよい。
作業の途中でコミットかけておけば、いざという時に
コミット時点に戻すことが可能。
*特定のコミットポイントへの戻し方や、ブランチの建て方/結合などの
手順はここでは割愛。
初回時:
git init
git config --local user.name [name]
git config --local user.email [email]
git add .
git commit -m "first commit"
git branch -M main
[name]は自身のユーザ名,[email]は自身のメールアドレスを入れる。
2回目以降:
git add .
git commit -m "コミットコメント"
github管理画面にて、リモートリポジトリ作成
作成手順は割愛
httpsの場合はトークン作成,sshの場合はssh鍵の登録を実施すること。
github初期登録
以下はsshの場合。
git remote add origin git@github.com:"githubユーザ名"/"リポジトリ名".git
git push -u origin main
.gitignoreファイル(git対象外登録)更新後の操作について
一旦登録したモジュールについて、.gitignoreを更新しても
git内の登録情報に残るため、以下のコマンドでキャッシュの削除を実施すること。
git rm -r --cached .
この後、リモートリポジトリのモジュールを削除すること。
github複数アカウントでのssh鍵切り替え方法
githubアカウント毎にssh鍵をそれぞれ作成し、
公開鍵をgithubに登録していること。
sshファイルについてユーザ名を入れて別ファイルにすること。
ssh鍵作成方法
cd ~/.ssh
ssh-keygen -t rsa
過去にSSH鍵を作成している場合、既存のSSH鍵をリネームするか、
退避させること。
ただし、1回目のエンターキーを押す前に名前を指定することで、
別名の鍵ができます。
何か聞かれたときに何もせず3回エンターを押せば、
id_rsa(秘密鍵)とid_rsa.pub(公開鍵)の2つの鍵が生成されます。
すでにある場合は上書きされるため、注意すること。
ssh設定の実施
vi ~/.ssh/config
Host github.<sshアカウント名>.work #接続先ホスト名
HostName github.com
User git
Port 22
IdentityFile ~/.ssh/id_rsa_<ssh鍵作成指定名> #対象アカウントのssh秘密鍵
TCPKeepAlive yes
IdentitiesOnly yes
push先の変更
初回の登録の場合、push先のURLを以下のように変更する。
git remote add origin git@github.<sshアカウント名>.work:<githubアカウント名>/<リポジトリ名>.git
DB切り替え機能実装
コンテナ立ち上げ・ログイン
cd elixir-docker-db
sudo bin/start.sh
sudo bin/login.sh
cd testsite
DB切り替えシェル作成
mysql→postgresql切り替えシェル作成
その後本ファイル名のシェルを動かすと切り替えられる。
vi priv/use_postgresql.sh
sed -i -e 's/:myxql/:postgrex/' mix.exs
sed -i -e 's/MyXQL/Postgres/' lib/testsite/repo.ex
sed -i -e 's/username: "root"/username: "postgres"/' config/dev.exs
sed -i -e 's/password: "root"/password: "postgres"/' config/dev.exs
sed -i -e 's/hostname: "mariadb"/hostname: "postgres"/' config/dev.exs
sed -i -e 's/username: "root"/username: "postgres"/' config/test.exs
sed -i -e 's/password: "root"/password: "postgres"/' config/test.exs
sed -i -e 's/hostname: "mariadb"/hostname: "postgres"/' config/test.exs
mix deps.get
postgresql→mysql切り替えシェル
vi priv/use_mariadb.sh
sed -i -e 's/:postgrex/:myxql/' mix.exs
sed -i -e 's/Postgres/MyXQL/' lib/testsite/repo.ex
sed -i -e 's/username: "postgres"/username: "root"/' config/dev.exs
sed -i -e 's/password: "postgres"/password: "root"/' config/dev.exs
sed -i -e 's/hostname: "postgres"/hostname: "mariadb"/' config/dev.exs
sed -i -e 's/username: "postgres"/username: "root"/' config/test.exs
sed -i -e 's/password: "postgres"/password: "root"/' config/test.exs
sed -i -e 's/hostname: "postgres"/hostname: "mariadb"/' config/test.exs
mix deps.get
シェル実行
sh priv/use_postgresql.sh
sh priv/use_mariadb.sh
シェル稼働後のDB反映操作
mix ecto.reset
*初回のみ実施。データが消えてしまうことに注意。
サービス立ち上げ
以下のコマンドを入力し正常に立ち上がること。
mix phx.server
DB切り替え後にWEB立ち上げ時動かないとき
*could not find Ecto.Adapters.Postgres.Connectionが発生したとき、
以下のコマンドを実施する。
$ mix deps.clean --all
$ mix do deps.get, compile
gigalixirデプロイ
*DBはpostgresqlで作っていること。
*作業対象フォルダに対し、git commitしていること。
*作業前にbranchからmainにマージすること。(別ブランチで作成している場合)
*mainに切り替えておくこと。(別ブランチで作成している場合)
*gigalixirサイトで登録を実施しておくこと。
https://www.gigalixir.com/
*無料プランの場合、appが1つしか立ち上げられない。
*デプロイするたびにソース自体更新しておく必要がある。
2回目以降のデプロイは,1→7(9)→10の作業でデプロイ可能
コンテナ自体再立ち上げした際は全項目実施。
本作業はホスト側で実施すること。
1 gigalixirCLIインストール(gigalixirコマンド使えない場合)
sudo apt-get update
sudo apt-get install -y python3 python3-pip git-core curl
pip3 install gigalixir --user
*失敗した場合
--------------------------------------------
pip3 show cryptography
Location:を確認し、その中に入る該当名フォルダを削除
pip3 install --upgrade pip
pip3 install gigalixir --user
--------------------------------------------
echo 'export PATH=~/.local/bin:$PATH' >> ~/.bash_profile
source ~/.bash_profile
gigalixir
→コマンドが使えることを確認する。
2 gigalixirログイン設定(すでに設定済みの場合不要)
*下記コマンドはtestsiteフォルダ内でおこなうこと。
gigalixir login
→gigalixirユーザ・パスワードを入力する。
→yを選択する。
gigalixir account
3 gigalixirアプリ作成
gigalixir create -n {unique_name}
gigalixir apps
→unique_nameを控える。
4 DB作成(必要に応じ)
gigalixir pg:create --free -a {unique_name}
→yを選択する。
5 デプロイソース準備(初回のみ)
コンテナログインして、アプリフォルダに入り作業する。
elixir -v
node -v
→バージョン情報を控える。
echo "elixir_version=1.12.3" > elixir_buildpack.config
echo "erlang_version=24.0" >> elixir_buildpack.config
echo "node_version=14.17.6" > phoenix_static_buildpack.config
vi config/prod.exs
12行目あたり。
config :piyopiyoex3_sample_portfolio, Piyopiyoex3SamplePortfolioWeb.Endpoint, cache_static_manifest: "priv/static/cache_manifest.json"
↓ 書き換える
config :sample_portfolio, SamplePortfolioWeb.Endpoint,
url: [host: "{アプリのunique_name}.gigalixirapp.com"],
check_origin: ["//{アプリのunique_name}.gigalixirapp.com"],
cache_static_manifest: "priv/static/cache_manifest.json"
Phoenix1.6以降の場合
以下のファイルを作成する。
assets/package.json
{
"scripts": {
"deploy": "cd .. && mix assets.deploy && rm -f _build/esbuild"
}
}
作業実施後、コンテナから抜けること。
6 git準備
対象フォルダのgitを作成していない場合:
git init
git add .
git commit -m "first commit"
git branch -M main
対象フォルダのgitを作成していた場合:
git add .
git commit -m "gigalixir commit"
リモートリポジトリ登録:
gigalixir git:remote {unique_name}
git remote -v
→gigalixir登録がされていること。
7 appデプロイ
git push -f gigalixir main
→エラーなく動くこと。
8 ssh公開鍵設定(DBを使う場合、初回(コンテナ立ち上げ時)のみ)
ssh-keygen -t rsa
→すべての問いに対し[Enter]をする。
→別の作業などですでにssh鍵を作成している場合必要ない。
(cat ~/.ssh/id_rsa.pubで参照できる場合。)
cat ~/.ssh/id_rsa.pub
→表示されるssh公開鍵文字列を控える。
→ファイルがない場合、前の手順に戻って作成すること。
gigalixir account:ssh_keys:add "【ssh公開鍵文字列】"
gigalixir account:ssh_keys
→公開鍵が表示されることを確認する。
→前使用したキーもある場合、管理画面から削除すること。
9 DBマイグレート(必要に応じ)
初回:
gigalixir run mix ecto.migrate
gigalixir run mix run priv/repo/seeds.exs
2回目以降:
gigalixir run mix ecto.reset
gigalixir logs
→DBの状況を確認する。
10 サイト確認
gigalixir ps
→アプリのステータスがHealthyになること。
gigalixir open
→出てきたURLのサイトを参照できること。
gigalixirサイトからURL参照可能。
場合によっては自動的にブラウザが立ち上がり参照できる。
gigalixirサイト削除
*予めgigalixirコマンドを使用できるようにすること。
(1 gigalixirCLIインストール参照)
1 appステータス確認
gigalixirサイトでapp,DB状態を確認する。
https://www.gigalixir.com/
アプリ名(unique_name)を控える。
2 DB削除(DB利用の場合)
gigalixir ps:scale --replicas=0 -a {unique_name}
gigalixir管理画面からDBを削除する。
コマンドから消す場合:
gigalixir pg -a {unique_name}
→idを控える
gigalixir pg:destroy -d {id} -a {unique_name}
→yを選択する。
gigalixir管理画面にてDB削除されていることを確認する。
3 app削除
gigalixir ps:scale --replicas=0 -a {unique_name}
→2の作業をしていない場合、上記のコマンドを入力。
gigalixir管理画面からappを削除する。
コマンドから消す場合:
gigalixir apps:destroy -a {unique_name}
→yを選択する。
gigalixir管理画面にてapp削除されていることを確認する。
4 gitリポジトリ設定削除
git remote remove gigalixir
git remote -v
→gitのgigalixir登録が消えていること。
おわりに
現在把握しているPhoenixサイト作成ノウハウについて
取りまとめました。
必要と感じたものがあれば、適宜更新したいと思います。