본문 바로가기

문돌이 존버/Django 스터디

AWS EC2 Ubuntu 18.04 Django 서버 구축 및 Logstash 연동 (1탄)

반응형

<출처: stackoverflow>

이전 글서는 AWS Linux 2 AMI 서버에 장고 서버를 구축한 과정을 설명드렸는데요, MySQL 설치가 생각보다 간단하지 않고 참고할 자료도 없는 것 같아 어쩔수 없이 Ubuntu 18.04 서버로 갈아타게 되었습니다. 이로써 저는 2개의 Ubuntu 18.04 서버를 생성했고, 각각 장고 서버와 ELK 서버로 나누었습니다. 

일단, 우분투는 기본적으로 파이썬 2 / 3 버전이 모두 설치되어 있습니다. python 2 --version 이나 python 3 --version을 입력하면 확인 가능합니다. 아래는 가상환경을 준비하기 위한 과정입니다.

sudo apt-get install python3-pip
mkdir myvenv
cd myvenv
# sudo apt install virtualenv
# virtualenv myvenv
apt-get install python3-venv
python3 -m venv myvenv

가상환경을 실행하기 위해선 source myvenv/bin/activate를 입력, 종료하려면 deactivate를 입력하시면 됩니다. 

다음은 웹서버 구축을 위해 아파치 서버를 설치하겠습니다. AWS 리눅스 버전과 명령어가 다른데요, 아래와 같이 순서대로 입력하면 됩니다. 

sudo apt-get install apache2
sudo service apache2 start

장고 설치 과정은 아래와 같고, 이전 글에서도 자세히 설명했으니 넘어가겠습니다. 

sudo pip install django
django-admin startproject myproject
cd myproject
django-admin startapp myproject_app

다음은 MySQL을 다운로드하는 과정입니다. 리눅스에 비해 설치 과정이 간단해서 다행이네요...(리눅스는 실패했습니다 ㅠ)

sudo apt-get install mysql-server
sudo mysql # mysql 콘솔 진입(패스워드 입력 필요 X)
# sudo mysql -u root -p (초기 패스워드: root) 
> update mysql.user set plugin='mysql_native_password' where user='root';
> update mysql.user set authentication_string=PASSWORD('새로운 password') where user='root'; # 패스워드 설정
> flush privileges;
> quit;
# exit;
sudo service mysql restart
sudo mysql -u root -p
> status; # mysql 세팅 확인

위에서 마지막 status를 입력하면 기본 MySQL 세팅을 확인할 수 있는데요, 아마 언어셋이 utf8이 아니라 latin으로 되어있을 것입니다. 이를 utf8로 바꿔주기 위해 my.cnf 파일에 들어가 아래 코드를 붙여준 후 다시 mysql을 시작하면 됩니다. 이와 관련된 내용은 beygee.log님의 글을 참고했습니다. 

sudo vi /etc/mysql/my.cnf 

# 붙여넣을 코드
[client]
default-character-set = utf8

[mysqld]
init_connect = SET collation_connection = utf8_general_ci
init_connect = SET NAMES utf8
character-set-server = utf8
collation-server = utf8_general_ci

[mysqldump]
default-character-set = utf8

[mysql]
default-character-set = utf8

# 다시 시작
sudo service mysql restart 

또한, MySQL 외부 접속을 허용하기 위해서는 간단한 수정이 필요합니다. 먼저, sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf 를 통해 설정 파일에 들어가

bind-address = 0.0.0.0 

으로 바꿔주시면 됩니다. 

MySQL에 본격적으로 사용자 설정 및 권한 부여, 데이터베이스 생성 과정을 진행해보겠습니다.

sudo mysql -u root -p
> create user 'name'@'%' identified by 'password';
> grant all privileges on *.* to '(name)'@'%';
# > grant all privileges on (특정 DB).* to '(name)'@'%'; 
> flush privileges; 
> quit;

@ 뒤에 있는 '%'는 사용자 계정을 허용하는 접속 IP 입니다. localhost를 입력하면 MySQL이 설치된 시스템에서만 접근이 가능하고, %라고 입력하면 다른 시스템에서 외부로 접근이 가능하다는 뜻입니다. 사용자 계정을 만들고 나면 모든 권한을 부여합니다. (사용자에게 특정 DB 사용 권한만 주고 싶다면 두 번째 명령어를 사용하시면 됩니다.)

sudo mysql -u name -p # root가 아닌 특정 사용자 계정으로 접속
> create database "DB name";

> show databases;
> drop database "DB name"; # DB 삭제  

저는 혼란을 피하기 위해 위에서 설정한 사용자 계정으로 접속을 했지만 root로 접속하셔도 상관없습니다. 저의 경우, 장고 모델의 테이블이 그대로 들어왔기 때문에 따로 테이블을 생성하거나 데이터를 insert하지 않았습니다. 만약 이것이 궁금하다면, 마블랑 이야기님의 글을 참고하면 좋을 듯합니다.

이제 MySQL과 장고를 연동시키기 위한 과정을 살펴보겠습니다. 저희가 필요한 것은 mysqlclient인데요, pip으로 바로 설치되지 않고 미리 준비해야 할 라이브러리들이 있어 주의하셔야 합니다. 아래 코드를 그대로 사용하시면 되고, 관련 내용은 magnoliarfsit.log님의 글을 참고했습니다.

sudo apt-get install gcc
sudo apt-get install libmysqlclient-dev
pip install mysqlclient

다음으로는 장고의 settings.py 코드를 바꿀 차례입니다. 이렇게 되면 장고의 기본 DB는 MySQL이 됩니다. 

DATABASES = {    
   'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'DB name',
        'USER': 'username',
        'PASSWORD': 'userpassword',
        'HOST': 'AWS ec2-ip', 
        'PORT': '3306',
    }
}

오늘은 여기서 마치고 다음에 장고와 로그스태시를 연동하는 과정 2탄을 설명하겠습니다. 

728x90
반응형