728x90

프로젝트를 진행하며 거의 2주간 삽집을 해낸끝에 https적용을 끝냈다.

프로젝트간 react-drf 스택으로 연동을 했기때문에 많은 분들이 도움을 얻어갔으면 좋겠다....

처음엔 도커를 이용하여 배포를 진행하려 했으나 이번 프로젝트 완성이 뭔가 지체되고 있는 느낌이 들어서 일단은 도커를 사용하지 않고 배포 진행하였다.

 

 

(0)인증서 발급 및 방화벽 개방

sudo apt update
sudo apt install snapd
// 재부팅 필수
sudo reboot

sudo snap install core; sudo snap refresh core
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
sudo certbot certonly --nginx

위에 해당하는 명령어를 그대로 수행하면 인증서를 발급받을수 있고 자신의 도메인을 입력해주셔야합니다.

해당 명령어를 수행하면 /etc/letsecrypt/live/도메인명/ 경로에 fullchain.pem(도메인 인증서와 Let's Encrypt Chain 인증서 결합)와 privkey.pem(개인키)가 저장됩니다.

 

aws를 이용하신다면 아래와 같이 443포트또한 개방해주셔야 합니다. 다르게 배포하시는 분들도 443포트는 반드시 개방해주셔야 합니다!!

 

(1)gunicorn 설치 

aws의 내 프로젝트 디렉터리 내부에서 가상환경내부에 gunicorn을 설치한다.

pip install gunicorn

사실 처음엔 가상환경 설치하기가 귀찮아서 서버에 라이브러리를 직접 설치하여 진행했는데 프로젝트 관리나 암튼 여러모로 가상환경은 필수니 모두 가상환경내부에 가상환경 실행후 설치를 진행해야한다.

 

(2)폴더에 권한 부여

이부분을 가장 많이 삽질했는데 추후 gunicorn 서비스 등록할때 이용할 유저와 그룹에 대해 권한을 부여해줘야한다.

sudo chown ubuntu:www-data 디렉토리명

aws에서 호스팅해서 사용하시는분들은 대다수 기본 계정이 ubuntu일테니 위와같이 해주시면 됩니다.

ls -alF

위의 명령어를 입력하면 위 사진과 같이 권한이 변경된걸 알수 있습니다. 꼭 django프로젝트가 있는 폴더에 설정해주셔야합니다.

 

(3)정적 파일 수집

기존 python manage.py runserver로 서버를 구동시키는것과는 달리 웹서버를 통해 배포할시 정적 파일을 수집해줘야합니다.

#settings.py
DEBUG=False

...

STATIC_ROOT = os.path.join(BASE_DIR, 'static/')

위와같이 설정을 변경해준뒤

python manage.py collectstatic

명령어를 실행해주시면 프로젝트 디렉터리에 static파일이 생성된걸 확인하실수 있습니다.

 

(4)서비스 등록 스크립트 생성

/etc/systemd/system/gunicorn.service

[Unit]
Description=gunicorn daemon
After=network.target

[Service]
User=ubuntu
Group=www-data
WorkingDirectory=/home/ubuntu/Getit/Server
ExecStart=/home/ubuntu/Getit/Server/venv/bin/gunicorn \
        --workers 3 \
        --bind unix:/home/ubuntu/Getit/Server/gunicorn.sock \
        apis.wsgi:application

[Install]
WantedBy=multi-user.target

이해를 돕기위해 프로젝트 디렉터리 명까지 그대로 복붙했는데 /home/ubuntu/Getit/Server 부분을 manage.py가 위치한 자신의 프로젝트 디렉터리 주소를 입력해주시면 됩니다.

 

/etc/nginx/sites-available/getit

server {
        listen 80;
        server_name 도메인;
        charset utf-8;


        location / {
                return 301 https://$host$request_uri;
        }
}

server {
        listen 443 ssl http2;
        server_name 도메인;
        charset utf-8;

        ssl_certificate /etc/letsencrypt/live/도메인/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/도메인/privkey.pem;


        location / {
                include proxy_params;
                proxy_pass http://unix:/home/ubuntu/Getit/Server/gunicorn.sock;
        }

        location /static/ {
                root /home/ubuntu/Getit/Server;
}

        location /media/ {
                root /home/ubuntu/Getit/Server;
        }

}

위에서 도메인은 자신이 구입한 도메인을 쓰면되는데 앞의 http나 https는 붙이지 말고 적어주셔야 합니다.  react와 연동할경우 리액트에서 api서버에 요청하는 그 도메인을 입력해주셔야합니다.

 

간단히 설명 하자면 기존의 http로 접근하는 부분에 대해서는 인증서가 적용된 https 즉 443포트로 요청을 가게 해뒀고 https에서는 전에 발급한 인증서를 토대로 서버를 구성한다는겁니다. 이부분은 프로젝트마다 다를수도 있긴 하지만 별다른 설정이 필요없는경우 위에서 경로만 조금씩 수정해주시면 됩니다. 제프로젝트에서 set_cookie를 사용하는 부분이 있어 nginx에서 별도의 설정이 필요할줄 알았는데 따로 설정할 필요는 없었기 때문에 보통의 상황에서는 별로 추가할 부분은 없을껍니다.

 

(5)사이트 추가

sudo ln -s /etc/nginx/sites-available/getit /etc/nginx/sites-enabled

전단계에서 생성해주었던 nginx관련 설정들을 링크를 걸어줍니다. 따로 이해가 안된다면 일단 그대로 복붙하시면됩니다. getit부분의 파일명은 본인이 설정한것으로 변경해주셔야 합니다.

 

(6)서비스 등록

gunicorn, nginx같은경우 단계를 수행할때마다 등록을 해줬어야 했는데 따로 한번에 등록해줘도 문제는 없습니다.

sudo systemctl start gunicorn
sudo systemctl enable gunicorn
sudo systemctl start nginx

위의 명령어로 서비스를 등록하고 웹서버를 실행시켜줍니다. 

문제가 있다면 서비스가 제대로 등록되었나 아래의 명령어로 확인해줍니다.

sudo systemctl status gunicorn
sudo systemctl status nginx

# 변경사항이 있을경우 무조건 아래의 명령어를 실행시켜줍니다.
sudo systemctl daemon-reload
sudo systemctl restart nginx
sudo systemctl restart gunicorn

프로젝트를 배포하며 https적용에 있어 엄청 어려움을 겪었고 2주간 삽질을하며 많은 시간을 소비했습니다. 정말 힘들게 https를 적용하게 되었는데 만약 위의 내용을 따라 했는데도 문제가 생긴다면 댓글 달아주세요!! 정성스럽게 답변해드리도록 하겠습니다. django는 다른 프레임워크에 비해 한글로된 레퍼런스가 많이 부족하니.. 서로서로 도와서 발전해야겠습니다ㅎㅎ 긴글읽어주셔서 감사합니다.

 

따로 추가 부연설명은 안하고 글을 작성하게 되었는데 좀더 튜토리얼 형식으로 하나씩 해보고 싶으시면 아래의 블로그들 참고 하시면 충분히 도움되실껍니다!

 

도움을 받은 블로그

아래의 순서로 일단 http적용하며 감을 익히고 ssl인증서 발급및 적용해보시면 됩니다!

-nginx gunicorn설정

 

EC2 + Nginx + gunicorn + Django 배포하기

gunicorn 설치 잘 작동되는지 확인 service 파일 등록 Nginx 설치 server (enables, available) 등록 시작 django debug = False로 변경 STATIC_ROOT 설정 collectstatic 실행

velog.io

 

03) Nginx, Gunicorn 배포

[TOC] # 시스템 구성 예시 * 우분투 16.04 * Django * nginx * Gunicorn 다음 설치 예제는 실제 물리서버가 아닌 vultr.com의 가상 ...

wikidocs.net

-인증서 발급 및 nginx gunicorn 스크립트 등록

 

UNLUCKY STRIKE

It's long way to the top if you wanna rock n roll

unluckystrike.com

 

 

728x90
728x90

전날 목표

  • GETIT 프로젝트

-https 적용

음... 이건 사실 뭐가뭔지 모르고 진행했다. https가 뭔지에 대해서 좀더 자세하게 들어가 봐야할것 같다. 대부분 client - server가 분리되어있지않고 풀스택 개념의 django인증서에 대한 설명이 나와있었는데 이분의 블로그 글이 현재 나눠서 진행하는 내상황과 맞아 보고 할수 있었다. 그래도.. 뭔지 모르고 성공하면 찝찝하다... 조만간 공부해봐야 겠다.

 

[Django] 장고 Rest API 서버 https 프로토콜 적용하기 - qwlake's Blog

서론

qwlake.github.io

  • 인턴

-rest통신 구체화 및 DB내용 변경

일단 PATCHLIST delete, put, post, get 모두 적용하였다. 그리고 파라미터로 KB_ID값을 전달받아 검색필터링 기능까지 추가하였다. 일단 내가 아는부분이라 좋긴 한데 프론트부분 만지는데 애를 먹고있다ㅎㅎ.. 리액트  개발자분들 리스펙~

 

  • kotluck

-기획 브레인스토밍 도식화 및 구체화

이부분은 솔직히 반성해야한다. 진행못했다ㅎㅎ 일요일 5시 기획 모임을 간단히 가지기로 했으니 지금부터라도 해봐야겠다!

 

  • 다음 목표

-GETIT 프로젝트

인프라 점검

 

-인턴

controller_client 부분 보완

 

-kotluck

기획 브레인스토밍 도식화 및 구체화

 

매주 적어도 2일은 밤샜었는데 이번주는 밤을 한번도 안샜다. 일이 그만큼 줄어든부분도 있고 체력적으로 살짝 한계가 온 부분도 큰거 같다. 그러다보니 이번주에 친구들도 만나고 좀 쉰감이 있는데ㅎ... 규칙적으로 할때하고 쉴때쉬는게 최고인거 같다! 나는 술도 좋아하고 사람 만나는것도 좋아하는데 한주만 조큼..? 쉬어갔다고 생각해야겠다ㅎㅎ 아맞다 이번에 넥스터즈 지원했는데 붙었음 좋겠다!!! 대학교 졸업전에 개발 연동 경험해보고싶다ㅠㅠ

