로컬에서 개발한 웹을 aws 서버에서 구동하려고 한다.
딱 서버만 만들어져 있고, 80, 443 기본 port만 open 된 상태이다.
os : AWS Linux
os는 AWS Linux 이기 때문에 yum 패키지를 이용한다.
yum을 사용하기 위해 update 해준다.
sudo yum update
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
sudo systemctl enable mysqld
sudo systemctl start mysqld
//실행되어있는 지 확인
sudo systemctl status mysqld
자동으로 설정된 password를 확인한다.
sudo grep 'A temporary password' /var/log/mysqld.log
sudo mysql_secure_installation
password 정책을 확인하고 맞춰서 변경하자.
mysql -u root -p
mysql> create database example;
sudo yum install git -y
mkdir example
git clone https://github.com/-/example.git
기본 내장돼있는 python3를 사용하여 가상환경을 만든다.
python3 //있는 지 체크
python3 -m venv ./venv //가상환경 생성
source venv/bin/activate //가상환경 시작
pip3 install -r requirements //묘듈만 모아놓은 파일을 이용하여 가상환경에 모듈이 설치 되도록 한다.
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
80 port는 열어져있지만, permission deined 문제로 바로 사용할 수 없기 때문에 80 port를 8080으로 redirect 시켜줘야 한다.
sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
sudo iptables -t nat -L
이런식으로 확인할 수 있다.
python3 main.py //로 실행하면 끝!
app.run 시에 port를 8080으로 해주어야 한다 !
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',''));
이미 생성된 테이블은 삭제한 후, 인코딩 속성을 설정하도록 한다.
나는 아예 데이터베이스를 삭제 하였다.
mysql -u root -p
mysql> drop table tablename; //table 삭제
mysql> drop database databasename;//database 삭제
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! 로 저장한다.
sudo systemctl restart mysqld
명령어를 입력하여 mysql을 재시작한다.
mysql 에 다시 접속하여 설정이 제대로 되었는 지 확인한다.
mysql -u root -p
mysql> status;
이런식으로 변경이 된 것을 확인할 수 있다 !
또한 삭제 했던 데이터베이스나 테이블을 다시 생성하여 데이터를 넣어보자
mysql> create database databasename;
mysql> create table tablename (
column1 datatype,
column2 datatype,
column3 datatype,
....
);
이제 한글을 넣어도 아무 이상없이 데이터를 넣을 수 있다 !