GCE(Google Compute Engine)でCentOSを動かす
Last updated: 2019-09-08
Google Compute Engine(GCE)の無料枠でCentOSを設定する手順の説明です。
SSHのポートを設定し、dockerを入れました。
GCPコンソールでの設定
- VMインスタンスを表示する
- 課金を有効にする
- VMインスタンスの「作成」クリックする
- 名前は分かりやすいものを適当に入れる
- リージョンをアメリカ西海岸のus-west1(オレゴン)を選択する(太平洋をまたいで日本に近いので)
- ゾーンはそのまま「us-west1-b」
- マシン構成は共有コア汎用f1-microにする
- ブートディスクを標準の永続ディスク「30GB」にする。(Red Hat等はプレミアムディスクで有料)
- ファイアウォールでHTTPとHTTPSのトラフィックを許可する
- セキュリティでSSH認証キーを入力しておく(C:\Users\XXXX.sshの「id_rsa.pub」の内容をコピー)
- ネットワークインターフェイスで外部IPをエフェメラルから変更し、作成・予約し固定のものに変更する
ポート22が空いているので、SSHでキーを指定して接続できる事を確かめる。
(ここまででインスタンス一覧にある接続の「SSH」をクリックするとCloud Consoleからもつなげる。)
rootのパスワードを設定
念の為、ログインユーザー、rootのパスワードを指定しておく。 SSHでつないで、以下を実行する。
sudo passwd username
sudo passwd root
iptablesとSELinuxの無効化
GCPのファイアウォール、サーバーのファイアウォールが両方動いていると思わぬ所で躓く。
たとえば、SSHの設定後に再起動をしたら以下のエラーが発生した。
サーバーのiptablesとSELinuxは切ってしまう事にした。
$ sudo systemctl restart sshd
Job for sshd.service failed because the control process exited with error code. See "systemctl status sshd.service" and "journalctl -xe" for details.
以下コマンドでファイアウォールを無効にする。
sudo systemctl disable firewalld
次にSELinuxを無効にする。
sudo cp /etc/selinux/config /etc/selinux/config_org
sudo vi /etc/selinux/config
書き換えは以下の場所について行う。
#SELINUX=enforcing
SELINUX=disabled
設定が終わったらサーバーを再起動する。
sudo reboot
再度SSHで接続し、設定が有効になっているか確認する。
$ sudo systemctl is-enabled firewalld
disabled
$ sudo getenforce
Disabled
SSHポートの変更
SSHで接続するポートを変更する。
失敗した時に備えて、接続しているシェルは有効なまま立ち上げておく。
まずは、設定そのままでsshdの再起動が可能であるか念の為確認する。
sudo systemctl restart sshd
次に設定ファイルを待避し、書き換えを行う。
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config_org
sudo vi /etc/ssh/sshd_config
ポートの番号は変更したものにする。
#Port 22
Port 2222
sshdのサービスを再起動する。
sudo systemctl restart sshd
ファイアウォールの設定
SSH接続を22番ポートから変える。
以下では22番から2222番に変更したとした。
- ネットワーキング>VPCネットワーク>ファイアウォールルールを開く
- ファイアウォールルールを作成をクリックする
- 名前を「allow-ssh-port」に
- ログは「オフ」のまま
- ネットワークは「デフォルト」のまま
- 優先度は「1000」のまま
- トラフィックの方向は「上り」
- 一致したときのアクションは「許可」
- ターゲットを「指定されたターゲットタグ」
- ターゲットタグを「allow-ssh-port」
- ソースフィルターを「IP範囲」
- ソースIPの範囲を「0.0.0.0/0」
- 2番目のソースフィルターをなしのまま
- 指定したプロトコルとポートでtcpの2222を設定する
さらに、ポート22番を無効にするルールを作成する。
- ネットワーキング>VPCネットワーク>ファイアウォールルール
- ファイアウォールルールを作成をクリックする
- 名前を「disallow-ssh-port」
- ログは「オフ」のまま
- ネットワークは「デフォルト」のまま
- 優先度は「1000」のまま
- トラフィックの方向は「上り」
- 一致したときのアクションは「拒否」
- ターゲットを「指定されたターゲットタグ」
- ターゲットタグを「disallow-ssh-port」
- ソースフィルターを「IP範囲」
- ソースIPの範囲を「0.0.0.0/0」
- 2番目のソースフィルターをなしのまま
- 指定したプロトコルとポートでtcpの22を設定する
次に、設定したルールをインスタンスに適用する。
- コンピューティング > Compute Engine > VMインスタンスでインスタンスをクリック
- ネットワークインターフェイスをクリック
- ネットワークタグに「allow-ssh-port」と「disallow-ssh-port」を追加する
- 保存する
SSHで接続が22番ポートからは不可、2222番から可能であることを確認する。 (失敗がある場合、立ち上げておいたままにした接続から再度設定を行う)
タイムゾーンの設定
sudo timedatectl set-timezone Asia/Tokyo
timedatectl
dockerをCentOSにインストール
Get Docker Engine - Community for CentOS | Docker Documentation を参考にdockerをインストールした。
sudo yum update
sudo yum upgrade
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io
sudo systemctl start docker
sudo docker run hello-world
sudo systemctl enable docker
systemctl is-enabled docker
ついでに、 Install Docker Compose | Docker Documentation を参考にしてdocker-composeをインストールした。
sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose