- References
- https://hub.docker.com/_/amazonlinux (Docker hub)
- 개발 서버 아키텍처

- AWS Resource List
- EC2 #01 (Amazon Linux2)
- EC2 #02 (RHEL8)
- EC2 #03 (RHEL8)
- RDS #01 (PostgreSQL 13.7)
- PostgreSQL 13 버전 설치
### Repository 설치$ sudo yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm### Repository Enable$ sudo yum repolist -y enabled# PostgreSQL 서버 설치$ sudo yum install -y postgresql13-server### 설치 확인$ ls /usr/pgsql-13$ id postgresuid=26(postgres) gid=26(postgres) groups=26(postgres)### postgres 유저 패스워드 설정$ sudo passwd postgresChanging password for user postgres.New password:Retype new password:passwd: all authentication tokens updated successfully.>> '올빼미3883' 으로 설정### initdb$ sudo /usr/pgsql-13/bin/postgresql-13-setup initdb$ sudo cat /var/lib/pgsql/13/initdb.log... (중략)syncing data to disk ... okSuccess. You can now start the database server using:/usr/pgsql-13/bin/pg_ctl -D /var/lib/pgsql/13/data/ -l logfile start### PostgreSQL 접속 환경 설정 (pg_hba.conf, postgresql.conf)$ cd /var/lib/pgsql/13/data/$ vi pg_hba.conf-INSERT-... 중략 ...# IPv4 local connections:host all all 0.0.0.0/0 trust:wq$ vi postgresql.conf-INSERT-... 중략 ...# - Connection Settings -listen_addresses = '*' # what IP address(es) to listen on;# comma-separated list of addresses;# defaults to 'localhost'; use '*' for all# (change requires restart)#port = 5432:wq### Database 시작 / 중지$ /usr/pgsql-13/bin/pg_ctl -D /var/lib/pgsql/13/data/ -l logfile start$ /usr/pgsql-13/bin/pg_ctl -D /var/lib/pgsql/13/data/ -m immediate stop-> 쉘 스크립트로 만들어 관리## 방화벽 끄기 & 상태확인$ systemctl disable firewalld && systemctl stop firewalld$ systemctl status firewalld
- Docker 설치
### STEP1. old version 도커 제거$ sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine### STEP2. Set up Repository$ sudo yum install -y yum-utils$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo### STEP3. Install Docker Engine && Start Docker$ yum update -y && yum install -y docker-ce docker-ce-cli containerd.io$ systemctl restart docker && systemctl enable --now docker
- Docker 설치 확인 & Amazon Linux 이미지 Pull
$ sudo systemctl status docker$ sudo docker version## Amazon Linux 이미지 Pull$ docker pull amazonlinux## 다운로드 된 Image 확인$ docker iamgesREPOSITORY TAG IMAGE ID CREATED SIZEamazonlinux latest 01bdb519be20 12 days ago 164MB
- Docker Image Run & Port 매핑
- https://docs.aws.amazon.com/ko_kr/AWSEC2/latest/UserGuide/managing-users.html (AMI 별 root 계정) -> Docker 이미지 Container 환경에서는 ec2-user 가 아니라 root로 설정 되어있음
$ sudo docker run -it -d --privileged -p 8056:8056 -p 18080:18080 -p 5543:5543 -p 19000:19000 --name TESTamazonlinux:latest /bin/bash$ sudo docker ps -alCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES5e64f4f43be4 amazonlinux:latest "/bin/bash" 5 seconds ago Up 5 seconds 0.0.0.0:5543->5543/tcp, 0.0.0.0:8056->8056/tcp, 0.0.0.0:18080->18080/tcp, 0.0.0.0:19000->19000/tcp TEST## Container 실행 확인$ sudo docker exec -it --user root {CONTAINER ID} /bin/bash예시 > sudo docker exec -it --user root 5e64f4f43be4 /bin/bash$ mkdir /app$ exit
- 컨테이너 내부로 Install 파일 전송 & 확인
$ docker cp /{installfile_dir}/* {container_id}:/app예시> docker cp /install/{파일명} 5e64f4f43be4:/app$ sudo docker exec -it --user root {CONTAINER ID} /bin/bash예시 > sudo docker exec -it --user root 5e64f4f43be4 /bin/bash
- 설치파일 압축 해제
- 기본 이미지에 tar, xz, gzip 패키지 없음 (설치 필요) - yum install -y tar xz gzip
$ cd /app$ tar -xvzf apiportal.tgz (API Portal 압축파일)$ tar -xvzf weasym-server.tgz (weasyM 압축파일)/app/apiportal/dbschema/dbschema.txt 필요
- API Portal 설정
- /app/apiportal/tomcat/webapps/ROOT/WEB-INF/classes/ 디렉토리 아래 위치
- application.properties : SMTP 서버 ip 정보

- databasesource.properties : DB 서버 정보

- logback.xml : /logs 절대 경로 정보

- schedulejob.properties : GW 서버 ip 주소 필요

-> 이외 세부 설정은 관리자 가이드 참고 (HMM_API API_Portal_v1.1.docx)
- API Portal bash_profile 환경변수 설정
# JAVAexport JAVA_HOME=/app/apiportal/jdk <<< 수정 필요 (apiportal 압축파일을 푼 절대경로로 수정)export CLASSPATH=.:$JAVA_HOME/lib/tools.jarexport PATH=$JAVA_HOME/bin:$PATHexport CATALINA_OUT=/dev/nullexport CATALINA_OPTS="-Djava.library.path=/sw/aprlib"export JAVA_OPTS=" -Xms4096m -Xmx4096m "export JAVA_OPTS=" -Djava.net.preferIPv4Stack=true ${JAVA_OPTS} "export LOG4J_FORMAT_MSG_NO_LOOKUPS=trueexport LD_LIBRARY_PATH=/sw/aprlib:$LD_LIBRARY_PATH# aliasalias gotomcat='cd /app/apiportal/tomcat' <<< 수정 필요alias goclasses='cd /app/apiportal/tomcat/webapps/ROOT/WEB-INF/classes' <<< 수정 필요
- API Portal DB 설정 (현 Oracle -> PostgreSQL 필요)
- /{install_dir}/apiportal/dbschema 아래 dbschema.txt 파일 백업 (Oracle DDL문)
- weasyM 설정
- OS 커널 파라미터 수정
$ cd /etc/secutiry$ vi limits.conf… 중략 …* soft nofile 65536* hard nofile 65536* soft nproc 131072* hard nproc 131072$ cd /etc$ vi sysctl.conf… 중략 …fs.file-max = 6815744kernel.sem = 250 32000 100 128kernel.shmmni = 4096kernel.shmall = 1073741824kernel.shmmax = 4398046511104kernel.panic_on_oops = 1net.core.rmem_default = 104857600net.core.rmem_max = 33554432net.core.wmem_default = 104857600net.core.wmem_max = 33554432net.ipv4.conf.all.rp_filter = 2net.ipv4.conf.default.rp_filter = 2fs.aio-max-nr = 1048576net.ipv4.ip_local_port_range = 9000 65500net.ipv4.conf.all.arp_notify = 1net.ipv4.tcp_rmem = 4096 8388608 33554432net.ipv4.tcp_wmem = 4096 8388608 33554432net.ipv4.tcp_window_scaling = 1net.ipv4.tcp_moderate_rcvbuf = 1net.ipv4.tcp_sack = 1net.ipv4.tcp_max_syn_backlog = 30000$ system -p
- weasyM 설정 파일 수정
- {Install_dir}/weasym-server/conf 아래 위치
- sysconf.properties 수정


- {install_dir}/weasym-server/haproxy 설정파일 수정

- DB 연결 수정 (PostgreSQL)
- {install_dir}/weasym-server/lib/weasym-server.jar 다운로드 후 반디집으로 열기
- application.properties 우클릭 편집 DB 연결 부분 수정 후 저장



- DB Dump 파일 백업
- {설치 dir}/weasym-server/packages 아래 public.dump 백업
- DB Object 생성 및 기초 데이터 로드 (PostgreSQL 13 설치 된 VM - RDS 에서 실행)
## pg_restore 명령을 통해 데이터와 DB Object를 로드$ /usr/pgsql-14/bin/pg_restore --verbose --clean --no-acl --no-owner -h 10.68.239.212 -U postgres -d postgres public.dump
- Amazon Linux 환경변수 설정 <- Linux Image Builder 인스턴스
- weasyM 패키지와 weasyMAgent 폴더는 각 EC2 instance #02 / #03에 설치 및 업로드
- 가이드 참고