RabbitMQ는 AMQP (Advanced Message Queuing Protocol)를 이용한 Message Queue Broker이다.

이번 포스팅은 RabbitMQ 서버 설치와 클러스터링 구축에 대하여 설명한다.
 

 

1. RabbitMQ 설치

$ sudo apt-get install rabbitmq-server

 

 

2. 관리자 계정 추가

$ sudo rabbitmqctl add_user {ID} {Password}
  ex) sudo rabbitmqctl add_user programist programist123
$ sudo rabbitmqctl set_user_tags {ID} administrator
  ex) sudo rabbitmqctl set_user_tags programist administrator

 

 

 

3. Management 활성화 및 접속

$ sudo rabbitmq-plugins enable rabbitmq_management
$ sudo service rabbitmq-server restart

 

  - Management Plugin 활성화를 하면 다음과 같이 enable된 목록을 확인할 수 있다.

 

 

 

  - http://Localhost:15672로 접속하면 다음과 같이 로그인 창이 나오며, 추가된 관리자 계정으로 로그인을 하면 RabbitMQ 서버의 상태 및 설정을 웹으로 조종할 수 있다.

 

 

 

 

 

4. RabbitMQ Clustering을 위한 환경 구성

  - RabbitMQ Clustering 구성을 위해 다음과 같이 3대의 RabbitMQ Server 3대를 구성하였다.

 

 

 

RabbitMQ 노드는 쿠키를 사용하여 서로 통신 할 수 있는지 여부를 결정하며, 두 노드가 통신 할 수 있으려면 Erlang 쿠키라고하는 동일한 공유 암호가 있어야한다. 일반적으로 로컬 파일에 저장되며, 모든 클러스터 노드에는 동일한 쿠키가 있어야한다.

 

  - RabbitMQ 쿠키 설정

    = 3대의 RabbitMQ Server중 하나를 선택하여 cookie 값을 나머지 2대에 동일하게 수정한다.

$ cat /var/lib/rabbitmq/.erlang.cookie

 

  - Hostname 수정

$ vi /etc/hostname

  ex) RabbitMQ-Server-1 

 

  - 각각의 서버에 다음과 같이 hostname을 지정하였다.

    = 192.168.0.101 : RabbitMQ-Server-1

    = 192.168.0.102 : RabbitMQ-Server-2

    = 192.168.0.103 : RabbitMQ-Server-3

 

  - hosts 파일 수정

$ vi /etc/hosts

 

  - 다음과 같이 각각의 RabbitMQ 서버에 다음과 같이 hosts 파일을 수정한다.

 

 

 

5. Clustering 구성하기

가운데 Server인 RabbitMQ-Server-2를 Master로 두고 RabbitMQ-Server-1과  RabbitMQ-Server-3을 RabbitMQ-Server-2에 연결할 것이다.

 

  - Server 상태 확인 명령어

$ rabbitmqctl cluster_status

 

    = RabbitMQ-Server-1

 

 

 

    = RabbitMQ-Server-2

 

 

 

    = RabbitMQ-Server-3

 

 

 

RabbitMQ-Server-2에 RabbitMQ-Server-1과 RabbitMQ-Server-3 노드 연결하기 위해서는 rabbitmqctl 명령어를 이용하여 RabbitMQ-Server-1, RabbitMQ-Server-3에서 가동되고 있는 서버를 일단 중지시켜야 한다.

 

 - RabbitMQ-Server-1, RabbitMQ-Server-3 노드 추가 명령어

$ rabbitmqctl stop_app

$ rabbitmqctl join_cluster --ram rabbit@{hostname}

  ex) rabbitmqctl join_cluster --ram rabbit@RabbitMQ-Server-2

$ rabbitmqctl start_app

 

    = RabbitMQ-Server-1

 

 

 

    = RabbitMQ-Server-3

 

 

 

 - RabbitMQ-Server-2 Clustering 상태 체크

$ rabbitmqctl cluster_status

 

 

 

 - Web에서의 Clustering 상태 체크

 

 

 

 - RabbitMQ-Server-1, RabbitMQ-Server-3 노드 삭제 명령어

   (rabbitmqctl reset 명령어를 사용할 경우, 기존에 등록했던 계정들도 삭제되므로 사용 시 주의한다.)

