AWSでNode.jsの低コストのテスト環境を構築する。
AWSなら、3.5$/月という非常に安価なテスト環境を構築できる。
本記事で構築する環境は以下の通り。SSL化まで行う。
- OS:Amazon Linux 2
- ミドルウェア:nginx
- DB:mysql
AWS Lightsail インスタンスを作成
AWSコンソール>Lightsail>create instance から、インスタンスを作成する
「OS Only」「Amazon Linux 2」を選択
3.5$のプランを選択し、好きにインスタンス名をつける
一番下の「create instance」ボタンをクリック
インスタンス一覧に作成したインスタンスが表示される。状態がPendingからrunningになるまで少しかかる。
static IP の設定
この状態だと、インスタンスを再起動するとIPが変わってしまうので、static IP を設定する
作成したインスタンス名をクリックし、Networking>create static IP
IPアドレスに好きな名前を付け、createボタン。
ssh接続して必要なものをインストール
connect using ssh をクリック
以下のコマンドを上から順に発行する。途中で何か聞かれたら全てyesでOK
1 |
sudo yum update |
1 |
sudo yum -y install gcc-c++ |
1 |
sudo yum -y install git |
1 |
git clone https://github.com/creationix/nvm.git ~/.nvm |
1 |
source ~/.nvm/nvm.sh |
1 |
vi .bash_profile |
・ファイル最後尾に以下を付け加える。
1 2 3 4 |
# nvm if [[ -s ~/.nvm/nvm.sh ]] ; then source ~/.nvm/nvm.sh ; fi |
〇Node.jsのインストール
1 |
nvm ls-remote |
1 |
nvm install 16.14.2 |
1 |
nvm use v16.14.2 |
1 |
node -v |
〇nginx のインストール (Amazon Linux 2 の Extras Library を利用)
1 |
amazon-linux-extras |
1 |
sudo amazon-linux-extras install nginx1 |
1 |
sudo systemctl start nginx |
1 |
sudo systemctl enable nginx |
〇タイムゾーンの変更
1 |
date |
1 |
sudo ln -sf /usr/share/zoneinfo/Japan /etc/localtime |
1 |
sudo sed -i "s/\"UTC\"/\"Japan\"/g" /etc/sysconfig/clock |
1 |
sudo reboot |
1 |
date |
1 |
sudo yum install fontconfig |
1 |
npm install -g nodemon |
1 |
npm install -g forever |
アクセスしてみる
ブラウザから「http://【インスタンスのIPアドレス】」にアクセスして、以下のページが表示されればOK
route53でドメイン設定
あらかじめ、ドメインを取得しておく。
route53>ホストゾーンの作成
ドメイン名を設定し、作成する
続いて、「レコードを作成」からAレコードを作成する。
インスタンスのIPアドレスを入力、レコードタイプはA
以上で設定完了。ブラウザからドメインでアクセスできるようになっているか確認する。
443ポートを開放
https接続できるようにするため、443ポートを開放する。
SSL化
ターミナル上で以下のコマンドを発行
1 |
sudo vi /etc/nginx/nginx.conf |
・server_nameの値をドメインに変更
1 |
sudo systemctl restart nginx |
1 |
sudo wget -r --no-parent -A 'epel-release-*.rpm' http://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/ |
1 |
sudo rpm -Uvh dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel-release-*.rpm |
1 |
sudo yum-config-manager --enable epel* |
1 |
sudo yum repolist all |
1 2 3 4 5 6 7 8 |
… epel/x86_64 Extra Packages for Enterprise Lin enabled: 13,522+235 epel-debuginfo/x86_64 Extra Packages for Enterprise Lin enabled: 2,909 epel-source/x86_64 Extra Packages for Enterprise Lin enabled: 0 epel-testing/x86_64 Extra Packages for Enterprise Lin enabled: 313+12 epel-testing-debuginfo/x86_64 Extra Packages for Enterprise Lin enabled: 34 epel-testing-source/x86_64 Extra Packages for Enterprise Lin enabled: 0 … |
1 |
sudo yum install certbot-nginx -y |
1 |
sudo certbot --nginx |
・上記コマンドを実行すると、以下のようにメールアドレスなどの入力を求められる
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
Saving debug log to /var/log/letsencrypt/letsencrypt.log Plugins selected: Authenticator nginx, Installer nginx Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel):【メールアドレス】 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Please read the Terms of Service at https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must agree in order to register with the ACME server. Do you agree? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (Y)es/(N)o: 【本記事ではy】 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Would you be willing, once your first certificate is successfully issued, to share your email address with the Electronic Frontier Foundation, a founding partner of the Let's Encrypt project and the non-profit organization that develops Certbot? We'd like to send you email about our work encrypting the web, EFF news, campaigns, and ways to support digital freedom. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (Y)es/(N)o: 【本記事ではn】 Account registered. Which names would you like to activate HTTPS for? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1: test10.komeke-aws.com - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Select the appropriate numbers separated by commas and/or spaces, or leave input blank to select all options shown (Enter 'c' to cancel):1 |
■補足:SSL化したいドメインの先頭についている番号を入力する
以上でSSL化は完了
https://【ドメイン】で接続できればOK
自動で証明書更新する設定
毎日2時, 14時にSSL証明書の更新を行うよう設定する。
1 |
sudo crontab -e |
1 |
0 2,14 * * * root certbot renew --no-self-upgrade && systemctl restart nginx |
1 |
sudo systemctl restart crond |
MySQLをインストール
※もしインストールに失敗した場合は、一度アンインストールしてやり直す
1 |
sudo yum remove mysql* |
1 |
yum list installed | grep mysql |
以下のサイトから「Red Hat Enterprise Linux 7 / Oracle Linux 7」の欄の下に記載されているリポジトリ名を確認(画像の赤枠)
下記コマンドを実行する。
sudo yum localinstall https://dev.mysql.com/get/【リポジトリ名】
https://dev.mysql.com/downloads/repo/yum/
1 |
sudo yum localinstall https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm |
1 |
sudo yum install --enablerepo=mysql80-community mysql-community-server |
1 |
sudo yum install --enablerepo=mysql80-community mysql-community-devel |
1 |
yum list installed | grep mysql |
1 2 3 4 5 6 7 8 9 |
mysql-community-client.x86_64 8.0.30-1.el7 @mysql80-community mysql-community-client-plugins.x86_64 8.0.30-1.el7 @mysql80-community mysql-community-common.x86_64 8.0.30-1.el7 @mysql80-community mysql-community-devel.x86_64 8.0.30-1.el7 @mysql80-community mysql-community-icu-data-files.x86_64 8.0.30-1.el7 @mysql80-community mysql-community-libs.x86_64 8.0.30-1.el7 @mysql80-community mysql-community-libs-compat.x86_64 8.0.30-1.el7 @mysql80-community mysql-community-server.x86_64 8.0.30-1.el7 @mysql80-community mysql80-community-release.noarch el7-7 installed |
1 |
sudo touch /var/log/mysqld.log |
1 |
sudo systemctl start mysqld |
1 |
systemctl status mysqld.service |
1 2 3 4 5 6 7 8 9 10 |
● mysqld.service - MySQL Server Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled) Active: active (running) since Tue 2022-09-20 18:15:18 JST; 17s ago Docs: man:mysqld(8) http://dev.mysql.com/doc/refman/en/using-systemd.html Process: 9361 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS) Main PID: 9388 (mysqld) Status: "Server is operational" CGroup: /system.slice/mysqld.service └─9388 /usr/sbin/mysqld |
以上でテスト環境構築完了