자신의 운영체제에 맞게 다운
https://developer.hashicorp.com/vagrant/downloads?product_intent=vagrant
Vagrantfile 내용 ↓
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
config.vm
$vm_provider = "virtualbox"
$box_image = "ubuntu/jammy64"
$vm_name_prefix = "ec2"
$number_of_control_planes = 1
$number_of_nodes = 1
$vm_subnet = "192.168.91"
$vm_control_plane_cpus = 2
$vm_control_plane_memory = 2048
$vm_node_cpus = 2
$vm_node_memory = 2048
# Kubernetes Control Planes
(1..$number_of_control_planes).each do |i|
config.vm.define "#{$vm_name_prefix}-app#{i}" do |node|
node.vm.box = $box_image
node.vm.provider $vm_provider do |vm|
vm.name = "#{$vm_name_prefix}-app#{i}"
vm.cpus = $vm_control_plane_cpus
vm.memory = $vm_control_plane_memory
end
node.vm.hostname = "#{$vm_name_prefix}-app#{i}"
node.vm.network "private_network", ip: "#{$vm_subnet}.10#{i}", nic_type: "virtio"
end
end
# Kubernetes Nodes
(1..$number_of_nodes).each do |i|
config.vm.define "#{$vm_name_prefix}-db#{i}" do |node|
node.vm.box = $box_image
node.vm.provider $vm_provider do |vm|
vm.name = "#{$vm_name_prefix}-db#{i}"
vm.cpus = $vm_node_cpus
vm.memory = $vm_node_memory
end
node.vm.hostname = "#{$vm_name_prefix}-db#{i}"
node.vm.network "private_network", ip: "#{$vm_subnet}.11#{i}", nic_type: "virtio"
end
end
# Change APT Repository & Enable SSH Password Authentication
config.vm.provision "shell", inline: <<-SHELL
sed -i 's/archive.ubuntu.com/mirror.kakao.com/g' /etc/apt/sources.list
sed -i 's/security.ubuntu.com/mirror.kakao.com/g' /etc/apt/sources.list
sed -i 's/PasswordAuthentication no/PasswordAuthentication yes/g' /etc/ssh/sshd_config
systemctl restart ssh
SHELL
end

원하는 폴더에 vagrantfile(제프님이 주심) 넣은 후
powershell에서 해당 디렉토리로 이동함
powershell 관리자 권한으로 열어서 실행하기
해당폴더로 이동해서 파일 확인 후 ,

명령어
vagrant halt 일시정지
vagrant destory 삭제함
vagrant up 생성 -- vagrantfile로 .vagrant 폴더가 만들어짐
vagrant init --vagrantfile이 없으면 파일이 만들어짐. (보통잘안쓴다구함)
윈도우에서는 vagrant 어플리케이션을 따로 다운받았는데 리눅스에서는 명령어로 다운 받을 수 있음
destroy했을 때 잔상이 남아 있을 수 있음 지워주기
vm 2개가 생김(vgrantfile에 2개 만들어지도록 설정한 듯?)
vagrant ssh 컨테이너이름

접속완

파워쉘 2개 열어서 vagrantfile up으로 생긴 vm 박스들에 각각 접속해줌
posershell이상하게 열리면 ? 아래와 같이 설정하기
(db1에서 작업) sudo apt update
치면 업데이트 쭈루룩 됨
(db1에서) sudo apt install -y mysql-server
(db1에서) sudo ufw allow 3306
3306 포트 열겠다는 명령어
(sudo ufw allow mysql이라고 쳐도 같은 효과)
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
입력하면 ip를 바꿀 수 있음

a눌러서 insert모드로 들어가고
아이피 부분 2개 주석처리해주고

해당 줄 입력함.
(모든 아이피접속을 허용하겠다는 뜻)
esc눌러서 나온다음
:wq 입력하고 엔터치면 명령어로 입력하는 화면으로 나와짐
sudo service mysql restart
입력해서 mysql을 리스타트 해줌
sudo mysql -u root -p
입력 후 mysql로 들어와줌
비번은 vagrant임.. 왜지??
alter USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'dkagh1.';
FLUSH PRIVILEGES;
mysql에 접속한 후
create database testdb;해서 만들어준 후 exit나오기
(nodejs 프로젝트 env에 설정한 database이름임)
유저 만들어 준 후 app1에서 접속할거임
create user 유저이름@'%' identified by '넣을암호' ;
grant all privileges on testdb.* to 유저이@'%' with grant option;
flush privileges;
sudo apt update
sudo apt install -y npm git mysql-client nodejs
해줌(app1에선 mysql접속만 할거라서 클라이언트 버전 다운)
그담에 db콘에서 만들어준 유저명이랑 비번, db 아이피 입력 후 mysql에 접속할거임
mysql -u 유저명 -p -h 아이피

