herokuを使ってみる
herokuとは
いわゆるPaasってやつ
PaaSとは「Platform as a Service」の略で、Webサービスを公開するために必要なものを全て予め用意してくれるサービスのこと
なのでherokuを使えば、開発したWebサービスを簡単に全世界に向けて公開することができる
1サービスなら無料でつかうことができる
herokuを使ってwebサービスを公開する
herokuのユーザー登録をする
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 ./
んー他にもっとシンプルな方法がありそうなきがするけど、どうなんだろう
Docker コンテナに入る方法
docker exec -it コンテナ名 bash