요구사항
로컬 개발 환경에 설치한 HTTP 웹 서버를 물리적으로 떨어져 있는 원격 서버에 배포해 정상적으로 동작하는지 테스트한다.
이때 HTTP 웹 서버 배포 작업은 root 계정이 아닌 배포를 담당할 새로운 계정을 만들어 진행한다.
① 계정 추가 및 sudo 권한 할당
② 각 계정별 UTF-8 인코딩 설정해 한글 이슈 해결
③ JDK, 메이븐 설치
④ Git설치, clone 및 빌드
⑤ 방화벽 설정(ufw)
⑥ 소스 코드 재배포
참고. AWS 사용할 경우 아래 링크 참고 (p83)
https://opentutorials.org/module/1946
참고. 영상 자료
https://www.youtube.com/watch?v=dWGzApCuF9M
https://www.youtube.com/watch?v=N8iLAuAo-Qw
https://www.youtube.com/watch?v=5hjYe_PggJI
Docker로 로컬 개발 환경을 구축하고 있어서, Ubuntu Image에 요구사항 처리 진행함
1. 계정 추가 및 sudo 권한 할당
Ubuntu 최신 이미지를 사용했을 때 minimize 되어 있고, sudo가 설치되어 있지 않았다
sudo 설치
$ apt-get install -y sudo vim
sudo(superuser do) : 특정 계정에 대해 root 권한 전체 또는 지정한 일부만 사용 가능하도록 권한 부여/관리/제어/실행을 담당
아래 3개의 파일 통해 유저 생성, 그룹 할당, sudo 권한 부여 정보 관리한다
# 유저 정보
$ cat /etc/passwd
# 그룹 정보
$ cat /etc/group
# sudo 권한 부여 관리
$ sudo vim /etc/sudoers
신규 그룹/유저 생성, 비밀번호 수정
$ groupadd -g 777 ubuntu
$ useradd -mru 777 -g ubuntu ubuntu
$ echo 'ubuntu:ubuntu' | chpasswd
신규 아이디를 sudo 그룹 추가
# sudo 그룹에 ubuntu 추가
$ usermod -aG sudo ubuntu
# 확인
$ cat /etc/group | grep ubuntu
$ group ubuntu
sudo 권한 부여
- sudo 그룹에 추가했다고 sudo 를 사용할 수 없고, /etc/sudoers 파일에 설정 해야 비로서 sudo 사용가능
- 내부 테스트이므로 전부 ALL을 주지만 실제 운영 환경에서는 적절히 할당하기
방법1. Vim 편집
$ vim /etc/sudoers
#편집 후 저장
root ALL=(ALL:ALL) ALL
ubuntu ALL=(ALL:ALL) ALL
방법2. append 명령어로 추가
$ echo "ubuntu ALL=(ALL:ALL) ALL" >> /etc/sudoers
$ cat /etc/sudoers
ubuntu 계정 sudo 동작 확인
정상 설정 되지 않았을 경우 /root 디렉토리 조회시 아래와 같이 에러 메시지 확인 가능하다
ls : '/root' 디렉터리를 열 수 없습니다: 허가 거부
2. 각 계정별 UTF-8 인코딩 설정 (한글 이슈 해결)
방법1.
vim으로 ~/.bashrc 하단에 아래 내용을 추가한다
export LANG=ko_KR.UTF-8
export LC_ALL=ko_KR.UTF-8
export LANGUAGE=ko_KR:ko:en_US:en
date, locale, env 명령어 통해 설정 적용 확인 가능
방법2.
시스템 전체 적용
$ sudo locale-gen ko_KR.EUC-KR ko_KR.UTF-8
$ sudo dpkg-reconfigure locales
내 계정에 대한 로컬 설정
$ vi .bashrc
LANG="ko_KR.UTF-8"
LANGUAGE="ko_KR:ko:en_US:en"
$ source .bash_profile // 설정 반영
$ env // 설정 확인
3. JDK, Maven 설치
영상에서는 wget으로 직접 다운받아서 압축 해제 후 심볼릭 링크를 걸어 사용하는 방식을 취하고 있다(넘어가요)
설치
# Ubuntu Image에 원하지 않는 jdk가 설치되어 있는 경우, 삭제 후 설치
$ apt remove openjdk*
# jdk11, maven 설치
$ apt-get install -y openjdk-11-jdk maven
패키지 설치 경로 확인
# jdk 설치 경로
$ ls -al /usr/lib/jvm
lrwxrwxrwx 1 root root 21 May 10 06:03 java-1.11.0-openjdk-amd64 -> java-11-openjdk-amd64
drwxr-xr-x 9 root root 4096 Jul 11 22:09 java-11-openjdk-amd64
drwxr-xr-x 2 root root 4096 Jul 11 22:09 openjdk-11
# maven 설치 경로
$ ls -al /usr/share/maven
JAVA_HOME, MAVEN_HOME 환경 변수 설정
-환경 변수의 경우 .bashrc .zshrc .bash_profile .profile 등과 같은 파일에 사용자 설정하여 시스템 접속시 적용되게 된다
-이번에는 .bashrc 에 환경변수 설정한다
# .bashrc 에 환경 변수 추가
$ vim ~/.bashrc
export JAVA_HOME=/usr/lib/jvm/java-1.11.0-openjdk-amd64
export MAVEN_HOME=/usr/share/maven
export PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin
# 바로 반영
$ source ~/.bashrc
재접속시 .bashrc 환경 변수를 적용하게 되는데, source 명령어 통해 재접속 하지 않고 바로 환경 변수 적용 가능
설정 확인
$ java -version
openjdk version "11.0.19" 2023-04-18
OpenJDK Runtime Environment (build 11.0.19+7-post-Ubuntu-0ubuntu122.04.1)
OpenJDK 64-Bit Server VM (build 11.0.19+7-post-Ubuntu-0ubuntu122.04.1, mixed mode, sharing)
$ mvn -version
Apache Maven 3.6.3
Maven home: /usr/share/maven
Java version: 11.0.19, vendor: Ubuntu, runtime: /usr/lib/jvm/java-11-openjdk-amd64
Default locale: ko_KR, platform encoding: UTF-8
OS name: "linux", version: "6.2.0-36-generic", arch: "amd64", family: "unix"
$ echo $JAVA_HOME
/usr/lib/jvm/java-1.11.0-openjdk-amd64
$ echo $MAVEN_HOME
/usr/share/maven
4. Git설치 및 clone
git 설치
$ apt-get install -y git
$ git --version
프로젝트 소스 내려 받기
아래 web-application-server 저장소를 clone한다
https://github.com/slipp/web-application-server
home 디렉토리에 repositories 디렉토리를 만들고 주어진 저장소를 clone 한다
$ cd ~
$ mkdir repositories
$ cd repositories
$ git clone https://github.com/slipp/web-application-server.git
Maven Build 후 실행
$ cd web-application-server
$ mvn clean package -DskipTests
$ ll
$ java -cp target/classes:target/dependency/* webserver.WebServer 8090 &
*형식 : java -cp <classpath> <MainClass>
-cp : classpath 지정
<classpath> : class 파일이나 jar, war 파일이 위치한 경로, 여러개 인 경우 : 으로 연결
<Mainclass> : 실행하려는 자바 어플리케이션의 메인 클래스 나타냄, 패키지.클래스명
8090 : 실행 포트 번호
& : 백그라운드 실행
5. ufw 방화벽 설정
ufw란 ?
- Uncomplicated Firewall 약어 (Uncomplicated : 복잡하지 않은)
- 일반적인 방화벽 설정을 간소화하여 사용자가 쉽게 설정하고 관리할 수 있도록 도와준다
- 주로 Debian 및 Ubuntu와 같은 Debian 계열의 리눅스 배포판에서 사용되며, 이러한 시스템에서는 기본적으로 설치되어 있을 수 있습니다. 사용자는 명령어 라인을 통해 ufw를 구성하고 관리할 수 있습니다.
ufw 설치
$ sudo apt-get install -y ufw
기본 방화벽 설정
sudo ufw enable
sudo ufw allow ssh
sudo ufw allow 80/tcp
sudo ufw allow 8090/tcp
sudo ufw status
- ssh의 경우 22번 포트 tcp 통신을 허용
- 80/tcp의 경우 웹서버(nginx) 추가시 필요하므로 사전에 추가
- docker container 에서 8090 port forwarding을 하고 있어 허용
참고.
https://webdir.tistory.com/206
서버 아이피와 포트(8090) 접속
'독서 > 📚' 카테고리의 다른 글
[Next Step] 6.6 쉘 스크립트를 활용한 배포 자동화(p218) 정리 (0) | 2023.11.03 |
---|---|
무료 전자 도서관 이용 후기 (with 교보문고 전자 도서관 앱) (0) | 2023.11.03 |
[도서 리뷰] 비전공자를 위한 이해할 수 있는 IT 지식 (0) | 2022.05.06 |
[클린코드] 5장. 형식 맞추기 (0) | 2022.02.22 |
[클린코드] 4장. 주석 (0) | 2022.02.22 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!