GCEで事前準備(SSHでサーバー接続するまで編)
課金状況ふまえまして、GCEでRailsアプリ作ることにしました( ;∀;)
今までの苦労は…ってあんまりしてないか。せっかく環境作らなくていいと思ったのに\(^o^)/
と思ったらワンクリックでRuby on Rails環境をデプロイできるだと…!?
しかし課金部分が気になる…そしてそれをどうやって作るのかの記事が見当たらない…けど関係ないWordPressの記事見てたら出てきた笑。
これかな?
LAMP Stack|Google Cloud Launcher
でもインスタンスがn1-standard-1で無料枠のf1-microじゃないっぽいのでやめとこう…
今回は常時無料枠を気にして進めていきたい。けど試しながら進めるので課金されたら後戻りかそのまま突っ走るかを決めていきたい。
▼GCE無料枠
Google Compute Engine の料金 | Compute Engine ドキュメント | Google Cloud
-----------------------------------------------------------------------------------------------------------
ではでは、GCEでRailsアプリ作成の事前準備をしていこう。
これ参考に進めていく。
・いつでも無料!Google Compute Engine 常時無料枠の使い方 | あぱーブログ
・遙かデジタリアへ: RubyのCGIをGoogle Cloud Platformの無料枠で動かしたい ~(1)セットアップ
・Google Compute Engine で apacheウェブサーバを無料でつくってみた【GoogleComputeEngine】 - DRYな備忘録
・GCEでWordPressがほぼ無料運用できるようになったので改めてまとめる – codes / cipher
GCPの設定
1.プロジェクト作成
GCPコンソールからプロジェクトを新規作成する。
2.VMインスタンス作成
Compute Engine>VMインスタンスから作成する。
- ゾーン(リージョン)は米国のみ無料枠のため、USから始まるゾーンを選択
- マシンタイプは無料枠のmicro
- ブートディスクは慣れたCentOSで、標準の永続ディスク無料枠分30GB
※CentOSは会社で使ってるからと以前これで構築したから
- IDとAPIへのアクセスはデフォルトのまま
※後で変更出来るようだが、シャットダウンしないとだめらしい
GCE(Google Compute Engine)のVMインスタンスのアカウントスコープを後から変更する - Qiita
インスタンスのサービス アカウントの作成と有効化 | Compute Engine ドキュメント | Google Cloud
- ファイアウォールはあとでSSL接続検討してるからどっちもチェック
- 外部IPをIPアドレスを作成に選択
名前は適当に入力して静的IPアドレスを予約。
※固定IPアドレスはひとつなら無料。ただしインスタンス削除後にその固定IPアドレスがどこにも割り当てられず、宙ぶらりんになると課金。
インスタンス削除後は必ず静的IPアドレスを削除!
方法は以下リンクの下部参照。 - 他はデフォルトのまま
SSH接続設定
1.SSHクライアントへの接続
ローカルPCで動くネイティブSSHクライアントの方が後々便利らしいが、とりあえず今はブラウザ上からSSHクライアントを起動できるのでそれでする。
gcloudコマンドはインスタンス管理とかに便利らしい。
cloud shellでgcloudコマンドを実行するために自分のプロジェクトにアクセスするための一文がもう書いてあるのでそのままエンター
WARNINGと出てビクっとするが、SSH鍵がないよ~との警告。
SSH鍵作る?と聞いてきてくれるので「y」を入力。
パスフレーズを入力。で、再度入れろに対しても入力するとSSH秘密鍵を作成してComputeEngineに登録される。
SSH秘密鍵のパスフレーズは(つけるなら)11文字以上にしましょうねという話 - 本当は怖い情報科学
ちなみにあとで変更も可能。その場合は(今はやってない)、
Enter passphrase for key '/home/【Googleアカウント】/.ssh/google_compute_engine':
さらにパスフレーズを聞いてくるので入れるとログインされる。
2.SSHのセキュリティ対策
せっかく作成したVMインスタンスを好きなようにいじっていきたいが、その前にセキュリティ対策をしていく。
デフォルトではポート番号22が使われているが、このままだと悪意あるユーザに攻撃されまくりで課金されちゃうのも嫌なので変更します!
参考するのは
①CentOSでSSHのポート番号変更~VPSのセキュリティ対策! | Affiwork
②SSHのセキュリティ対策について | server-memo.net
③GCE の無料枠のサーバを立るときに、初見でハマりそうなところ - Qiita
④【GCE/CentOS 7】Google Compute Engine で ssh に繋がらない(sshd起動失敗)場合の復旧方法 - TokunagaKazuya.tk
3番目リンクの通りやったら4番目リンクのようにSSH接続できなくなるよう。なので3番目リンクと4番目リンクは合わせ技で。
ファイアウォールルールの追加
ネットワーキング>VPCネットワーク>ファイアウォール ルール>ファイアウォール ルールの作成
隠れてる部分は全部開けたいポート番号。隠す必要ないけど(・_・;)
このポート番号は好きな番号(0番~65535番)でいいけど、よく使われているwell knownポート(0~1023番)、企業等のプログラムの登録済みポート番号(1024番~49151番)以外がいい。
ファイアウォールルール作成後、Compute Engine>VMインスタンス>該当のVMインスタンス>編集>ネットワーク タグに上記で作成したターゲットタグを追加
SELinux と iptables(firewall) の無効化
CentOSで標準に備わっているSELinux と iptables(firewall) を無効化する。
/etc/selinux/configを編集したいので、その前にバックアップ。
$ cd /etc/selinux/
ファイル確認。うむあるな。バックアップしてまた確認。
$ sudo cp config config_180403
編集~下図のような編集をする。
$ sudo vim config
このvimがね、まだ慣れないのよ。使いづらい。でも慣れたらvim最高~~!ふ~~!ってなるらしいので慣れるまで使いまくるぜ。
脱初心者を目指すなら知っておきたい便利なVimコマンド25選 (Vimmerレベル診断付き) - Qiita
ちなみに
- 「/SELINUX」でSELINUXを検索、「n」で次のSELINUXを検索
- 「i」で編集モード
- 「ctrl + [」でコマンドモードに戻る
- 「:wq」で保存して閉じる(「:q」で保存せずに閉じる)
- 「:q!」で編集したはいいものの、なかったことにしたいので保存せずに閉じる
ポート番号の変更
ポート番号は/etc/ssh/sshd_configファイルに書いてあり、編集の前にバックアップ。
$ cd /etc/ssh
$ sudo cp sshd_config sshd_config_180403
できたできた。
以下のように編集。デフォルトから「#Port 22」とコメントアウトされているので、その下に「Port ポート番号」を追加。
リロードして設定を反映させる。
$ sudo systemctl restart sshd
ここで一旦確認
ブラウザ上のSSHからアクセスできないことを確認。
以下のエラーが出るので、ポート22で接続できなくなったようだ。
また、「gcloudコマンドを表示」でも接続できなくなった。
以下を試したけどConnection timed outする。
ターミナルから GCE に gcloud でログインする場合(SSH ポート変更後) - 技術メモ2
ちなみに「ブラウザ ウィンドウでカスタムポートを開く」からなら指定のポート番号からSSH接続できた。sudoも使える。しかし遅い。接続がとんでもなく遅い。
サーバーの再起動
で、上記の反映確認。
どちらもdisabledと出たのでOK!
ちなみにrootのパスワード設定したり、参考リンク② の通り進めたかったけど、gcloudコマンドでSSH接続がまだ出来ないので、ちょっと後回し…
ローカルからSSH接続
1.GoogleCloudSDKのインストール
ブラウザのターミナルから接続すると遅いので、GoogleCloudSDKをインストール。
▼参考
インストール失敗した…
Windows版Google Cloud SDKのインストールに失敗する - Qiita
これ試したけど上手くいかず…とりあえずユーザ名が日本語なのが原因らしい。そこでc:\users\ユーザ名~を変更しました。変更するだけじゃだめよ。
もう幼ければなんでもいい Windows7で簡単にユーザーフォルダ名を変更する方法
リスクありそうなので、自己責任でお願いします!
2.初期設定
Google Cloud SDKのインストールと認証の設定について - TASK NOTES
出来たショートカットから起動。
以下赤字が私が入力。
インストール後にCloudSDKを初期化する。
>gcloud init
Pick configuration to use:
[1] Re-initialize this configuration [default] with new settings
[2] Create a new configuration
Please enter your numeric choice: 1
どの構成か選べ…?初期構成の最初期化の「1」を選択(英語能力は底辺)。
Choose the account you would like to use to perform operations for
this configuration:
[1] 【自分のGoogleアカウント】@gmail.com
[2] Log in with a new account
Please enter your numeric choice: 1
ログインを求められるので、「1」と入力し、次はプロジェクト選択しろと言われるので、プロジェクト選択。
Do you want to configure a default Compute Region and Zone? (Y/n)? y(nでも良かったのかも。変更したかったわけじゃないし。
デフォルトのリージョンまたはゾーンの変更 | Compute Engine ドキュメント | Google Cloud
)
Which Google Compute Engine zone would you like to use as project
default?
If you do not specify a zone via a command line flag while working
with Compute Engine resources, the default is assumed.
[1] us-east1-b
[2] us-east1-c
~~~以下リージョンがズラズラ
Please enter numeric choice or text value (must exactly match list
item): 1(上述と同じところを選ぶ)
Your project default Compute Engine zone has been set to [us-east1-b].
You can change it by running [gcloud config set compute/zone NAME].
Your project default Compute Engine region has been set to [us-east1].
You can change it by running [gcloud config set compute/region NAME].
Created a default .boto configuration file at [C:\Users\sato\.boto]. See this fi
le and
(略)
3.SSH接続
で、次にSSH接続してみる。
>gcloud compute --project "【プロジェクトID】" ssh --zone "us-east1-b" "instance-1" --ssh-flag="-p 【ポート番号】"
WARNING: The PuTTY PPK SSH key file for gcloud does not exist.
WARNING: The public SSH key file for gcloud does not exist.
WARNING: The private SSH key file for gcloud does not exist.
WARNING: You do not have an SSH key for gcloud.
WARNING: SSH keygen will be executed to generate a key.
This tool needs to create the directory [C:\Users\【ユーザ名】\.ssh] before
being able to generate SSH keys.
Do you want to continue (Y/n)? y
ERROR: gcloud crashed (UnicodeDecodeError): 'ascii' codec can't decode byte 0x82
in position 0: ordinal not in range(128)
If you would like to report this issue, please run the following command:
gcloud feedback
To check gcloud for common problems, please run the following command:
gcloud info --run-diagnostics
もう一回やると
>gcloud compute --project "【プロジェクトID】" ssh --zone "us-east1-b" "instance-1" --ssh-flag="-p 【ポート番号】"
Updating project ssh metadata...|Updated [https://www.googleapis.com/compute/v1/
projects/branchesproject-gce].
Updating project ssh metadata...done.
Waiting for SSH key to propagate.
plink: unknown option "-p"
ERROR: (gcloud.compute.ssh) Could not SSH into the instance. It is possible tha
t your SSH key has not propagated to the instance yet. Try running this command
again. If you still cannot connect, verify that the firewall and instance are s
et to accept ssh traffic.
あれ、ポート番号指定の方法(後述参照)が違う??「-p」なんて知らない言われてるよ。あと、SSH keyもないって。で、UnicodeDecodeErrorはascii文字じゃない字(日本語とか)が入ってると出るエラー。
Google Cloud Platform - OSS ERP Compiere Distribution Lab
コンソール>Compute Engine>メタデータ>SSH認証鍵を確認。
おほう…まさかの…ローカルPCのユーザ名(日本語)が残ってるよ…
上述で変更したけどね、プロファイルのユーザ名変更する前にgcloud initしちゃったのよ…それのせいかな…
あとローカルPCの\\ユーザフォルダ\.ssh\google_compute_engine.pubの中身見たら、ユーザ名(日本語)が文字化けしてるわ…
google_compute_engine.pubの文字化けをユーザ名(英数)に修正し、VMインスタンスの方も日本語入ってるSSH認証鍵は削除して、ユーザ名(英数)の方のSSH認証鍵を追加。
で、今度はポート番号消して
>gcloud compute --project "【プロジェクトID】" ssh --zone "us-east1-b" "instance-1"
あ、進んだ。で、コネクションエラー出てPuTTYの真っ黒の画面だけになった。
PuTTYの左上のアイコンクリックして「New Session」を選択。
VMインスタンスの外部IPアドレスとポート番号入力して接続。
次に下記画面のSSH認証鍵の設定で、プライベートキーをローカルPCの\\ユーザフォルダ\.ssh\google_compute_engine.ppkを選択。
うーん、またエラー…
(PuTTYユーザマニュアル) 2.2 ホストキーを検証する(SSHのみ) - 2.2 Verifying the host key (SSH only) - いろいろ解析日記
警告してくれてるだけでそのまま進めてもいいよう。「はい」を選択。
ユーザ名を聞かれるので、ローカルPCのユーザ名を入力。
Authenticating with public key "ローカルPC名\ユーザ名(日本語)@PC名"
……!!!!!!!!!?????????????
まだ付いてくるかユーザ名(日本語)ーーーーーーーーーーーーー!!!!!
どうしたらいいんだ…あ、上述のローカルPCの\\ユーザフォルダ\.ssh\google_compute_engine.ppkにユーザ名(日本語)が文字化けで書いてある…しかし直すとログインできない…( ;∀;)とりあえずほっとく…
【閑話休題】gcloudでSSH接続の試行錯誤(未解決)
ブラウザからgcloudコマンドでSSH接続したくて、VMインスタンスにrsaの公開鍵を登録した話(解決せず)
gceにローカルからgcloudで接続できなくなった場合、そうubuntuで。 - Qiita
で、この内容をコピーしたかったけど出来なかったので、vimの設定を変更
vim様でクリップボードにコピーできるようにする - Qiita
vimの状態見てみると、「-clipboard」となっておりクリップボード利用できない。
バージョンが悪いらしいのだが、設定ファイル編集で出来るようなのでそれで進める。
$ vim ~/.vimrc
これで設定ファイルが作成された状態。
これで以下を追記。
--------------------------------------
" 行番号を表示
set number
" クリップボードの有効
set clipboard=unnamed,autoselect
--------------------------------------
もう一回確認。
うぬ。まだ「-clipboard」…でもコピー出来るようになったのでよしとする。
しかし無効な鍵ですと言われたので、改行や余計な空白を削除してから登録、保存。
$ gcloud compute --project "【プロジェクトID】" ssh --zone "us-east1-b" "instance-1" --ssh-flag="-p 【ポート番号】"
しかし結局アクセスできず…
元に戻しました…