4월 19일 (수) 10~17시 | 한국컨퍼런스센터

 

 

☀️ 오전 세션

NHN Cloud 교육과정

  • VPC, 서브넷, 라우팅 등
  • VPC 내 상품 -> NAT 게이트웨이, VPC 피어링, 내부 통신을 위한 서비스 게이트웨이
  • 올해 자격증도 나온다!
  • 고매출 상품 : Nofi API
  • 다양한 교육이 있음!

 

클라우드 컴퓨팅과 NHN Cloud 소개

클라우드 컴퓨팅 이점

  • 신속한 인프라 도입
  • 유연한 인프라 관리
  • 예상치 못한 트래픽 폭주 대응 -> 오토 스케일
  • 이용한 만큼 지불하는 비용

 

Cloud Deployment Models

Public

Private

Hybrid

private <-> public, on-premise <-> public

Multi

  • CSP 이중화 구성
  • 두개 이상의 외부 클라우드를 활용
  • 비즈니스 요구에 가장 적합한 공급업체에서 선택가능

 

Cloud Computing Type

IaaS

  • OS부터 설정
  • Instance, Storage, VPC

 

PaaS

  • OS 환경구성이 미리 되어 있음
  • RDS for DB, NKS(NHN Kubernetes Service)

 

SaaS

  • 완전히 다 만들어진 솔루션
  • 웹이나 앱에서 바로 접속할 수 있는 서비스
  • Dooray! Contact Center

 

Cloud Computing 책임공유모델

  • 고객(사용자)와 CSP가 함께 보안과 운영을 공동으로 책임을 분배하는 책임공유 모델을 제공
  • 모든 CSP가 동일하게 얘기하는 부분
  • CSP : 클라우드 서비스, IDC 운영

 

NHN Cloud 서비스는?

  • Open Stack 기반으로 제공하는 클라우드 플랫폼
  • 모든 부분을 오픈 스택 기반으로 한 것은 아님!
  • 보안이 취약했던 네트워크는 내부에서 내부 기술을 이용해서 개발
  • 리전별로 제공 리소스가 다르므로 꼭 확인하고 리전 선택하기
  • 디폴트 리소스 정책을 꼭 확인하기
  • 쿼터 제한도 꼭 미리 생각하기

 

 

NHN Cloud 요금체계

  • 요금 탭에서 과금 정책 확인
  • 네트워크 요금, OS을 꼭 잘 고려해야 함
  • 인스턴스 서버 정지도 정지요금이 있음
  • 요금계산기로 계산해볼 수 있음
  • 예산관리 기능이 있음 : 예산을 설정하고, 초과 시 원하는 방법으로 알림을 받을 수 있음 (무료!)
  • 가입 축하 크레딧은 1년 유효기간, 적용 가능한 커버리지가 한정되어 있음

 

시나리오를 이용하여 NHN Cloud 이해하기

1. NHN Cloud Console은 무엇인가요?

리전부터 선택하고 시작해야 함!

 

  • 엔클의 차별점!
  • 조직/프로젝트 관리

 

  • 조직
  • NHN Cloud 서비스를 효율적으로 사용하고 관리하기 위해 만들어진 그룹
  • 회사 단위로 구성할 수 있고, 조직을 사업 단위로 구성
  • 비용 측면에서도 따로 관리할 수 있는 것

 

  • 프로젝트
  • 조직당 5개까지 생성 가능
  • 리소스 사용량은 프로젝트 단위로 계산됨
  • 독립적으로 구분해서 사용

 

  • 프로젝트별로 과금되고 조직별로 청구된 금액이 나옴

 

1. 조직 생성

2. 프로젝트 생성

3. 서비스 활성화 (Cloud Trail, Resource watcher는 자동 생성됨)

4. 조직 - 예산 관리 - 예산 추가

5. 멤버 관리

NHN Cloud 회원 

이메일이 아이디

 

IAM 멤버

  • 조직의 오너나 어드민이 조직 내 유일한 ID를 입력하여 등록
  • 소유자가 IAM 멤버를 만들 수 있음
  • 조직 내에서만 유효함
  • 조직 서비스 이용
  • 신입사원이나 외주 개발자라든지..
  • ID에 설정된 이메일에서 비밀번호를 등록하면 됨
  • 접속할 수 있는 별도의 도메인을 설정해주어야 함

 

권한

조직 권한과 프로젝트 권한

조직 권한과 프로젝트 권한은 계층 관계가 아님!

 

조직 권한

  • NHN Cloud 회원
    • 오너, 어드민, 멤버, 빌링뷰어, 로그뷰어

 

  • IAM 회원
    • 멤버 권한은 선택적으로 부여받을 수 있음
    • 서비스 사용만 할 수 있도록 하는 것을 권장

 

 

프로젝트 권한

NHN Cloud 계정이 있다면 조직의 멤버가 아니더라도 프로젝트 멤버가 될 수 있음

IAM 계정은 조직에 먼저 등록이 돼야 프로젝트 멤버로 등록할 수 있음

 

프로젝트/서비스 이용별로 권한 따로 줄 수 있음

VPC는 Infrastructure ADMIN 권한을 추가해주어야 함

IAM에는 프로젝트 관리 권한을 안 주는 것을 권장

 

보안

조직 관리 - 거버넌스 설정 가능

IP ACL이나 IAM 계정 로그인 보안 설정 등

 

2. Cloud 서버 생성해서 접속해보기

IP

사설IP 공인IP

사설IP

회사 내부 네트워크나 학교 공용 컴퓨터 등에서 사용 가능

하나의 네트워크 같은 사설망 안에서는 유일, 다른 사설망끼리는 중복 가능 -> 서로 다른 아파트면 동과 호수는 같은 것이 있을 수 있음

 

공인IP

전세계적으로 유니크함 -> 주소

인터넷을 통신하기 위해서는 반드시 공인IP가 있어야 함

라우터, 공유기에 무조건 공인IP가 하나 할당돼 있어야 인터넷 통신이 가능

한국은 KISA에서 관리하고 있음

 

 

VPC(Virtual Private Cloud)

2019~

인스턴스나 로드 밸런서 같은 리소스는 격리된 네트워크가 필요해서 가상의 "사설" 네트워크 대역을 만들어주는 개체

각자 계정에서 원하는 사설 망을 만들고, 격리되게 네트워크를 구성할 수 있음

 

CIDR 방식, 서브넷

 

VPC를 만들고

용도에 맞춰서 네트워크 공간을 세분화 해야 함 -> 서브넷

서브넷은 VPC 범위 내에서 생성되어야 함

길이가 같거나 작아야 함

서브넷이 생성되면 VPC에 포함된 기본 라우팅 테이블에 자동으로 연결됨

 

클라우드에서는

VPC를 만들자마자 로컬 게이트웨이가 라우팅을 잡아줌

 

라우팅 테이블

 

인터넷 게이트웨이

양방향 통신(아웃바운드, 인바운드 둘 다 가능)

사설 네트워크가 외부랑 통신하기 위해서 VPC(사설망)를 여기에 연결

라우팅 테이블에 인터넷 게이트웨이로 가는 경로를 넣어줘야함

 

아키텍처 구성

1. 리전 선택

2. VPC 생성 -> 라우팅 자동 생성 -> 로컬 게이트웨이 자동 생성

3. 인터넷 게이트웨이 생성 및 라우팅 연결

연결해야 인터넷 통신이 됨

인터넷 게이트웨이를 생성하고 라우팅에서 생성한 게이트웨이를 연결해야 됨

4. subnet 생성

보통 DB나 웹서버 등 용도별로 서브넷을 생성

네트워크 - 서브넷 생성

 

Instance

기본 제공 이미지 및 기본 스토리지 용량

추가 스토리지

인스턴스 타입 변경 가능

리전

가용성 영역

 

플로팅 IP(공인 IP)

사설 IP는 외부에서 사용 불가하기 때문에 플로팅 IP 사용

 

보안 그룹

가상의 방화벽 역할

보안그룹을 열어야 됨

내부통신 할 때도 열어줘야 함 기본이 all denied

송신은 다 열어주고, 수신은 어떤 원격지에서 들어오게 할 지만 조절하면 됨

CIDR/보안그룹/내IP

 

Network ACL

VPC 앞 단에서 유입되는 네트워크 패킷 제어

