최종 : NHN Cloud 환경에서 Django 서버 띄우기

호밀빵 굽는 쿼카·2022년 2월 9일
0

NHN Cloud 인턴

목록 보기
18/48

계획 - NHN Cloud 환경에서 Django 서버를 띄우기
❗️ centos에서는 Django를 쓰려면 sqlite3 최신버전으로 재설치해줘야한다.
그 과정에 복잡하기도 하고,,실제 프로젝트에서는 ubuntu를 사용하고 ubuntu에서는 최신버전까지 apt로 설치되기 때문에 ubuntu 사용!!

실제 NHN Cloud 환경에서 개발환경을 세팅하기 전에 로컬에서 테스트해보고 진행합시다!

로컬에서 장고 서버 띄우기

1. 로컬 가상 환경 세팅

# 로컬 테스트 위치
mkdir ~/workspace/VM/ubuntu
cd ~/workspace/VM/ubuntu

# vagrant 플러그인 설치 및 초기파일 설정
vagrant plugin install vagrant-vbguest
vagrant init
touch init.yml

# 밑의 Vagrantfile, init.yml 내용을 복사~!
vi Vagrantfile
vi init.yml
vagrant up

# ssh 접속
ssh ubuntu@192.168.56.11
# 만약 ssh키 오류가 나면, ~/.ssh/know_hosts 에서 해당 아이피의 ssh키 삭제해주기
cd ~/.ssh
vi known_hosts

Vagrantfile

ENV["LC_ALL"] = "en_US.UTF-8"
Vagrant.configure("2") do |config|
  # All servers will run ubuntu20
  config.vm.box = "ubuntu/focal64"
  config.vm.box_check_update = false
  config.disksize.size = "60GB"
  # Create the cent1 Server
  N = 1
  (1..N).each do |i|
    hostname = "ubuntu20-#{i}"
    config.vm.define hostname do |host1|
      host1.vm.hostname = hostname
      host1.vm.network "private_network", ip: "192.168.56.#{10 + i}"
      host1.vbguest.auto_update = false
      host1.vm.provider "virtualbox" do |v|
        v.name = hostname
        v.memory = "2048"
        v.cpus = "2"
        v.linked_clone = "true"
        v.gui = "false"
      end
    end
  end
  config.vm.provision "ansible" do |ansible|
    ansible.playbook = "init.yml"
  end
end

init.yml

- name: Automate SSH connections from ansible-server to ansible-client
  hosts: all
  gather_facts: no
  become: yes
  tasks:
    - name: 사용자 이름 생성
      user:
        name: "{{ item }}"
        shell: /bin/bash
        home: "/home/{{ item }}"
        generate_ssh_key: true
        password_lock: yes
      with_items:
        - ubuntu
    - name: sudoers.d 추가
      copy:
        content: |
          %{{item}} ALL=(ALL) NOPASSWD: ALL
        dest: "/etc/sudoers.d/{{item}}"
        owner: root
        group: root
        mode: 0440
        validate: "/usr/sbin/visudo -c -f '%s'"
      with_items:
        - ubuntu
    - name: ssh내용 추가
      authorized_key:
        user: "{{ item }}"
        state: present
        key: "{{ lookup('file', '~/.ssh/id_rsa.pub') }}"
      with_items:
        - ubuntu
        - vagrant
        - root

2. pyenv, python3 설치 및 Django 서버 띄우기

virtualbox의 ubuntu 환경 vm 시작!
터미널에서 ssh ubuntu@192.168.56.11로 가상환경 접속

# pyenv 설치를 위한 준비
# apt 가 안되면 apt-get 으로!
sudo apt update
sudo apt install -y git sqlite3
sudo apt install -y build-essential
sudo apt install -y libedit-dev
sudo apt install -y install make

# pyenv 설치를 위한 패키지 다운로드
sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev \
libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev \
xz-utils tk-dev
 
# pyenv 다운로드
curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash

