๐ ์ด ํฌ์คํ ์์๋ AWS EC2, AWS RDS๋ฅผ ํตํ ์์ ์ฒซ ๋ฐฐํฌ ๊ณผ์ ์ ๋ํด ์ ๋ฆฌํ์์ต๋๋ค.
๐ฅ AWS EC2 ์ธ์คํด์ค ์์ฑ
๐ฅ AWS RDS ์ธ์คํด์ค ์์ฑ
๐ฅ AWS EC2, AWS RDS ํ์ฉํ ๋ฐฐํฌ ๊ณผ์
โ๏ธ 1๋จ๊ณ : AMI(Amazon Machine Image) ์ ํํ๋ค.
Ubuntu Server 18.04 LTS(HVM), SSD Volume Type ์ ํํ๋ค.
โ๏ธ 2๋จ๊ณ : ์ธ์คํด์ค ์ ํ ์ ํ
"T2 micro (ํ๋ฆฌ ํฐ์ด ์ฌ์ฉ ๊ฐ๋ฅ)" ์ ํํ๋ค.
โ๏ธ 3๋จ๊ณ : ์ธ์คํด์ค ์ธ๋ถ ์ ๋ณด ๊ตฌ์ฑ
โ๏ธ 5๋จ๊ณ : ํ๊ทธ ์ถ๊ฐ
โ๏ธ 6๋จ๊ณ : ๋ณด์ ๊ทธ๋ฃน ๊ตฌ์ฑ
โ๏ธ "์ ํค ํ์ด ์์ฑ" ์ ํ โข ํค ํ์ด ์ด๋ฆ ์ ๋ ฅ ํ โข "ํค ํ์ด ๋ค์ด๋ก๋" ํด๋ฆญ
โ๏ธ ํค ํ์ด ์ด๋ฆ์ "wecode"๋ก ํ๋ค. โข ์ธ์คํด์ค ์์ ๋ฒํผ ํด๋ฆญ!
โ๏ธ ํค ํ์ด๋ ๋ค์ ๋ค์ด๋ฐ์ ์ ์๊ธฐ ๋๋ฌธ์ ๋ณด๊ด์ ์ํด์ผํ๊ณ , ์ด ํคํ์ด๋ฅผ ํตํด Ubuntu์ ์ ์ํ ์ ์๋ค.
โ๏ธ ๋ํ ํคํ์ด๊ฐ pemํ์ผ์ผ ์ค ์์๋๋ฐ, ๋ cer ํ์ผ์ด์๋ค. ํ์ผ๋ง ๋ค๋ฅด๊ณ ์๋๋ฐฉ์์ ๊ฐ๋ค.
โ๏ธ ํฐ๋ฏธ๋ ์ด์ด์ ํคํ์ด ํ์ผ์ด(pem ๋๋ cerํ์ผ) ์กด์ฌํ๋ ๊ณณ์ผ๋ก ์ด๋ํ๋ค.
โ๏ธ ์ต์ด ์ฌ์ฉํ๋ ํคํ์ด๋ผ๋ฉด ๋ชจ๋ ๋ณ๊ฒฝ๋ฅผ ๋ณ๊ฒฝํด์ฃผ์ด์ผ ํ๋ค.
$ chmod 400 [ํ์ผ๋ช .cer]
โ๏ธ ssh ์ ์ ์ค์
$ ssh -i [ํ์ผ๋ช .cer] ubuntu@[๊ณต์ธIP] ๐ EC2 ์ธ์คํด์ค์์ Ipv4 ํผ๋ธ๋ฆญ IP ์ฃผ์ํ์ธ ๊ฐ๋ฅ
โ๏ธ ๊ณ์ Yes ๋๋ Enter๋ฅผ ๋๋ฅด๋ฉด์ ์งํํด์ค๋ค. Ubuntu ์ ์์ด๋์๋ค๋ฉด ์ ์ง์ ๋ ๊ฒ์ด๋ค.
โ๏ธ ๋ฌธ์์ด์ ํ๊ธฐํ๋ ๋ฐฉ์์ ์์ด ํ๊ธ, ์ด๋ชจํฐ์ฝ ๋ฑ์ด ๊นจ์ง์ง์๋๋ก ํ๋ผ๋ฏธํฐ ๊ทธ๋ฃน์ ์ค์ ํด์ค๋ค.
"ํ๋ผ๋ฏธํฐ ๊ทธ๋ฃน ์์ฑ" ๋ฒํผ ํด๋ฆญ โข ํ๋ผ๋ฏธํฐ ๊ทธ๋ฃน ํจ๋ฐ๋ฆฌ(๐mysql 5.7 ์ ํ)
โ๏ธ ๊ทธ๋ฃน ์ด๋ฆ ๋ฐ ์ค๋ช ์ ๋ ฅํ ๋ค, ํ๋ผ๋ฏธํฐ ๊ทธ๋ฃน์ ์์ฑํ๊ณ ์์ ํ ํ๋ผ๋ฏธํฐ๋ฅผ ํด๋ฆญํ์ฌ ํธ์ง ํ์ด์ง๋ก ์ง์ ํ๋ค.
โ๏ธ ๊ฒ์์ฐฝ์ character๋ฅผ ์ ๋ ฅํ์ฌ ์๋ ํ๋ผ๋ฏธํฐ๋ค์ ์ด๋ฆ์ ๋ชจ๋ "utf8mb4"๋ก ์ง์ ํ ์ ์ฒด ์ฒดํฌํ ๋ค์ ๋ณ๊ฒฝ์ฌํญ ์ ์ฅ
- character_set_client โข utf8mb4
- character_set_connection โข utf8mb4
- character_set_database โข utf8mb4
- character_set_filesystem โข utf8mb4
- character_set_results โข utf8mb4
- character_set_server โข utf8mb4
โ๏ธ collation ๊ฒ์ํด์ ๋์ค๋ ์๋ ํ๋ผ๋ฏธํฐ๋ฅผ ์๋์ฒ๋ผ ์ง์ ํ ์ ์ฒด ์ฒดํฌํ ๋ค์ ๋ณ๊ฒฝ์ฌํญ ์ ์ฅํ๋ค.
- collation_connection โข utf8mb4_general_ci
- collation_server โข utf8mb4_unicode_ci
โ๏ธ "ํ์ค ์์ฑ", "MySQL", "MySQL Community", "ํ๋ฆฌํฐ์ด" ์ ํ
โ๏ธ "DB ์ธ์คํด์ค ์๋ณ์" ์ ๋ ฅ ๋ฐ "๋ง์คํฐ ์ฌ์ฉ์ ์ด๋ฆ" ์ root, ์ํธ๋ฅผ ์ ๋ ฅํด์ค๋ค.
โ๏ธ "์คํ ๋ฆฌ์ง ์๋ ์กฐ์ " ์ฒดํฌ ํด์
โ๏ธ "ํผ๋ธ๋ฆญ ์ก์ธ์ค ๊ฐ๋ฅ"์ "์"๋ก ๋ณ๊ฒฝ
โ๏ธ VPC ๋ณด์ ๊ทธ๋ฃน์์ "์๋ก ์์ฑ" ์ฒดํฌ โข ์ VPC ๋ณด์ ๊ทธ๋ฃน ์ด๋ฆ(ex: project๋ช -rules)
โ๏ธ ๊ฐ์ฉ์์ญ ์ค ํ๋ ์ ํํ๊ณ , ํฌํธ๋ 3306 ์ธ์ง ํ์ธ
โ๏ธ ์ถ๊ฐ ๊ตฌ์ฑ
์ด๊ธฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ด๋ฆ์ local์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ด๋ฆ ์ ๋ ฅํ๊ฑฐ๋ ๋์ค์ ์ง์ ์์ฑํด์ค๋ ๋๋ค.
mysql >>> > (aws)$ create database [AWS db์ด๋ฆ] character set utf8mb4 collate utf8mb4_general_ci; โข exit
DB ํ๋ผ๋ฏธํฐ ๊ทธ๋ฃน์ ์์์ ํ๋ผ๋ฏธํฐ ๊ทธ๋ฃน ์์ฑํ ๊ฒ์ผ๋ก ์ง์
์ต์ ๊ทธ๋ฃน์ default๋ก ๋์๋๊ฑฐ ์ฌ์ฉ
"์๋ ๋ฐฑ์ ํ์ฑํ" ์ฒดํฌํด์ , "๋ชจ๋ํฐ๋ง" ์ฒดํฌ ํด์
"์ ์ง๊ด๋ฆฌ ๋ง์ด๋ ๋ฒ์ ์๋ ์ ๊ทธ๋ ์ด๋ ์ฌ์ฉ" ์ฒดํฌ
"์ญ์ ๋ฐฉ์ง ํ์ฑํ" ์ฒดํฌ
โ๏ธ ๋ชจ๋ ์๋ฃํ๋ค๋ฉด, ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ฑ ํด๋ฆญํ ๋ค, ๊ธฐ๋ค๋ ธ๋ค๊ฐ ์๋ ๋ณด์ ๊ทธ๋ฃน ๊ท์น์ ์ค์ ํด์ค๋ค.
โ๏ธ ๋ณด์ ๊ทธ๋ฃน์ inbound์ outbound๊ฐ ์๋๋ฐ, inbound ํด๋ฆญ
โ๏ธ ํ๋จ ์ฐฝ์ ์ธ๋ฐ์ด๋ ๊ท์น ํธ์ง ํด๋ฆญํด์ 3๊ฐ์ง ๊ท์น ์ถ๊ฐ
โ๏ธ ์ถ์ฒํ๋ ๋ฐฉ๋ฒ์ ์๋๋ ์ฐ์ ์ด๋ ๊ฒํด๋๊ณ ์ถํ ๋ค์ ๋ณ๊ฒฝ, EC2 ์๋ฒ์ IP์ฃผ์๋ ํจ๊ป ์ถ๊ฐํด์คํ๋ค.
โ๏ธ ํฐ๋ฏธ๋์์ AWS RDS ์ ์ ๋ฐฉ๋ฒ
(local)$ mysql -h [์๋ํฌ์ธํธ ๋ถ์ฌ๋ฃ๊ธฐ] -u root -p โข ๋น๋ฐ๋ฒํธ ์ ๋ ฅ
โ๏ธ AWS RDS ์ ์์ ๋ฌธ์ ์๋ค๋ฉด, local MySQL์ DB๋ฅผ ํต์ฑ๋ก ์ฎ๊ธฐ๊ธฐ ์ํด dump๋ฅผ ์ฌ์ฉํด๋ณด์.
โ๏ธ DB Dumpํด์ sqlํ์ผ๋ก ๋ง๋ค๊ธฐ
(local)$ mysqldump -u root -p [DB์ด๋ฆ] > [ํ์ผ๋ช ].sql โข ๋น๋ฐ๋ฒํธ ์ ๋ ฅ
โ๏ธ dumpํ local DB๋ฅผ AWS RDS์ injectionํ๋ ๋ฐฉ๋ฒ์ ์๋์ ๊ฐ๋ค.
โ๏ธ injection ๋ฐฉ๋ฒ
(local)$ mysql -h [์๋ํฌ์ธํธ ๋ถ์ฌ๋ฃ๊ธฐ] -u root -p [AWS db์ด๋ฆ] < [ํ์ผ๋ช ].sql โข ๋น๋ฐ๋ฒํธ ์ ๋ ฅ
โ๏ธ ์ธ์ฆ์๊ฐ ์๋ ๋๋ ํ ๋ฆฌ๋ก ์ด๋ํด์ EC2 ์ง์ ์์
$ ssh -i [ํ์ผ๋ช .cer] ubuntu@[๊ณต์ธIP] ๐ EC2 ์ธ์คํด์ค์์ Ipv4 ํผ๋ธ๋ฆญ IP ์ฃผ์ํ์ธ ๊ฐ๋ฅ
โ๏ธ ์ง์ ๋์๋ค๋ฉด, ubuntu์ miniconda๋ถํฐ ์ค์นํ๋ค. ์ค๋ฅธ์ชฝ ๋ฒํผ ํด๋ฆญํ์ฌ ๊ฒฝ๋ก๋ณต์ฌ๋ฅผ ํ๋ค.
$ wget [linux ๋ฒ์ miniconda ๊ฒฝ๋ก๋ณต์ฌํ ์ฃผ์]
โ๏ธ ls๋ก ํ์ธํ๋ฉด "Miniconda3-py38_4.10.3-Linux-x86_64.sh"๊ฐ ์กด์ฌํ๋ค. ๊ถํ๋ถํฐ ์ค์ ํ๋ค.
$ chmod +x Miniconda3-py38_4.10.3-Linux-x86_64.sh
โ๏ธ ๊ถํ ์ค์ ํ์๋ค๋ฉด mini ํ์ผ ์คํํ์ฌ ์ค์นํด์ค๋ค.
$ ./Miniconda3-py38_4.10.3-Linux-x86_64.sh
โ๏ธ local ์ฒ๋ผ (base)๊ฐ ๋ํ๋๋๋ก ์ค์ ํด์ค๋ค.
$ source .bashrc
โ๏ธ apt๋ฅผ ์ ๋ฐ์ดํธ ๋ฐ ์ ๊ทธ๋ ์ด๋ ์ํจ๋ค.
(base)$ sudo apt-get update
(base)$ sudo apt-get upgrade
โ๏ธ mysql ์ค์น์์ ์๋ฌ๋ฅผ ์๋ฐฉํ๊ธฐ ์ํด gcc ์ค์นํ๋ค.
(base)$ sudo apt-get install gcc
โ๏ธ mysql์ ๊ฐ๋ฐ์ ๋ฒ์ ์ผ๋ก ์ค์นํด์ค๋ค.
(base)$ sudo apt-get install libmysqlclient-dev
โ๏ธ ๊ฐ์ํ๊ฒฝ ์ค์น ๋ฐ ํ์ฑํ
(base)$ conda create -n project python=3.8 ๐ project ์ด๋ฆ์ผ๋ก ์์ฑ
(base)$ conda activate project
โ๏ธ git clone์ ์คํํ๋ค.
(project)$ git clone [github ๋ ํ์งํ ๋ฆฌ ์ฃผ์]
โ๏ธ ๋๋ ํ ๋ฆฌ ์ด๋ ํ requirements.txt ํ์ผ ํ์ธ ๋ฐ ์ค์น
(project)$ pip install -r requirements.txt ๐ requirements.txt์ ์๋ ํ๋ก๊ทธ๋จ ๋ชจ๋ ํ๋ฒ์ ์ค์น
โ๏ธ settings.py์ ์ง์ ํ๋ค.
(project)$ vi config/settings.py
โ๏ธ AWS EC2์ IPv4 Pulic IP๋ฅผ ์ถ๊ฐํ๋ค.
ALLOWED_HOSTS = ["*", "IPv4 Pulic IP", "IPv4 Pulic IP:8000"] # ๐ EC2์ ํผํ๋ฆญ ip ์ ๋ ฅ
โ๏ธ manage.py ๊ฐ ์๋ ์์น์ my_settings.py ์์ฑ
(project)$ vi my_settings.py
โ๏ธ locale์์ ์๋ ๋ด์ฉ์ ๊ฐ์ ธ์จ ๋ค, AWS RDS์ ์ฐ๊ฒฐ์์ผ ์ค๋ค.
DATABASES = { "default": { "ENGINE": "django.db.backends.mysql", "NAME": "DB์ด๋ฆ ์ ๋ ฅ", "USER": "root", "PASSWORD": "๋น๋ฐ๋ฒํธ ์ ๋ ฅ", "HOST": "AWS RDS ์๋ํฌ์ธํธ ์ ๋ ฅ", "PORT": "3306", } } SECRET_KEY = "SECRET_KEY ์ ๋ ฅ" ALGORITHM = "ALGORITHM ๋ฐฉ์ ์ ๋ ฅ"
โ๏ธ 8000๋ฒ ํฌํธ๋ก ์๋ฒ๋ฅผ ์คํ์ํจ๋ค.
(project)$ python manage.py runserver 0:8000
โ๏ธ ๊ฒฝ๋ก๋ Ipv4 ๊ณต์ธ IP์ 8000๋ฒ ํฌํธ๋ฅผ ๋ฃ์ด์ค๋ค.
http://[IPv4 Pulic IP]:8000/
โ๏ธ ์น ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ ํ๋ก๊ทธ๋จ gunicorn์ ๋ฉํฐ์ฐ๋ ๋๋ฅผ ์ง์ํ๊ธฐ ๋๋ฌธ์ ๋ ๋ง์ request๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ค.
(project)$ pip install gunicorn
โ๏ธ gunicorn์ผ๋ก ์๋ฒ๋ฅผ ์คํ์ํค๋ ๋ฐฉ๋ฒ์ ์๋์ ๊ฐ๋ค.
(project)$ gunicorn --bind=0.0.0.0:8000 [ํ๋ก์ ํธ๋ช ].wsgi
โ๏ธ ๋ฐฑ๊ทธ๋ผ์ด๋๋ก ์คํ์์๋์ ๊ฐ์ด ์คํ์ํค๋ฉด ๊ณ์ ์ผ์ ธ์๋ค.
(project)$ nohup gunicorn --bind=0.0.0.0:8000 [ํ๋ก์ ํธ๋ช ].wsgi &
โ๏ธ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์๋ฒ๊ฐ ์คํ๋๊ณ ์๋๋ฐ ์ด๋ฅผ ํ์ธํ๋ ๋ฐฉ๋ฒ์ ์๋์ ๊ฐ๋ค.
(project)$ ps -ef | grep python
โ๏ธ ์ด๋ฅผ ์ข ๋ฃ์ํค๊ณ ์ถ๋ค๋ฉด ์๋ ๋ช ๋ น์ด๋ก ๊ฐ๋ฅํ๋ค.
(project)$ kill
[PID ๋ฒํธ]