Oracle Cloud: Virtual Machine

前回作成したNWに接続する形でインスタンス(instances: Virtual Machine)を作成する。作成はインスタンスの作成(Create instance)から進める。

インスタンスの作成はAlways Free、無料枠の範囲で作成する。ネットワークトラフィックにも無料枠があるが、使いすぎると課金されるのでトラフィックを使わないサービス向けにサーバを構築すると良いだろう。

少し前はAlways Freeを作成する枠に空きがなく、月初狙いが効果的だったが今は空きがあるのかあっさりと作ることが出来た。

インスタンスが実行中になったらパブリックIPを確認し、SSH接続を行う。構築時に公開鍵を設定しているので対応する秘密鍵を使ってSSH接続を行う。

ログイン後は取り合えずubuntuの最新化をしておく。ログインできている時点で問題ないとは思うが、接続が怪しい場合はインターネットGWやルーティング周りを確認すると良いだろう。

$ sudo apt clean
$ sudo apt update
$ sudo apt -y upgrade
$ sudo apt -y full-upgrade

ついでなんでWireGuardとdockerもインストールしておく。まずはWireGuardとfirewalld関連をインストール。

$ sudo apt -y install firewalld
$ sudo apt -y install iputils-ping net-tools
$ sudo apt -y install wireguard
$ sudo apt -y install vim

次にdocker(docker-ce)をインストールする。これは公式に記載されている手順を踏む。

$ sudo apt update
$ sudo apt -y install \
    apt-transport-https \
    ca-certificates \
    curl \
    software-properties-common
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"
$ sudo apt update
$ sudo apt -y install docker-ce
$ sudo apt -y install docker-compose

firewalldのBackendはiptablesにしておく。(2021/1/17時点ではデフォルトでiptablesになっていた。

$ sudo vi /etc/firewalld/firewalld.conf
# FirewallBackend
# Selects the firewall backend implementation.
# Choices are:
#       - nftables (default)
#       - iptables (iptables, ip6tables, ebtables and ipset)
FirewallBackend=iptables

dockerの設定でiptablesは自動設定しないようにしておく。firewalldやiptablesを自分で設定しない場合は変更しないように。

$ sudo vi /etc/docker/daemon.json
{
  "iptables": false,
  "log-level": "warn",
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "5"
  }
}

firewalldとdockerは再起動し、サービスが自動起動するように設定しておく。

$ sudo systemctl status docker
$ sudo systemctl status firewalld
$
$ sudo systemctl disable docker
$ sudo systemctl disable firewalld
$
$ sudo systemctl restart docker
$ sudo systemctl restart firewalld
$
$
$ sudo systemctl status docker
$ sudo systemctl status firewalld

sshでリモートログインが可能なことを確認してからサービスを有効化する。

$ sudo systemctl enable docker
$ sudo systemctl enable firewalld

※dockerの方でiptablesを自動設定していないのでfirewalldのdirect rule等でNATルールを書かなければdockerがまともに動かないことに留意。

試したことが無いがOracle Cloudはコンソール接続が行えるようなので、SSHが出来なくなったらコンソールからの修復を試すと良い。コンソール接続はWEBから設定を行った後に、SSHでコンソール接続用の基盤にアクセスして行うようだ。緊急時用に確保して置く場合は最初に設定しておくのが良いだろう。使い方は公式を参照。