웹 배포하기(1)

teal·2023년 7월 4일
0

웹 배포하기

목록 보기
1/1

플러터로 작성된 웹을 장고 + NCP 인스턴스 + Nginx + Gunicorn으로 배포하기 + Object Storage(이미지, 파일, 백업 저장소)

  1. 인스턴스 생성

위의 과정을 거쳐서 원하는 스펙의 인스턴스를 생성한다. 인증키는 추후 관리자계정의 비밀번호를 확인하는것에 사용되므로 잘 보관해야한다.

  1. 공인아이피 생성
    웹을 배포할 예정이므로 외부에서 해당 서버에 띄워진 웹에 접근할수 있는 외부에 노출된 주소 즉 공인 아이피가 필요하다.

적용 서버 선택에서 방금생성한 인스턴스를 선택해서 적용한다.

  1. ACG 설정
    ACG는 Access Control Group의 약자로 IP/Port 기반의 방화벽 서비스라고한다 원래 서버세팅할때는 서버 내에서 방화벽설정을 해줘야하지만 NCP에서는 ACG라는 이름으로 지원한다.

현재는 22포트로 ssh 접근만 가능하기때문에 http, https를 위한 80, 443포트를 추가한다.

  1. 접속
    아까 발급받은 인증키를 통해 어드민계정의 계정명, 비밀번호를 확인하고 발급받은 공인 아이피 주소를 통해 ssh 접속을한다. cer파일의 경우 pem으로 이름을 변경하면 어드민계정 확인이 가능하다. 그 후 접속해서 사용할 계정을 생성한다.

  2. 도메인, 인증서 관련
    가비아 등 사이트에서 발급받은 도메인에 공인아이피를 DNS 레코드에 추가한다.
    그리고 STL 인증서 관련하여 HTTP 인증을 받기위해 웹서버(Nginx)를 추가해야한다.

  3. 웹서버 설치

sudo yum install epel-release
sudo yum install nginx
systemctl start nginx
systemctl enable nginx

해당 작업을 완료하면 웹서버가 설치 완료된다.
그 후 인증서를 http 방식으로 인증한다면 conf.d 파일에 인증서 txt파일에 접근할수 있게 location 블록을 추가해준다.

  1. 파이썬 가상환경 설치
    배포할 장고 프로젝트를 운용할 가상환경이 필요하다 virtualenv, conda 등 여러 가상환경 중 conda를 이용해서 진행했다.

  2. postgresql 설치 및 데이터베이스 세팅

아래 과정을 통해 postgresql을 설치하고 실행시키고 psql을 실행한다

sudo yum install postgresql-server
sudo postgresql-setup initdb
sudo systemctl start postgresql
sudo systemctl enable postgresql
sudo -u postgres psql

아래 과정을 통해 사용할 데이터베이스, 유저를 생성(django settings에 존재하는 정보와 동일해야한다)하고 유저에게 데이터베이스에 관한 모든 권한을 부여한다

CREATE DATABASE {db_name};
CREATE USER {user_name} WITH ENCRYPTED PASSWORD {password};
GRANT ALL PRIVILEGES ON DATABASE {db_name} TO {user_name};
  1. 프로젝트 세팅(Django)
    프로젝트 세팅을 진행하고 원하는 포트와 함께 Gunicorn으로 프로젝트를 실행한다.

프로젝트 세팅하고 migrate를 진행하는중에 db관련된 여러 오류를 만날 수 있다.

  • Failed to build psycopg2 와같이 psycopg2가 설치안될 때
    - sudo yum install postgresql-devel python3-devel
  • FATAL: Ident authentication failed for user "{user}"
    - /var/lib/pgsql/data/pg_hba.conf 의 ipv4 indet -> md5로 변경
  1. nohup 등의 명령어로 프로젝트를 gunicorn으로 실행

  2. nginx에서 설정파일 작성 위에서 gunicorn으로 실행한 프로젝트에 대해서 리버스 프록시 관련 설정 파일을 작성하고 systemctl reload nginx를 하면 드디어 외부에서 해당 도메인으로 접근이 가능해진다

profile
고양이를 키우는 백엔드 개발자

0개의 댓글