728x90
반응형
클라우드 서버로 띄우려면 기존 코드에서 환경설정을 바꿔주어야 한다.
환경변수를 위한 패키지로 os 를 사용한다.
import os
...
LOCAL_IP = os.getenv('LOCAL_IP', '')
ALLOWED_HOSTS = [
"localhost",
"127.0.0.1",
LOCAL_IP,
]
CSRF_TRUSTED_ORIGINS = [
"<http://localhost:8888>",
f"http://{LOCAL_IP:8888}",
]
prod.env (docker-compose.yml 파일과 같은 경로)
LOCAL_IP={IP주소}
django.nginx
# 사실상 도메인 정보를 넣어두기 때문에 환경변수로 다루는게 좀 억지이긴 하지만 그래도 개발단계에서~
# 실제로는 파일을 수정하지 않고 Docker.nginx_ubt 로 수정한다.
localhost 로 되어 있는 부분을 해당 공인IP 로 바꾸어 주는 작업
docker-compose exec nginx /bin/bash
root@199b50897e62:/etc/nginx# echo $LOCAL_IP
root@199b50897e62:/etc/nginx# export LOCAL_IP=110.165.17.207
root@199b50897e62:/etc/nginx# echo $LOCAL_IP
110.165.17.207
sed -i "s/localhost/$LOCAL_IP/g" sites-available/django
vi sites-available/django
스크립트로 작성해서 넣어주자
# scripts/nginx_entry
#!/bin/bash
# django site file 변경
sed -i "s/\\$LOCAL_IP/$LOCAL_IP/g" /etc/nginx/sites-available/django
service nginx restart
# docker-compose.yml
# docker-compose 파일의 버전을 명시
version: "3"
services: # 서비스들의 시작
# 앱 설정
lion-app:
container_name: lion-app-dc
build:
context: lion_app
dockerfile: Dockerfile # 사용할 도커 파일의 이름
image: lion-app:0.5
ports:
- "8000:8000" # 앞쪽이 호스트 시스템의 포트 : 뒤쪽이 컨테이너의 포트
volumes:
- ./lion_app:/app
- staticfiles:/var/www/html/static
command:
- "/start"
env_file:
- ./prod.env
nginx:
depends_on:
- lion-app
container_name: lion-nginx-dc
build:
context: .
dockerfile: Dockerfile.nginx_ubt
# args:
# LOCAL_IP: "110.165.17.207" # 원래는 도메인 주소 값
image: lion-nginx
ports:
- "8888:80"
volumes:
- staticfiles:/var/www/html/static
env_file: # nginx 컨테이너에도 같은 환경변수가 들어가게 됨
- ./prod.env
volumes:
staticfiles:
# django.nginx
server {
listen 80;
# server_name http 223.130.133.96;
server_name localhost $LOCAL_IP;
location / {
# 아래의 코드로는 nginx가 실행된 컨테이너의 주소로 보내기 때문에 Bad request 가 뜬다.
# proxy_pass <http://127.0.0.1:8000>;
# 그래서 lion-app 즉 장고가 떠있는 컨테이너의 8000포트로 프록시 패스로 넣어주어야 한다.
proxy_pass <http://lion-app:8000>;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
location /static/ {
alias /var/www/html/static/;
}
}
# request: /static/admin/default.css
# actual path: /var/www/html/static/admin/default.css
# Dockerfile.nginx_ubt
FROM ubuntu:22.04
RUN apt-get update
RUN apt-get install -y nginx vim
RUN echo "\\ndaemon off;" >> /etc/nginx/nginx.conf
RUN chown -R www-data:www-data /var/lib/nginx
# nginx.conf 파일을 컨테이너로 가져가
COPY ./lion_app/lion_app/django.nginx /etc/nginx/sites-available/django
RUN ln -s /etc/nginx/sites-available/django /etc/nginx/sites-enabled/django
WORKDIR /etc/nginx
RUN mkdir /var/www/html/static
COPY ./scripts/nginx_entry /entrypoint
# Shell script COPY 를 할때 무조건 해주어야 하는 설정
# 문자열 줄바꿈과 실행권한 체크
RUN sed -i "s/\\r$//g" /entrypoint
RUN chmod +x /entrypoint
# 무조건 어떤 설정을 하든 컨테이너가 실행될 때 실행됨
ENTRYPOINT [ "/entrypoint" ]
CMD [ "nginx" ]
EXPOSE 80
EXPOSE 443
내용 확인하기
docker-compose up --build -d
docker-compose exec nginx /bin/bash
vi sites-available/django
728x90
반응형
'Dev. > Cloud' 카테고리의 다른 글
[Cloud] 배포 - NCP : 클라우드 서버에서 DB 띄우기 (0) | 2023.08.14 |
---|---|
[Cloud] 배포 - NCP : DB 서버로 DB 연결 (0) | 2023.08.14 |
[Cloud] 배포 - NCP : docker 로 배포 (0) | 2023.08.13 |
[Cloud] 배포 - AWS : Amazon ECR (0) | 2023.08.08 |
[Cloud] 배포 - NCP : 자동으로 nginx 까지 (0) | 2023.08.05 |
댓글