$ rabbitmqctl stop_app

$ rabbitmqctl reset

$ rabbitmqctl start_app

 

    = RabbitMQ-Server-1

 

 

 

    = RabbitMQ-Server-3

 

 

 

 - RabbitMQ-Server-2 Clustering 상태 체크

$ rabbitmqctl cluster_status

 

 

 

 

테스트 환경 : Ubuntu 16.04

Pypi(Python Package Index) Python을 위한 공식적인 Third-party 소프트웨어 저장소이다. 

주로 Python 라이브러리를 설치하기 위해 pip 명령어를 사용하는데, 이는 Pypi 저장소(https://pypi.org)를 통해 해당 Package를 설치한다.

 

이번 포스팅은 이런 Pypi 서버를 Private 형태의 로컬 저장소용 설치 및 개발한 Python 코드를 Packaging하여 로컬 저장소에 업로드 및 다운로드 하는 방법을 설명한다.

 

 

1. Private Pypi 설치

  - pypiserverhttps://pypi.org/project/pypiserver

$ sudo apt-get install python3-pip

$ sudo pip3 install pypiserver

 

  - Package를 저장할 디렉토리 생성

$mkdir {Package Repository Directory}

  ex) $mkdir ~/packages

 

2. Private Pypi 서버 계정 관리를 위한 passlib 설치

$ sudo apt-get install apache2-utils

$ sudo pip3 install passlib

$ htpasswd -sc htpasswd.txt {ID}

  ex) htpasswd -sc htpasswd.txt programist

 
 
 

3. Private Pypi 서버 구동

$ pypi-server -p {PortNumber} -P htpasswd.txt {Package Repository Directory}

  ex) pypi-server -p 8080 -P htpasswd.txt ~/packages &

 

  - 브라우저를 통해 접속하면 다음과 같이 Pypi 서버가 정상적으로 동작하는 것을 확인할 수 있다.

 

 

 

 

4. Client 설정

  - 다음과 같은 형식으로 

$ vi ~/.pypirc

 

[distutils]

index-servers =

  local

 

[local]

repository: {Priavte Server URL}

username: {ID}

password: {Password]

 

  - 현재 구축 환경에서는 다음과 같다.

 

 

 

5. Python 코드 Packaging을 위한 setup.py 작성

  - Packaging을 하기 위해서는 setup.py 작성해야 한다.

  - 자세한 setup.py에 대한 자세한 작성 방법은 아래 링크를 참고하면 된다.

    (https://docs.python.org/3.5/distutils/setupscript.html)

 

 

 

6. Python 코드 Package 업로드

$ python3 setup.py bdist_wheel upload -r local

 

 

 

  - 업로드 확인은 다음과 같이 Private Pypi 서버에서 확인이 가능하다.

 

 

 

7. Private Pypi 서버에서 Package 다운로드 및 설치

$ pip3 install --extra-index-url {Private Server URL} --trusted-host {Private Server IP} {Python Package Name}

  ex) pip3 install --extra-index-url http://192.168.0.101:8080 --trusted-host 192.168.0.101 pypitest

 

 

 

  - 다음과 같이 테스트용 Package인 Pypitest Package가 설치되는 것을 확인할 수 있다.

Docker는 리눅스 컨테이너 기반의 도구로 소프트웨어 패키징을 통하여 보다 편하게 배포가 가능하다.

 

이번 포스팅에서는 Docker에 대한 설치 방법을 설명한다.

설치 방법은 Docker 사이트에 자세히 설명되어 있으므로, 이를 기반으로 작성하였다.

Docker Installhttps://docs.docker.com/install/linux/docker-ce/ubuntu/

 

설치 환경은 Ubuntu 16.04이며, 다른 버전 및 OS에 대해서 Docker 사이트에서도 자세히 설명되어 있다.

 

1. Docker 패키지 저장소 설정

$ sudo apt-get install apt-transport-https ca-certificates curl software-properties-common