NW ACL에서 허용했더라도 보안 그룹에서 허용되지 않으면 막히게 됨

order 번호에 따라서 순서대로 적용됨 -> 차단하고 싶은 IP를 먼저 놓고, 허용해주면 차집합 가능 (반대로 하면 차단이 안됨!!!)

ACL은 변경이 안되기 때문에 10 단위로 순서를 해야 중간에 채워놓을 수 있음

서브넷이 아님

서브넷 단위로 ACL 설정하는 것이 아님

 

인스턴스 생성 과정

1. 이미지 선택

2. 가용성 영역 선택

3. 인스턴스 타입 선택

4. 키페어 선택

5. 블록 스터리지 설정

6. 네트워크 설정

7. 플로팅 IP 설정

8. 보안그룹 설정

 

추가 설정 영역

1. 추가 블록 스토리지

2. 사용자 스크립트 : 인스턴스 생성 후 네트워크 설정이 완료되면, 스크립트 내용을 실행시킴 -> 로그는 /var/log/cloud-init-output.log에 있음

3. 삭제보호

 

인스턴스 생성

 

 

ping 테스트

Ping은 TCP가 아니라 ICMP를 사용함

ALL ICMP로 하고 수신 허용해주면 테스트 가능

 

 

인스턴스 템플릿

case 1: 미리 정의한 인스턴스 템플릿으로 동일한 사양의 인스턴스를 생성할 때

인스턴스 이름, OS, 스펙, 키페어, 보안그룹 등을 사전에 설정

 

case 2: auto scale을 사용하기 위한 스케일링 그룹을 만들 때

 

이미지

퍼블릭

NHN Cloud에서 제공하는 이미지

 

사용자

퍼블릭 이미지를 토대로 사용자가 수정한 이미지

 

공유

사용자 이미지를 다른 프로젝트 또는 다른 리전과 공유하도록 설정

 

생성 방법 -> part2

 

3. VPC별 시나리오 구성하기

NAT 게이트웨이

단방향만 가능(아웃 바운드만 가능)

private subnet에 nat 게이트웨이를 연결함

항상 고정된 공인 IP

온프레미스 환경일 때 소스 IP를 고정해야 되거나 그런 경우에 NAT 게이트웨이 붙임

 

#실습

Public Subnet과 Private Subnet 생성하고 NAT Gateway 할당하여 통신 체크하기

1. Private Subnet 생성

 

2. 라우팅 테이블 생성 private은 인터넷이 되지 않도록

VPC 생성시 기본 라우팅이 자동으로 생성되며, 모든 서브넷은 별도 설정이 없으면 기본 라우팅으로 설정됨

private-subnet을 서브넷에서 라우팅 테이블 변경

 

3. Private Subnet에 서버 생성

인터넷 게이트웨이가 붙지 않은 서브넷은 플로팅 IP 설정이 불가능함

 

4. 서버 내에서 업데이트 진행

 

5. SCP를 이용하여 pemkey 다운로드

외부에서 22번으로 들어가서

퍼블릭 서브넷에 있는 서버와 프라이빗 서브넷에 있는 서버가 사설 통신을 해야함

key는 밖에 있으니까 열쇠를 퍼블릭 서브넷에 넣으면 됨

SCP 사용

scp -i test1.pem test1.pem centos@125.6.45.216:~

private 서버 보안그룹에 접속하려는 public 서버의 사설 ip 넣어야 함

또는 보안그룹 자체를 등록 - 해당 보안그룹을 쓰는 인스턴스의 접속은 모두 허용한다는 뜻

 

6. NAT Gateway 할당

고정된 공인 IP를 타고 나가기 때문에 플로팅 IP를 생성해주어야 함

nat gateway를 타고 나가면 이 공인 IP로 나가는 것

private 서버에 라우팅 잡아줘야 함

 

7. 서버 내 yum 업데이트 진행

NAT 게이트웨이를 타고 나가게 됨!

 

피어링

서로 다른 두 개의 VPC를 연결해주는 것!

A <-> B <-> C 연결에서는 A와 C처럼 건너 건너는 연결되지 않고, 따로 연결해주어야 함

 

피어링 게이트웨이

실습)

