이번에 이용중이던 서버호스팅사에서 서버가 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일 텀블러에 썼던 글 이동)
답글 남기기
댓글을 달기 위해서는 로그인해야합니다.