[TIL_Carrotww] 75 - 22/12/19

유형석·2022년 12월 19일
0

TIL

목록 보기
88/138
post-thumbnail

📝Carrotww의 코딩 기록장

🧲 django 배포

🔍 daphne와 postgres, nginx를 이용해서 배포를 진행하려고 한다.

aws ubuntu 계정 초기 세팅

  • root passwd 초기화
    sudo passwd root
  • root 접속 후 계정 비밀번호 초기화
    su root
    passwd ubuntu
  • 키 없이 로그인
    sudo vi /etc/ssh/sshd_config
    PasswordAuthentication no
  • adduser useradd 차이
    adduser : 실행 시 계정 정보를 자동으로 생성
    useradd : 계정만 생성하며 기타 계정 정보는 수동으로 생성 및 설정
  • 보안을 위한 다른 계정 생성
    adduser django
    sudo passwd django
    sudo visudo
    django ALL=(ALL) ALL 추가
  • 키페어 로그인시 설정
    sudo cp /home/ec2-user/.ssh/ /home/django/.ssh/
    sudo chown -R django:django /home/djanog/.ssh
  • hostname 설정
    hostnamectl set-hostname django_aws
    sudo reboot 다시 시작해야 적용됨!

🧲 django daphne

version: '3.8'

services:
  backend:
    container_name: backend
    build: ./backend/
    entrypoint: sh -c "python manage.py collectstatic --no-input && python manage.py makemigrations && python manage.py migrate && daphne Togeduck.asgi:application -b 0.0.0.0 -p 8000"
    ports:
      - 80:8000
    volumes:
      - ./backend/django/:/app/
      - /etc/localtime:/etc/localtime:ro # host의 timezone 설정을 컨테이너에 적용합니다.
      # ro 은 읽기 전용(read only) 속성으로 볼륨을 설정하는 것을 의미합니다.
    restart: always

🧲 postgres, daphne docker file

version: '3.8'

volumes:
  postgres: {}
  django_media: {}
  django_static: {}

services:
  postgres:
    container_name: postgres
    image: postgres:14.5
    volumes:
      - postgres:/var/lib/postgresql/data/
    environment:
      - POSTGRES_USER=user
      - POSTGRES_PASSWORD=P@ssw0rd
      - POSTGRES_DB=django
    restart: always

  backend:
    container_name: backend
    build: ./backend/
    entrypoint: sh -c "python manage.py collectstatic --no-input && python manage.py migrate && daphne Togeduck.asgi:application -b 0.0.0.0 -p 8000"
    volumes:
      - ./backend/django/:/app/
      - /etc/localtime:/etc/localtime:ro
      - django_media:/app/media/ # nginx에서 media를 사용할 수 있도록 volume을 지정해줍니다.
      - django_static:/app/static/ # nginx에서 static을 사용할 수 있도록 volume을 지정해줍니다.
    environment: # django에서 사용할 설정들을 지정해줍니다.
      - DEBUG=1
      - POSTGRES_DB=django
      - POSTGRES_USER=user
      - POSTGRES_PASSWORD=P@ssw0rd
      - POSTGRES_HOST=postgres
      - POSTGRES_PORT=5432
    depends_on:
      - postgres
    restart: always

  nginx:
    container_name : nginx
    image: nginx:1.23.2
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf
      - django_media:/media/ # django의 media를 사용할 수 있도록 volume을 지정해줍니다.
      - django_static:/static/ # django의 static 사용할 수 있도록 volume을 지정해줍니다.
    depends_on:
      - backend
    restart: always

🧲 Dockerfile

# python 3.10.8버전 이미지를 사용해 빌드
FROM python:3.8.10

# .pyc 파일을 생성하지 않도록 설정합니다.
ENV PYTHONDONTWRITEBYTECODE 1

# 파이썬 로그가 버퍼링 없이 즉각적으로 출력하도록 설정합니다.
ENV PYTHONUNBUFFERED 1

# /app/ 디렉토리를 생성합니다.
RUN mkdir /app/

# /app/ 경로를 작업 디렉토리로 설정합니다.
WORKDIR /app/

# requirments.txt를 작업 디렉토리(/app/) 경로로 복사합니다.
COPY ./django/requirements.txt .

# 프로젝트 실행에 필요한 패키지들을 설치합니다.
RUN pip install --no-cache-dir -r requirements.txt

# daphne을 사용하기 위한 패키지를 설치합니다. + postgres
RUN pip install Daphne psycopg2

🧲 후기

팀원들을 도와주고 에러를 해결하고 하는동안 시간이 다 가버렸다. 배포 했을때의 문제가 너무 많이 일어났고 웹소켓이 제대로 작동하지 않는 문제도 발생했다.
에러 관련한 것들은 내일 다시 정리해야겠다.

profile
Carrot_hyeong

0개의 댓글