[ 교재 EC2 인스턴스 작성 ] - 1
대시보드 인스턴스 -> 인스턴스 시작을 눌러 EC2 인스턴스 생성
이름: exercise-instance7
AMI : Amazon Linux 2 AMI
인스턴스 유형 t2.micro
키페어 : 기존 것 사용
네트워크 설정 : 기본 보안 그룹 선택 -> ssh, web
스토리지 구성 : 기본값 8Gib
교재 p.24 명령어
sudo yum install git -y
👉 EC2 서버에 git 설치
git clone https://github.com/asdf-vm/asdf.git ~/.asdf --branch v0.9.0
👉 ~ :홈 디렉터리를 의미. 현재 접속자가 ec2-user이므로 /home/ec2-user를 가리킴 즉 ~/.asdf는 /home/ec2-user/.asdf와 같음
👉 '.' 으로 시작하는 파일 또는 디렉터리는 숨김 파일과 같음
ls -a
👉 .asdf가 보임
echo . $HOME/.asdf/asdf.sh >> ~/.bashrc
👉 리눅스의 사용자마다 자신의 홈 디렉토리에 .bashrc라는 파일을 가지고 있음
👉 이 파일은 사용자가 접속되면 초기 설정을 해주는 역할을 함
👉 '>>' : 리다이렉션 기호, echo 명령어는 화면에 뒤에 나오는 문장을 출력을 함
[ 리다이렉션(redirection) ]
- 리다이렉션은 출력장치(표준 입출력)를 전환(바꿔준다)한다
- 입력 장치: 명령어(키보드), 출력장치: 모니터
- 명령어를 입력하면 그 출력 내용이 모니터에 나오게 됨
- 이 때, 출력 내용을 모니터가 아닌 파일로 처리하고 싶다면 리다이렉션 기호를 사용함
- 4가지 기호를 사용(<,<<,>,>>)
[ 실습 ]
echo 1
👉 1을 모니터에 출력
echo Hello, World!
👉 Hello, World! 를 모니터 출력
echo 1 > test.txt
👉 1이 화면에 출력되지 않음
cat test.txt
👉 cat 명령어를 통해서 test.txt의 내용을 화면에 출력하면 1이 출력됨
👉 모니터에 출력될 1을 리다이렉션 기호('>')를 사용하여 test.txt 파일에 그 내용을 출력한 것.
echo 2 > test.txt
cat test.txt
👉 1은 보이지 않고, 2만 출력됨
👉 리다이렉션 기호('>')는 기존에 있던 내용을 덮어쓰고 새롭게 내용을 만듦
echo 3 >> test.txt
cat test.txt
👉 모니터에 숫자 2와 3을 보여줌
👉 기존에 내용을 두고 추가하려면 '>>' 을 사용
※ '>' 와 '>>' 공통점과 차이점
공통점 : 표준 출력인 모니터로 출력하지 않고, 파일로 출력하는(결국 파일에 입력이 됨) 리다이렉션 기호
차이점 : '>' 는 기존의 파일 내용을 없애고 파일에 출력, '>>'는 기존의 파일 내용을 유지하고 마지막 라인에 추가
따라서, '>' 리다이렉션 기호는 기존의 내용을 삭제하므로 조심해서 사용해야 함!
파일의 내용을 왼쪽 명령어에 입력값으로 사용하는 경우 '<'를 사용
예를 들어 데이터베이스 접속 시 백업해 놓은 파일을 입력값으로 해서 접속을 할 때
sudo mysql -u root -p shopping_db < customer_table_backup.sql
👉 백업 해 놓은 'customer_table_backup.sql'을 적용해서 접속
👉 즉, customer 테이블 복구!
또는 특정 파일의 내용을 정렬해서 출력하고 싶다면
sort < 파일이름 입력
ex) sort < list.txt
👉 list.txt의 파일 내용을 정렬해서 모니터에 출력해라!
cat << end
> (입력상태가 지속됨)
> 1(엔터)
> 2(엔터)
> end(엔터)
=> end 문자열이 입력되면 현재까지 입력했던 문자열들이 echo 명령어에 의해 화면에 보여짐
cat << end > Hi.txt
> Hi
> My name is ChunSik
> Bye
> end
=> 입력상태가 end 문자열을 만나서 종료되고 입력된 내용을 ('>')에 의해서 Hi.txt에 출력되어 짐
※ '<' 와 '>' 를 활용
sort < list.txt > sort_list.txt
👉 list.txt 의 내용을 sort(정렬)하고 그 정렬된 내용을 다시 sort_list.txt에 입력!
리다이렉션 기호를 정리하면
'>' : 출력의 변화(출력을 감지, 출력방향을 바꿈)
'>>' : 추가(Append)의 개념
'<' : 입력 장치를 변환(입력으로 받아들임)
👉 A < B 는 B(파일의 내용)을 읽어서 A(어떤 명령어)를 실행시켜라!는 의미
'<<' : << [문자열] 형태로 쓰이며 문자열이 쓰일 때까지 입력 상태를 이어나감
※ 셸(Shell)
- 명령어를 해석하는 역할
- 리눅스의 구조
사용자(응용프로그램) - 셸(Shell) - 커널(Kernel) - 하드웨어
- 프로그래밍 언어로 생각하면 되며 셸 프로그래밍을 통해서 프로그램을 만들수도 있음
source ~/.bashrc
👉 .bashrc 파일을 수정하면 적용을 시켜야 하는데 1)리눅스를 재시작 2)source 명령어로 재시작을 하지 않고 적용하는 방법.
=============================================================
※ asdf 패키지(프로그램)
- 버전 관리 툴(tool)
- 프로젝트 별로 사용하는 언어의 버전이 다른 경우 다양한 언어의 버전 별로 관리가능
- 언어별 버전 매니저를 사용
Go는 gvm, Node.js 는 nvm, ruby 는 rbenv 를 사용
- 다양한 버전 매니저를 하나의 도구로 사용할 수 있는 것이 'asdf' 이다.
asdf 특징
- asdf 명령어 하나로 여러 언어의 버전을 관리할 수 있음.
- global 또는 프로젝트(local) 별로 사용 언어 버전을 지정할 수 있음
- plugin 방식을 사용하여 여러 가지 프로그램을 지원함
asdf 사용방법
1. asdf를 설치
2. 언어별 플러그인을 설치
3. 플러그인 설치 후 원하는 버전을 설치
4. 프로젝트 별로 사용하는 버전을 지정
asdf plugin add nodejs https://github.com/asdf-vm/asdf-nodejs.git
👉 nodejs 의 플러그인 설치
asdf install nodejs 16.14.0
👉 원하는 버전 설치
asdf global nodejs 16.14.0
👉 모든 프로젝트가 nodejs 를 사용 시 기본 버전 16.14.0 을 사용하도록 global 설정을 함
node -e "console.log('Running Node.js ' + process.version)"
👉 Node.js 가 설치가 잘 되었는지 확인
👉 process.version 항목이 global 버전으로 대체되어 출력됨
👉 Running Node.js v16.14.0 이 출력됨!
sudo mkdir www
(=sudo mkdir /var/www)
※ 절대 경로: '/'로 시작하는 경로를 말함. 절대 경로를 통해 다른 위치에서도 해당 경로를 지정할 수 있음
sudo chown ec2-user www
chown: change owner. 소유권 변경
👉 sudo mkdir www 명령어에 의해서 만들어진 www 디렉터리(폴더)는 root 소유로 되어 있음
👉 ec2-user가 소유자로 변경되도록 명령어 입력
cd /var/www
git clone https://github.com/deopard/aws-exercise-a.git
cd aws-exercise-a
npm install
[웹서버(ngnix)와 웹 애플리케이션(AWS) 동작시키기 ]
wget http://s3.amazonaws.com/phusion-passenger/releases/passenger-6.0.12.tar.gz
👉 EC2 서버를 웹 애플리케이션 서버(AWS)로 동작시키기 위해 phusion-passenger를 설치
👉 Tomcat 과 같은 역할을 한다고 보면 됨!
👉 phusion-passenger는 Node.js, Phyton, Ruby, Meteor 언어를 지원
sudo mkdir /var/passenger
👉 /var/passenger 디렉터리(폴더)를 생성
sudo chown ec2-user /var/passenger
👉 sudo 명령어를 통해 root 소유자로 지정되어 있으므로 ec2-user
tar xzvf passenger-6.0.12.tar.gz
x : 묶음 풀기
z : z 옵션을 사용하여 압축해제와 동시에 묶음파일이 풀리도록 설정. 압축형태가 gzip 일 경우 z 옵션을 사용.
v : visual. 묶음 파일들의 이름을 화면에 보여줌
f :필수!
※ 만약 압축 형태가 .xz 이라면 J(대문자), bz2 이라면 j(소문자)를 옵션으로 사용!
위의 명령어까지 하면 현재 위치한 폴더 아래에 압축해제가 됨!
그러나, 압축 해제된 파일을 /var/passenger 아래에 두고 싶다면 압축 해제 경로를 지정함
경로 지정은 -C(대문자 옵션 사용)
tar xzvf passenger-6.0.12.tar.gz -C /var/passenger
👉 압축해제와 묶음파일 풀기를 동시에 진행하여(xzvf) -C 옵션뒤에 설정한 경로(/var/passenger)에 파일들을 위치시켜라!
asdf plugin add ruby
👉 Phusion Passenger 가 루비(ruby)와 C++ 언어로 만들어져 있기 때문에 ruby 언어를 설치
sudo yum install gcc gcc-c++ glibc glibc-common gd gd-devel openssl-devel libcurl-devel -y
👉 루비를 설치하는데 필요한 패키지를 설치
asdf install ruby 3.1.1
asdf global ruby 3.1.1
👉 루비 언어를 설치하고 기본 버전으로 3.1.1 지정
sudo yum update -y
echo export PATH=/var/passenger/passenger-6.0.12/bin:$PATH >> ~/.bash_profile
👉 ~ : home directory(/home/ec2-user)
👉 .bash_profile : 파일 앞에 마침표(.)가 있으면 숨김파일. ec2-user의 환경설정 파일. 여기에 PATH 설정이 있음. 시스템에 존재하는 모든 사용자에 대한 환경설정파일은 /etc/profile이며 각 사용자마다 환경설정 파일이 따로 존재.
👉 기존에 있던 PATH 설정에 passenger-6.0.12/bin 디렉터리를 추가!
👉 추가 후에 export 명령어로 적용!
👉 그 내용을 모니터에 출력하지 않고 리다이렉션 기호(>>)를 사용하여 .bash_profile 에 내용 추가(append)
source ~/.bash_profile
👉 변경된 내용을 재시작 없이 적용
👉 재시작 시에도 변경된 내용이 적용
passenger-install-nginx-module
👉 PATH 설정 전이라면 cd /var/passenger/passenger-6.0.12/bin -> sh passenger-install-nginx-module 명령어를 입력해서 실행을 시켜야 함
👉 위의 설정에서 PATH 설정을 추가 적용해서 현재 위치한 /var/www/ 디렉터리에서도 실행이 가능!
👉 PATH 설정이 잘 적용되었다면 설치하일이 동작(현재 위치에 상관없이!)
👉 Phusion Passenger를 설치하면서 웹 서버인 nginx도 같이 설치하는 실행파일
설치에 대한 내용을 확인하였따면
엔터(Enter) 키를 눌러서 설치 진행!
--------------------------------------------------
설치 언어를 물어보는 단계로 넘어감 '!' 입력하면 선택된 항목이 표시되고, spacebar 키를 눌러서 Ruby와 Python 언어에 *를 삭제 (즉, Node.js 만 * 가 있도록 설정)
엔터키를 눌러서 계속 진행
...(중략)
Your system does not have a lot of virtual memory
...(중략)
Press Ctrl-C to abort this installer (recommended).
Press Enter if you want to continue with installation anyway.
=> 가상 메모리 관련 경고메세지가 나오며 가상 메모리를 늘인 뒤 설치를 진행하는 것을 권장
권장 사항에 따라 Ctrl + C 키를 눌러서 가상 메모리를 늘임
--------------------------------
sudo dd if=/dev/zero of=/swap bs=1M count=1024
sudo mkswap /swap
sudo swapon /swap
----------------------------------
가상 메모리 적용이 완료되었다면 다시 설치를 진행
passenger-install-nginx-module
--------------------------------------------------
웹서버인 nginx의 기본 설치 위치를 설정 단계
Please specify a prefix directory [/opt/nginx]:
👉 기본 설치 경로 /opt/nginx
👉 엔터키를 눌러서 기본 설치 경로로 계속 진행
엔터키를 누르면 Permission problems 문제가 발생!!!
-----------------------------------------------------
Permission problems
👉 권한과 관련된 에러가 발생하면서 진행이 되지 않음
현재 접속한 유저는 ec2-user이고 nginx가 설치될 /opt/nginx는 root권한이 필요하다!
ec2-user가 아닌 root 계정으로 실행하기 위해 현재 asdf의 환경변수를 보존하면서 root 계정을 실행해야 한다!
(환경변수는 계정 별로 각각 설정되기 때문)
export ASDF_DATA_DIR=/home/ec2-user/.asdf
👉 ASDF_DATA_DIR 의 이름을 가지는 변수를 만드는 과정
export ORIG_PATH="$PATH"
👉 현재 ec2-user 계정에 설정되어 있는 PATH 설정값을 ORIG_PATH 변수에 저장(대입)
sudo -sE
👉 접속자가 ec2-user에서 root 로 변경됨
export PATH="$ORIG_PATH"
👉 ec2-user에 설정된 PATH를 root에도 적용!
asdf global ruby 3.1.1
=========================================
root 계정을 유지하며 passenger-install-nginx-module 실행
엔터 -> ! -> (*)Node.js 만 남기고 나머지는 해제 후 엔터 -> 1 입력 후 엔터 -> ...[/opt/nginx] 항목 확인 후 엔터 -> 설치 진행
After you start Nginx, you are ready to deploy any number of Ruby on Rails
applications on Nginx.
Press ENTER to continue.
설치가 완료되면 엔터키를 눌러서 마무리!
root 계정으로 되어 있으니 exit 를 입력하여 ec2-user로 다시 변경
[ 교재 EC2 인스턴스 작성 ] - 명령어 모음
p36
교재 EC2 인스턴스 작성 - 2 에서 nginx와 phusion passenger 설치 완료
===========================================
sudo vi /opt/nginx/conf/nginx.conf
------------------------------------
18번 라인 추가
41번 라인 변경
43번 라인 추가
45 ~ 47번 라인 추가
53 ~ 56번 라인 주석 처리
--------------------------------------
sudo /opt/nginx/sbin/nginx
웹브라우저에서 확인
cd /etc/init.d
sudo vi nginx
sudo chmod 755 nginx
sudo service nginx stop
sudo service nginx start
sudo service nginx restart
sudo service nginx status
sudo chkconfig --add nginx
sudo ntsysv
cd /var/www
git clone https://github.com/deopard/aws-exercise-b.git
cd aws-exercise-b
npm install
sudo vi /opt/nginx/conf/nginx.conf
--------------------------
39번 라인부터 9줄 복사(9yy)
90번 라인에서 p
100번 라인 '}' 입력
1) 39번 server_name 뒤에 퍼블릭 IPv4 주소를 퍼블릭 IPv4 DNS 주소로 변경!
2) 96번 root /var/www/aws-exercise-b/public; 로 변경
3) 99번 passenger_startup_file /var/www/aws-exericse-b/app.js; 로 변경
sudo service nginx restart
윈도우 웹 브라우저로 가서 IPv4주소와 IPv4 DNS 주소를 차례대로 입력해서 확인
교재 EC2 인스턴스 작성 - 2 에서 nginx와 phusion passenger 설치 완료
===================================
sudo vi /opt/nginx/conf/nginx.conf
👉 nginx의 설정 파일을 수정
----------------------------------------
17 http {
18 server_names_hash_bucket_size 128;
👉 http 블럭 첫 줄에 추가
👉 긴 이름의 서버 이름을 허용하기 위한 설정
19 passenger_root /var/passenger/passenger-6.0.12;
...
39 server {
40 listen 80;
41 server_name 43.201.73.226;
👉 server_name localhost -> EC2 인스턴스 퍼블릭 IPv4 주소로 변경
...
43 root /var/www/aws-exercise-a/public;
👉 nginx의 documentRoot 설정
👉 교재에서 제공하는 샘플 프로젝트가 위치한 /var/www/aws-exercise-a/ 경로를 지정
👉 클라이언트가 웹서버 접속 시 서버는 위의 경로를 가장 먼저 찾음
45 passenger_enabled on;
👉 phusion passenger 활성화
46 passenger_app_type node;
👉 기본 타입을 Node.js 로 설정
47 passenger_startup_file /var/www/aws-exercise-a/app.js;
👉 phusion passenger의 시작 파일을 app.js로 지정
...
53 # location / {
54 # root html;
55 # index index.html index.htm;
56 # }
-----------------------------------
esc -> :wq
sudo /opt/nginx/sbin/nginx
👉 마지막으로 nginx(웹 서비스) 시작
이제 윈도우의 웹 브라우저 주소창에 EC2 인스턴스의 퍼블릭 IPv4 주소를 입력
AWS exercise의 A project입니다.
라는 문장이 화면에 보임!
p38
cd /etc/init.d
👉 /etc/init.d 디렉토리(폴더)는 서비스 스크립트 파일들이 존재함
sudo vi nginx
👉 새 파일이 만들어지면 i 를 눌러서 입력모드 전환
👉 p39 페이지 아래의 경로에서 받은 스크립트 내용을 붙여 넣음
👉 수업 시 미리 복사 받은 "nginx 시작 스크립트.txt" 공유 파일 활용
👉 붙여넣기 후 esc -> :wq 빠져나옴
ls -l
👉 새롭게 생성한 nginx가 보이나 x(실행권한) 권한이 없음
sudo chmod 755 nginx
👉 vi 편집기로 생성한 nginx 파일의 실행권한을 부여
👉 chmod : change modify , 퍼미션 변경
👉 755(rwxr-xr-x) : 소유자 읽고/쓰고/실행 가능, 소유그룹 읽고/실행 가능, 그 밖의 유저 읽고/실행 가능
ls -l
👉 nginx가 녹색으로 변경된 것을 확인
sudo service nginx stop
sudo service nginx start
sudo service nginx restart
sudo service nginx status
👉 서비스가 잘 동작하는지 확인
p40
sudo chkconfig --add nginx
👉 ntsysv 프로그램을 실행할 때 nginx 항목이 보이도록 추가 시킴
sudo ntsysv
[*] nginx
👉 스페이스바를 눌러 등록된 nginx 항목에 * 를 넣고 탭키를 눌러서 OK를 선택
👉 이제 exercise-intance7가 시작될 때 자동으로 nginx가 동작
p41. 하나의 서버에 두 개의 애플리케이션 동작
cd /var/www
👉 /var/www 디렉토리로 이동
git clone https://github.com/deopard/aws-exercise-b.git
👉 퍼블릭 DNS 주소로 접근 시 보여 줄 샘플 프로젝트 b를 다운로드 받음
cd aws-exercise-b
👉 다운로드 받은 샘플 프로젝트 'aws-exercise-b' 디렉토리로 이동
npm install
sudo vi /opt/nginx/conf/nginx.conf
👉 nginx의 설정 파일 수정
-------------------------------
39 server {
라인에 커서를 위치시키고 9yy를 눌러서 9줄을 복사
※ 89번 라인의 '}' 부분이 39번 라인의 server '{' 과 세트
90번 라인에 커서를 위치시키고 p를 눌러서 붙여넣음
91번 라인부터 복사한 9줄이 붙여넣기 됨
91 server {
92 listen 80;
93 server_name 43.201.73.226;
94
95 root /var/www/aws-exercise-a/public;
96
97 passenger_enabled on;
98 passenger_app_type node;
99 passenger_startup_file /var/www/aws-exercise-a/app.js;
100 }
=> 새로 만든 server 블록은 '}'이 없으므로 100번 라인에서 i 를 눌러 입력모드로 전환 후 '}' 입력
새롭게 추가한 91 ~ 100 라인 수정
1) 39번 server_name 뒤에 퍼블릭 IPv4 주소를 퍼블릭 IPv4 DNS 주소로 변경!
2) 96번 root /var/www/aws-exercise-b/public; 로 변경
3) 99번 passenger_startup_file /var/www/aws-exericse-b/app.js; 로 변경
변경이 완료되면 esc -> :wq
sudo service nginx restart
👉 마지막으로 변경된 내용을 적용한 후 다시 시작
윈도우 웹 브라우저로 가서 IPv4주소와 IPv4 DNS 주소를 차례대로 입력해서 확인
'⛏️ > LINUX | AWS' 카테고리의 다른 글
[AWS] ELB(로드밸런서) (1) | 2024.01.03 |
---|---|
[AWS] Auto Scaling (1) | 2023.12.28 |
[AWS] EC2(Apache)-RDS(MySQL) 워드프레스 구현 (0) | 2023.12.19 |
[AWS] RDS(MySQL)를 연동하여 wordpress 설치 (0) | 2023.12.14 |
[AWS] RDS 생성하기 (0) | 2023.12.14 |