기존 서버호스팅에서 AWS 로 이전하기

이번에 이용중이던 서버호스팅사에서 서버가 SSD 하드웨어 고장으로 웹서버가 뻗어버렸습니다. ㅜㅜ

호스팅사의 대충처리때문에 장장 12시간 넘게 걸려서 복구했네요.

결국 애초에 조만간에 할 걸로 계획중이던 AWS (아마존웹서비스) 이전을 강제로 하게 되었습니다. 

작업내용을 간단히 기록해 둡니다. 


1. 웹서버 이전하기 

EC2 로 이전하면서 Ubuntu 16.04 64bit 를 이용하기로 했습니다.

1.1 EC2에서 적당한 인스턴스를 정해 구동시킵니다.

여기서는 전체적인 설정 순서를 안내합니다. EC2 설정은 따로 포스팅하던지 해야 겠네요. ^^;

1.2 nginx  설치

sudo apt install nginx

1.3 가상호스트 설정

sudo vi /etc/nginx/sites-enabled/VirtualHost.com.conf

1.4 PHP5.6 및 PHP5.6-FPM 설치 

해당 웹사이트 소스가 7.x대를 지원하지 않아 5.6을 설치했습니다.

설치 참고 : https://askubuntu.com/questions/756181/installing-php-5-6-on-xenial-16-04 

1.5 Nginx 에 PHP5.6 FPM 연결 설정

location ~ \.(php|html|htm)$ {

  include snippets/fastcgi-php.conf;

  fastcgi_pass unix:/run/php/php5.6-fpm.sock;

}

1.6 PHP 5.6 설정

; 기존 거지같은 소스코드 지원 (<? 지원)

short_open_tag = on

; 업로드 파일 사이즈 변경

post_max_size = 64M

upload_max_filesize = 64M

1.7 PHP5.6-FPM pool.d/www.conf 연결 설정

; 기본 연결 커넥션 수 늘리기  

pm.max_children = 256

; php 이외의 확장자 사용을 위한 설정 추가

security.limit_extensions = .php .php3 .php4 .php5 .html .htm


2. HTTPS 보안서버 구축

이제는 거의 무조건 사용중인 Let’s encrypt 를 이용해서 구성했습니다. 3개월마다 갱신해줘야 하는게 살짝 문제지만 자동으로 생성해주는 툴이 너무 편하고 무료이다 보니 모든 사이트에 사용하게 되네요.

이제는 크게 설정할 것도 없이 nginx 웹서버 설정만 잘 되어있다면 자동으로 만들어 줍니다.

참고 : https://certbot.eff.org/lets-encrypt/ubuntuxenial-nginx

기존블로그에 올린 참고 내용 : 

http://doogle.blog.me/220963405181

http://doogle.blog.me/220979742815


3. 디비 서버를 AWS RDS 로 이전하기

간단할 줄알았는데 의외로 복병이었습니다.

3.1 AWS RDB에서 인스턴스 추가

이부분은 적당히 설명읽으면서 진행하시면 됩니다. ㅡ.ㅡ;;

3.2 인스턴스에 기본 파라메터 그룹을 변경

기본 파라메터 그룹은 time_zone 과 sql_mode 값이 기존에 apt로 설치해서 쓰던 mariadb 와 달랐습니다.

특히 sql_mode  값이 달라지면 auto_increment 필드같은 것도 insert 시 생략할 수 없는 등.. 많은 차이가 있더군요.

먼저 기본 파라메터 그룹은 수정할 수 없기때문에 파라메터 그룹을 추가합니다.

추가한 파라메터 그룹에서 time_zone과 sql_mode 를 찾아서 각각 다음과 같이 수정합니다.

time_zone = Asia/Seoul

구글에서 타임존 설정을 검색해보면 이방식말고 프로시져를 등록해두고 init_connect 에 프로시져를 호출하도록 하는 게 있는데.. 저는 잘 안돼더군요. 그냥 이게 바른 방식인것 같습니다.

sql_mode = ERROR_FOR_DIVISION_BY_ZERO

(sql_mode 는 그냥 비워두고 싶은데 비워두면 설정이 저장되지 않아 적당한거 일단 넣었습니다. 뭔가 날림 ㅡ.ㅡ;;)

사실 이내용 때문에 작성합니다. 다른것은 다 고만고만한 문제인데 sql_mode 때문에 아예 기능이 동작하지 않는 부분이 많더군요.

3.3 서버 재부팅

일단 3.2를 수행한 후 인스턴스 목록에 가보면 수정중으로 나옵니다.

새로고침을 해보시면 수정이 끝나는 때가 있습니다.

이때 해당 인스턴스를 선택해서 인스턴스 설정에 재부팅 메뉴로  DB서버를 재부팅해야 합니다.

3.4 웹서버 접근용 계정 생성 및 DB 생성

> CREATE USER ‘dbuser’@’ec2.internal.ip’ IDENTIFIED BY  ‘dbpassword’;

> GRANT USAGE ON * . * TO  ‘dbuser’@’ec2.internal.ip’ IDENTIFIED BY ‘dbpassword’ WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;

> CREATE DATABASE IF NOT EXISTS  `디비이름` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;

> GRANT ALL PRIVILEGES ON  `dbuser` . * TO  ‘dbuser’@’ec2.internal.ip’;

dbuser : 웹서버 접근용 계정 아이디

ec2.internal.ip : 웹서버인 EC2 서버 내부아이피

dbpassword : 웹서버 접근용 계정아이디

디비이름 : 디비이름

3.5 백업 DB자료 복원

 mysql -udbuser -pdbpassword -h “디비서버인스턴스의 앤드포인트” dbname < backup.sql

당장 급해서 일단 간단하게 작성해둡니다. 나중에 생각나면 보강해볼려고 하는데 언제가 될지 ^.^?

(2018년 3월 26일 텀블러에 썼던 글 이동)