📖 Amazon EC2編~EC2インスタンスにPuTTYで接続してみよう!~
📖 Connect to your Linux instance from Windows using PuTTY
📖 AWS:EC2インスタンス(Ubuntu)にDocker環境を構築する
sudo apt-get update
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
OK
sudo apt-key fingerprint 0EBFCD88
ubuntu@xxxxxxxxxxxxxxxx:/usr/local/src$ sudo apt-key fingerprint 0EBFCD88
pub rsa4096 2017-02-22 [SCEA]
9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88
uid [ unknown] Docker Release (CE deb) <[email protected]>
sub rsa4096 2017-02-22 [S]
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt-get update
sudo apt-get -y install docker-ce docker-ce-cli containerd.io
sudo gpasswd -a ubuntu docker
Adding user ubuntu to group docker
docker -v
Docker version 20.10.6, build 370c289
「 NodeJS で Webサーバー立てようぜ。
画面に Hello, world がでるぐらいの」
📖 VSCodeを使ってAWS EC2のソースコードを編集する
「 👆 VSCode は リモートのテキストも直接編集できるはずなんだぜ」
C:\Users\むずでょ
「 👆 お父ん、ディレクトリ名に日本語を入れるのをやめろだぜ。
海外製のプログラムが このディレクトリを検索できないぜ」
「 kifuwarabe-chan.pem
ファイルは C:kifuwarabe-credentials
ディレクトリを作って、置きましょう」
📖 VSCodeのRemote SSHで「プロセスが、存在しないパイプに書き込もうとしました。」と出て繋がらない
C:\ProgramData\ssh\ssh_config
bad permissions
「 👆 .pemファイルを Cドライブの下に置いてるが、パーミッションがないのかだぜ?」
「 👆 その .pem ファイル自身が インターネットからダウンロードしたものだから、セキュリティのフラグが立っていたんだぜ。
隣の 許可する
チェックを入れようぜ」
SSH鍵(秘密鍵)でログインした際のパーミッションエラーの解決方法
# 所有者にreadとwriteの権限を付与
chmod 600 xxxxxxxxxxx.pem
「 👆 Windows にパーミッションとかあるのか? 調べるか……」
「 👆 こんなとこ 触ったことないし、触って何になるのか知らないが 成功するまで ボタンを押しまくろうぜ」
📖 Windows SSH: Permissions for 'private-key' are too open
「 👆 所有者を自分だけにするのが難しいが、とにかくやった」
📖 Macのターミナルで最初のコンピューター名・ユーザー名を消す
echo $PS1
\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$
PS1=\u@:\w\$
u@:w$
u@:w$PS1='\u@:\w\$'
root@:/usr/local/src#
root@:/usr/local/src#PS1='\u@\w\$'
root@/usr/local/src#
「 👆 これが わたしが最初に覚えた コマンド だぜ。 cd とか除いて」
root@/usr/local/src#cd ~
root@~#ls
ok-muzudho.txt snap
root@~#ls -a
. .. .bashrc .profile .ssh ok-muzudho.txt snap
「 👆 あっ、 .bashrc
があるぜ。エディターもあるかな?」
vi .bashrc
「 👆 vi
エディターもあるぜ。
中身なんか 大量に書いてある」
# (^q^)
PS1='\u@:\w\$'
「 しかしお父ん、Terminal で vi を使っているようでは VSCode を使っている意味がないぜ?」
「 お父んのローカルPCに Dockerfile と NodeJS が無いと意味なくないか?」
「 ふつうに お父んのローカルPCで Dockerfile 使ってコンテナ立てて、
そのソースコードを git などを使って アップロードと ダウンロードを使って 移動したらどうだぜ」
「 そこは楽にならんのか……。じゃあ何で VSCode で リモートSSH接続したんだぜ」
exit
logout
exit
logout
「 👆 ローカルPCで 普通に Docker じゃあ PuTTY 閉じてみるかだぜ」
「 あとは EC2 とか関係なく Docker で NodeJSのWeb立てればいいのかだぜ?」
📖 Node.js Web アプリケーションを Docker 化する
node -v
v14.17.0
npm -v
6.14.13
「 電竜戦とは まったく関係ないのだから、リポジトリ名から dragon を外してもいいんじゃない?」
node server.js
root@87e061c4b2de:/usr/src/app# curl -i localhost:49160
curl: (7) Failed to connect to localhost port 49160: Connection refused
「 👆 Connection refused というのは、ポートが開いていないとか、そういう拒否されてるやつだぜ」
📖 Git Install on Ubuntu/Centos/AmazonLinux/Windows
apt-get update -y
apt-get install git-all -y
git --version
git version 2.25.1
# 設定
git config --global user.name "ユーザー名"
git config --global user.email "メールアドレス"
# 確認
git config --global user.name
git config --global user.email
「 👆 誰が更新したか わかるようにする設定かだぜ。なるほど」
cd /usr/local/src
git clone https://github.com/muzudho/outfield-kifuwarabe-web.git
cd outfield-kifuwarabe-web
ls
docker build . -t muzudho/outfield-kifuwarabe-web
bash: docker: command not found
「 ローカルの Dockerコンテナの方に打鍵してしまったぜ」
docker build . -t muzudho/outfield-kifuwarabe-web
docker images
docker run -d muzudho/outfield-kifuwarabe-web
curl http://localhost:8080
curl: (7) Failed to connect to localhost port 8080: Connection refused
docker ps
docker stop <CONTAINER ID>
docker run -p 8080:8080 -d muzudho/outfield-kifuwarabe-web
curl http://localhost:8080
Hello Worldroot@/usr/local/src/outfield-kifuwarabe-web#
「 👆 なんか表示されてそうだな。
この画面を見るには URL は何なんだぜ?」
📖 Elastic IP を作成して EC2 インスタンスに割り当てる
「 👆 Elastic IP というのが要るんじゃないの?」
「 👆 Elastic IP を割り合ってた時に IPアドレスが変わったのでは?」
「 👆 そういうことかだぜ理解。長い名前のホスト名の中の数字が変わってたぜ。入れた」
「 👆 http://localhost:8080
と、 http://localhost
は何が違うんだぜ?」
「 ポート 8080 と、 ポート 80 ぐらい違うんじゃないか?」
「 localhost んとこ、 Elastic IP にしたら どうなんの?」
「 NodeJS でなく、 Apache2 が動いてないかだぜ?」
📖 Permanently removing apache2
apt autoremove
Reading package lists... Done
Building dependency tree
Reading state information... Done
0 upgraded, 0 newly installed, 0 to remove and 19 not upgraded.
apt remove apache2.*
Reading package lists... Done
Building dependency tree
Reading state information... Done
Note, selecting 'apache2.2-common' for glob 'apache2.*'
Note, selecting 'apache2.2-bin' for glob 'apache2.*'
Package 'apache2.2-bin' is not installed, so not removed
Package 'apache2.2-common' is not installed, so not removed
0 upgraded, 0 newly installed, 0 to remove and 19 not upgraded.
dpkg -S `which apache2`
apache2-bin: /usr/sbin/apache2
「 👆 Apache2 入ってないぜ、ディレクトリはあるけど」
<title>Apache2 Ubuntu Default Page: It works</title>
```

「 👆 Apache2 と書いてあるぜ」
[Why am I getting the Apache2 Ubuntu Default Page instead of my own index.html page?](https://askubuntu.com/questions/603451/why-am-i-getting-the-apache2-ubuntu-default-page-instead-of-my-own-index-html-pa)

「 👆 NodeJS より優先度の高い所に Apache2 のファイルが置いてんじゃない? `/var/www/html` とか」


「 👆 置いてるぜ」


「 👆 どけても Apache2 がディレクトリの内容を表示してるぜ」

「 やっぱ Apache2 入ってるのでは? 消せだぜ」
📖 [How to uninstall Apache2 on Ubuntu](https://www.edureka.co/community/46181/how-to-uninstall-apache2-on-ubuntu)
```shell
apt-get purge apache2 apache2-utils apache2-bin apache2.2-common
curl http://localhost
curl: (7) Failed to connect to localhost port 80: Connection refused
📖 AWS(EC2) + Apacheでつながらない時はポート開放を確認!
「 👆 セキュリティー・グループのインバウンドからポート開放?」
docker stop
cd /usr/local/src/outfield-kifuwarabe-web
docker run -p 80:8080 -d muzudho/outfield-kifuwarabe-web
curl http://localhost
Hello Worldroot@:/usr/local/src/outfield-kifuwarabe-web#
「 ローカルPCの中では見えたが、外部からは どうやって見るんだぜ?」
「 👆 確かに ルート53 あるけど、知ってなければ何か分からないぜ、これ」
「 設定したけど、URLに反映されねーなー。反映されるまで少し時間がかかるやつかな?」
「 IPアドレスでアクセスできるから、DNS の反映がまだなんだろな。
ページでも作って待つか」
# ファイルを Git Hub にプッシュしたあと
docker ps
docker stop
git pull
docker build . -t muzudho/outfield-kifuwarabe-web
docker run -p 80:8080 -d muzudho/outfield-kifuwarabe-web
「 ワケが分からないとか 行き詰るというのは よく顔を合わす友だちみたいなもんだぜ」
📖 【初心者向け】無料ドメインを使ってAmazon Route 53で実装しながら理解するDNS
📖 Amazon Route 53 のトラブルシューティング
「 👆 自分が何か 間違ったことをしているなら 状況は改善しないはずだぜ。
自分が何を間違っているか知りたいんだぜ。それが分からないから 調べもの の的が外れるんだぜ」
「 👆 いつも同じページなどは Web server を介さずに nginx がすぐ返してくれることに期待するんだぜ」
「 nginx.conf
ファイルの書き方だけ 参考になるサイトがあればいいんだが……」
📖 Docker Composeを使ってサクッとNginxコンテナを起動する
「 👆 nginx の入れ方は あとで この記事を参考にしよ」
📖 docker+Node.js(Express)+nginxの最小構成プロジェクトを作成する
「 すると Docker compose も入れないといけないな。明日やるか」
📖 Install Docker Compose
📖 docker/compose
「 👆 公式サイトはここか。Linuxのとこ見たらいいかな」
sudo curl -L "https://github.com/docker/compose/releases/download/1.29.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
docker-compose --version
docker-compose version 1.29.1, build c34c88b2
「 docker-compose.yml ファイルを書くかだぜ」
「 outfield-kifuwarabe-web
は Web だが、 nginx も入れたくなったんで リポジトリ名を変えようぜ?」
「 kifuwarabe-chan-project
でいいんじゃないの?」
「 パーミッションが無いのなら VSCode でつないでいる意味は何なんだぜ?」
version: "3"
services:
nodejs:
build:
context: ./nodejs # Dockerfile保存場所
dockerfile: Dockerfile # Dockerfileファイル名
image: muzudho/outfield-kifuwarabe-web # イメージ名
container_name: outfield-kifuwarabe-web # コンテナ名
ports: # ポート接続
- 49160:8080
# - 80:8080 # 本番環境では
「 👆 今までやってたことは docker-compose.yml にすると、これだけだぜ。
ここに nginx を足すぜ」
「 コンテナ名が長くて嫌だぜ。 warabenture2
とかどうだぜ?」
docker-compose.yml:
version: "3"
services:
nginx:
build:
context: ./nginx # Dockerfile保存場所
dockerfile: Dockerfile # Dockerfileファイル名
image: muzudho/warabenture2-nginx # docker image name
container_name: warabenture2-nginx # docker container name
ports: # ポート接続
- 80:80
nodejs:
build:
context: ./nodejs
dockerfile: Dockerfile
image: muzudho/warabenture2-nodejs
container_name: warabenture2-nodejs
default.conf:
server {
listen 80;
server_name localhost;
location / {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://nodejs:8080/;
}
}
「 コンピューター将棋勢で流行ってるのは SQLite だけど、同時アクセスが多い用途向けじゃないそうよ」
「 👆 DynamoDB を勧められたぜ。 Amazon のやつみたいだが、調べてみるか」
📖 http://dragon.warabenture.com/
「 👆 .com
にすると 10秒もかからず登録でけた。 特殊なやつだと変更を申請するたびに3営業日ぐらいかかるぜ」
📖 Let's encrypt
📖 https://certbot.eff.org/
📖 Install Free SSL from Let’s Encrypt with Apache on Ubuntu
📖 ZeroSSL
「 👆 このサイトでなんとかすると http
を https
にできるんだぜ」
「 👆 ZeroSSL がいいのかな。ちょっと様子を覗いてみるぜ」
「 👆 メールを介しての認証手続きをやったら なんか次のステップがあるぜ。
わたしは AWSを選んでダウンロード」
📖 AWSでWebサイトをHTTPS化 その4:NLB→EC2(+外部SSL証明書)編
「 Elastic Load Balancer なんだが、AWS社の負荷分散、ぐらいの意味だぜ」
「 サブネットマスクを選べ、と出てくるが 分からんので 適当に選ぶぜ」
「 👆 途中で説明が分からなくなったので、別のサイトを参考にするぜ。
と思ったら セキュリティがザルだぜ」
「 ZeroSSLのIPアドレスが分からないと、セキュリティ・グループで弾かれるんじゃないの?」
📖 Let's Encrypt で Nginx にSSLを設定する
「 👆 なんかさっきの廃止になってたんで、あの記事無駄だぜ。
結局 最初の方に漁ってたページに戻ってきたぜ。
頭を使わず 手を動かして 自動的に賢くなろうぜ?」
「 Dockerコンテナのnginxのとこに snapd をインストールできなかったぜ」
「 自習が全然進んでないじゃないか。動画を見ろだぜ。
頭を使わず 手を動かして 自動的に賢く慣れだぜ」
Crieitは個人で開発中です。
興味がある方は是非記事の投稿をお願いします! どんな軽い内容でも嬉しいです。
なぜCrieitを作ろうと思ったか
また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!
こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください!