728x90 반응형 NCP25 Django: S3 호환 서비스 NCP object storage 에 이미지 저장 Django 프로젝트에서 이미지 핸들링하기 이미지 파일을 DB 에 저장하기엔 용량이 크기 떄문에 클라우드 Object Storage 에 저장해서 url 로 가져다 쓴다. NPC 는 관련해서 AWS S3 호환 서비스 Object Storage 를 제공하고 있기 떄문에 사용해보려고 한다. AWS S3 AWS boto3 를 이용한 파일 업로드 boto3 는 AWS 를 위한 Python SDK (Software Development Kit) 이다. 사용하면 AWS 서비스에 쉽게 액세스 할 수있다. NCP 의 Object Storage 와 같은 S3 호환 서비스에도 사용이 가능하다. Object Storage API Object Storage API api.ncloud-docs.com 간단한 사용 방법 HTTP/.. Dev./Django & DRF 2023. 10. 19. Kubernetes: nks 에서 서비스 띄우기 NCP k8s 클러스터 에서 서비스 띄우기 nodeport 로 서비스 생성해서 파드와 연결하기 # lion-svc-nodeport.yaml apiVersion: v1 kind: Service metadata: name: lion-svc-nodeport spec: type: NodePort selector: # app 으로 레이블을 달아서 서비스가 해당 레이블 정보를 가진 파드를 관리할 수 있게 한다. app: lion-app ports: # 기본적으로 그리고 편의상 `targetPort` 는 `port` 필드와 동일한 값으로 설정된다. - port: 80 targetPort: 8000 # 8000 포트를 80 으로 이어준다 k get all # result kimminhyeok@Ivans-Mac lion.. Dev./Kubernetes & Helm 2023. 9. 26. Kubernetes: nks IAM 인증 ncp k8s service IAM 인증 NCP 에서 제공하는 Kubernetes Service 를 통해 Kubernetes 환경을 효율적으로 제어하고 관리할 수 있다. 응용프로그램에서 사용하는 인프라 규모를 동적으로 제어하고 운영상황을 모니터링 하여 효율적으로 서비스를 관리할 수 있게 한다. k8s 환경 구축 k8s 배포 및 관리 클러스터 자동확장 서비스를 사용하기 위한 준비 VPC Private Subnet Load balance Subnet NAT Gateway 해당 클러스터에 접속하기 위해서는 IAM 인증을 거쳐야 한다. // ncp-iam-autheticator 설치 https://guide.ncloud-docs.com/docs/k8s-iam-auth-ncp-iam-authenticator //.. Dev./Kubernetes & Helm 2023. 9. 25. Kubernetes: run application via nks lion-app K8S lion-app 을 쿠바네티스로 구동시켜보자. 테스트로 사용하기 위해 기존에 사용하던 도커파일을 sqlite db 와 연결하게 끔 새롭게 만든다. App # test 를 진행하기위해 allowed host 에 와일드 카드 추가 ALLOWED_HOSTS = [ "localhost", "*", "127.0.0.1", # LOCAL_IP, ] FROM python:3.11-alpine LABEL likelion.web.backendauthor="Ivan kim " ARG APP_HOME=/app ENV PYTHONUNBUFFERED 1 ENV PYTHONDONTWRITEBYTECODE 1 WORKDIR ${APP_HOME} COPY ./requirements.txt ./ RUN pip .. Dev./Kubernetes & Helm 2023. 9. 24. Terraform: nks resource NCP 와 k8s nks 는 애플리케이션 컨테이너화, 배포, 스케일링 그리고 관리를 자동화하는 오픈 소스 플랫폼이다. kubernetes 환경을 구축하고, 배포 및 관리 그리고 클러스터 자동 확장이 가능하다. # Resource: ncloud_nks_cluster https://registry.terraform.io/providers/NaverCloudPlatform/ncloud/latest/docs/resources/nks_cluster 기본적인 작업을 마치고 plan 하는 과정에서 계속 에러가 발생했는데, NCP 에서 k8s 기능을 사용하려면 우선 동의를 하고 시작해야한다. # error │ Error: Status: 403 Forbidden, Body: {"error":{"errorCode":403.. Dev./Terraform 2023. 9. 23. [Cloud] CD - NCP: Rollback tag 현재에는 yml 파일에 latest 로 태그가 들어가기 때문에 롤백을 실행할 수 없다. 이미지에 고유 식별자가 없으면 어떤 변경이 언제 이루어졌는지 추적할 수 없고 오류진단과 디버깅을 쉽게 할 수 없다. 또한 새롭게 배포가 된 이후에 에러가 발생했을 때 안정적인 버전으로 빠르게 복귀가 필요한 경우도 종종 발생한다. 기본적으로 태그를 여러개 등록이 가능하기 때문에 유니크한 정보값을 생성을 위해 timestamp 를 사용하고 롤백을 위한 다중 태그를 등록하자. # yml 파일 env: # IMAGE_TAG: ${{ vars.NCP_CONTAINER_REGISTRY }}/lion-app:latest IMAGE: ${{ vars.NCP_CONTAINER_REGISTRY }}/lion-app IMAGE_TAG: .. Dev./Cloud 2023. 8. 22. [Cloud] CD - NCP: Load balancer Load balancer NCP 에서 Load balancer 만들어 주기 (프록시 로드밸런서 사용예정) proxy load balancer 는 클라이언트와 서버간의 중개자로 작동하며 클라이언트의 요청을 받아 적절한 타겟 서버로 전달하고 서버의 응답을 클라이언트에게 전달한다. Load balancer 여러 서버 간의 트래픽을 분산 → 처리시간 단축 특정 서버에 문제가 생기면 다른 서버로 routing 서버를 추가하거나 제거하며 스케일링 Subnet : Load balancer 가 동작하는 곳 네트워크의 논리적인 분할, 특정 IP 주소 범위 범위를 정하고 Gateway 설정 리스너 포트 80 Target : Load balancer 가 트래픽을 분산시킬 서버(인스턴스) 프로토콜 : TCP 포트 : 8000.. Dev./Cloud 2023. 8. 22. [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. 이전 1 2 3 다음 728x90 반응형