완전히 새로운 사설망 생성 -> 논리적으로 완전 격리된 사설망임 통신 불가임 원래

라우팅에 인터넷 게이트웨이 연결

인스턴스 생성하기 192.168 네트워크로

 

ping test

자신의 보안그룹을 넣는 이유

webserver와 vpc2-server 서로 ping 테스트 하기 위해서

서로 사설 통신을 허용해줌

플로팅 IP 할당

 

서로 통신이 안 되기 때문에 피어링 연결해줘야 함

 

두 개의 라우팅 테이블 작업

 

이 범위인 애들은 피어링 게이트웨이를 타도록 생성한 라우팅 테이블을 넣어줌

퍼블릭만 뚫어줄거니까

 

통신이 된다..!!!

피어링 게이트웨이를 타고 통신을 함

 

 

실습) 서비스 게이트웨이와 오브젝트 스토리지 연결해 내부 통신해보기

서비스 게이트웨이를 타고 사설 통신할 수 있게 해줌

인터넷이 아니라 내부 사설망을 통해

public으로 해야 url이 나옴

스토리지 저장 공간의 단위 -> 컨테이너

https://kr2-api-object-storage.nhncloudservice.com/v1/AUTH_e587438ab69747699bef427bb74e9ce9/obs/user_script_nhn%20for%20Web.txt

이 도메인은 인터넷을 타고 가는 것이므로 서비스 게이트웨이를 통해 사설망을 통해 

http://10.0.1.16/v1/AUTH_e587438ab69747699bef427bb74e9ce9/obs/user_script_nhn%20for%20Web.txt

주소를 사설 IP로 변경

http로 하고 사설망 80 통신

obs에 저장해놓은 파일을 받았다!!

 

obs에 서비스 게이트웨이로 사설망 붙여서 주소 변경하기

 

피어링을 해놔서 192.168.대도 됨

안 되는거 보고 싶으면 피어링 빼면 됨

 

 

사용한 리소스 반납

인스턴스 삭제

프로젝트 설정에서 서비스 비활성화

1. 문제 상황 

운영서버인 우분투 20.04 인스턴스에서 도커를 설치하려고 하는데 의존성 문제가 발생했다. 

(개발서버에서는 발생하지 않음.. 차이가 뭘까?)

 

대략 이런 식으로..

몇몇 패키지를 설치할 수 없습니다. 요청한 상황이 불가능할 수도 있고,
...
다음 패키지의 의존성이 맞지 않습니다:
 containerd.io : 의존: libseccomp2 (>= 2.4.0) 하지만 2.3.1-2.1ubuntu2~20.04.1 패키지를 설치할 것입니다

 

