일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Linux
- Model Adaptations
- 우분투2004
- AWS
- Phrase Sets
- mnist
- ubuntu
- EC2
- jquery
- html
- keras
- FastAPI
- Ubuntu2004
- Google Speech To Text
- 가장쉽게배우는머신러닝
- 과일종류예측
- Django
- KoBERT
- UbuntuServer
- Transfer_Learning
- Kaggle
- 모델적응
- Flask
- Custom Classes
- model
- 스파르타코딩클럽
- 4주차
- KoBART
- ajax
- 서버
- Today
- Total
영웅은 죽지 않는다
[AWS] EC2 우분투와 MySQL 연동 삽질 과정 본문
[Web] AWS EC2 서버 구매 및 접속하기 (Mac OS 기준)
AWS EC2 서버 구매하기 https://ap-northeast-2.console.aws.amazon.com/ec2/v2/home?region=ap-northeast-2 위 사이트에 접속해서 인스턴스 설치를 해야 한다. 오른쪽 위의 인스턴스 시작을 누른 뒤에, 나는 리..
heroeswillnotdie.tistory.com
위 글의 [ 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.가 뜬 걸 보고 기분이 너무 좋아서 쓰는 글.
참고한 블로그
[AWS] AWS EC2에 mysql 설치하기 (ubuntu)
1. ubuntu 패키지 정보 업데이트 sudo apt update 2. mysql 설치 apt를 이용하여 mysql 을 설치합니다. 설치 과정에서 y/n를 묻는 문구가 나오면, y 를 입력하여 설치합니다. sudo apt install mysql-server 3...
mirae-kim.tistory.com
"Incorrect string value" when trying to insert UTF-8 into MySQL via JDBC?
This is how my connection is set: Connection conn = DriverManager.getConnection(url + dbName + "?useUnicode=true&characterEncoding=utf-8", userName, password); And I'm getting the following er...
stackoverflow.com
'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 |