$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

$ sudo apt-key fingerprint 0EBFCD88

pub   4096R/0EBFCD88 2017-02-22

      Key fingerprint = 9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88

uid                  Docker Release (CE deb) <docker@docker.com>

sub   4096R/F273FCD8 2017-02-22

 

$ sudo add-apt-repository \

   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \

   $(lsb_release -cs) \

   stable"

 

 

2. Docker 패키지 설치

$ sudo apt-get update

$ sudo apt-get install docker-ce

 

  - Docker 패키지의 특정 릴리즈 버전을 알고 싶으면, 다음 명령어로 확인이 가능하다.

$ apt-cache madison docker-ce

 

 

 - 또한, 다음 명령어를 통해 특정 릴리즈 버전의 설치도 가능하다.

$ sudo apt-get install docker-ce={Version}

  ex) $ sudo apt-get install docker-ce=18.03.0~ce-0~ubuntu

 

 

3. Docker 테스트

$ sudo docker run hello-world

 

 

이전에 포스팅한 GitLab 패키지 저장소 설치 환경을 기반으로 Git 명령어를 활용하여 프로젝트 생성 및 소스코드를 업로드 하는 방법을 설명한다.

 


1. git 설치 및 E-Mail, UserName 등록

$ sudo apt-get install git

$ git config --global user.email "programist@programist.com"
$ git config --global user.name "programist"



2. 업로드할 프로젝트 경로로 디렉토리 이동 및 git 초기화

$ cd TestProject

$ git init 

 

  - 명령을 수행하면 다음과 같은 메시지를 확인할 수 있다.

 

 

 

  - 또한 .git 디렉토리가 생성된 것을 확인할 수 있다.

 

 

 

3. remote 명령어로 로컬 저장소에 프로젝트 생성

$ git remote add origin http://{HostName}/{ID}/{ProjectName}.git

  ex) git remote add origin http://192.168.0.101/root/TestProject.git



4. status 명령어로 로컬 저장소의 소스 상태 확인

$ git status

 

 

 

5. add 명령어로 로컬 저장소에 반영될 소스 추가 및 status 명령어로 다시 상태 확인

$ git add *

$ git status

 

 

 

6. commit 명령어로 소스 코드 반영 및 변경 내용 설명 작성

$ git commit

  - 변경된 소스 코드의 설명을 위한 내용을 작성

 

 

 

  - commit이 완료되면 아래와 같은 메시지를 확인할 수 있다.

 

 

 

7. push 명령어로 GitLab에 소스 코드 저장

$ git push origin master

 

  - GitLab 사이트 로그인에 사용되는 ID와 비밀번호를 입력한다.

 

 

 

8. 반영된 프로젝트를 GitLab에서 확인

  - 다음과 같이 프로젝트가 생성된 것을 확인할 수 있다.

 

 

 

  - 프로젝트 내에는 다음과 같이 소스 코드와 작성된 코멘트가 반영된 것을 확인할 수 있다.


 

GitLab은 GitLab Inc.가 개발한 위키와 이슈 추적 기능을 갖춘 웹 기반의 깃(Git) 저장소 관리자로써, 10인 정도가 사용하기에 적합한 프로젝트 형상관리 도구이다.

설치 방법은 GitLab 사이트에 자세히 설명되어 있으므로, 이를 기반으로 작성하였다.

GitLab Install : https://about.gitlab.com/install/#ubuntu

 

1. 필요 패키지 설치

$ sudo apt-get install curl openssh-server ca-certificates

$ sudo apt-get install postfix

 

  - postfix는 GitLab의 E-Mail 알림을 위해 설치하는 패키지이므로, 외부 E-Mail가 있다면 추후 외부 E-Mail을 설정하면 된다. 일단 환경 설정은 Internet Site로 설정 후, 진행한다.

 

 

 

2. GitLab 패키지 저장소 추가 및 설치

$ curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh | sudo bash

$ apt-get install gitlab-ee

 

  - 설치가 완료되면 아래와 같은 메시지가 출력된다.

 

 

 

3. GitLab 환경 구성