아래 방법으로 직접 설치를 진행해도 원하는 버전이 설치가 되지 않았다 :(

sudo apt-get install libseccomp2

 

2. 해결 방법

답은 공식 다운로드!

https://pkgs.org/download/libseccomp2

 

리눅스용 Libseccomp2 다운로드 사이트에 가서 환경에 맞는 패키지를 설치한다.

curl -O https://ubuntu.pkgs.org/20.04/ubuntu-updates-main-amd64/libseccomp2_2.5.1-1ubuntu1~20.04.2_amd64.deb.html

 

역시 공식이 최고다..

해결 완료 !

 

개발한 vue-django 프로젝트를 실제 운영서버에 띄우는 과정을 정리합니다! 

 

개발서버에서 구축했던 방법이 운영서버에서 적용할 때 조금씩 다른 부분도 있었고, 

여러 단계를 거쳐야 했기 때문에 잊어 버리지 않기 위해 기록해봅니다 스타트..!

 

🐾 단계

  1. 인스턴스 생성
  2. 보안규칙 생성
  3. DB ACL 허용 요청
  4. 도커 설치 - v23.0.3
  5. Jenkins 도커 서버 띄우기 - v2.399
    1. Jenkins 컨테이너 생성 및 실행
    2. Jenkins 컨테이너 내부에 DooD 구성하기
  6. 패키지 설치 및 환경 구성
  7. 웹 서버 띄우기
    1. 백그라운드로 웹 서버 띄우기

 

1. 인스턴스 생성

개발서버

ssh -i {pem키} ubuntu@{ip}

  • OS : Ubuntu Server 20.04 LTS
  • 타입 : r2.c4m16 (4vCPU, 16GB)
  • 스토리지 : 300GB

운영서버

  • OS : Ubuntu Server 20.04 LTS
  1. ssh {id}@{domain}
  2. (kinit)
  3. ssh {user}@{host}

😃 커버로스을 이용해 티켓이 발급된 사용자만 접속할 수 있도록 보안 단계를 거치게 됩니다! 

 

2. 보안규칙 생성

보안 그룹에서 필요한 포트 열어주기

젠킨스 기본 포트는 8080이지만 장고에서 사용하고 있기 때문에 겹치지 않게 7070으로 변경!

  • 7070 : 젠킨스
  • 8080 : 장고
  • 8000 : 뷰

 

3. DB ACL 허용

 

 

4. Docker 설치

  • Docker Latest : v23.0.3

개발서버

# dependency library download  
sudo apt-get update  
sudo apt-get install -y curl apt-transport-https ca-certificates gnupg-agent software-properties-common  
  
# Docker 다운로드 링크 추가  
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg  
  
# Docker Repository 등록  
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null  
  
# Docker 설치  
sudo apt-cache policy docker-ce  
sudo apt-get update  
sudo apt-get install -y docker-ce docker-ce-cli containerd.io  
  
# docker 그룹에 사용자 추가  
sudo usermod -aG docker $USER  
  
# 그룹 변경사항 활성화  
sudo newgrp docker

 

운영서버

# sudo 권한을 위해 아래 계정으로 접속
ssh {user}@{host}

# dependency library download  
sudo apt-get update  
sudo apt-get install -y curl apt-transport-https ca-certificates gnupg-agent software-properties-common  
  
# Docker 다운로드 링크 추가  
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg  
  
# Docker Repository 등록  
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null  
  
# 의존성 문제 해결
curl -O http://archive.ubuntu.com/ubuntu/pool/main/libs/libseccomp/libseccomp2_2.5.1-1ubuntu1~20.04.2_amd64.deb
sudo dpkg -i libseccomp2_2.5.1-1ubuntu1~20.04.2_amd64.deb

# Docker 설치
sudo apt-cache policy docker-ce  
sudo apt-get update  
sudo apt-get install -y docker-ce docker-ce-cli containerd.io  
  
# docker 그룹에 사용자 추가  
sudo usermod -aG docker $USER

 

5. Jenkins 서버 띄우기

Jenkins 컨테이너 생성 및 실행

  • Jenkins 제공 공식 도커 이미지 사용 (Jenkins 2.399)
  • Jenkins 컨테이너 생성 시 --privileged 옵션 필요
    • Variable Parsing 시 PostgreSQL는 yum으로 설치되므로 systemctl 명령어 사용 필요
  • 프로젝트 내 폴더 생성 후 실행할 스크립트 파일 모으기 (/home/ubuntu/variable-comparison/script/<DBMS명>)
  • 인스턴스와 컨테이너 폴더 위치 마운트하기 (/root/script)
sudo docker run --privileged -d --name jenkins -p 7070:8080 -v /home1/{user}/variable-comparison/script:/root/script -v /var/run/docker.sock:/var/run/docker.sock jenkins/jenkins

젠킨스 초기 비밀번호 확인

docker exec -i jenkins bash <<< "cat /var/jenkins_home/secrets/initialAdminPassword"

 

Jenkins 컨테이너 내부에 DooD 구성하기

# jenkins 컨테이너에 루트 권한으로 접속
docker exec -it -u root jenkins bash

# docker 그룹 생성
groupadd docker
# docker 그룹에 jenkins 사용자 추가
usermod -G docker -a jenkins
# 호스트의 docker 그룹 ID(998)로 지정된 그룹명을 docker로 변경
# docker 그룹 ID는 /etc/group 파일에서 확인 가능
groupmod -g 499 docker
# 컨테이너 내부 사용자가 호스트의 파일에 접근 가능하도록 호스트 사용자 아이디(500)로 변경
usermod -u 500 jenkins

apt-get update
apt-get -y install lsb-release apt-transport-https ca-certificates curl gnupg2 software-properties-common
apt-get -y upgrade apt-transport-https

# Docker 다운로드 링크 추가
curl -fsSL https://download.docker.com/linux/$(. /etc/os-release; echo "$ID")/gpg > /tmp/dkey
apt-key add /tmp/dkey

# Docker Repository 등록
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/$(. /etc/os-release; echo "$ID") $(lsb_release -cs) stable"

# Docker 설치
apt-get update
apt-get -y install docker-ce docker-ce-cli containerd.io

 

6. 패키지 설치 및 환경 구성

1. 프로젝트 Git clone

  • 안될 경우, 사내 게이트웨이 신청 필요할 수 있음
git clone {repository url}

 

2. pyenv 설치 (python 3.9.10)

sudo apt update
sudo apt install -y git sqlite3 build-essential libedit-dev 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에 환경변수 추가
cat >> ~/.bashrc << 'EOF'
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 -)"
EOF

