계획 - NHN Cloud 환경에서 Django 서버를 띄우기
❗️ centos에서는 Django를 쓰려면 sqlite3 최신버전으로 재설치해줘야한다.
그 과정에 복잡하기도 하고,,실제 프로젝트에서는 ubuntu를 사용하고 ubuntu에서는 최신버전까지 apt로 설치되기 때문에 ubuntu 사용!!
# 로컬 테스트 위치
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
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
서버는 띄워졌다!
하지만, 실제로 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
해당 과정을 진행하는 중에 삽질도 많이하고 애를 많이 먹어서 서버가 띄워졌을 때 너무 감사했습니다,,😭
정리한 내용 중 잘못된 부분이나 지워야하는 부분이 있다면 알려주세요!!!😊 🙏
위 진행방식대로 진행하는 도중
sudo apt install -y install make
명령어에서
오류 발생!!
test 해보니 로컬 환경에서도 동일한 문구가 나오는데 서버 잘 띄워졌다! 그래서 일단 무시하고 진행!
여기서 잠깐!🖐
해당 클라우드환경에 재접속 시 Pyenv 명령어가 정상적으로 실행되지 않는 경우가 있는데, 이때는source ~/.bashrc
를 통해서 적용을 한 번 더 시켜주면 정상작동 합니다.
진행중..
진행중..
git clone 을 진행하는 과정에서 오류 발생!! 구글링을 해보니 프록시 관련 오류인 것 같았는데,,원인은 github쪽에 있는 것이라고 알려주셨다!!! 사내 github여서 연결이 되지 않는 것이었다. 재생성된 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번 포트로 장고 서버 띄워지는 것 확인했습니다!!!