Search

서버 구성하기 미션 가이드

📌
서버를 구성해보며 리눅스를 경험해봅니다. 처음 리눅스를 하는 분들은 리눅스 명령어 Zip 을 참고해보세요 🙏🏻
📌
Ubuntu 22.04 LTS 환경을 기준으로 작성하였습니다.

1. EC2 생성하기

A. AWS web console로 접속합니다.
B. EC2 메뉴로 접근하세요.
•
Ubuntu 선택 (실습 명령어 테스트는 Ubuntu Server 18.04 LTS 환경에서 진행해보았어요)
•
InstanceType : t3.medium 정도면 괜찮습니다.
•
스토리지 : 서비스 운영할 것을 고려해서 설정해주세요. 일단 8GB로 설정하고 이후에 늘려도 괜찮습니다. 이 경우, 서버를 끄지 않고 어떻게 확장하면 될지 한번 고민해보세요 😎
•
키 페어는 최초 생성한 것을 재사용해도 됩니다.
❗
서버를 사용하지 않을 때는 중지(stop)해주세요. 중지만 해도 EC2 비용이 나가지 않아 상당히 비용절감이 됩니다. (스토리지 등의 비용만 나가는데, 스토리지 비용은 크지 않습니다.)
C. 서버에 접속하기
•
서버 IP는 web console로 확인 가능합니다.
•
맥 운영체제 사용자
# 터미널 접속한 후 앞 단계에서 생성한 key가 위치한 곳으로 이동한다. $ chmod 400 [pem파일명] $ ssh -i [pem파일명] ubuntu@[SERVER_IP]
Bash
복사
•
윈도우 운영체제 사용자

2. 서버간 ssh 연결 구성

•
systems manager를 활용하여 Bastion 구성을 하셔도 좋습니다. 해당 내용은 영상을 참조하세요~ 🙏🏻
•
Bastion Server로 사용할 별도의 EC2를 생성하고, Bastion Server에서 서비스용 서버에 ssh 연결을 설정해봅시다.
## Bastion Server에서 공개키를 생성합니다. bastion $ ssh-keygen -t rsa bastion $ cat ~/.ssh/id_rsa.pub ## 접속하려는 서비스용 서버에 키를 추가합니다. $ vi ~/.ssh/authorized_keys ## Bastion Server에서 접속을 해봅니다. bastion $ ssh ubuntu@[서비스용 서버 IP]
Bash
복사
•
Bastion Server는 자신의 로컬 PC 공인 IP에서만 22번 포트로 접근이 가능하도록 Security Group을 설정합니다.
•
서비스용 서버에 22번 포트로의 접근은 Bastion 서버에서만 가능하도록 Security Group을 설정합니다.
•
Bastion 서버에서 다른 서버에 접근이 용이하도록 별칭을 설정합니다.
bastion $ vi /etc/hosts [서비스용IP] [별칭] bastion $ ssh [별칭]
Bash
복사

3. 서버 환경설정 해보기

A. 환경변수 적용하기
•
Session Timeout 설정을 하여 일정 시간 작업을 하지 않을 경우 터미널 연결을 해제할 수 있습니다.
$ sudo vi ~/.profile HISTTIMEFORMAT="%F %T -- " ## history 명령 결과에 시간값 추가 export HISTTIMEFORMAT export TMOUT=600 ## 세션 타임아웃 설정 $ source ~/.profile $ env
Bash
복사
B. Shell prompt 변경하기
•
Bastion 등 식별해야 하는 서버의 Shell Prompt를 설정하여 관리자의 인적 장애를 예방할 수 있습니다.
$ sudo vi ~/.bashrc USERNAME=BASTION PS1='[\e[1;31m$USERNAME\e[0m][\e[1;32m\t\e[0m][\e[1;33m\u\e[0m@\e[1;36m\h\e[0m \w] \n\$ \[\033[00m\]' $ source ~/.bashrc
Bash
복사
C. logger 를 사용하여 감사로그 남기기
•
서버에 직접 접속하여 작업할 경우, 작업 이력 히스토리를 기록해두어야 장애 발생시 원인을 분석할 수 있습니다. 감사로그를 기록하고 수집해봅니다.
$ sudo vi ~/.bashrc tty=`tty | awk -F"/dev/" '{print $2}'` IP=`w | grep "$tty" | awk '{print $3}'` export PROMPT_COMMAND='logger -p local0.debug "[USER]$(whoami) [IP]$IP [PID]$$ [PWD]`pwd` [COMMAND] $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" )"' $ source ~/.bashrc
Bash
복사
$ sudo vi /etc/rsyslog.d/50-default.conf local0.* /var/log/command.log # 원격지에 로그를 남기려면 어떻게 구성해야 할까요? $ sudo service rsyslog restart $ tail -f /var/log/command.log
Bash
복사

4. 소스코드 배포, 빌드 및 실행해보기

A. 자바 설치
$ which java $ sudo apt update $ sudo apt install default-jre $ sudo apt install default-jdk
Bash
복사
B. 빌드
$ git clone [저장소] $ cd [저장소] $ ./gradlew clean build # jar파일을 찾아본다. $ find ./* -name "*jar"
Bash
복사
C. 실행
$ java -jar [jar파일명] & # Application을 실행 후 정상적으로 동작하는지 확인해봅니다. # 브라우저에서도 http://{서버 ip}:{port}로 접근해보세요. $ curl http://localhost:8080
Bash
복사
•
-Dserver.port=8000 옵션을 활용하여 port를 변경할 수 있어요.
•
서버를 시작 시간이 너무 오래 걸리는 경우 -Djava.security.egd 옵션을 적용해보세요.
$ java -Djava.security.egd=file:/dev/./urandom -jar [jar파일명] &
Bash
복사
•
터미널 세션이 끊어질 경우, background로 돌던 프로세스에 hang-up signal이 발생해 죽는 경우가 있는데요. 이 경우 nohup명령어를 활용합니다.
$ nohup java -jar [jar파일명] 1> [로그파일명] 2>&1 &
Bash
복사
D. 종료
# 프로세스 pid를 찾아봅니다. $ ps -ef | grep java $ pgrep -f java # 프로세스를 종료합니다. $ kill -2 [PID]
Bash
복사

5. DNS 구성하기

무료 도메인 사이트 등을 활용하여 DNS 설정을 합니다.