리눅스 마이그레이션

정은지·2023년 4월 28일

vagrant를 이용한 마이그레이션



1. vagrant를 설치해준다

자신의 운영체제에 맞게 다운
https://developer.hashicorp.com/vagrant/downloads?product_intent=vagrant


2. 원하는 폴더에 Vagrantfile 만들어서 폴더에 넣어두기 (제프님이 슬랙에 올려주심)

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 관리자 권한으로 열어서 실행하기

해당폴더로 이동해서 파일 확인 후 ,


3. 파워쉘에서 vagrant up 명령어 입력 ㄱㄱ

명령어 
vagrant halt 일시정지 
vagrant destory 삭제함
vagrant up 생성 -- vagrantfile로 .vagrant 폴더가 만들어짐
vagrant init --vagrantfile이 없으면 파일이 만들어짐. (보통잘안쓴다구함)

윈도우에서는 vagrant 어플리케이션을 따로 다운받았는데 리눅스에서는 명령어로 다운 받을 수 있음

destroy했을 때 잔상이 남아 있을 수 있음 지워주기


4. vagrant up으로 해서 생긴 vm에 접속

vm 2개가 생김(vgrantfile에 2개 만들어지도록 설정한 듯?)

vagrant ssh 컨테이너이름


접속완

파워쉘 2개 열어서 vagrantfile up으로 생긴 vm 박스들에 각각 접속해줌

posershell이상하게 열리면 ? 아래와 같이 설정하기


5. db에서 작업 -- powershell

(db1에서 작업) sudo apt update
치면 업데이트 쭈루룩 됨
(db1에서) sudo apt install -y mysql-server
(db1에서) sudo ufw allow 3306
3306 포트 열겠다는 명령어
(sudo ufw allow mysql이라고 쳐도 같은 효과)


6. db 콘에서 접속가능한 아이피를 수정해줄거임

sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

입력하면 ip를 바꿀 수 있음

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

해당 줄 입력함.
(모든 아이피접속을 허용하겠다는 뜻)
esc눌러서 나온다음
:wq 입력하고 엔터치면 명령어로 입력하는 화면으로 나와짐

sudo service mysql restart

입력해서 mysql을 리스타트 해줌


7. db콘에서 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;

8. ec2-app1에서 작업, 깃허브에 ssh키 등록

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 디렉토리가 남아있을 수 있음


AWS로 마이그레이션하기

1. aws 로그인하기

https://ap-northeast-2.console.aws.amazon.com/console/home?region=ap-northeast-2

2. 키 페어 만들기


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


3. 인스턴스를 만들거임

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

  • 인스턴스 명은 다른 팀원과 겹치지 않게 지어줌(2개 만들거임)
  • 우분투로 선택
  • 인스턴스 유형 선택
  • 키페어는 만든걸로 설정!!!!!!!!!
  • 네트워크 설정 - '고급'이던가.,,. '자세히'버튼이던가.. 하여간 버튼 눌러서 해당창처럼 만들어야함
  • VPC는 제프님이 만들어주신걸로 선택(이미지참고)
  • 스토리지 40으로 수정.

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


4. 인스턴스 접속(여기서 오류남)


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

연결 클릭

ssh 연결로 들어와서 저거 복사함


5. powershell에서 pem키 있는 경로로 이동 후

위에서 복사한 명령어 붙여넣기, app과 db인스턴스에 각각 연결해줄거임.
근데 db인스턴스는 private 서브넷을 사용하기 땜씨 app 인스턴스를 이용해서 접속해주어야함


6. (db인스턴스)

  • app인스턴스를 접속한다.
  • vim 편집기를 실행한다
vim 키페어이름.pem

다운받은 키페어를 메모장으로 오픈 후 내용을 복사하여 편집기안에 복붙해준다.

  • db인스턴스 3번에 있는 명령어를 powershell에 입력해준다
  • db인스턴스 접속 명령어를 사용해해당 인스턴스에 성공적으로 접속하도록한다.
  • sudo apt update 접속
  • sudo apt install -y mysql-server
  • sudo ufw allow 3306
  • sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf로 ip수정. (해당내용 위에있음)
  • sudo service mysql restart
  • sudo mysql -u root -p
  • create user 'test'@'%' identified by 'dkagh1.';
  • grant all privileges on testdb.* to 'test'@'%' with grant option;
  • flush privileges;
    *root계정을 사용하지 않는 이유 : root는 로컬에서만 됨. 로컬에서 접속하는게 아니라서 유저를 새로 팜.

7. (app인스턴스)

  • 해당 인스턴스 ssh 접속명령어를 사용해서 접속함
  • sudo apt update
  • sudo apt install -y npm nodejs git
    (mysql-client설치 안하는 이유 : node로 접속할거라서)
  • sudo npm install -g n
  • sudo n stable
  • sudo npm install -g npm
  • hash -r
  • nodejs -v
  • node -v
  • ssh-keygen
  • cat ~/.ssh/id_rsa.pub
    키 복사해서 깃허브에 붙여넣기
이렇게 하면 ssh 폴더로 이동함. 클론은 ssh 폴더에서 하는거 아님.
cat .ssh/ 
(파일들 보여줌)
cat .ssh/id_rsa.pub
명령어를 사용해서 폴더 이동 없이 key값 가져올 수 있음
  • 깃 클론
  • npm i (의존성 패키지 설치)

    npm i 명령어에 대해서 ..
    npm i를 하면은 해당 경로에 있는 package.json 파일을 읽어들여서 관련 파일(?), 의존성(?)을 얘가 알아서 설치해줌.
    설치되면 node_modules 폴더에 파일이 들어감.
    근데 깃허브에는 파일은 ignore해둠. 용량땜씨.
    그래서 용량 작은 package.json이 올라가고 npm i 작업 해주어야함
    만약 내려받았을 때 node_modules가 있다면 npm i 안해줘두 됨.

  • vim .env 명령어 입력 후 파일 수정해야함
    수정사항 : ip(db인스턴스의 프라이빗 IPv4 주소 사용), host name, password
  • node app

실행완료.


  1. app 접속하기.

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를 안쓴다고 한다.

0개의 댓글