dockerでaddress already in use系のエラーまとめた
ec2で、compose upしたら、docker userland proxy: listen tcp 0.0.0.0:3306: bind: address already in use
以前mysqlを、startしてのままだったから、
sudo service mysqld stop
した。再度ビルド。→いけた。
エラーログ
Successfully built 3d6d830af6eb Successfully tagged myapp_web:latest [kaz@ip- myapp]$ docker-compose up Starting myapp_db_1 ... error ERROR: for myapp_db_1 Cannot start service db: driver failed programming external connectivity on endpoint myapp_db_1 (164291723aa5c8697b7d43762b39dead2754087eda2e4b0df98a62f57cf9957b): Error starting userland proxy: listen tcp 0.0.0.0:3306: bind: address already in use ERROR: for db Cannot start service db: driver failed programming external connectivity on endpoint myapp_db_1 (164291723aa5c8697b7d43762b39dead2754087eda2e4b0df98a62f57cf9957b): Error starting userland proxy: listen tcp 0.0.0.0:3306: bind: address already in use ERROR: Encountered errors while bringing up the project.
Address already in use - bind(2) for "127.0.0.1" port 3000 (Errno::EADDRINUSE)
新しくdockerコンテナを作ったときに、rails sをしたら出力されたエラー。
とりあえず解決したい場合
別ポートで立ち上げる
rails s -p 3001
authorized_keys とは?
今理解していること →pubの内容を保存しておく場所
~/.ssh/authorized_keys: Holds a list of authorized public keys for servers. When the client connects to a server, the server authenticates the client by checking its signed public key stored within this file
上によると、pubの内容を保存しておく場所。クライアントがサーバーに接続した時、authorized_keyを元にして、接続を許可するか判断をする。
ssh known_hostsとは
まとめるとknown_hostsとは「公開鍵認証のSSHでログインしたサーバのホスト鍵を記録し,次回からのホスト認証で利用されるファイル」である.
https://a-mochan.hatenablog.com/entry/2019/12/20/141036#:~:text=まとめるとknown_hostsとは,されるファイル」である.
3項目に別れている
・サーバー名(ip)
・keyのtype
・暗号化された情報
ここにip ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ==
参考:
SSH接続エラー回避方法:.ssh/known_hostsから特定のホストを削除する/削除しないで対処する3つの方法 - Qiita
What is actually in known_hosts?
What is the difference between authorized_keys and known_hosts file for SSH?
ec2内にgit cloneしようとしたら、Cloning into 'myapp'... Permission denied (publickey). fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.
[kazumawada@ip-10-0-0-197 rails]$ git clone git@github.com:kazumawada/myapp.git Cloning into 'myapp'... Permission denied (publickey). fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists. [kazumawada@ip-10-0-0-197 rails]$ git remote set-url origin https://kazumawada@github.com/kazumawada/myapp.git fatal: not a git repository (or any of the parent directories): .git [kazumawada@ip-10-0-0-197 rails]$ cd [kazumawada@ip-10-0-0-197 ~]$ cd ~/.ssh [kazumawada@ip-10-0-0-197 .ssh]$ vi config
github-[ユーザー名]がポイント!
Host github-kazumawada Hostname github.com User git IdentityFile ~/.ssh/ec2_git_rsa
sshでcloneする際も、git@github-[ユーザー名]:ユーザー名/リポ名
[kazumawada@ip-10-0-0-197 .ssh]$ ssh -T git@github-kazumawada Hi kazumawada! You've successfully authenticated, but GitHub does not provide shell access. [kazumawada@ip-10-0-0-197 .ssh]$ cd [kazumawada@ip-10-0-0-197 ~]$ cd /var/www/rails [kazumawada@ip-10-0-0-197 rails]$ git clone git@github-kazumawada:kazumawada/myapp.git Cloning into 'myapp'... remote: Enumerating objects: 40, done. remote: Counting objects: 100% (40/40), done. remote: Compressing objects: 100% (31/31), done. remote: Total 1893 (delta 22), reused 18 (delta 9), pack-reused 1853 Receiving objects: 100% (1893/1893), 26.29 MiB | 8.76 MiB/s, done. Resolving deltas: 100% (1072/1072), done. [kazumawada@ip-10-0-0-197 rails]$ ls myapp [kazumawada@ip-10-0-0-197 rails]$
githubの鍵もグリーンになった
*本当にその鍵が使われているかどうかは、sshでcloneして見ればいいことがわかった。他の方法はもちろんあるかもしれないけど、分かればどんな方法でもいいから、深追いはしない。
参考
Circle CI(CI/CD )とは
できること
mainにマージされたら自動でサーバーへSSHしてコードをデプロイ
Sass型のCI/CDサービス。
sass: software as a service( Notin, Netflix, Spotify etc。インターネットでアクセスできるサービスのこと)
CI/CD
・CI(継続的インテグレーション)とは、ソフトウェアの変更を常にテストしながら統合することを指します。
・CD(継続的デリバリー)とは自動で本番環境にリリースする開発手法のことです。CI/CDの仕組みがあると、テスト・ビルド・デプロイというフローを自動化することができます。
,,, rspecは書く必要あるの??
例えばすべてのテストがパスしない限り、masterへマージさせないってことができたり、pushして問題がなければ自動デプロイができるようにすることができます。
なるほど。rspecの結果を元にして、circle ciが判断するのか。
Dockerを実行環境としている。
ビルド、テスト、デプロイができる
ymlファイルで設定できる CI/CDの設定は全て .circleci/config.yml に記載します
Github連携が前提(Github action?) pushしたら、circle ciがコンパイルなり、テストなりをする。
参考
TCP/IP, ポート, HTTPをまとめた。
ポートとは, TCP/IPとは
・tcp/ip方式で通信します。
・ip(internet protcol)はアドレス。とりあえずlanを使って送りつける。(tcpに安全面は任せる)
・tcpは、ネットワーク上で「正しくデータが送られたことを保証する仕組み」を定めたもの。ipに、情報をくっつけて送信。受け取ったかどうかの確認もする。
この両方が組み合わさって、パケットを、正しく相手に送り届ける仕組みがある。
HTTPはネットワーク(TCP/IP)のサービス
http: webページの転送に利用するプロトコル(ポート番号は80と決まっている)
ネットワーク上のサービス(HTTPなど)は、ポート番号で識別する
一つのサーバー内には、nginxだったり、アプリケーション、DBなど複数のサービスがある。IPアドレスだと、これら全体の場所を指定するだけで、サーバー内の特定のサービスを指定することはできない。そこで使われるのがポート番号。
パケット「あなた宛のパケットですー」
サーバー「http, ftp, talent etcあるけど、どれ宛??」
パケット 「汗」