관련글
[2021.03.11 - IT/AWS] - [3T] AWS 3 tier Architecture 구성하기 - Windows Terraform Infra(1)
[2021.03.12 - IT/AWS] - [3T] AWS 3 tier Architecture 구성하기 - Windows Terraform 서버 (2)
사실상 이번 파트는 aws나 terraform보다는 좀 더 범용적이다.
linux (centos)에서 apache 및 tomcat, mysql을 통해 3 tier를 구성하는 것이다.
환경
- Xshell7
- Amazon linux (centOS)
Xshell로 Bastion 접속하기
Bastion의 공인 IP를 이용하면 된다.
bastion 접속을 위해 등록했던 key를 가져온다. 현재는 test를 위해 모두 같은 key로 통일
암호는 비워둔 채로 확인을 클릭한다.
베스천 접속 완료
Bastion에 key.pem 등록 및 private 서버에 접속하기
Bastion에서 private 서버에 접속하기 위해 Xshell에 ip와 port를 이용해 터널링 후, 새 세션으로 접속 할 수 있지만
좀 더 간단하게 접속하기 위해 key 파일을 bastion 내부에 저장하였다.
[ Xshell을 이용하여 Windows에서 Linux로 파일 전송 방법Xshell을 이용하여 Windows에서 Linux로 파일 전송 방법 1. 아래 명령어를 이용하여 lrzsz를 설치한다. $ sudo yum -y install lrzsz 실행결과] 2. 설치가 완료 되었으면, 리눅스로 옮길 파일 들을 Xshe..byounghee.tistory.com
해당 작업 이후 key 파일을 bastion에 옮기게 되면 key파일을 bastion에서 확인 할 수 있다.
이후 private 서버에 접속하기 ssh 명령어로 접속한다.
ssh -i test.pem ec2-user@10.0.x.x
그러나 저 상태에서 바로 접속을 하려 하면
Permission denied (publickey, gssapi-keyex, gssapi-with-mic). 이러한 경고문구를 볼 수 있다. 권한이 없다.
당황하지 말고 해당 키가 존재하는 위치에서 밑의 명령어를 통해 test.pem에 permisstion을 준다.
chmod 400 test.pem
이후에 다시 ssh 명령어를 통해 접속을 하게 되면 원하는 private 영역에 접근 할 수 있다.
Web - Apache 컴파일 설치
Apache를 설치하는 2가지 방법이 있다.
\1. yum 설치
\2. 컴파일 설치
yum 설치가 좀 더 간단하지만, 컴파일로 apache 설치를 진행한다.
사전 진행
먼저, sudo -i로 root 계정으로 접속하도록 한다. root가 아니면 실행되지 않는 명령어가 많다.
이후 yum update 및 패키지 설정으로 apache 컴파일 다운로드를 위한 세팅을 진행한다.
yum -y update
yum -y install gcc-c++
yum -y install zlib-devel
yum -y install openssl-devel
yum -y install expat-devel
yum groupinstall 'Development Tools'
apache 파일 다운로드
컴파일 설치는 apache 사이트에서 직접 zip 파일을 가져오는 것이다.
이후, 해당 링크에서 Source에 있는 tar.gz 파일의 링크를 복사해 wget 명령어로 다운로드를 진행한다.
https://httpd.apache.org/download.cgi
wget https://downloads.apache.org//httpd/httpd-2.4.46.tar.gz
ls로 파일 확인 후 gzip으로 압축파일을 풀어준다.
tar xvf httpd-2.4.46
- 위 tar.bz2로 wget된 파일은 z옵션을 제거해야 한다. tar xvfz를 하게되면 gzip: stdin: not in gzip format 에러가 발생한다.
\2. apr & apr-util 다운로드
이왕이면 tar.gz를 다운받자
wget https://downloads.apache.org//apr/apr-1.7.0.tar.gz
wget https://apr.apache.org/download.cgi
위가 apr, 밑이 apr-util이다.
이후 마찬가지로 압축 풀기 진행
tar xvfz apr~
압축 풀기 완료
pcre 다운로드 및 설치
Perl Compatible Regular Expressions, 정규 표현식을 지원하는 라이브러리
wget https://sourceforge.net/projects/pcre/files/pcre/8.43/pcre-8.43.tar.gz/download -O pcre-8.43.tar.gz
tar로 압축해제를 진행한 후 설치를 진행한다.
cd pcre-8.43
./configure
make
make install
apr과 apr-util을 httpd 폴더 안으로 이동하기
mv apr-1.7.0 httpd-2.4.46/srclib/apr
mv apr-util-1.6.1 httpd-2.4.46/srclib/apr-util
apache 설치
cd httpd-2.4.46
./configure --prefix=/usr/local/apache --enable-so --enable-ssl=shared --with-ssl=/usr/local/ssl --enable-rewrite
make
make install
/usr/local/apache가 저장 폴더가 된다.
서비스 등록 (파일수정) - 이건 안해도 되는 듯 싶다.
vi /usr/lib/systemd/system/httpd.service
[Unit]
Description=The Apache HTTP Server
[Service]
Type=forking
PIDFile=/usr/local/apache/logs/httpd.pid
ExecStart=/usr/local/apache/bin/apachectl start
ExecReload=/usr/local/apache/bin/apachectl graceful
ExecStop=/usr/local/apache/bin/apachectl stop
KillSignal=SIGCONT
PrivateTmp=true
[Install]
WantedBy=multi-user.target
Apache 실행
systemctl httpd start
그런데 여기서 에러가 걸렸다.
Unknown operation ‘httpd’
> 해당 에러를 잡기위해 많은 것을 해봤지만 못찾았었는데, pcre를 다운받고 다시 차근차근 시작했다.
apache 실행에는 여러 명령어가 있는데, systemctl이 잘 되지 않으면
/usr/local/apache2/bin/httpd -k start
설치한 루트로 가서 직접 실행
service httpd start
service 명령어로 실행하는 방법이 있다.
Apache 실행 확인
아직 설정을 하나만 했다.
apache가 정상적으로 실행이 됐다면, 조금 기다린 후에 타겟 그룹을 확인하면 healthy로 바뀌어 있는 것을 볼 수 있다.
ALB는 도메인을 가지고 있기 때문에, ALB의 도메인으로 접속하면 healthy로 되어 있는 서버에 로드밸런스를 해준다.
위와 같은 문구가 ALB의 링크에 나타나게 된다.
그리고 위와 같은 방법을 2에도 실행해주면된다.
또다시 설치를 진행하고 싶지 않다면 ami를 떠서 ec2를 새로 생성해주면 된다.
Was - EBS에 Tomcat 컴파일 설치
Tomcat을 원하는 위치에 설치하기 위해 컴파일로 설치를 진행한다.
Tomcat을 root가 아닌 새로운 EBS에 설치한다.
사전 진행
일단 yum -y update를 통해 yum을 update를 해준다.
먼저, EC2에서 추가한 EBS를 사용하기위해 등록을 진행한다.
lsblk
lsblk 명령어를 통해 현재 ec2에 연결된 disk를 확인할 수 있다. xvda는 root disk이다.
우리가 사용할 disk는 xvdb인데, 아직 등록이 안되어 있다.
Mount 진행
docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/ebs-using-volumes.html
- 에러 (mount 전 실행)
mount: /test: wrong fs type, bad option, bad superblock on /dev/xvdb, missing codepage or helper program, or other error.
타입에 대한 확인이 필요하다.
unix.stackexchange.com/questions/315063/mount-wrong-fs-type-bad-option-bad-superblock
mkfs.ext4 /dev/xvdb
등록을 해주면 등록 완료된다.
현재 위치 root(~)에서 진행한다. 따라서 terra 폴더는 /root/terra에 만든다.
mkdir terra
mount /dev/xvdb /root/terra
mount할 폴더를 생성하고, mount 명령어를 통해 disk와 폴더를 mount한다.
재부팅 후에도 마운트를 유지하기위해 fstab에 해당 경로를 등록해줘야 한다.
blkid
해당 명령어로 disk의 UUID를 알아낸다.
vim /etc/fstab
vi 또는 vim 편집기로 /etc/fstab에 UUID와 파일 경로를 등록하면은 완료된다.
unmount 후 다시 mount를 진행하면 완료된다.
mount -a
혹시 모르니 mount -a를 통해 다시 등록해준다.
이후 작업 위치를 cd로 움직여 /root/terra에서 Tomcat 컴파일을 진행한다.
Tomcat
java8 설치
Tomcat은 Java가 필요하다.
yum install -y java-1.8.0-openjdk-devel.x86_64
# java 버전 확인
javac -version
java8 버전으로 자바를 설치한다.
Tomcat 컴파일 설치
downloads.apache.org/tomcat/tomcat-9/v9.0.44/bin/
Index of /tomcat/tomcat-9/v9.0.44/bin downloads.apache.org
wget https://downloads.apache.org/tomcat/tomcat-9/v9.0.44/bin/apache-tomcat-9.0.44.tar.gz
tar xzf apache-tomcat-9.0.44.tar.gz
chown -R ec2-user:ec2-user apache-tomcat-9.0.44
해당 사이트에서 wget을 통해 tomcat 폴더를 받아온 후, 압축 해제 및 소유자 변경을 진행한다.
그러면 terra 폴더에 이와 같이 apache 폴더가 생기게 된다.
PATH 경로 지정
vim /etc/profile
JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.272.b10-1.amzn2.0.1.x86_64
CATALINA_HOME=/root/terra/apache-tomcat-9.0.44
CLASSPATH=$JAVA_HOME/jre/lib:$JAVA_HOME/lib/tools.jar:$CATALINA_HOME/lib-jsp-api.jar:$CATALINA_HOME/lib/servlet-api.jar
PATH=$PATH:$JAVA_HOME/bin:/bin:/sbin
export JAVA_HOME PATH CLASSPATH CATALINA_HOME
/etc/profile의 제일 마지막에 해당 경로를 추가한다.
JAVA_HOME은 /usr/lib/jvm에 있는 java 버전으로 바꿔준다.
CATALINA_HOME은 tomcat 파일이 존재하는 위치이다.
tomcat은 servlet으로 구동되기 때문에 java와 tomcat 파일을 이용해 구동을 할 수 있다. tomcat의 위치에 있는 servlet을 사용한다.
source /etc/profile
설정을 적용한다.
방화벽
# 방화벽 명령어 설치
yum install firewalld
# 시스템 등록
systemctl unmask firewalld
systemctl enable firewalld
systemctl start firwalld
# 방화벽 설정
firewall-cmd --permanent --add-service=http
firewall-cmd --permanent --add-service=https
firewall-cmd --reload
# 8080 port open
firewall-cmd --zone=public --permanent --add-port=8080/tcp
안되는 이유를 찾아서 이것저것 설정했었는데, 안되면 일단 방화벽이라도 오픈해보자
Tomcat 실행
cd apache-tomcat-9.0.44/bin
./startup.sh
해당 폴더로 움직여서 startup shell을 실행시키면 tomcat을 실행할 수 있다.
Tomcat 실행 확인
ps -ef | grep tomcat
netstat -tnl
curl http://localhost:8080
여러 명령어로 확인할 수 있는 데, curl 명령어를 통해 index.html이 잘 받아오면 성공이다.
port가 열린 것을 확인하고 싶으면 netstat -tnl로 8080이 열려있는 지 확인한다.
이후 apache와 마찬가지로 로드밸런서에서 타겟 그룹이 healthy가 되어있는 지 확인한다.
이후 apache, tomcat 연동 및 DB 연동은 (4)에서 이어진다.
근데 apache가 잘 안되는데,,이유가 뭘까?