서버 구성하기 미션 가이드

서버를 구성해보며 리눅스를 경험해봅니다. 처음 리눅스를 하는 분들은 리눅스 명령어 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 설정을 합니다.