# ~/.bashrc 내용 수정
vi ~/.bashrc
---
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
export PYENV_VIRTUALENV_DISABLE_PROMPT=1
eval "$(pyenv init --path)"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
---
source ~/.bashrc

# pyenv로 python 3.9.10 버전 다운로드
pyenv install 3.9.10
# py39라는 이름의 가상환경 생성
pyenv virtualenv 3.9.10 py39
# py39 활성화
pyenv activate py39

# 실행할 프로젝트를 git clone 받기
git clone [프로젝트 github주소]
# requirements.txt 에 있는 의존성파일 다운로드
pip install -r requirements.txt

# secrets_template.json 수정
# secret key 적어주기
# 본인은 secrets.json 생성 후 secret key 적어주었음
# 이과정에서 JSONDecoderError 오류가 발생한다면, 주석을 지워주세요.

# python manage.py runserver 로 서버 실행!
python manage.py runserver --settings=main.config.settings.debug

3. 아이피:8000 로 띄워진 서버 확인


서버는 띄워졌다!
하지만, 실제로 http://127.0.0.1:8000 에서는 접속거부🥲
해결법은 8000번 포트를 열어주어야하는 것!
virtualbox > 네트워크 > 고급 > 포트포워딩 에서 8000포트 추가
다시한번, http://127.0.0.1:8000 확인! 하지만 또 접속거부🥲

원인은 내가 ip에 대한 개념이 없다는 것이 문제였다,,!

  • 호스트에 할당된 ip 즉, 내가 갖고 있는 노트북에서 localhost 또는 127.0.0.1로 서버를 띄울 경우
    서버를 띄운 노트북에서만 접속이 가능
  • 사설IP의 경우에는 같은 대역의 사설 IP를 할당받은 모든 기기에서 접속이 가능
  • 공인IP의 경우에는 어디서나 접속이 가능

로컬 컴퓨터의 IP는 localhost(127.0.0.1)이고, 로컬 가상환경의 IP는 192.168.56.11

본인은 컴퓨터로 접속한 것이 아니라 따로 가상환경을 생성해서 Django프로젝트의 서버를 띄우는 과정이었기 때문에 http://192.168.56.11:8000 으로 서버를 띄워주어야 함
python manage.py runserver 192.168.56.11:8000 --settings=main.config.settings.debug

해당 과정을 진행하는 중에 삽질도 많이하고 애를 많이 먹어서 서버가 띄워졌을 때 너무 감사했습니다,,😭

정리한 내용 중 잘못된 부분이나 지워야하는 부분이 있다면 알려주세요!!!😊 🙏




실제 NHN Cloud 환경(ubuntu)에서 실행해봅시다!

위 진행방식대로 진행하는 도중

sudo apt install -y install make 명령어에서

오류 발생!!
test 해보니 로컬 환경에서도 동일한 문구가 나오는데 서버 잘 띄워졌다! 그래서 일단 무시하고 진행!


여기서 잠깐!🖐
해당 클라우드환경에 재접속 시 Pyenv 명령어가 정상적으로 실행되지 않는 경우가 있는데, 이때는 source ~/.bashrc를 통해서 적용을 한 번 더 시켜주면 정상작동 합니다.


진행중..
진행중..



git clone 을 진행하는 과정에서 오류 발생!! 구글링을 해보니 프록시 관련 오류인 것 같았는데,,원인은 github쪽에 있는 것이라고 알려주셨다!!! 사내 github여서 연결이 되지 않는 것이었다. 재생성된 ubuntu 환경에서 다시 이어서 시도합니다




👉👉 최종 : 실제 NHN Cloud 환경(ubuntu), 개발서버에서 실행해봅시다!

회사 게이트 웨이 신청 후 접속 확인

 # scp로 펨키 이동
