클라우드 상에서 이용 가능한 가상의 컴퓨터(인스턴스) (vmware에서 쓴 컴퓨터처럼)
웹서버 + diango 연동
한 달에 750시간 무료
블록 스토리지 서비스(EBS) : 가상의 하드디스크 (운영체제 있어야 사용가능)
클라우드 상에서 이용 가능한 가상의 컴퓨터인데 DB 서버 프로그램만 다룰 수 있는 컴퓨터
한 달에 750시간 무료
인스턴스 - 가상의 컴퓨터
볼륨 -가상의 하드디스크
보안그룹 - 방화벽
파티션 - 물리적인걸 논리적으로 쪼갠 것
키 페어 - 키 세트(암호화 복호화 키) 잃어버리면 복잡해짐
EC2 검색 → 인스턴스 만들기 →윈도우 운영체제 → 기본값 설정 → 상태 : 실행중, 상태검사 통과→ 인스턴스 체크 후 연결 → RDP → 암호 가져오기에서 key 파일 입력 → 원격 데스트톱 파일 다운로드 및 실행 → 암호입력 → 접속
가상머신(원격)에서 내 원래 컴퓨터에 있던 python 파일을 복사해 가상머신에 붙여넣기 해줌
설치시 customize해서 환경변수도 check
cmd에서 pip 확인
VC_redist.x64파일 가상머신에 복사 붙여넣기 후 실행, httpd-2.4~~ 도 복붙 후 압축 풀어서 Apache24폴더만 C드라이브에 넣기
Apache24에서 bin → httpd.exe 실행하면 웹서버가 되는 것
둘다 방화벽 0번포트 접속 허용이 되어야함 (방화벽 끄기)
check firewall status 검색해서 Turn window~~~ 에서 Turn off 시킴
퍼블릭, 프라이빗 IPv4 주소 나눠져 있음 (포트포워딩과는 조금 다름)
인스턴스 자세히보기
→ 내부만 할땐 프라이빗, 외부하면 퍼블릭 해야함
→ 보안그룹 클릭
inbound
outbound
Apache는 HTTP, 80번 포트를 사용하기떄문에 인바운드 규칙 편집 눌러서 유형 HTTP선택
바인드IP주소
지금 이 컴퓨터에 80번포트로 통신할 수 있는 IP주소(127이면 자기자신, 0000이면 모든, 사설일때 같은 네트워크대역은 올수있음, 다른 네트워크대역은 안됨(안보이는곳))
모든 사용자들에게 다 제공해주기 위함이기 때문에 0.0.0.0/0으로 설정해줌
이제 내 퍼블릭 IPv4 주소를 주소창에 입력하면 접속할 수 있게 됨
장고랑 연결해야하는데, Apache같은 것으로 장고를 연결할것
CGI
WSGI
장고에서 wsgi 이용할 것임. 장고에 wsgi.py가 있음
AWS 인스턴스
mod_wsgi-4.9.2~ 이걸 원격 C드라이브에 설치하고 명령어 실행
리눅스에서는 pip install로 함.
pip install c:\mod_wsgi-4.9.2-cp39-cp39-win_amd64.whl
밑 명령어 쳐서 잘 설치 되었는지 확인
mod_wsgi-express
해당 명령어 확인 - 여기 나온 결과를 나중에 Apache에 사용할 것임
mod_wsgi-express module-config
settings.py
DEBUG = False
ALLOWED_HOST = ['*',]
Terminal
pip freeze
pip freeze > requirements.txt
Apache폴더 > conf > httpd.conf 파일 메모장으로 열기
제일 밑에 아까 명령어로 얻은 결과, 경로 복붙(c드라이브 밑에 우리 프로젝트의 config안에 wsgi.py의 경로를 지정)
LoadFile "C:/Users/Administrator/AppData/Local/Programs/Python/Python39/python39.dll"
LoadModule wsgi_module "C:/Users/Administrator/AppData/Local/Programs/Python/Python39/lib/site-packages/mod_wsgi/server/mod_wsgi.cp39-win_amd64.pyd"
WSGIPythonHome "C:/Users/Administrator/AppData/Local/Programs/Python/Python39"
WSGIScriptAlias / "C:\<Project 폴더>\<Project 안의 설정 폴더>\wsgi.py"
WSGIPythonPath "C:\<Project 폴더>"
<Directory "C:\<Project 폴더>\<Project 안의 설정 폴더>">
<Files wsgi.py>
Require all granted
</Files>
</Directory>
Alias /static/ C:/<Project 폴더>/static/
<Directory C:/<Project 폴더>/static/>
Require all granted
</Directory>
Alias /media/ C:/<Project 폴더>/media/
<Directory C:/<Project 폴더>/media/>
Require all granted
</Directory>
$ cd /
$ cd web
$ pip install -r requirements.txt
현재 DB의 설정 (HOST,PORT)가 가상머신VM에 되어있는 상태로 바꾸어 줘야함.
가상머신 web폴더 config settings.py에서 DB 부분을 default상태로 바꿔줌
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': BASE_DIR / 'db.sqlite3',
}
}
python manage.py makemigrations
python manage.py migrate
AWS RDS 검색 → 데이터베이스 생성 MariaDB, 프리티어
스토리지 자동조정 활성화 끔 (자동으로 늘리지않을것임, 돈나올수도 있으니까)
퍼블릭 액세스 여기서는 예로 바꿔주려함(원래 DB는 그러면안되는데)
VPC 보안 그룹 새로생성으로 해주고 이름 db_sg로해줌
데이터베이스 옵션 추가구성에 초기 데이터베이스 이름 우리가 쓰던거에 맞게 web이라고 할것임
여기서는 백업 비활성화할거
암호화도 안할거 유지관리 마이너도 비활성화
DB 방화벽 설정
자세한 정보 → 보안그룹 클릭 → 인바운드 설정 (현재 소스가 1.11.90.40/32인데 이 앞에가 전부 일치해야만 허용해줄것임, 강의장에서만 DB접속. EC2컴퓨터의 웹서버-장고프로그램이 DB연결이 되어야하는것임(원격)) 그래서 바꿔줘야함. 인바운드 규칙 편집 0.0.0.0/0으로 바꿔줌 (원래는 이렇게 하면안됨)
settings.py
secret.json 내용 맞게 변경(원격)
바꿨으니 migrate 해주기
원래 runserver 해주면 특정 폴더 안에 위치를 잘 찾아갔음. 그런데 Apache프로그램으로 장고를 실행시켰을 때 경로를 찾아가지못해서 admin페이지의 css, js가 적용이 안됨
클라우드의 인스턴스(가상머신)에서 web 프로젝트의 config → settings.py에 해당 명령어 추가
static_dirs는 지움
STATIC_ROOT=os.path.join(BASE_DIR,'static')
cd c:\web
python manage.py collectstatic
내도메인한글에서 가입해서 등록
일반도메인 검색해서 검색 후 등록
DNS고급설정에서 IP연결 www / EC2의 public IP주소
S3 검색 → 버킷 만들기 → 기본값 → 만들고 이름 클릭 → 권한 파트 → 퍼블릭 액세스 차단 편집, 모든퍼블릭액세스 차단 해제하고 변경사항 저장
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Statement1",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::ysy-s3/*"
}
]
}
객체 소유권 설정 - ACL 화렁화됨, 버킷 소유자 선호로 선택
서비스 검색 IAM (우리 프로그램이 s3이용할때, IAM을 통해 키를 발급받음)
사용자 눌러서 사용자 추가 사용자이름 ysy-s3, 증명유형 액세스키
그룹생성(이름 아무거나 ysy-s3), 정책 검색 s3full 이라고 검색하고 체크하고 그룹생성 다음(태그는없어도됨) 사용자 만들기
장고에 액세스키ID, 비밀엑세스키를 등록해야함. 기억하던가 csv로 하던가. 잃어버리면안됨
csv에서 잘 보고 저장
config에 asset_storage.py 생성
settings.py에 관련 설정추가
처음엔 public read인 부분을 먼저 주석해제하고 None주석하고
AWS_ACCESS_KEY_ID = ' '
AWS_SECRET_ACCESS_KEY = ' '
AWS_REGION = 'ap-northeast-2'
AWS_STORAGE_BUCKET_NAME = 'ysy-s3'
AWS_S3_CUSTOM_DOMAIN = '%s.s3.%s.amazonaws.com' % (AWS_STORAGE_BUCKET_NAME, AWS_REGION)
AWS_S3_OBJECT_PARAMETERS = {
'CacheControl': 'max-age=86400',
}
# https://arikong.tistory.com/21 참고
# https://intrepidgeeks.com/tutorial/aws-s3-access-denied-error-when-packet-policy-fails 참고
# https://kimcoder.tistory.com/381
AWS_DEFAULT_ACL = 'public-read'
#AWS_DEFAULT_ACL = 'None'
AWS_LOCATION = 'static'
AWS_MEDIA_LOCATION = 'media'
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/2.2/howto/static-files/
STATIC_URL = 'https://%s/%s/' % (AWS_S3_CUSTOM_DOMAIN, AWS_LOCATION)
STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static')
]
MEDIA_URL = 'https://%s/%s/' % (AWS_S3_CUSTOM_DOMAIN, AWS_MEDIA_LOCATION)
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
# 명령어로 설치 먼저해줘야함
pip install django-storages
pip install boto3
python manage.py collectstatic
pubic read로 해서 안되면 None으로 했다가 다시 python manage.py collectstatic 명령어 실행
웹서버 재시작
urls에