728x90
728x90
  • 전날 목표

딱히 설정하지 않았었다. 회사 프로젝트가 가장큰 목표였다.

그래두.. 간만이니?

 

GETIT 프로젝트

-django-gunicorn-nginx

python manage.py runserver명령어를 통해 테스트 배포이후에도 계속 웹서버를 실행시켰었는데 절대 금지하는 방법이라고 장고공식 사이트에 나와있다. 그래서 nginx웹서버로 빌드하여야했는데 아래의 블로그를 참조하여 배포성공했다.

 

[Django]Django + Nginx + Gunicorn 연동하기 2

지난번 시간에 Django + Gunicorn 을 연동하였으니 이제는 Nginx 도 붙여 하나의 서비스를 하기 위한 준비들을 해볼 것이다. 먼저 Nginx의 특징을 간단하게 알아보고 설치를 진행할 것이다. Nginx 란? Nginx

leffept.tistory.com

사실 귀찮아서 서버에서 가상환경 사용안하고 pc에 그냥 라이브러리 설치했는데 이런귀차니즘 버려야한다ㅎ..

 

-https

간단히 말해 http프로토콜방식으로 웹은 통신을하며 request body에 데이터를 담아 전달하는데 이런과정에서 보안상 취약점이 수없이 많이 존재한다. https방식의 통신은 body를 암호화?하여 보안을 강화하는 통신방법인데 이제 기본중의 기본이 되었다. 그래서 https 방식으로 통신을 진행하려했지만... 허허허..

익숙치 않게 nginx만지작만지작 거리다 실수를 어디서한줄 파악하지 못해 인스턴스를 하나더 파고 기존의것을 버렸다... 하하하하... 그리고 지금 이시간 나는 오늘은 못할꺼라는 직감에 내일의 나에게.. 맡기려한다ㅎㅎ 일단 출근은 해야하니!

 

인턴

-개발 문서, 기획 문서 작성

사실 회사 프로젝트를 진행하며 정말 힘들었다... 처음 다뤄보는 스택이 많았고 암호화된 db를 복호화하기위해 pysqlcipher를 설치하는데도 반나절이 걸렸고 또이걸 입맛에 맞춰 못다루는 react를 죽어라 보고, 난잡한 python 코드들을 이리저리 만지작만지작 거리며 1차 마일스톤 기간에 맞춰 공유회의를 드린결과 오늘 처음으로 칭찬을 들었다. "오.. 그래도 지난주보다 많이 발전했네요. 순조롭게 진행되고 있는것 같아요. 수고했어요!"이한마디가 큰 칭찬은 아닐지라도 너무기쁜 하루였다ㅎㅎ 암튼1차 마일스톤 목표치 공유회의후에 필요한 요구사항을 선임 개발자분께 요청하기 위해 작성한 플로우차트와 db다이어그램을 작성하여 전달드렸고 기획문서 구체화를 시켜둔상태이다. 이제좀 개발자같은데?

혹시라도 pysqlcipher 설치에 대해 궁금한 분을 위해 링크 공유합니다~

 

Windows pysqlcipher 설치하기(x64, win10, sqlcipher, open ssl, vs2019)

sqlite를 사용하다가 sqlcipher를 파이썬에서 사용해야 하는 일이 생겼다. 그래서 설치 좀 해볼까 했는데 정말 안됐다. 인터넷에서 여기저기 돌아다니면서 해봤지만 다 안되고 결국 핸드폰 루팅의

98yejin.github.io

  • 새로운 일거리: 창업

대학교를 졸업하기 전에 한번은 창업을 해보고 싶어서 전에 알고 있던 친구에게 기획자를 부탁하였고 디자이너, ios, 안드로이드 개발자분들소셜사이트에서 구해서 현재 기획중이다. 파티와 관련한 창업인데 기획부분을 너무 쉽게 생각하고 진행했던터라 디자이너, 기획자 친구에게 혼쭐나고 나도함께참여하여 기획중인부분이다! 앞으로 TIL에 이것도 같이 추가될것 같다~

 

  • 다음 목표

-GETIT 프로젝트

https 적용

 

-인턴

프로젝트 rest통신 구체화 및 DB내용 변경

 

-kotluck

기획 브레인스토밍 도식화 및 구체화

 

말이 TIL이지 Today가 아니라 Week다완전ㅋ... 바쁘다는 핑계로 미루게 되었는데 좀 신경써서 TIL진행해야겠다. 슬슬 인턴종료까지 40일도 안남았다. 뜨거운 여름에 시작해서 이제 패딩입고 다니는 시기까지 진행하게되었는데 나는 인턴이 끝이나고 회사분들에게 어떤 이미지로 남을까?궁금하다 회사에 조금이라도 도움이 되는 그런 인턴이 되고자 마음먹었던 초심잃지 말고 남은 기간동안 다시 열심히 해봐야겠다! 화이팅이다!! 

728x90

+ Recent posts