scp [pem키이름].pem claraqn1120@[이름]:/home1/claraqn1120
# [이름] 접근
ssh claraqn1120@[이름]
#비밀번호 설정
# 가상환경 접속
ssh -i [pem키이름].pem ubuntu@[가상환경IP]
# 계정 변경
sudo su - [계정]
# git clone 진행
git clone 되는 것 확인가능

위와 같은 순서로 장고서버를 띄워봅니다.
마지막에 서버를 띄우는 단계에서,
python manage.py runserver 133.186.185.236:5000 --settings=main.config.settings.debug
서버는 띄워졌지만 크롬에서 확인이 불가능! 연결할 수 없음이 떴다

해결법은 nwacl을 뚫는것! 지금은 해당 서버의 해당 포트 연결이 막혀있고, 네트워크 엔지니어한테 부탁해서 열어야 합니다!

ACL이란?

  • ACL = Access Control List
  • 트래픽 필터링과 방화벽을 구축하는데 가장 중요한 요소로, 허가되지 않은 이용자가 라우터나 네트워크의 특정 자원을 접근하려고 하는 것을 차단
  • 발신지 주소,목적지 주소, TCL/UDP 포트번호 같은 사항들을 기반으로 허락과 거부를 할 수 있음

NWACL이란?

  • NWACL = 네트워크 ACL
  • 네트워크 엔지니어한테 열어달라고 부탁!

DBACL이란?

  • DBACL = 데이터베이스 ACL
  • DB단에서 막는거라 우리팀에서 처리!

방화벽

  • 수신/발신 네트워크 트래픽을 모니터링하고 정의된 보안 규칙 집합을 기준으로 하여 특정 트래픽의 허용 또는 차단을 결정하는 네트워크 보안 디바이스
  • 미리 결정된 보안 규칙에 따라 들어오고 나가는 네트워크 트래픽을 모니터링하고 제어하는 네트워크 보안 시스템
  • NHN Cloud 에서 보안규칙을 설정해주는 것을 생각하면 됨!
  • 외부 사용자(WAN)들이 내부 네트워크(LAN)에 접근하지 못하도록 하는 일종의 내부 네트워크 방어도구

프록시

  • 프록시 서버는 클라이언트가 자신을 통해서 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해 주는 컴퓨터 시스템이나 응용 프로그램을 가리킴
  • 옛날에 블로그에 짧게 정리한 내용
    - 예를 들면, 특정 사이트를 한국에서 접속할 수 없을 때 해당 특정 주소를 프록시 설정을 통해 바꿔주면 한국이 아닌 다른 나라에서 접속을 하는 것처럼 설정하면 자유롭게 활용가능

iptables

  • 리눅스상에서 방화벽을 설정하는 도구
  • 패킷 필터링 기능을 제공
  • 패킷 필터링 : 패킷의 헤더를 보고 그 패킷 전체를 어떻게 처리할지 결정하는 것/ 특정 조건을 가지고있는 패킷에 대해 허용(ACCEPT), 차단(DROP) 등을 지정할 수 있음

agw

  • 엑세스 게이트웨이

gateway

  • 한 네트워크(segment)에서 다른 네트워크로 이동하기 위하여 거쳐야 하는 지점
  • 두 컴퓨터가 네트워크 상에서 서로 연결되려면 동일한 통신 프로토콜을 사용해야 함. 따라서 프로토콜이 다른 네트워크 상의 컴퓨터와 통신하려면 두 프로토콜을 적절히 변환해 주는 변환기가 필요한데, 게이트웨이가 바로 이러한 변환기 역할을 함

SAP ERP

ERP : 전사적 자원관리(조직이 일반적인 비즈니스 활동을 관리하는데 사용하는 소프트웨어 유형). 회사를 운여하게 되면 각각의 업무 분야가 있음. 프로세스를 통합하여 관리하는 것.



2월 15일 기준 개발환경에서 15000번 포트로 장고 서버 띄워지는 것 확인했습니다!!!

profile
열심히 굽고 있어요🍞

0개의 댓글