15
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ElixirAdvent Calendar 2022

Day 19

Phoenixサイト作成アラカルト

Last updated at Posted at 2022-12-11

はじめに

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サイト作成ノウハウについて
取りまとめました。
必要と感じたものがあれば、適宜更新したいと思います。

15
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?