Photo by Markus Spiske on Unsplash
この記事は?
久しぶりにEC2でサーバを構築しました。この記事は構築時のメモです。
背景
NHKのラジオを録音したくて、急遽自宅の録画サーバに環境を作りました。
ただ、自宅はWifiが不安定で途中で通信が切れてしまう可能性があります。そこで、AWSを利用して環境を作りました。
ECSは稼働時間が長いと高額になると考えたため、EC2で構築しました。
構築手順
以下のような手順で構築しました。と、あっさり書いてますが、うまくログインできなかったりしたので、EC2インスタンスを作って、壊してを3回ぐらい繰り返しました。
sshでログインする前まで
課金されるからVPCとか諸々を消していたんですよねー。sshできるまでググりまくりました。
- VPC作成(10.0.0.0/16)
- サブネット作成(10.0.0.0/24)
- インターネットGWを作成
- ルートテーブルを作成、(0.0.0.0をインターネットに向ける)
- Amazon LinuxでEC2インスタンスを作成。自分で作ったVPC,サブネットを割り当てる
- キーペアを使ってログインする(ssh -i ~/Downloads/xxxxxx.pem ec2-user@ip address)
Linuxのバージョン
$ cat /etc/os-release NAME="Amazon Linux" VERSION="2" ID="amzn" ID_LIKE="centos rhel fedora" VERSION_ID="2" PRETTY_NAME="Amazon Linux 2" ANSI_COLOR="0;33" CPE_NAME="cpe:2.3:o:amazon:amazon_linux:2" HOME_URL="https://amazonlinux.com/"
パッケージ設定
各パッケージのインストール
まずは、パッケージのアップデート。
$ sudo yum update -y
必要なdockerとgitをインストール
$ sudo yum install -y docker $ sudo yum install -y git
Dockerの設定
dockerのバージョン確認
$ docker version Client: Version: 20.10.7 API version: 1.41 Go version: go1.15.14 Git commit: f0df350 Built: Wed Nov 17 03:05:36 2021 OS/Arch: linux/amd64 Context: default Experimental: true
dockerのサービス設定
yumでインストールした直後はdockerが動いていない。
$ sudo service docker status Redirecting to /bin/systemctl status docker.service ● docker.service - Docker Application Container Engine Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled) Active: inactive (dead) Docs: https://docs.docker.com
dockerのサービスを起動する。
$ sudo service docker start Redirecting to /bin/systemctl start docker.service
dockerの状態を確認する。以下のように動いている。
$ sudo service docker status Redirecting to /bin/systemctl status docker.service ● docker.service - Docker Application Container Engine Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled) Active: active (running) since Fri 2021-12-31 05:52:46 UTC; 1s ago Docs: https://docs.docker.com Process: 6697 ExecStartPre=/usr/libexec/docker/docker-setup-runtimes.sh (code=exited, status=0/SUCCESS) Process: 6696 ExecStartPre=/bin/mkdir -p /run/docker (code=exited, status=0/SUCCESS) Main PID: 6700 (dockerd) Tasks: 7 Memory: 37.6M CGroup: /system.slice/docker.service └─6700 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.s...
OS起動時にもdockerデーモンを起動する設定
以下のコマンドでOS起動時にdockerが起動するようにする。上のコマンドもsystemctlを使うのが正しかったのかも。。。
sudo systemctl enable docker
今のユーザでdockerをsudo無しで使用できるように
これをやらないと、dockerコマンドの使用でsudoが必要になる。sudoを省略するために、dockerというユーザグループにログインしているユーザを追加する。
ユーザグループdockerに今のユーザを登録する。
$ sudo gpasswd -a $USER docker Adding user ec2-user to group docker
dockerの再起動
$ sudo systemctl restart docker
このままだと登録が有効になっていないようなので、exitして再ログインする。
時効設定
時刻がおかしいので(UST時刻になっている)、ちゃんとJSTに変更する。
時刻の確認
$ date Fri Dec 31 06:02:26 UTC 2021
以下のようにchronyをインストールする。(chronyは念のため入れている。)
chronyインストール
sudo yum erase 'ntp*' sudo yum install chrony sudo service chronyd restart
タイムゾーンの変更
タイムゾーンの確認。以下のようにUTCが入っている。
$ strings /etc/localtime TZif2 TZif2 UTC0
シンボリックリンクを作る。
$ sudo ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
シンボリックリンクの確認
ll /etc/localtime lrwxrwxrwx 1 root root 30 Dec 31 15:06 /etc/localtime -> /usr/share/zoneinfo/Asia/Tokyo
タイムゾーンの確認。ちゃんとJSTになっている。
$ date Fri Dec 31 19:38:39 JST 2021
作成したファイルをs3に置くための設定
作成した録音ファイルをs3に置くための設定。awsコマンドは何もしなくても使える。
AWS Access Key IDとAWS Secret Access KeyはブラウザのIAMから設定して、貼り付ける。
$ aws configure AWS Access Key ID [None]: XXXXXXXXXXXXXX AWS Secret Access Key [None]: xxxxxxxxx123456 Default region name [None]: ap-northeast-1 Default output format [None]: text
以前から作っていたs3ディレクトリにmp3ファイルを格納する。
aws s3 cp game_test_2021-12-31-15_20.mp3 s3://radio-transcribe
格納できたか確認する。
aws s3 ls s3://radio-transcribe
cronの設定
以下で設定。
# NHK-FM 00 11 * * * /home/ec2-user/docker_rec_radiko/radiko_docker_run.sh JOAK-FM 900 /home/ec2-user/docker_rec_radiko/ game 00 * * * * /home/ec2-user/docker_rec_radiko/radiko_docker_run.sh JOAK-FM 10 /home/ec2-user/docker_rec_radiko/ game_test