AWS EC2에 nginx와 mariadb를 설치하는 방법에 대하여 정리합니다.

서버 타임존 변경

aws는 기본적으로 os설치시 타임존이 UTC로 맞춰져있으므로 nginx/mariadb 설치전에 TimeZone을 변경해 줍시다.

$ date
2019. 04. 30. (화) 04:23:00 UTC
$ sudo rm /etc/localtime
$ sudo ln -s /usr/share/zoneinfo/Asia/Seoul /etc/localtime
$ date
2019. 04. 30. (화) 13:45:00 KST

nginx 설치

– amazon-linux-extras install nginx

yum으로는 nginx 패키지를 찾지 못합니다. amazon-linux-extras 명령어로 nginx를 설치합니다.

$ amazon-linux-extras list
  0  ansible2                 available    [ =2.4.2  =2.4.6 ]
  2  httpd_modules            available    [ =1.0 ]
  3  memcached1.5             available    [ =1.5.1 ]
  4  nginx1.12                available    [ =1.12.2 ]
  5  postgresql9.6            available    [ =9.6.6  =9.6.8 ]
  6  postgresql10             available    [ =10 ]
  8  redis4.0                 available    [ =4.0.5  =4.0.10 ]
  9  R3.4                     available    [ =3.4.3 ]
 10  rust1                    available    \
        [ =1.22.1  =1.26.0  =1.26.1  =1.27.2  =1.31.0 ]
 11  vim                      available    [ =8.0 ]
................. 생략
$ sudo amazon-linux-extras install nginx1.12
$ sudo service nginx start
Redirecting to /bin/systemctl start nginx.service

nginx 관련 파일 위치

설정 – /etc/nginx/nginx.conf
로그 – /var/log/nginx

방화벽 오픈

웹서버에 접근하기 위해 80 port를 열어줍니다.
ec2 security groups 설정에서 inbound에 80 port를 추가합니다.

Type : HTTP
Protocol : TCP
Port range : 80
Source : 0.0.0.0/0

nginx 실행

$ sudo service nginx start

확인

mariadb 설치

– yum install mariadb-server

$ sudo yum install mariadb-server
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
amzn2-core                                                                                                        | 2.4 kB  00:00:00     
Resolving Dependencies
--> Running transaction check
---> Package mariadb-server.x86_64 1:5.5.62-1.amzn2.0.1 will be installed
--> Processing Dependency: mariadb(x86-64) = 1:5.5.62-1.amzn2.0.1 for package: 1:mariadb-server-5.5.62-1.amzn2.0.1.x86_64
--> Processing Dependency: perl-DBI for package: 1:mariadb-server-5.5.62-1.amzn2.0.1.x86_64
............. 생략
--> Finished Dependency Resolution

Dependencies Resolved

===========================================================================
 Package                                 Arch                   Version                                 Repository                  Size
===========================================================================
Installing:
 mariadb-server                          x86_64                 1:5.5.62-1.amzn2.0.1                    amzn2-core                  11 M
Installing for dependencies:
 mariadb                                 x86_64                 1:5.5.62-1.amzn2.0.1                    amzn2-core                 9.0 M
............ 생략

Transaction Summary
===========================================================================
Install  1 Package (+9 Dependent packages)

Total download size: 22 M
Installed size: 111 M
Is this ok [y/d/N]: y

$ sudo service mariadb start
Redirecting to /bin/systemctl start mariadb.service

Port 변경 / 언어셋 변경

기본포트 3306은 잘 알려진 Port이므로 다른 포트로 변경하여 사용하는 것을 추천합니다. 언어셋을 utf8mb4로 설정하는 이유는, IOS에서 이모티콘/이모지 등을 표현할때 문자당 4byte를 사용하는데 기본설정을 사용하면 3byte까지만 받을수있어 utf8mb4로 설정해서 문자를 받을수있게 해주는 것입니다.

$ sudo vim /etc/my.cnf
[mysqld]
port = 36091
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
character_set_server = utf8mb4
collation_server = utf8mb4_unicode_ci
$ sudo service mariadb restart

root 패스워드 변경

root패스워드는 처음엔 설정이 안되어 있으므로 설정을 해주도록 합니다.

// root 패스워드 설정
$ mysqladmin -u root -p password 'xxRootPwd^&*'
Enter password: 그냥 엔터
$ mysql -u root -p
Enter password:설정한 비밀번호 입력
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.00 sec)

운영용 database / id 생성

root를 그냥 사용해도 되지만. root의 경우 모든 권한을 가지고 있고 외부에서 접속 가능하게 설정할 경우엔 위험할 수 있으므로 운영 DB와 운영ID를 따로 만들어 권한을 격리시켜 사용하는 것을 추천합니다.

// root로 mariadb 접속
MariaDB [(none)]> create database daddyprogrammer;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> set password for happydaddy@localhost=password('xxxdaddypwd^&*');
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> grant all privileges on daddyprogrammer.* to happydaddy@localhost identified by 'xxxdaddypwd^&*';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> exit;

$ mysql -u happydaddy -p
Enter password:설정한 비밀번호 입력
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| daddyprogrammer    |
| test               |
+--------------------+
3 rows in set (0.00 sec)

외부 접속 설정

ec2 security groups 설정에서 mariadb port를 inbound에 추가합니다.

Type : Custom TCP Rule
Protocal : TCP
Port range : 위에서 설정한 myriadb의 port
Source : 0.0.0.0/0

운영 계정 외부 접속 권한 설정

daddyprogrammer database에 대하여 happydaddy 유저가 103.xxx.200. 으로 시작하는 IP에서만 비밀번호를 넣어 접근가능하도록 설정합니다.

// root 로그인
MariaDB [(none)]> grant all privileges on daddyprogrammer.* to happydaddy@'103.xxx.200.%' identified by 'xxxdaddypwd^&*';
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)

접속 확인

아래 링크에서 mysql workbench를 다운로드 받아 설치합니다.
https://dev.mysql.com/downloads/workbench/

외부 접속 권한 설정한 운영계정으로 접속할 커넥션을 하나 생성합니다.

접속에 성공하면 다음과 같은 화면을 볼 수 있습니다.