# ~/.bashrc 적용
source ~/.bashrc

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

 

3. requirements.txt 설치

pip install -r requirements.txt

# setuptools가 먼저 설치되어야 mysqlclient 설치가 정상적으로 진행됨
# 설치 순서도 중요!

 

4. secret key 발급

 

5. 필요한 패키지

  • Redis
sudo apt-get install -y libssl-dev default-mysql-server default-mysql-client default-libmysqlclient-dev
sudo apt-get install -y python3-pip
pip3 install requests bs4 sqlalchemy pymysql mysqlclient pandas redis
  • PostgreSQL
apt-get update && apt-get -y install sudo
sudo apt-get install -y postgresql-client
sudo apt-get install -y postgresql-client-common
sudo apt install pip 
sudo apt install default-libmysqlclient-dev
pip install sqlalchemy requests bs4 psycopg2-binary mysqlclient numpy pandas
  • 설치가 잘 안 될 경우
# ModuleNotFoundError: No module named '_ctypes' 에러
sudo apt-get install libffi-dev
# 가상환경 파이썬 제거
pyenv uninstall 3.9.10
# 가상환경 파이썬 재설치
pyenv install 3.9.10
# py39라는 이름의 가상환경 생성
pyenv virtualenv 3.9.10 py39
# py39 활성화
pyenv activate py39

 

6. npm, vue, nvm 설치

node 버전을 잘 맞춰 주는 것이 매우 중요하다! 안 맞으면 띄워지지가 않음..

# npm 설치
sudo apt install npm

# vue-cli 설치
sudo npm install -g @vue/cli
vue --version #@vue/cli 5.0.8

# nvm 설치
sudo apt-get install build-essential libssl-dev
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash
source ~/.bashrc

# 원하는 버전 설치
nvm install 16.14.2

# 실행
# nvm use default 16.14.2

# 버전 확인
node -v  # v16.14.2
npm -v # 8.5.0

 

7. vue.config.js 변경

publicPath: process.env.NODE_ENV === 'production' ? '/static/dist/' : 'http://{ip}:{port}',

.public('http://{ip}:{port}')

 

7. 서버 띄우기

* 주의

로컬을 띄운 상태에서 실행할 경우 로컬 화면이 나오는 것이기 때문에 로컬을 끈 상태에서 진행해야 진정한 서버를 볼 수 있다!

 

운영서버

백그라운드에서 띄우기!

  • nohup node ./node_modules/@vue/cli-service/bin/vue-cli-service serve --port 18080 &
  • nohup python manage.py runserver {ip}:{port} --settings=main.config.settings.debug
  • 15361번 포트, 18080번 포트 사용

드디어 메인 화면이 예쁘게 뜬 것을 확인할 수 있다~!!

 

이렇게 정식으로 서버를 띄워본 것은 처음이어서 한 단계를 알아 갈 때마다 너무 재밌고 이런 시간을 보낼 수 있어서 감사했다!

관련 내용은 더 반복하고, 모르는 내용은 스터디해서 잘 정리해두어야겠다 :)

1. 문제 상황

ImportError: pycurl: libcurl link-time version (7.79.1) is older than compile-time version (7.85.0)

npm run serve 실행시 pycurl 버전 문제로 보이는 에러가 발생하면서 프로젝트 실행이 되지 않았다.

 

 

