herokuを使ってみる

herokuとは

いわゆるPaasってやつ
PaaSとは「Platform as a Service」の略で、Webサービスを公開するために必要なものを全て予め用意してくれるサービスのこと
なのでherokuを使えば、開発したWebサービスを簡単に全世界に向けて公開することができる
1サービスなら無料でつかうことができる



herokuを使ってwebサービスを公開する

herokuのユーザー登録をする

Heroku | Sign up


herokuをインストール

brew install heroku/brew/heroku

# インストール確認
heroku --version


作ったwebアプリケーションを公開する

# ターミナルからherokuにログイン
heroku login

# 公開鍵を設定
 heroku keys:add

# 公開するアプリケーションのディレクトリに移動
cd myApp

# herokuに新しいアプリケーションを作成する
heroku create

# herokuにデプロイ
git push heroku master

# ブラウザで確認
heroku open

# アプリケーション名を変更
heroku rename new_app

Railsアプリケーション作成、実行

railsのアプリケーション作成

rails _5.1.6_ new hello_world


問題

バージョン指定しているのになぜか勝手にバージョンが5.2.1のrailsになっちゃう


解決方法

mkdir hello_world
cd hello_world
bundle init
vim Gemfile

Gemfile

source 'https://rubygems.org'

gem 'rails',        '5.1.6'
gem 'puma',         '3.9.1'
gem 'sass-rails',   '5.0.6'
gem 'uglifier',     '3.2.0'
gem 'coffee-rails', '4.2.2'
gem 'jquery-rails', '4.3.1'
gem 'turbolinks',   '5.0.1'
gem 'jbuilder',     '2.6.4'

group :development, :test do
  gem 'sqlite3',      '1.3.13'
  gem 'byebug', '9.0.6', platform: :mri
end

group :development do
  gem 'web-console',           '3.5.1'
  gem 'listen',                '3.1.5'
  gem 'spring',                '2.0.2'
  gem 'spring-watcher-listen', '2.0.1'
end

# Windows環境ではtzinfo-dataというgemを含める必要があります
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]


bundle install --path vendor/bundle

bundle exec rails new --skip-bundle .



railsアプリケーションの実行

rails server

Rubyをインストール

rbenvをインストール

rbenvはrubyバージョンを切り替えるのに便利なものらしい

brew install rbenv ruby-build
rbenv install {latest-version}

# rbenvを再読み込み
rbenv rehash

rbenvで新しくRubyをインストールした際、rbenvを再読みするためにrbenv rehashコマンドを実行する必要がある


rbenv versions

# バージョン切り替え
rbenv global {version}
rbenv local {version}



bundlerインストール

bundlerとは、gemのパッケージやバージョンを管理してくれる仕組みらしい

gemは、Rubyのパッケージ管理ツールのこと
Rubyのライブラリのインストールやアンインストール、バージョン管理などを簡単に行える

sudo gem install bundler

# rbenvを再読み込み
rbenv rehash


rbenv rehashを自動的に実行できるようにrbenvのプラグインのrbenv-gem-rehashを導入

git clone https://github.com/sstephenson/rbenv-gem-rehash.git ~/.rbenv/plugins/rbenv-gem-rehash



railsインストール

sudo gem install rails

MySQL ユーザー作成・権限付与

rootでログイン

mysql -uroot -ppassword



新たにユーザーを作成

create user {new_user} identified by '{password}';



権限付与

権限付与の構文

grant 権限内容 on 権限対象DB to ユーザー identified by 'パスワード';


権限内容

  • all privileges:GRANT(権限の付与)以外のすべての権限
  • alter:テーブル変更
  • create:テーブル作成
  • drop:テーブル削除
  • index:インデックス作成、削除
  • select:select文
  • insert:insert文
  • update:update文
  • delete:delete文


権限対象

# グローバル権限
*.*

# データベース
my_database.*

# テーブル (my_databaseのmy_tableテーブルが対象)
my_database.my_table


grant alter, create, drop, index on *.* to new_user identified by 'password';


権限設定の反映

flush privileges;


