일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- model
- keras
- AWS
- ajax
- jquery
- Custom Classes
- Django
- ubuntu
- Model Adaptations
- FastAPI
- UbuntuServer
- 4주차
- html
- Linux
- EC2
- Kaggle
- 모델적응
- Phrase Sets
- mnist
- 우분투2004
- 과일종류예측
- KoBERT
- 서버
- Flask
- 스파르타코딩클럽
- 가장쉽게배우는머신러닝
- Google Speech To Text
- Ubuntu2004
- Transfer_Learning
- KoBART
- Today
- Total
영웅은 죽지 않는다
[AWS] EC2 우분투와 MySQL 연동 삽질 과정 본문
위 글의 [ FileZilla 설치 및 응용 ]에서
4. 내 서버에 파일 넣기
까지는 똑같은 과정이다.
저기서는 Flask와 MongoDB 기준으로 AWS 설정을 했고
지금 하고 있는 프로젝트는 Django와 MySQL로 진행하고 있기에
그 이후 과정부터는 설정값을 조금씩 바꾸어 주어야 한다.
그리고 저 글에서는 파이참 기반이어서 포트가 5000 또는 5001번이었고
여기선 vscode로 돌렸기에 8000번이다.
이것들을 바탕으로 세팅 시작
기본 EC2 서버 환경 세팅
1. 한국시간 세팅
sudo ln -sf /usr/share/zoneinfo/Asia/Seoul /etc/localtime
2. 파이썬 세팅 (python3 -> python)
sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 10
3. pip 세팅 (pip3 -> pip)
# pip3 설치
sudo apt-get update
sudo apt-get install -y python3-pip
# pip3 대신 pip 라고 입력하기 위한 명령어
sudo update-alternatives --install /usr/bin/pip pip /usr/bin/pip3 1
MySQL 설치 및 EC2와 연동
1. 우분투 서버 업데이트 및 mysql-server 설치
sudo apt-get update
sudo apt-get install mysql-server
2. MySQL 설치 및 실행여부 확인
dpkg -l | grep mysql-server
sudo netstat -tap | grep mysql
-> 여기서 netstat에 에러가 발생하면
sudo apt install net-tools 를 통해 net-tools를 설치하면 된다고 한다.
3. MySQL 접속 및 사용할 DB 생성
sudo mysql -u root -p
CREATE DATABASE <DB 이름>;
SHOW DATABASES; # 잘 만들어졌는지 확인
4. User 생성
나는 username을 root로 설정했다.
USE <DB 이름>
CREATE user 'root'@'%' IDENTIFIED BY '<비밀번호>';
여기서도 삽질을 살짝 했었다.
'%'의 의미는 외부 접근 권한을 부여하는 것인데,
저기에 localhost를 넣었다가 자꾸 localhost에 대한 권한 에러(Access denied for ....)가 자꾸 나서 ㅠ
사람을 미치게 했었다
뭐 보안이 중요한 프로젝트라면 host를 지정해주는 게 맞기는 하지만
크게 상관이 없다면 host를 %로 지정해서 기존에 사용하던 계정에 외부 접근 권한을 허용하자..
5. User 사용 권한 설정
grant all privileges on *.* to 'root'@'%' with grant option;
flush privileges # 변경 내용을 메모리에 적용
여기서도 위와 같이 외부 접근 권한을 허용했다.
show grants for root; # 권한 적용 확인
권한 적용이나 테이블 관리 등은 타이핑 하나하나에 심혈을 기울여서 하도록 하자.
구글링 첫번째 내용으로 슥슥 하다가 내 환경이랑 다르면
다시 죄다 revoke 해야하고 drop 해야하고 난리가 나버린다
6. 외부 접속 설정
- conf.d 디렉토리로 이동
(디렉토리가 다른 경로에 있다면 그곳으로 이동한다.)
cd /etc/mysql/mysql.conf.d
- mysqld.cnf 파일 수정
sudo vi mysqld.cnf
들어가게 되면, 수많은 에디터 설정값들이 나온다.
그곳에서는 입력 모드로 전환하지 않으면 일반적인 백스페이스, 타이핑 등이 먹지 않는다.
아래를 확인하고 집중하자
- 입력 모드로 전환하기 -> a
- 입력 모드 빠져나오기 -> esc
- 내용 저장하고 에디터 빠져나오기 -> 콜론(:) 누른 후 (wq) 적은 후 엔터
이것을 바탕으로, 설정값들 중 bind-address를
127.0.0.1 에서 0.0.0.0 으로 변경한다.
외부 설정을 허용하기 위한 것이다.
7. AWS EC2 인스턴스에 MySQL 접속 포트 추가
- 인스턴스 -> 보안 -> 보안 그룹 -> 인바운드 규칙 편집
8. MySQL WorkBench 연동
- Hostname에는 본인의 퍼블릭 IPv4 주소값을 입력
- Username에 본인의 username 입력
9. 기존 본인 파일에 Host 값들 수정하기
나같은 경우,
Django 내에서 pymysql 라이브러리로
내 로컬과 MySQL 서버로 연동하는 코드가 있었다.
db = pymysql.connect(host='localhost', user='root', password='*******',
db='capston', charset='utf8mb4')
위와 같이 작성되어 있는 부분이 있었는데,
host 값을 localhost가 아닌 내 퍼블릭 IPv4 주소로 바꾸어 주어야 한다.
또, settings.py에서도
DATABASES = my_settings.DATABASES
SECRET_KEY = my_settings.SECRET_KEY
위처럼 보안을 위해서 database와 secret key 값을 my_settings.py에서 불러오도록 했었고,
git ignore가 돼있는 my_settings.py를 들어가면
DATABASES 부분에서도 'HOST':'localhost'로 입력이 되어 있었다.
그 부분도 똑같이 바꾸어 준다.
10. Filezilla에서 우분투 서버로 내 파일 업로드
수정한 파일들을 파일질라의 드래그 앤 드롭으로 서버로 옮기거나,
아니면 깃허브에 커밋&푸쉬 후 클론을 새로 받아오자.
11. utf8 또는 utf8mb4 설정
ㅎr.. 여기서 많은 시간을 보낸 것 같다
내 코드에는 pymysql로 데이터베이스에 직접 INSERT하는 코드가 있었는데,
거기에는 한글을 포함해 이모티콘까지 있어서
기존 내 로컬에서는 utf8mb4로 바꾸어 주었었다.
근데 내가 위에서 CREATE TABLE로 생성했을 때 기본 값을 적용하지 않아서
따로 지정을 해주었어야 했다
이것저것 해보았는데, 갓 스오플에서 해결한 코드가 있다.
일단 sudo mysql -u root -p를 통해 mysql로 접속하자
sudo mysql -u root -p
ALTER DATABASE <DB 이름> CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
원래는 내 DB를 use한 상태에서
ALTER TABLE table_name CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
를 입력했었는데
자꾸 똑같은 에러가 발생하는 것이었다
그냥 각 테이블이 아닌 DB 전체를 바꾸어 보니까 돼더라
12. 기쁘게 runserver
여기까지 왔으면 python manage.py runserver 정도는 2초만에 타이핑 할 것인데
왜인지는 모르겠으나 0:8000으로 접속해야 내 퍼블릭 주소로 넘어간다고 한다.
아마 외부 접속을 허용해서 그런듯??
참고로 SSH 접속 끊어도 서버가 계속 돌게 하려면
nohup python manage.py runserver 0:8000 &
위 코드를 입력하면 된다.
Quit the server with CONTROL-C.가 뜬 걸 보고 기분이 너무 좋아서 쓰는 글.
참고한 블로그
'Programming > Web' 카테고리의 다른 글
Docker와 Poetry로 FastAPI 개발환경 구성하기 (1) | 2024.06.15 |
---|---|
[Web] Django 구성요소 및 기본 설치/세팅 예제 (0) | 2022.05.04 |
[Web] AWS 세팅하기 - 포트포워딩, nohup, 구매한 도메인 연결, og태그 (0) | 2022.04.05 |
Flask 기본 세팅 및 HTML, API 설계 (POST, GET) (0) | 2022.03.20 |
[Web] AWS에서 포트 열어주기 및 Flask 서버 실행하기 (0) | 2022.03.15 |