$ sudo gitlab-ctl reconfigure

 

  - GitLab에 필요한 환경 구성들이 셋팅되며 완료 후 아래와 같은 메시지를 출력한다.

 

 

 

4. GitLab 접속

  - 최초 접속 시, 다음과 같이 root 계정의 비밀번호 설정을 요구하는 화면이 나온다. root계정에 사용할 비밀번호를 설정한다.

 

 

 

  - 설정한 비밀번호로 로그인 한다.

 

 

 

  - 다음과 같이 root 계정으로 로그인하면 정상적으로 GitLab이 설치된 것을 확인할 수 있다.

 

 

'Version Control System > GitLab' 카테고리의 다른 글

Git 명령어 정리  (0) 2018.10.28

파이썬에서는 Switch문을 제공하지 않는다.

하지만, 파이썬에서 제공하는 자료형인 딕셔너리(Dictionary)를 이용하여 이와 비슷한 방법으로 함수 호출이 가능하다.

 

아래 예제 코드를 보자.

 

 


Dict 자료형 형태로 Value를 함수명으로 지정하고, Dict에 입력한 해당 Key와 파라메타 값을 지정하여 호출하면 이를 Return 하여 출력하는 간단한 코드이다.

이와 같은 방법으로 Dict의 Key를 이용하여 함수 호출이 가능한 것을 확인할 수 있다.

이번엔 Key값과 사칙연산 함수를 만들어 호출하는 예제 코드를 아래와 같이 만들었다.

 

 


각 입력된 Key의 Value로 지정된 함수와 그 파라메타 값을 입력받아 호출되는 함수는 각 Return에 해당하는 사칙연산을 수행하는 함수로 동작하는 코드이다.

 


 

이 Key 값과 분기문, 반복문을 적절히 활용하면, 아래 예제 코드와 같이 Switch문과 같이 유사하게 활용도 가능할 것이다.

 

이번 포스팅에선 PostgreSQL 관리를 위한 pgAdmin4 설치 및 테스트에 대하여 설명한다.

이전에 포스팅했던 환경 구성을 바탕으로 pgAdmin4를 설치하여 PostgreSQL 연동 테스트를 할 것이다.

PostgreSQL 환경 구성 : 2018/10/27 - [Database/PostgreSQL] - PostgreSQL 설치 및 DB 생성과 User 생성

 

pgAdmin4 이후 버전부터는 Python기반의 Framework인 Flask를 지원한다.

 

  - 필요 패키지 설치

$ sudo apt-get install build-essential libssl-dev libffi-dev libgmp3-dev virtualenv libpq-dev python3-pip python3-dev

 

  - pgAdmin4 파일 다운로드 (https://ftp.postgresql.org/)

$ wget https://ftp.postgresql.org/pub/pgadmin/pgadmin4/v2.1/pip/pgadmin4-2.1-py2.py3-none-any.whl

 

  - pgAdmin4 설치

$ pip3 install pgadmin4-2.1-py2.py3-none-any.whl

 

  - pgAdmin4 실행

$ python3 /usr/local/lib/python{Version}/dist-packages/pgadmin4/pgAdmin4.py

  ex) python3 /usr/local/lib/python3.5/dist-packages/pgadmin4/pgAdmin4.py

 

    = Email과 Password는 pgAdmin4에 로그인 하기 위한 ID와 PW이므로 잘 기억해 둔다.

 

 

 

  - pgAdmin4 Web Server 구동

    = Email과 Password 입력이 완료되면 다음과 같이 Web Server가 자동으로 구동된다.

 

 

 

  - pgAdmin4 로그인

    = 설치 시 입력한 Email과 Password로 로그인한다.

 

 

 

 - pgAdmin4과 PostgreSQL 연동

    = Add New Server를 클릭한다.

 

 

 

  - 연동할 서버 이름 및 PostgreSQL Host/ID/PW 등록

 

 

 

 

  - PostgreSQL과 pgAdmin4 연동 후 테스트 결과

 

 

'Database > PostgreSQL' 카테고리의 다른 글