付与した権限の確認

show grants for master_user;

今更ながらDockerまとめ

そもそもDockerって何?

コンテナ型の仮想環境を作成・配布・実行するためのプラットフォーム

だそう。



仮想環境(仮想マシン)って?

仮想化されたサーバーなどを「仮想環境(仮想マシン)」と呼ぶ。

仮想化

物理的な環境に囚われず仮想的な環境を作り出すこと。
一つの物理サーバに対し、サーバ内のリソースを分割することで仮想的にいくつものサーバが存在しているように見せる技術。



コンテナ型って?

仮想環境を作り出す方法の一つ。
仮想化の方法には大きく分けると、ホストOS型・ハイパーバイザ型・コンテナ型の3つある。

ホスト型

ホストOS上に土台となるソフトウェアをインストールし、そのソフトウェア上で仮想マシンを稼働させる方式。


ホストOSとゲストOSの違い

ホストOS=仮想環境の土台となるOS、つまり物理サーバにインストールされたOS。
ゲストOS=仮想マシン上にインストールされたOS。

ハイパーバイザー型

ハードウェアへ直接インストールし、その上で仮想マシンを稼働させる方式。


コンテナ型

ホストOSの上にゲストOSを起動せずに、仮想マシン(コンテナ)上のアプリのみを起動する仕組み。

仮想マシンと同じように、コンテナ内からはあたかも独立した物理マシン上で動作しているように見える。

仮想マシンとコンテナの違い

仮想マシンでは、それぞれにOSを動かさなくてはいけない。
そのため、仮想マシンごとにプロセッサやメモリを消費し、ストレージも必要になる。

一方コンテナでは、1つのOSで稼働するため、プロセッサやメモリの消費は少なく、ストレージの使用もわずかで済む。
そのため、仮想マシンに比べて起動時間が短く、同じ性能のハードウェアであれば、より多くのコンテナを同時に動かすことが可能。



さっきからちょいちょい出てくるコンテナとは?

一言でいうと空間?(合っているのか...?)

Dockerは、従来のハイパーバイザー型の仮想化とは異なり、
1つのOS環境に、コンテナと呼ばれる分離された空間を作成し、
その分離された空間(コンテナ)ごとに異なるOS環境を実現することができる。

イメージを基にコンテナが作られる。



イメージとは?

コンテナを実行するときに必要なファイルシステム(記憶装置に保存されたデータを管理し、操作するために必要な機能)。
イメージを実体化(インスタンス化)したものが、コンテナと呼ばれる。



Docker Compose

Dockerに含まれるツールの一つ。
複数のコンテナを実行・管理するためのツール。
複数のコンテナから成るサービスを構築・実行する手順を自動的にし、管理を容易にする機能。

→docker-compose.ymlファイルを実行してる部分がまさにそれ。
ファイルには、各コンテナはどのイメージから作るかや、追加設定を書き込んでおくことができる。



Dockerfile

コンテナの構成内容をまとめて記述したもの。
docker buildコマンドでDockerfileの上から順に処理されていく。

公開されているDockerイメージをそのまま使うのではなく、必要なパッケージやアプリ、各種設定を含んだDockerイメージを自分で作成して使用することができる。
その場合、Dockerfileを作成し、それを使用して必要なDockerイメージを作成することができる。
Dockerfileには、ベースとするDockerイメージに対して実行する内容を記述することになる。

リモートサーバーでmysqldumpしてローカルに転送する方法

リモートサーバーに接続

ssh centos@xx.xx.xx.xx

// さらに違うサーバーに接続
ssh 02



mysqldump

mysqldump -uユーザー名 -pパスワード db名 > sample.dump



ローカルへ転送

一旦02サーバーを抜けて(exit)、02にあるダンプファイルを持ってくる

scp 02:/home/centos/sample.dump /home/centos


ローカルへ戻って、ローカルへダンプファイルを持ってくる

scp centos@xx.xx.xx.xx:/home/centos/sample.dump ./



んー他にもっとシンプルな方法がありそうなきがするけど、どうなんだろう