自分でもGoogle Cloud Platformの無料枠でサーバを建ててみた。
やむにやまれぬ事情から個人用の公開サーバを建てたくて調べたところ、どうやらGoogle Cloud Platform(以降、GCP)のCompute Engineには
- f1-microインスタンス1台
- リージョンは一部を除く北米のみ。
- HDD 30GB
- 北米リージョンから外への通信量 1GB
- 中国とオーストラリアへ通信は無料枠なし。
までなら無料で使用できるようです。
そして以下の記事がとても参考になったので自分もやってみました。
-
GCE の無料枠のサーバを立るときに、初見でハマりそうなところ
- 基本はこの記事に従えば大丈夫。
-
GCPの課金データ取得のススメ
- 課金されると怖いので。上記でも最初に設定するように言及されている。
-
無料で最強のクラウドノート環境を手に入れる
- 無料枠だとメモリが0.6GBと貧弱だけどスワップを作成すればなんとかなりそうと希望が持てた。
この記事は、その時の作業の備忘録として記載しています。
課金データ取得の設定
実際にはVMインスタンスの作成後に行いましたが、GCPの利用を開始したら最初に行うべきという意味で、最初に記載します。
Cloud Storageの作成
- Google Cloud Platform画面右上の[ナビゲーション メニュー]から[Storage]→[ブラウザ]をクリック。
- 画面上の[バケットを作成]をクリック。
- [バケットに名前を付ける]で名前を入力し、[続行]ボタンをクリック。
- [データの保存場所の選択]で、[ロケーションタイプ]にRegionをチェックし、[続行]ボタンをクリック。
- [データのデフォルトのストレージクラスを選択する]で、Standardのまま、[続行]ボタンをクリック。
- [オブジェクトへのアクセスを制御する方法を選択する]で、きめ細かい管理のまま、[続行]ボタンをクリック。
- [作成]ボタンをクリック。
課金データのエクスポート
- Google Cloud Platform画面右上の[ナビゲーション メニュー]から[お支払い]→[課金データのエクスポート]をクリック。
- 課金データのエクスポート画面で[ファイルのエクスポート]をクリック。
- バケット名に、上記Cloud Storageで作成したバケット名を入力。
- レポート接頭辞として任意の名前を入力。ここでは元ネタと同じbilling-reportとした。
- [形式]として、やはり元ネタと同じCSVのまま。
- [保存]ボタンをクリック。
課金データを確認
- 翌日とかに再びGoogle Cloud Platform画面右上の[ナビゲーション メニュー]から[Storage]→[ブラウザ]をクリック。
- バケットの一覧から、エクスポート先のバケットの名前をクリック。
- バケットの詳細画面で、billing-report-yyyy-MM-dd.csvのようなファイルができている。
- ファイルサイズは129Bで、中身を見るとヘッダ行だけだった。とりあえず課金が発生していないか、129Bを超えてないかでチェックしておけば良さそう。
VMインスタンスの構築
VMインスタンスの作成
- Google Cloud Platform画面右上の[ナビゲーション メニュー]から[Compute Engine]→[VMインスタンス]をクリック。
- 画面上の[インスタンスを作成]をクリック。
- [マシンの構成]で[汎用]の[シリーズ]にN1、[マシンタイプ]にf1-microを選択。
- [ブートディスク]で[変更]ボタンをクリックし、希望のOSを選択。
- [ファイアウォール]で、[HTTP トラフィックを許可する]と[HTTPS トラフィックを許可する]をチェック。
- HTTPは、Let's Encryptで証明書を作成するため。
- [管理、セキュリティ、ディスク、ネットワーキング、単一テナンシー]を開き、[ネットワーキング]の[ネットワーク インターフェース]をクリック。
[外部IP]で[IPアドレスを作成]を選択すると[新しい静的IPアドレスの予約]ダイアログが表示されるので、適切な名前を入力して[予約]。
そして[完了]ボタンをクリック。 - [作成]ボタンをクリック。
SSH認証鍵の登録
VMインスタンスの作成前にって話もあったのですが、作成後でも大丈夫でした。
- 自前のCentOS環境で
ssh-keygen -t ed25519
を実行し、生成された公開鍵ファイル(拡張子が.pubの方)の中身をクリップボードにコピー。- 鍵は、強固で早いという話なので、ed25519にしました。
- 公開鍵にはssh-keygenを実行した時のユーザ名が含まれている。
- Google Cloud Platform画面右上の[ナビゲーション メニュー]から[Compute Engine]→[メタデータ]をクリック。
- メタデータ画面で[SSH認証鍵]をクリック。
- [SSH認証鍵を追加]ボタンをクリック。
- これはSSH認証鍵が未登録の時のみの操作。
- [公開SSH認証鍵を入力]の欄へクリップボードからペースト。
- そうすると左側にssh-keygenを実行した時のユーザ名が表示される。
- [保存]ボタンをクリック。
VMインスタンスへログイン
ssh -i 【秘密鍵ファイルへのパス】 【ユーザ名】@【VMインスタンスの外部IPアドレス】
SSHポートの変更
SSHのデフォルトポート番号(22)は常に攻撃を受ける可能性があるので、ログインしたら最初にポート番号の変更を行います。
変更先ポートを開放する
- Google Cloud Platform画面右上の[ナビゲーション メニュー]から[VCPネットワーク]→[ファイアウォール]をクリック。
- ファイアウォール画面で[ファイアウォール ルールを作成]をクリック。
- [名前]に、ルール名を入力。
- [ターゲットタグ]に、このルールの対象となるインスタンスに付けるタグ名を入力。
- 今回の使い方は無料で済ますため、インスタンスは1台だけなので、[ターゲット]を[ネットワーク上の全てのインスタンス]で良かったかも。
- [ソースIPの範囲]だけど、使い勝手の問題もあるので、0.0.0.0/0を入力。
- 日本国内のIPアドレスだけに制限とか、簡単にできると良いのだけど、、、
- [tcp]をチェックし、変更先のポート番号を入力。
- [作成]ボタンをクリック。
- Google Cloud Platform画面右上の[ナビゲーション メニュー]から[Compute Engine]→[VMインスタンス]をクリック。
- VMインスタンス画面で、作成したインスタンスの名前をクリック。
- VMインスタンスの詳細画面で、[編集]をクリック。
- [ネットワークタグ]に、作成したファイアウォール ルールのターゲットタグ名を入力。
- [保存]ボタンをクリック
sshdのポート番号を変更
-
sudo vim /etc/ssh/sshd_config
で設定ファイルを開き、下記のように変更先ポート番号を設定して保存。#Port 22 Port 22222 ←追記 #AddressFamily any #ListenAddress 0.0.0.0 #ListenAddress ::
-
SELinuxに、変更先ポートをsshで使用することを定義。
その前にsemanageコマンドが無いので、policycoreutils-python-utilsパッケージをインストール。sudo dnf install -y policycoreutils-python-utils sudo semanage port -a -t ssh_port_t -p tcp 22222
-
変更を反映。
sudo systemctl restart sshd
- restartじゃなくてreloadでも良かったみたい。
- これで22ポートでListenされなくなる。
-
安全のため現在のターミナル接続は残したまま、ログインできるのを確認する。
ssh -i 【秘密鍵ファイルへのパス】 -p 22222 【ユーザ名】@【VMインスタンスの外部IPアドレス】
SWAP領域の追加
メモリが0.6GBなのにSWAP領域がないので追加する。
total used free shared buff/cache available
Mem: 572 54 268 10 249 207
Swap: 0 0 0
$ sudo fallocate -l 2G /swapfile
$ sudo chmod 600 /swapfile
$ sudo mkswap /swapfile
$ sudo swapon /swapfile
$ sudo sh -c 'echo "/swapfile none swap sw 0 0" >> /etc/fstab'
$ free -m
total used free shared buff/cache available
Mem: 572 54 268 10 249 207
Swap: 2047 0 2047
nginxのインストール
$ sudo dnf install nginx
$ sudo systemctl start nginx
$ sudo systemctl enable nginx
Let's Encryptで証明書を発行
この記事を書いた後、certbotのドキュメントを見たら、certbotのインストールにはsnapというパッケージマネージャが必要になったんですね。
で、この記事と同じdynuでドメインを登録。
$ sudo dnf install epel-release
$ sudo dnf upgrade
$ sudo yum install snapd
$ sudo systemctl enable --now snapd.socket
$ sudo ln -s /var/lib/snapd/snap /snap
$ sudo snap install core; sudo snap refresh core
$ sudo snap install core
$ sudo snap refresh core
$ sudo dnf remove certbot
$ sudo snap install --classic certbot
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
$ sudo certbot --nginx
-
dnf search certbot
したらcertbotは見つかるけどバージョンが1つ前の1.9.0だった。
これでnginxにhttpsで接続できるようになりました。
課題
ただのHTMLページを表示するだけなら問題はなかったし、詳しい説明は省くけどpgadminを動かしてnginxからリバースプロキシでアクセスできるようにした時も問題ありませんでした。
しかし、pgadminと同様にmattermostを動かして、リバースプロキシでアクセスすると以下のような警告がChromeで表示される人がいました。
この表示がでない人もいました。
このあたり、ちょっとスッキリしません。。。
何か判ったら追記したいと思います。
Author And Source
この問題について(自分でもGoogle Cloud Platformの無料枠でサーバを建ててみた。), 我々は、より多くの情報をここで見つけました https://qiita.com/megasys1968/items/7799181aad1999413555著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .