하루면 되지 않을까 생각하고 시작했던 서버 이전이 여러가지 난관에 부딛히며 일주일간 개 고생을 하였다. 다시는 개 고생하지 말자며 그간의 경험을 기록한다.
서버는 apache-php-mysql 환경과 apache-tomcat-oracle-xe 환경 두대가 있다.
5년간 운영된 나의 서버는 그동안 많은 고생을 해주었고 작은(짭짤한) 수입을 내게 안겨주었다. 하드의 보증 기간도 3년인데 5년이나 사용한 나의 서버가 이제 언제 죽을지 몰라서 걱정하는 사태에 이르렀기에 클라우드 서버로의 서버 이전을 결심하게 되었다.
클라우드 서버 이용의 장점은, 무지 많으나 그중에 자동스크립트로 서버운영이 가능하고 서버 생성 삭제 증설이 간편하며 블록저장소의 고가용성 등이 있다.
아래는 일주일 간의 고생 내용이다.
1. 클라우드 서버 선택
iwinv.kr : 오픈스택 기반의 클라우드 서비스
아마존 대비 120배 저렴.
다양한 웹 GUI 서비스 기능. (모니터링, 방화벽, 서버 업/다운 그레이드, 오토스케일, 로드밸런스, 블록스토리지, DNS관리, 서버 운영 가이드 등)
2. DOCKER 환경 설치
base 운영체제 : 우분투16.04_64bit
sudo 사용 유저 생성
ssh root 로그인 제한 설정
최신 버전의 docker-ce, docker-compose 설치
docker-compose 사용 네트워크 생성 mtu-1450
(networks-outside-external-name)
block-storage 파티션생성 및 자동 마운트 설정
3. 서버 이미지 저장
현재까지 설정된 서버를 이미지로 저장하여 추가 서버 생성시 이미지를 통해 현재 시점의 이미지로 서버를 추가 할 수 있다.
4. 저장된 이미지를 통한 추가 서버 생성.
로그인 시 /dev/null 오류 발생. (처리 : 파일 삭제 rm -f /dev/null 후 재시작)
명령프롬프트가 동일하여 서버 구분이 어려움. (/etc/hostname 이름 변경 )
sudo 명령 사용시 hostname 오류 발생. (/etc/hosts에 127…. hostname추가)
5.사용할 docker 이미지 서치 (php서버)
apache-php-ssl 설정이 된 서버 이미지 검색 및 검증 후 설치 테스트
(적당한 이미지 검색 및 검증 테스트에 6시간이상 소요됨 ssl 설정이 큰 이유)
php: short코드 문제 발생 및 로그인시 세션 data 파일 생성 오류 발생.
mysql: mariadb로 설치시 db파일이 생성되지 않는 문제 발생하여 mysql생성.
#php 도커 이미지 : ubuntu-16-apache-php-5.6
#컨테이너 이미지 모두 삭제 방법(docker rm `docker ps -a -q`)
#PHP 짧은 태그 허용
6.docker-compose.yml 파일 생성(version 2)
docker 컨테이너 이미지 설정(volume, port)
mtu-1450 network 사용설정
자동 재시작 설정 restart
7.mysql dump 복원
db 사용계정은 mysql evn설정을 통해 자동으로 생성.
#Mysql 백업 및 복구
8.php 소스 반영 및 db연결
db연결 설정 : 도메인 ‘db'(컨테이너이름) 로 연결 설정함.
DB연결 함수 없음 오류 발생 : php7.1에서 5.6으로 docker 이미지 변경
apache redirect 설정 .htaccess 기입방법 사용.
9. letsencript 인증서 설정
소스 다운로드 : git clone letsencript …
인증서 생성 : 초기 이메일등 입력 후 차후 crontab을 이용한 자동생성 가능
10. 테스트 및 확인
안전함 사이트 접속 가능 및 성능 기존 사이트에 비해 30~40% 상향됨.
(예상 원인 ssd 블록스토리지의 성능향상으로 인한 DB 성능 개선 및 ddr4의 최신 서버환경.)
11. 사용할 docker 이미지 서치 (tomcat서버)
이미지 서치 및 검증에 2일 소요 : tomcat-ssl cert파일 바로 사용문제.
java openjre문제. 결국 openjre 및 jks 사용해서 톰캣구성함. (메모리튜닝등 남음)
#사용된 oracle 도커 이미지 : sath89/oracle-xe-11g
( manager폴더가 삭제가 안되어서 webapps를 볼륨링크로 연결하여 생성안되게 막음)
#아래는 스터디용 링크
axiom-data-science : 서버 생성 스크립트 작성시 참조(메모리 설정등)
(보안상 tomcat 계정으로 기동되는 이미지들은 work폴더에 jsp_classs파일이 생성되지 않는 문제가 있다.)
12. docker-compose.yml 파일 생성(version2)
docker 컨테이너 이미지 설정(volume, port)
mtu-1450 network 사용설정
자동 재시작 설정 restart
command명령 letsencrip 인증서를 jks로 변환해야하는데 스터디 필요.ㅠ
13. 오라클 DB dump파일 복원
charactorset 문제 발생. WINMS949에서 UTF8로 넘어가면서 컬럼 자릿수 오류 다수 발생. 해결방법: 스키마 생성 후 올류나는 컬럼 자릿수 수정 후 임폴트하는 방법과 문자셋을 변경하는 방법.
문자셋 변경함: 오류 발생. varchar에 대한 문자셋이 중복됨. 해결방법 database 문자셋 변경.
# 오라클 DB 이전 (exp/imp)
# 오라클 리스너 확인 : lsnrctl status
#ORA-06553 알수없는 문자셋 오류 처리
(update props$를 KO16MSWIN949를 실행 후 DB데이터 복구에는 성공했으나 ORA-06553오류가 발생했다. DATABASE CHARACTER 부분을 추가 실행하여 문제를 해결함.)
14. java 소스반영.
db연결 설정 변경 IP주소를 컨테이너 이름 (oracle)으로 변경.
tomcat redirect 설정: web.xml파일 <web-app>에 <security-constraint>추가
톰캣 재시작시 로딩이 오래걸리는 문제 확인 안됨.ㅠ.(2분가까이..)
#tomcat https설정 : server.xml <Connector port=”443″ … 추가
15. letsencript 인증서 생성.
jks 파일 변환 : openssl 사용 및 keytool 사용
jks 파일 volume연결.(파일이 없을 시 폴더로 인식해서 빈폴더 생성됨)
16. 작동 확인 및 테스트
문제없음. 성능 기존서버 대비 30~40%정도 빨라짐….. 일단 튜닝을 안해도 되겠다…ㅎㅎㅎ
17. docker 컨테이너 표준시 변경
서버를 재시작 시 지속적으로 변경해주는 스크립트를 작성해서 변경하는 방법도 있으나 , /etc/localtime 파일을 volume으로 연결해 주는 방법이 더 간편하다. (스크립트 작성시 참조 : 리눅스 한국 시간으로 변경)
18. letsencript crontab 설정