PostgreSQL 10 설치 및 DB/User 생성 및 사용  (0) 2018.10.27

자주 사용하는 MySQL에 비해 PostgreSQL 10의 DB와 User 생성 방법이 생소하여 정리하였다.

 

1. PostgreSQL 설치 및 접속

  - PostgreSQL 설치

$ sudo apt-get install postgresql

 

  - psql로 PostgreSQL 접속

$ sudo -u postgres psql

 

 

 

  - PostgreSQL에서 명령어를 수행하기 위한 User변경

$ su postgres



2. Database 생성 및 사용

  - Database 생성

    = Command 명령어로 Database 생성이 가능하다.

$ psql

  postgres=# CREATE DATABASE {DBname};

    ex) CREATE DATABASE programistdb

 

  

  - Database 사용

    = Command 명령어로 Database 사용이 가능하다.

$ psql {DBname}

  ex) psql programistdb

 

 

  

3. User 생성 및 비밀번호 변경

  - User 생성

    =  Command 명령어로 Database 생성이 가능하다.

postgres=# CREATE USER {UserName};

  ex) CREATE USER programist

 

  

  - User 비밀번호 변경

    = Command 명령어로 Database 비밀번호 변경이 가능하다.

postgres=# ALTER USER {UserName}  WITH PASSWORD '{Password}';

ex) ALTER USER programist WITH PASSWORD 'programist123'

 

'Database > PostgreSQL' 카테고리의 다른 글

pgAdmin4 설치 및 PostgreSQL 연동 테스트  (0) 2018.10.27

DNS Server는 도메인 네임을 IP 주소로 변환하는 작업을 담당한다.

도메인 네임은 사용자가 인터넷 접속을 할 때 사용하는 알기 쉬운 문자로 만들어진 주소이며, DNS의 순방향 질의와 역방향 질의를 통하여 DNS 응답 메시지를 받을 수 있다.

 

아래 그림은 DNS의 동작 형태를 설명한다.
실선은 DNS 순방향 질의과정(DNS Forward Lookup)을 보여주고, 점선은 DNS 역방향 질의과정(DNS Reverse Lookup)을 보여준다.
이때 순방향 질의는 도메인 네임을 이용하여 IP 주소로 변환하는 과정이고, 역방향 질의는 IP 주소를 이용하여 도메인 네임으로 변환하는 과정이다.

 

 

 

아래 그림은 존 파일의 구조를 보여준다.
순방향 질의는 도메인 네임을 순방향 존 파일에서 정보를 검색한 후 해당 IP 주소로 변환하여 응답해준다.
그리고 역방향 질의는 IP 주소를 역방향 존 파일에서 검색한 후 도메인 네임으로 변환하여 응답해준다.

 

 

 

이번 포스팅의 DNS Server 구축 및 테스트 환경 구성은 아래 그림과 같다.

 

 

 

Web Server인 192.168.0.102 서버에 접속하면, 다음과 같이 Apache2의 메인 페이지가 동작하는 것을 확인할 수 있다.

이를 DNS Server를 구축하여 도메인 네임(http://programist.com)으로 접속 가능하도록 아주 간단한 환경 구축 및 테스트를 설명한다.

 

 

 

  - Bind 패키지 설치

$ sudo apt-get install bind9 bind9utils bind9-doc 


 

 

  - IPv4 모드 설정

$ sudo vi /etc/default/bind9

 

 

 

  - 로컬 존 파일 환경 구성

$ sudo vi /etc/bind/named.conf

 

  - 순방향 존 파일 파일 경로 설정

    = 순방향 존 파일은 사용할 도메인네임을 지정하여 작성한다.

 

 

  - 역방향 존 파일 경로 설정

    = 역방향 존 파일은 사용할 DNS 서버의 IP를 역으로 지정하여 작성한다.

      ex)192.168.0.xxx이 사용할 DNS 서버의 IP 주소라면 역으로 0.168.192.in-addr.arpa로 작성한다. 

 

 

 

    = 수정된 named.conf는 아래와 같다.

 

 

 

  - BIND 설정 구문 검사

