[AWS] AWS ec2 서버에서 Flask 구동하기 까지의 과정 🤪

깨미·2021년 10월 20일
0

💻 배워가기 💻

목록 보기
17/30
post-thumbnail

로컬에서 개발한 웹을 aws 서버에서 구동하려고 한다.
딱 서버만 만들어져 있고, 80, 443 기본 port만 open 된 상태이다.

os : AWS Linux


Update Yum

os는 AWS Linux 이기 때문에 yum 패키지를 이용한다.
yum을 사용하기 위해 update 해준다.

sudo yum update

MySQL

Install MySQL

sudo yum install -y mysql-server

해당 명령어를 치면 에러가 난다. 그렇기 때문에 rpm 파일로 직접 설치 해야 한다.

sudo yum localinstall https://dev.mysql.com/get/mysql57-community-releas-el7-11.noarch.rpm
sudo yum install -y mysql-community-server
  • -y 옵션은 모든 질문에 자동으로 y로 대답하겠다는 것.

Auto Start

sudo systemctl enable mysqld
sudo systemctl start mysqld

//실행되어있는 지 확인
sudo systemctl status mysqld

Password Check

자동으로 설정된 password를 확인한다.

sudo grep 'A temporary password' /var/log/mysqld.log

Edit Password

sudo mysql_secure_installation

password 정책을 확인하고 맞춰서 변경하자.

Excute MySQL

mysql -u root -p

Create Database

mysql> create database example;

Git

Install Git

sudo yum install git -y

Clone Repository

mkdir example
git clone https://github.com/-/example.git

Python(Flask)

Virtual Environment

기본 내장돼있는 python3를 사용하여 가상환경을 만든다.

python3 //있는 지 체크
python3 -m venv ./venv //가상환경 생성
source venv/bin/activate //가상환경 시작

pip3 install

pip3 install -r requirements //묘듈만 모아놓은 파일을 이용하여 가상환경에 모듈이 설치 되도록 한다.

[Error] pip3 install mysqlclient

ERROR: Command errored out with exit status 1:
command: /home/ec2-user/venv/bin/python3 -u -c 'import sys, setuptools, toenize; sys.argv[0] = '"'"'/tmp/pip-install-pkdq9ckw/mysqlclient/setup.py'"'"'; _file='"'"'/tmp/pip-install-pkdq9ckw/mysqlclient/setup.py'"'"';f=getattr(tokeize, '"'"'open'"'"', open)(file);code=f.read().replace('"'"'\r\n'"'"', '"'"\n'"'"');f.close();exec(compile(code, file__, '"'"'exec'"'"'))'

mysql-devel을 설치하라는 데 계속 없다고 뜨고 이거 때문에 엄청 시간을 많이 잡아 먹었다.

일단 기본 linux에 내장돼 있는 python을 썼었는데 python-dev로 다시 설치한 후 mysqlclient를 설치하니 성공적으로 설치 되었다.

yum search python3 | grep devel // yum 패키지에 존재하는 python-devel 찾기 
sudo yum install -y python3-devel.x86_64 //python3-devel.x86_64 로 설치
pip3 install mysqlclient

Port Redirect

80 port는 열어져있지만, permission deined 문제로 바로 사용할 수 없기 때문에 80 port를 8080으로 redirect 시켜줘야 한다.

Redirect 80 to 8080

sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080

Check Port

sudo iptables -t nat -L

이런식으로 확인할 수 있다.

Start Flask

python3 main.py //로 실행하면 끝!

app.run 시에 port를 8080으로 해주어야 한다 !


[Error] MySQL Group by

1055 - Expression of SELECT list is not in GROUP BY clause and contains nonaggregated column this is incompatible with sql_mode=only_full_group_by

mysql -u root -p
mysql > SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

[Error] sqlalchemy.exc.OperationalError: (1366, "Incorrect string value")

Drop Database or Table

이미 생성된 테이블은 삭제한 후, 인코딩 속성을 설정하도록 한다.
나는 아예 데이터베이스를 삭제 하였다.

mysql -u root -p

mysql> drop table tablename; //table 삭제

mysql> drop database databasename;//database 삭제

Edit etc/my.cnf

linux의 etc에서

sudo vi my.cnf 명령어를 입력한 후,
my.cnf 파일 안에 아래 명령어를 추가한다.

[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'

[client]
default-character-set=utf8mb4

[mysql]
default-character-set=utf8mb4

저장할 때는 :wq! 로 저장한다.

Restart mysql

sudo systemctl restart mysqld 명령어를 입력하여 mysql을 재시작한다.

Check status, Create Database or Table

mysql 에 다시 접속하여 설정이 제대로 되었는 지 확인한다.

mysql -u root -p

mysql> status;


이런식으로 변경이 된 것을 확인할 수 있다 !

또한 삭제 했던 데이터베이스나 테이블을 다시 생성하여 데이터를 넣어보자

mysql> create database databasename;

mysql> create table tablename (
    column1 datatype,
    column2 datatype,
    column3 datatype,
   ....
);

이제 한글을 넣어도 아무 이상없이 데이터를 넣을 수 있다 !

profile
vis ta vie

0개의 댓글