Heroku
ここでも一部記載したが、再度記載。
●初期設定
・heroku toolbeltのインストール
●herokuアプリの作成方法 ~参考ページ~
(1) heroku用のディレクトリを作成し、移動後、サンプルプログラムを作成する。Herokuでは、アプリケーションごとにGitを使ってリモートリポジトリへプッシュする必要があるので、リポジトリを作成し、追加・コミットする。
touch index.php
touch composer.json
index.phpを修正
<?php
echo "Hello, Heroku!!!";
git init
git add .
git commit -m "hello heroku commit"
(2) heroku(クラウド側)に器を作成する。
heroku create
該当のurlを確認(※)
(3) 上記に、先ほど作成したプログラムをデプロイする
git push heroku master
⇒上記のurlを再度閲覧すると、※の内容と変わっていることが確認できる。上記を実施すると、package.jsonのscriptsのbuildの記述に従いbuildを実施する。
⇒自分のアプリ一覧を確認するには、heroku apps
⇒自分が今、どのアプリを使っているかを確認するには、heroku info
⇒再度上書きするときは git push -f heroku master
⇒heroku create直後であれば、”heroku”というリモートリポジトリが定義されているので大丈夫だが、ターミナルを再起動した後時はこの設定がクリアされてしまうため、
・heroku git:remote –app アプリ名 で再度紐づけが必要。(理由)。heroku createコマンドにて、リモートリポジトリとしてherokuを登録してくれるようだが、そうでないときはherokuというリモートリポジトリも必要になるようで、先ほどのコマンドによりその登録も行ってくれるとのこと。
・若しくは、git remote add git@heroku.com:(herokuアプリ名).git を実施(参考)
(4) 注意点
– package.jsonのscriptsのところに
”postinstall”: “ng build –output-path dist”
●コマンド関連
・heroku login
古いsshキーで一旦削除したい場合は、heroku keys:clearとすると登録されている公開鍵がクリアされる(herokuのweb画面からも、削除されたのが確認できる)。その後、heroku keys:addとすると、ホームディレクトリにある.sshディレクトリから公開鍵(id_rsa.pub)を見つけてきて、herokuに登録してくれる。
・heroku apps:アプリ一覧が参照できる。
・heroku info –app アプリケーションID:heroku上のgitで管理されているgitファイルのurl情報などが参照できる。
・heroku config:add 環境変数=”XXX” ←コマンドで環境変数を設定
・heroku logs –tail -a アプリ名:エラが出た際に本コマンドで詳細が確認できる。
●その他
・app.json ⇒参考
・環境変数
・MEANスタック(具体的にはMongoDB)を使うにはAdds Onの使用が必要で、そのためにはクレジットカードの登録が必要な模様。これによれば、Free Dynoについては無料枠を超えるとsleepとなりそれ以上は課金されないとのこと。
⇒これ(若しくはこれ)によると、mlabを使用することで、herokuにクレジット登録せずにMEANスタックができる模様。
・github上で編集した内容を、コマンドを使わずにHEROKUへ反映できる。⇒参考
– 実際にgithubで文言を変更後、hero”manual deploy”ボタンを押すと、herokuアプリが変更された。詳細はhttps://devcenter.heroku.com/articles/github-integration#automatic-deploys
– また、Automatic deploysを選択すると、githubのmasterへpushされるのを契機に、自動的にherokuアプリが更新される。masterへの更新は、例えばdevelopmentブランチをgithub上で作成し、この一部を修正したものをやはりgithub上にてpull requestにてmasterへ反映させることにより、勝手にherokuアプリの作成がスタートする。(コンパイル作業が走っているかの状況はheroku側の”Activity”タブにて確認できる)
・procfile:起動時にアプリで実行するコマンドを指定する ファイル。「GITを使用したデプロイ」の項にもprocfileについて記載あり。
Render/Railway/Cyclicなど
・Herokuが2022年11月28日から使えなくなることから、自分用に作った単語帳アプリ(words-auth)を以前より乗り換え実施しようと思っていたものの先延ばしにしてきたが、いよいよ明日に使えなくなることから移行を実施。なんとかぎりぎりで乗り換えが出来た。
・候補として、
- Render
- Railway
- Cyclic ←この記事を見るとスリープする制限もないようなので本当はCyclicを使いたかったが、nodeのバージョンが指定できないようでエラが出てしまうので一先ず断念(私のアプリはnodeはv14だが、Cyclicはv16)。
があり、すんなり移行できると思っていたが1回目は3つとも上手くいかず。
・最終的にRenderで上手く動いたのでこれを使用中。
Render
・以下のページを参考に実施(併せてこちらも参考)。
・念のためHerokuにも久しぶりに再度word-authをpushしてみたところ似たようなエラが出たのでメッセージを確認したところ、nodeのバージョンが新しいものが入ってしまっているようで、package.jsonにnode.jsのバージョンが規定されていなかったので、package.jsonの冒頭で”engines”を追記したところ、バージョン関連のエラは無くなった。
{
"name": "words-auth",
"version": "1.0.0",
"engines": {
"node": "14.18.1"
},
・・・
・これで解決だと思って再度Renderでデプロイしたところ、Expressが見つからないとのメッセージが出て、package.jsonに記述しているのに何故?と思ったが、この記事を読むと関連パッケージのインストールコマンドも必要とのことなので、Settingsのところで
- Build command⇒npm install; npm run build
- Start comand⇒npm run start
を設定したところ上記エラは無くなった。
・これでOKかと思ったら、さらにMongoDBのあたりでエラが出たので、Environmentのところで、Environment Variablesにて(Herokuでも設定していた)MongoDBの環境変数を設定したらようやくエラもなくなり使えるようになった。
・その後、再びエラが出たがこれで解決。
※私の場合、Firebaseの認証機能も使っていたので、Firebase側で許可するドメイン(Render)を追加して完成。
※MongoDB Atlasのほうでもインカミングネットワーク登録が必要(https://www.mongodb.com/community/forums/t/cant-connect-to-mongodb-atlas-from-render-web-hosted-app/192110/4)のようだが、私の場合、IP Whitelistは下記設定で制限していない(参考,こちらも参考)ため不要。
・2024.11.4追記:アプリを一部変更。Github上で直接変更をした後に、Renderにログインして、「Manual Deploy」→「Deply latest commit」を選択すると、先ほどコミットした変更箇所をデプロイしてくれてプログラム修正が完成!とても簡単に変更が可能。
コメントを残す