2. 해결 방법

방법 1) pycurl 재설치 - 실패

아래 방법으로 pycurl 재설치를 해봤지만 계속 같은 오류가 났다.

brew install curl
brew link curl --force
brew install openssl
export LIBRARY_PATH=/usr/local/opt/openssl/lib
export CPATH=/usr/local/opt/openssl/include
pip --no-cache-dir install pycurl
python -c "import pycurl"

 

방법 2) npm 버전 다운그레이드 - 성공

결과적으로 npm 버전을 다운그레이드 했더니 해결됐다!

sudo npm install -g n
sudo n 16.13.2

 

우분투에서 패키지를 설치할 때 apt-get 명령을 많이 사용한다.

apt-get은 Advanced Packaging Tool의 약자로 우분투를 포함한 데비안 계열 리눅스에서 사용되는 패키지 관리 툴이다.

 

apt-get update와 apt-get upgrade를 많이 사용하는데 정확히 어떤 차이가 있는지 궁금해져서 정리를 해본다.

 

apt-get update

운영체제에서 사용 가능한 패키지들과 그 버전에 대한 정보를 업데이트하는 명령이다.

설치되어 있는(Installed) 패키지를 업데이트 하는 것이 아니라 설치 가능한(Available) 리스트를 업데이트 하는 것이다!

 

예를 들어 apt-get install로 특정 패키지를 설치할 수 없는 경우, update 명령으로 패키지 리스트를 최신으로 업데이트 할 필요가 있는 것이다.

 

apt-get upgrade

운영체제에 apt-get install로 설치한(Installed) 패키지들을 최신 버전으로 업그레이드 하는 것이다.

 

apt-get update로 가져온 각 패키지들의 최신 버전에 맞게 업그레이드를 진행하기 때문에 update 후 upgrade를 해주면 된다.

 

 

 

참고 사이트

우분투에서 패키지를 설치할 때 apt-get과 apt를 혼합해서 많이 사용하는데, 

두 명령이 정확히 어떤 차이가 있는지 궁금해져서 정리를 해본다.

 

apt(Advanced Packaging Tool)은 데비안(Debian) GNU/Linux 계열의 패키지 관리 명령도구로 우분투(Ubuntu)에서도 지원합니다.

 

apt-get과 apt 차이

  • apt-get : 인증된 소스에서 패키지 및 패키지에 대한 정보를 검색하고, 종속성과 함께 패키지를 설치, 업그레이드 및 제거
  • apt : 더 나은 대화식 사용을 위한 고급 명령 줄 인터페이스

 

결론적으로 큰 차이는 없습니다.

 

apt-get에 옵션들이 많아지다 보니

자주 사용하는 옵션들을 추출해서 apt에서 사용자들이 사용하기 편하고, 보기 편하게 만들었습니다.

그래서 apt가 더 예쁘고 추가적인 정보를 출력해줍니다.

 

 

그렇다면 무엇을 쓰는 것이 좋을까요?

큰 차이가 없으니 상황에 맞추어 사용하면 좋을 것 같습니다.

 

터미널에서는 apt를 사용하면 더 예쁘고 유익한 메시지를 출력받을 수 있습니다.

 

script를 작성할 때는 apt-get을 사용하는 것이 좋습니다.

apt-get이 더 많은 옵션들을 가지고 있어 더 많은 기능을 제공해줍니다.

또한 오래 전부터 존재해왔기 때문에 더 안정적이고 높은 호환성을 가지고 있습니다.

 

 

 

 

참고 사이트

갓 태어난 컨테이너는 내부에 설치된 것이 거의 없어서 vi 명령어를 사용하려면 vim을 설치해주어야 한다.

 

# 컨테이너명 확인
docker ps -a

# 컨테이너 접속
docker exec -it [컨테이너명] /bin/bash

# Permission denied 발생
Reading package lists... Done
E: List directory /var/lib/apt/lists/partial is missing. 
- Acquire (13: Permission denied)

# 컨테이너 u0 재접속(권한 문제 해결)
docker exec -itu0 [컨테이너명] /bin/bash

apt-get update
apt-get upgrade
apt-get install vim

 

 

참고 사이트

+ Recent posts