그 담엔 깃허브에 ssh키(app1)를 등록해줄거임!
파워쉘에 아래 명령어 입력.
ssh-keygen
cat id-rsa.pub
cat ~/.ssh/id_rsa.pub
하면 키 나옴

복사해서 깃허브에 붙여넣기
(깃허브 프로필에 settings -> SSH and GPG keys -> new SSH key)
toy project는 private repository라서 깃허브에 ssh 키 값을 넣어줘야함
git clone하는데 깃 레파지토리에서 ssh 주소로 복사해서 파워셀에 붙여넣기 해야함
db와 app을 따로 분리해서 만드는 이유?
나만 접근할 수 있게 만든?
하나에 있으면... 컴에 app db랑 같이 ㅣㅇㅆ을 때 다운되면 데이터가 위험할 수 있고............ 보안적으로 ㅅ같은 공간에 두지 않음...........
vagrant destroy
할 때 제대로 지우는 법
해당경로에 만들었던 vm 디렉토리가 남아있을 수 있음
https://ap-northeast-2.console.aws.amazon.com/console/home?region=ap-northeast-2

키페어 명 다른 사람과 안겹치게 만들기
키페어유형은 RAS
pem키로 선택해서 만들어줌
만든 키 다운로드 되면 폴더 하나 만들어서 파일 넣어두기

vpc는 가상 네트워크, 인스턴스는 vm이라고 생각하면됨
vpc 제프님이 만들어 주심(프라이빗=db, 퍼블릭=app)
난 인스턴스만 app(public), db(private) 2개 만들거임!!
인스턴스는 검색창에 인스턴스 검색한다음에 생성창으로 들어가면됨




완성~~
인스턴스 시작 누르기

인스턴스 id 클릭해서 인스턴스 접속

연결 클릭

ssh 연결로 들어와서 저거 복사함
위에서 복사한 명령어 붙여넣기, app과 db인스턴스에 각각 연결해줄거임.
근데 db인스턴스는 private 서브넷을 사용하기 땜씨 app 인스턴스를 이용해서 접속해주어야함
vim 키페어이름.pem
다운받은 키페어를 메모장으로 오픈 후 내용을 복사하여 편집기안에 복붙해준다.

이렇게 하면 ssh 폴더로 이동함. 클론은 ssh 폴더에서 하는거 아님.
cat .ssh/
(파일들 보여줌)
cat .ssh/id_rsa.pub
명령어를 사용해서 폴더 이동 없이 key값 가져올 수 있음
npm i 명령어에 대해서 ..
npm i를 하면은 해당 경로에 있는 package.json 파일을 읽어들여서 관련 파일(?), 의존성(?)을 얘가 알아서 설치해줌.
설치되면 node_modules 폴더에 파일이 들어감.
근데 깃허브에는 파일은 ignore해둠. 용량땜씨.
그래서 용량 작은 package.json이 올라가고 npm i 작업 해주어야함
만약 내려받았을 때 node_modules가 있다면 npm i 안해줘두 됨.
실행완료.
app인스턴스에 있는 주소로 입장할거임
인바운드 규칙에 8888 추가한 후
:8888 해서 들어가면 접속 완료됨 개신기


private nat 게이트웨이 사용함

원래 보안그룹 따로 따로 (public, private)설정해줘야되늰데 귀찮으니까 default 쓸거임
app인스턴스는 public, db인스턴스는 private
app인스턴스는 powershell에서 접속이 가능하지만, private로 만든 db인스턴스는 app인스턴스를 통해 접속해주어야함.
1. powershell에서 app인스턴스를 접속함.
(접속하기 위해선 pem키를 다운받고, 해당 파일이 있는 경로에서 접속 명령어를 입력해줘야함.)
2. vim 펨키이름.pem 명령어 입력 후
pem키를 메모장으로 열어서 해당 내용을 powershell에서 붙여넣기함.
3. shh접속 명령어를 입력하면 접속 완료
접속 완료 후 sudo apt update 명령어 ㄱ
리눅스는 exe를 안쓴다고 한다.