728x90 반응형 Cloud71 [Cloud] 배포 - NCP : 클라우드 서버에서 DB 띄우기: NoSQL 데이터 베이스를 띄우기 위해 열었던 서버에 MongoDB 를 띄워서 연결하기 Mongo DB 설치 ACG 설정 DRF → Serializer 설정 환경변수 조정 db 서버에 접속해서 mongoDB 이미지를 다운받고 띄우기 docker pull mongo docker run --name mongo -d -p 27017:27017 -v mongo_data:/data/db mongo:latest 이후 서버의 ACG 설정에 해당 포트 정보를 입력해준다. 그 다음 서버 코드로 넘어가서 IP 주소를 연결하는 부분을 수정한다. 현재프로젝트에서는 serializers.py 에서 사용하고 있었으니 이 부분을 수정해 준다. # serializers.py import os from rest_framework import s.. Dev./Cloud 2023. 8. 15. [Cloud] 배포 - NCP : 로컬 서버에서 DB 띄우기: NoSQL NoSQL NoSQL 중 하나인 MongoDB 를 이용하여 DB 를 구성해보자. 새로운 blog 앱을 생성한다. python3 manage.py startapp blog pip install pymongo pip freeze | grep pymongo >> requirements.txt views.py from pymongo import MongoClient client = MongoClient() db = client.likelion def create_blog() -> bool: blog = { "title" : "My first blog", "content" : "This is my first blog", "author" : "lion", } try: db.blogs.insert_one(blog) .. Dev./Cloud 2023. 8. 14. [Cloud] 배포 - NCP : 클라우드 서버에서 DB 띄우기 그러나.. 상당히 비싼 DB 인스턴스 요금 그래서 간단한 프로젝트의 경우 일반 클라우드 서버를 열어서 db 컨테이너 띄워 기능을 대체한다. 새로운 서버를 열고 로컬에서 가상환경 접속 설정 변경 후 vi ~/.ssh/config # ssh/config 파일 수정 Host lion-db HostName ... User lion ... docker 를 가상환경에서 설치를 시작 # 최초 업데이트 sudo apt-get update && upgrade # apt 가 HTTPS 를 통해 repository 를 이용하는 것을 허용하는 패키지들 sudo apt-get install -y ca-certificates curl gnupg lsb-release # Docker 공식 GPG 키 추가 curl -fsSL | s.. Dev./Cloud 2023. 8. 14. [Cloud] 배포 - NCP : DB 서버로 DB 연결 NCP DB Server 띄우기 Cloud DB for PostgreSQL 로 들어가서 생성 시작 CIDR (Classless Inter-Domain Routing) 블록은 VPC (Virtual Pricate Cloud) 에서 가져와서 사용 CIDR - IP 주소 지정 체계로 인터넷상의 데이터 라우팅 효율성을 향상시킴 ACG 설정 변경 접근소스에 VPC 블록 추가 서버에 psql 설치 sudo sh -c 'echo "deb $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list' wget --quiet -O - | sudo apt-key add - sudo apt-get update sudo apt-get -y install postgres.. Dev./Cloud 2023. 8. 14. [Cloud] 배포 - NCP : 클라우드 서버에 올리기 클라우드 서버로 띄우려면 기존 코드에서 환경설정을 바꿔주어야 한다. 환경변수를 위한 패키지로 os 를 사용한다. import os ... LOCAL_IP = os.getenv('LOCAL_IP', '') ALLOWED_HOSTS = [ "localhost", "127.0.0.1", LOCAL_IP, ] CSRF_TRUSTED_ORIGINS = [ "", f"http://{LOCAL_IP:8888}", ] prod.env (docker-compose.yml 파일과 같은 경로) LOCAL_IP={IP주소} django.nginx # 사실상 도메인 정보를 넣어두기 때문에 환경변수로 다루는게 좀 억지이긴 하지만 그래도 개발단계에서~ # 실제로는 파일을 수정하지 않고 Docker.nginx_ubt 로 수정한다. .. Dev./Cloud 2023. 8. 13. [Cloud] 배포 - NCP : docker 로 배포 도커파일에서 실행하던 런 코드를 스크립트 파일로 바꾼다. 스크립트 파일의 경로를 한번에 scripts 로 정리하고 새롭게 start 파일로 작성한다. 경로에 민갑하기 때문에 최상위 경로에 하나 만들어주고 lion_app (manage.py 가 있는) 에 하나 더 만들어서 구분지어 준다. FROM python:3.11-alpine LABEL likelion.web.backendauthor="Ivan kim " ... COPY ./scripts/start /start RUN sed -i 's/\\r$//g' /start # \\r : 캐리지 리턴 RUN chmod +x /start # RUN python3 manage.py migrate -> start 스크립트로 대체 RUN if [ -e /var/www/.. Dev./Cloud 2023. 8. 13. [Cloud] 배포 - Docker : 장고 기본 css 파일 매핑 현재 nginx 로 들어오는 요청을 장고 서버포트로 보내주는데 스태틱 파일은 다른데로 보내주게 설정한다. server { listen 80; # server_name http 223.130.133.96; server_name localhost; location / { # 아래의 코드로는 nginx가 실행된 컨테이너의 주소로 보내기 때문에 Bad request 가 뜬다. # proxy_pass ; # 그래서 lion-app 즉 장고가 떠있는 컨테이너의 8000포트로 프록시 패스로 넣어주어야 한다. proxy_pass ; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } location /static/ { alias /var/ww.. Dev./Docker 2023. 8. 12. [Cloud] 배포 - Docker : docker-compose.yml docker-compose.yml 파일은 여러 컨테이너를 함께 정의하고 관리하기 위한 도구 해당 파일을 사용하면 여러 컨테이너, 네트워크, 볼륨 등을 한번에 정의하고 실행할 수 있다. version : 사용하는 docker compose 파일의 버전 services : 실행할 컨테이너의 목록과 설정 networks : 사용할 네트워크의 정의 volumes : 사용할 볼륨의 정의 # docker-compose 파일의 버전을 명시 version: "3" services: # 서비스들의 시작 # 앱 설정 lion-app: container_name: lion-app-dc build: context: lion_app dockerfile: Dockerfile # 사용할 도커 파일의 이름 image: lion-ap.. Dev./Docker 2023. 8. 12. [Cloud] 배포 - Docker : Dockerfile - Django Dockerfile 로 장고 서버를 띄워보자 FROM python:3.11-alpine ARG APP_HOME=/app # 파이썬이 표준출력과 표준에러출력을 버퍼링 하지 않도록 설정 ENV PYTHONUNBUFFERED 1 # 파이썬이 .pyc 바이트코드파일을 작성하지 않도록 설정 ENV PYTHONDONTWRITEBYTECODE 1 WORKDIR ${APP_HOME} # 패키지들은 자주 바뀌지 않기 때문에 인스톨을 따로 가져가는게 좋다. # 만약 전체 카피로만 requirements 를 가져오게 되면 코드가 수정되었을 때 # 다시 인스톨을 해줘야하는 일이 발생하기 때문에 따로 이미지 레이어를 쌓아준다. COPY ./requirements.txt ./ RUN pip install --no-cache-di.. Dev./Docker 2023. 8. 11. [Cloud] 배포 - Docker : Volume Docker volume 컨테이너 위에 있는 데이터는 일시적 데이터이기 때문에 볼륨 맵핑을 통해 영구적으로 데이터를 보존할 수 있게 한다. 뿐만아니라 컨테이너간 데이터의 공유가 필요할 때에도 볼륨을 사용하여 데이터를 주고 받을 수 있다. 로컬 파일 시스템과 도커 파일 시스템을 연결하기 docker run -v /home/lion/mydata:/data -it --name lion-v lion:0.3 /bin/bash 💡 로컬 파일 시스템 경로 /home/lion/mydata 와 도커에서 /data 를 맵핑하면서 lion-v 라는 이름으로 lion 이미지 에 0.3 태그 로 이미지를 만들어 접속하겠다 텍스트 파일을 각각의 경로에서 생성한뒤에 체크해보면 ? # local - /home/lion/mydata .. Dev./Docker 2023. 8. 10. [Cloud] 배포 - AWS : Amazon ECR AWS 에서 무료로 잠깐 써보는게 가능한 것 같다. 그래서 한번 ECR 을 이용해서 한번 해보려고 한다. 우선 Amazon ECR 명령어를 사용하기 위해서는 aws cli 를 설치해줘야 한다고 한다. 먼저 로컬 콘솔에서 인증키 설정을 해야하니 인증키를 설정해보자. aws configure # AWS Access Key ID: AWS Secret Access Key: Default region name: Default output format: AWS IAM 으로 들어가서 계정설정으로 간다. IAM → 사용자 → 계정을 클릭하고 들어가서 → 보안 자격 증명 → 엑세스 키 NCP 와 마찬가지로 key ID 와 비밀키를 입력해서 Configure 를 완성 시켜주면 된다. Default region 의 경우 →.. Dev./Cloud 2023. 8. 8. [Cloud] 배포 - Docker : Dockerhub 도커 허브라고 들어봤는가? 도커 이미지를 띄워두고 마치 깃허브처럼 받아서 쓸 수 있게 해놓은 공간이다. public 으로 레파지토리를 생성해둔다. 이후 콘솔에서 docker images lion@likelion:~/dev_django_app$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE lion 0.3 3c97009ef945 2 hours ago 236MB lion 0.2 addb2ef0fbf6 3 hours ago 176MB lion 0.1 da34d62d6cc1 3 hours ago 176MB ... Tag 를 확인하고 새롭게 도커 허브를 위한 태그를 생성해준다. docker image tage lion:0.2 lion:0.2 ivaninitworld/l.. Dev./Docker 2023. 8. 7. 이전 1 2 3 4 5 6 다음 728x90 반응형