【heroku】アカウント作成〜アプリ配置まで試してみた

研究
OLYMPUS PEN E-PL9 (c)Maya
この記事は約7分で読めます。

この記事は1年前の記事です。当時の情報、理解に基づいておりますのでご留意ください

はじめに

来季のシーズンスローガン。面倒臭がらない
というわけで先般作ったNode.jsアプリをherokuに配置してみます。

mayarin/NodejsMySQLDocker
Contribute to mayarin/NodejsMySQLDocker development by creating an account on GitHub.

herokuにアカウントを作ってみます

Heroku | Sign up
Sign up for a free Heroku developer account and get started building your apps on Heroku.

必要な事項を埋めて認証メールからアカウント登録を進めます。
よしなにアカウントが作れたらアプリを登録します。
参考サイトを見る限りではheroku cliをインストールすると捗るようなので従います…

[5分でできる] Node.jsでつくったWebアプリを無料でサーバー公開する方法(前編)|w0o0ps|note
Heroku(読み方: ヘロク)とかサーバーレスについてはもう知ってるよーん、って人は、 の章から読むといぃよ!(° ꈊ °)✧˖°オホッ! ■ Webアプリはできたものの、結局どこで動かせばいいのかわからない。 拙者、昨日、数少ないトモダチのひとりである、UI/UX系デベロッパーから「KoaでつくったWebア...
$ brew tap heroku/brew && brew install heroku #←これ実行
Updating Homebrew...
Warning: You are using macOS 11.0.
We do not provide support for this released but not yet supported version.
You will encounter build failures with some formulae.

# --- 中略... ---

Error: Your Command Line Tools are too outdated.
Update them from Software Update in System Preferences or run:
  softwareupdate --all --install --force

If that doesn't show you an update run:
  sudo rm -rf /Library/Developer/CommandLineTools
  sudo xcode-select --install

Alternatively, manually download them from:
  https://developer.apple.com/download/more/.

Error: Your CLT does not support macOS 11.0.
It is either outdated or was modified.
Please update your CLT or delete it if no updates are available.

叱られたw

Your CLT does not support macOS 11.0 (Big Sur Beta 7) · Issue #8797 · Homebrew/brew
Bug report Please note we will close your issue without comment if you delete, do not read or do not fill out the issue checklist below and provide ALL the requ...

You need to install the CLT for Xcode 12 beta 5. The Xcode 12 release doesn’t support macOS 12 and the CLT in Xcode is not the same as the normal Command Line Tools.

https://github.com/Homebrew/brew/issues/8797#issuecomment-698159666
Sign In - Apple
Sign in with your Apple ID

本当かなぁ、とapple developerから検索して取得しインストール。
よし、進んだ。

[5分でできる] Node.jsでつくったWebアプリを無料でサーバー公開する方法(後編)|w0o0ps|note
前編記事からの続きっす。この記事では実際にHerokuを使って、無料でアプリをサーバー公開する方法をまとめてます。!(° ꈊ °)✧˖°オホッ! ■ 前編はこちら まだ前編をご覧になっていない方でお時間のある方は是非。 ■ Herokuでアプリを公開する仕組み Heroku でアプリを公開する...

続きの資料に従いデプロイ…と、また叱られたw

Enumerating objects: 7192, done.
Counting objects: 100% (7192/7192), done.
Delta compression using up to 4 threads
Compressing objects: 100% (6807/6807), done.
Writing objects: 100% (7192/7192), 6.52 MiB | 1.72 MiB/s, done.
Total 7192 (delta 1379), reused 0 (delta 0)
remote: Compressing source files... done.
remote: Building source:
remote: 
remote:  !     No default language could be detected for this app.
remote:                         HINT: This occurs when Heroku cannot detect the buildpack to use for this application automatically.
remote:                         See https://devcenter.heroku.com/articles/buildpacks
remote: 
remote:  !     Push failed
remote: Verifying deploy...
remote: 
remote: !       Push rejected to rocky-wildwood-40562.
remote: 
To https://git.heroku.com/rocky-wildwood-40562.git
 ! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'https://git.heroku.com/rocky-wildwood-40562.git'
DockerでNode.jsアプリケーションを開発する (4) Herokuにデプロイする - Ishida-IT LLC

最初の資料を読み返す。もなかなかうまいこといかなかったものの、突如うまくいった。
多分以下のどちらかが要因。

  1. git push heroku master の前に git add . を走らせていなかった。
  2. package.json (プロジェクトのルートフォルダ)を作っていなかった。

さてさて接続だ〜、と試行するも、なんか叱られた。

多分これだ。

var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var session = require('express-session');
var logger = require('morgan');
var app = express();

var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');

var MySQLStore = require('express-mysql-session')(session);

var options = {
  host: 'mysql',
  port: 3306,
  user: 'root',
  password: 'password',
  database: 'todo'
};

var sessionStore = new MySQLStore(options);

app.js内でsessionをmysqlに持たせようとしてて→ホストが未解決でござると叱られているんだ。
本当はherokuのClearDBを使うのが定石なんですが、herokuのクレカ登録に某都銀デビットを使ったら、蹴られた(汗)AWSは大丈夫なんですが。
ならばと対策を考える。

  1. AWS RDSを使う → 東京リージョンの最安値でも0.026USD/h*24h*30days = 18.72USD = 1,943円
  2. Lightsailのデータベースを作る → これでも15USD/月=1,557円

    高 ぇ よ !
  3. いまこのサーバを置いてるLightsailの3.5USD/月のインスタンスを作りMariaDBを入れてやる、多分これがいちばんお安く上がるw

できた。ここにMariaDBを入れていきます。

【AmazonLinux2】MariaDBを配置してみる
だってRDS高価いんだもんちょっとしみったれた事情でRDSもLightsail DBも使わず、Lightsailの.5-のインスタンスにMariaDBを配置してDBサーバにしようというお話。参考リンク試...

話が長くなったので記事を分けました。
最後にデータベースサーバとアクセス情報を変更して、稼働しました!

動いたものがこちら

Test site.

あとmailhogを使っているからそこをなんとかしないとですが、明日とか対応しよう。

タイトルとURLをコピーしました