$ sudo named-checkconf


    = named.conf 설정에 대한 구문이 올바르게 작성되었다면 아래와 같이 메시지가 뜨지 않는다.

 

 

 

    = named.conf 설정에 대한 구문이 올바르게 작성되지 않았다면 아래와 같이 오류 메시지가 출력되는 것을 확인할 수 있다.

 

 

 

  - named.conf에서 작성된 경로인 "/etc/bind/zones" 디렉토리를 생성

$ sudo mkdir /etc/bind/zones

 

  - 순방향/역방향 존 파일 템플릿을 복사 

$ cp /etc/bind/db.local db.programist.com

$ cp /etc/bind/db.local db.192.168.0 


/etc/bind/db.local 파일에서 복사한 기본 템플릿은 아래와 같다.

 

 

 

  - 순방향 존 파일 작성

$ sudo vi /etc/bind/zones/db.progrmist.com

 

DNS Server IP는 192.168.0.101이며, Web Server IP는 192.168.0.102이므로 다음과 같이 존 파일을 수정한다.

다음과 같은 설정으로 ns.programist.com은 192.168.0.101으로 매핑될 것이며,

programist.com, www.programist.com는 192.168.0.102로 매핑되어 동작할 것이다.

 

 

 

  - 역방향 존 파일 작성

$ sudo vi /etc/bind/zones/db.192.168.0

 

순방향과 동일하게 매핑하여 192.168.0.101는 ns.programist.com으로 192.168.0.102는 programist.com, www.programist.com으로 작성한다.

 

 

 

  - 작성된 순방향/역방향 존 파일 구문 검사

$ sudo named-checkzone programist.com db.programist.com

 

 

 

$ sudo named-checkzone 0.168.192.in-addr.arpa db.192.168.0

 

 

  - BIND Service 재시작

$ sudo service bind9 restart

 

  - Client의 /etc/resolv.conf 설정 변경

$ sudo vi /etc/resolv.conf


Client에서 DNS Server의 도메인 네임 질의를 위하서 DNS 서버의 IP 주소와 도메인 네임을 변경한다.

 

 

 

  - nslookup를 활용한 순방향 DNS 조회

$ sudo nslookup programist.com

 

 

 

  - nslookup를 활용한 역방향 DNS 조회

$ sudo nslookup 102.168.0.101 


 

  - dig을 활용한 순방향 DNS 조회

$ sudo dig programist.com

 

 

 

  - dig을 활용한 역방향 DNS 조회

$ sudo dig 192.168.0.101

 

 

 

$ sudo dig 192.168.0.102

 

 

 

  - Client 웹 브라우저에서의 도메인 네임으로 Web Server 접근

 

 

 

테스트 환경 : Ubuntu 16.04

 

Ubuntu 18.04 버전 이상에서 root로 로그인하는 방법이 변경되어 Ubuntu 18.04 버전의 root 로그인 방법을 설명한다.

Ubuntu 16.04 버전 root Login 방법 : 2017/05/03 - [Linux/Ubuntu] - 16.04 이하 Ubuntu X-Window Default 로그인를 root 계정으로 변경하기

 

root 계정으로 로그인 설정은 다음과 같은 방법으로 변경이 가능하다.


- lightdm을 설치하고, lightdm을 선택

$ apt-get install lightdm

 


  

  - /etc/lightdm/lightdm.conf.d 경로로 이동하여 50-ubuntu.conf 파일을 생성

$ vi /etc/lightdm/lightdm.conf.d/50-ubuntu.conf

 


  

 - root 계정 로그인을 위한 설정 정보 입력 후 저장

[SeatDefaults]

greeter-session=unitiy-greeter

user-session=ubuntu

autologin-user=root

 


 

바로 재부팅을 하면 다음과 같이 tty 에러 메시지를 확인할 수 있다.


 

 

if `tty -s`; then으로 해당 메시지를 silent한다.

    $ vi /root/.profile

 

 

 

재부팅 후, 터미널을 열면 다음과 같이 root 계정으로 로그인 된 것을 확인할 수 있다.

  


 

테스트 환경 : Ubuntu 18.04

+ Recent posts