[CKAN]DataStore 확장기능 설치하기 및 테스트

오픈 데이터포털 CKAN에 DataStore라는 extension을 설치해보자.

DataStore란 CKAN의 resource에서 구조화된 데이터를 저장하기위한 특별한 데이터베이스이다. 데이터는 CKAN의 resource에서 가져와서 DAtaStore에 저장할 수 있다.

CKAN의 리소스들이 DataStore에 저장되면, 이러한 것들을 할 수 있다:

  1. 리소스 페이지에서 자동으로 데이터 프리뷰를 제공한다
  2. The DataStore API : 전체 데이터파일을 다운로드 하지 않고 API를 통해 데이터에 대해 search / filter / update 작업을 수행할 수 있다.

또한 DataStore는 DataPusher과 자주 사용되곤 하는데, DataPusher가 하는 역할은 FileStore 또는 Likned file에 의해 업로드된 CKAN의 리소스를 DataStore에 자동적으로 저장하는 것이다.

2. Setting up the DataStore

우선, DataStore를 설치하기 위해서 PostgreSQL 9.2 버전 이상을 필요로한다.

  1. 플러그인 활성화
1
ckan.plugins = datastore

datastore를 ckan의 설정에 적어준다.

  1. 데이터베이스 셋업

주의사항으로 퍼미션 설정해주는 부분은 신경써야한다. 권한이 제대로 주어지지 않을 경우 동작하지 않을 수 있으며 심각한 보안 이슈를 발생시킬 수도 있다.

DataStore는 데이터 저장을 위해 또 다른 PostgreSQL 데이터베이스를 필요로한다.

1
sudo -u postgres psql -l

현재 존재하고 있는 데이터베이스를 위의 명령어를 통해 살펴볼 수 있다. 아마도 ckan 기본을 위한 ckan_default가 있을것이다. 설치때와 마찬가지로 인코딩이 utf8로 제대로 되어있는지 주의한다.

유저와 데이터베이스 생성

DataStore를 위한 psql의 새로운 유저와 데이터베이스를 생성해야 한다.

datastore_default라는 이름을 가진 유저를 생성한다. 이 유저는 DataStore database에 대해서 read-only access만을 할 수 있는 권한을 가진다.

1
sudo -u postgres createuser -S -D -R -P -l datastore_default

datastore_default라는 이름을 가진 새로운 데이터베이스를 생성한다. 이 데이터베이스는 ckan_default에 소유여야 한다.

1
sudo -u postgres createdb -O ckan_default datastore_default -E utf-8
URL 설정

production.ini을 수정해야 한다. ckan.datastore.write_url과 ckan.datastore.read_url의 주석을 해제한다(uncomment). 그리고 자신의 환경에 맞게 수정한다. ex) 비밀번호와 접속ip 설정

1
2
ckan.datastore.write_url = postgresql://ckan_default:pass@localhost/datastore_default
ckan.datastore.read_url = postgresql://datastore_default:pass@localhost/datastore_default
권한 설정

db와 유저를 생성했으면, DataStore의 권한과 CKAN의 권한을 설정해야만한다. CKAN의 paster명령어를 이용해서 할 수 있다(그러기 위해선 ckan의 가상환경을 activate해야 한다.)

만약 psql에 접속할 수 있으면 아래와 같은 명령어를 수행한다.

1
2
sudo -u postgres psql
sudo ckan datastore set-permissions | sudo -u postgres psql --set ON_ERROR_STOP=1

psql이 로컬에 설치되진 않았지만 ssh를 통해 접속할 수 있다면 아래와 같이 한다.

1
2
sudo ckan datastore set-permissions |
ssh dbserver sudo -u postgres psql --set ON_ERROR_STOP=1

psql를 할 수 없으면, 이렇게 하자

1
sudo ckan datastore set-permissions
  1. 셋업 테스트

지금까지 잘 따라왔다면 셋업을 마무리됐을 것이다. 테스트하기 위해서 ckan을 재시작하고 아래의 명령어를 수행한다. (DataStore의 모든 리소스를 리스팅한다.) ckan 서버가 켜져있지 않다면 (paster serve –config=/etc/ckan/default/production.ini) 을 통해 켜주고 해야 테스트가 제대로 실행된다.

1
curl -X GET "http://127.0.0.1:5000/api/3/action/datastore_search?resource_id=_table_metadata"

위의 명령어는 에러없이 JSON 형태의 페이지를 출력할 것이다.

쓰기 작업도 테스트하기 위해 새로운 DataStore 리소스를 생성해보자. 자신의 API KEY와 PACKAGE-ID를 적어주어 테스트해본다.

1
curl -X POST http://127.0.0.1:5000/api/3/action/datastore_create -H "Authorization: {YOUR-API-KEY}" -d '{"resource": {"package_id": "{PACKAGE-ID}"}, "fields": [ {"id": "a"}, {"id": "b"} ], "records": [ { "a": 1, "b": "xyz"}, {"a": 2, "b": "zzz"} ]}'

검색 작업은 다음과 같다. 마찬가지로 resource_id를 적어준다. :

1
http://127.0.0.1:5000/api/3/action/datastore_search?resource_id={RESOURCE_ID}

삭제 작업도 해보자 :

1
curl -X POST http://127.0.0.1:5000/api/3/action/datastore_delete -H "Authorization: {YOUR-API-KEY}" -d '{"resource_id": "{RESOURCE-ID}"}'

이상으로 DataStore의 API를 통해서 리소스 생성 / 검색 / 삭제 기능을 수행해보았다. 발생한 에러가 없다면 문제가 없다는 것이니 안심하도록 하자.

Share

[CKAN]우분투에 CKAN 설치하기

CKAN이란?

설치를 하기에 앞서서, CKAN이 무엇인지 간단한게 알아보는 것도 좋을거 같다. CKAN이란 오픈 놀리지(Open Knowledge)가 개발 및 관리하는 데이터 포털 구축을 위한 오프소스 소프트웨어 플랫폼이다. 20여 개국 중앙 정부의 공식 데이터 발행 플랫폼으로 사용되며, 더 많은 지방 정부, 커뮤니티, 과학 및 기타 데이터 포털이 이를 바탕으로 동작하고 있다고 한다.

그렇다면, 본적적으로 CKAN을 설치해보자.

CKAN을 설치하는 방법에는 세 가지가 있다.

  1. operating system package를 통한 설치
  2. source를 이용한 설치
  3. docker compose를 이용한 설치

가장 쉽고 빠르게 설치할 수 있는 방법은 첫 번째 방법이다. 그러나 우분투 16.04 64비트 또는 우분투 14.04 64비트를 필요로 하는 제약조건이 있다. 따라서 CentOS와 같은 우분투를 제외한 다른 리눅스 배포판에 설치를 하려면 두 번째 방법을 통해 설치해야만 한다. 이번 글에서는 첫 번째 방법으로 설치를 할 것이며, 설치환경은 아래와 같다.

Ubuntu 16.04 LTS 64bit - AWS의 EC2에서 임대받은 가상서버

설치

CKAN을 설치할때에 필요한 소프트웨어이다. 각 소프트웨어들이 무엇을 위해 사용되어지고 몇 번 포트를 사용하는지 익혀두고 진행하면 좀 도움이 많이 되는 듯 싶다.

Service Port Used for
NGINX 80 Proxy
Apache2 8080 Web Server
Solr/Jetty 8983 Search
PostgreSQL 5432 Database
Redis 6379 Search

1. CKAN package 설치

  1. 터미널을 열고, 먼저 apt를 업데이트 해준다
1
sudo apt-get update
  1. 그리고 필요한 패키지들을 설치한다(git은 CKAN 확장프로그램을 위해 설치)
1
sudo apt-get install -y nginx apache2 libapache2-mod-wsgi libpq5 redis-server git-core

두 번째 과정을 진행하다보면 높은 확률로 한번에 설치가 안된다. 아파치가 돌아가고 있기때문에 정지시키고 재설치하자.

1
2
sudo service apache2 stop # 아파치 정지
sudo apt-get install -y nginx apache2 libapache2-mod-wsgi libpq5 redis-server git-core
  1. CKAN 패키지 다운로드 및 인스톨

패키지를 다운로드 받는다. 현재 사용하고 있는 우분투의 버전을 확인하여 다운받고 인스톨까지 진행한다

1
2
3
4
5
6
7
# for 16.04
wget http://packaging.ckan.org/python-ckan_2.8-xenial_amd64.deb
sudo dpkg -i python-ckan_2.8-xenial_amd64.deb

# for 14.04
wget http://packaging.ckan.org/python-ckan_2.8-trusty_amd64.deb
sudo dpkg -i python-ckan_2.8-trusty_amd64.deb

2. PostgreSQL 설치 및 설정

psql를 설치한다. sqlalchemy.url (/etc/ckan/default/production.ini)을 상황에 맞게 수정한다면 psql과 ckan은 서로 다른 서버에 위치해도 괜찮다.

1
2
sudo apt-get install -y postgresql
sudo -u postgres psql -l # 설치 확인

db의 인코딩이 utf8인지 확인하는 것도 좋다. ckan 설치를 계속하기 이전에 인코딩을 확인하고 넘어가자.

1
2
psql my_database -c 'SHOW SERVER_ENCODING' # from command line
SHOW SERVER_ENCODING # within psql

psql에 사용중인 계정이 없다면 새로 생성해주자. ckan_default라는 이름의 계정을 생성하며 적당한 pw를 입력하자

1
sudo -u postgres createuser -S -D -R -P ckan_default

계정을 생성해 주었으면 데이터베이스도 만들자

1
sudo -u postgres createdb -O ckan_default ckan_default -E utf-8

3. Solr 설치 및 설정

psql과 마찬가지로 /etc/ckan/default/production.ini의 solr_url를 상황에 맞게 수정한다면 ckan과 다른 서버에 설치해도 무방하다. solr을 설치하기 위해 아래의 명령어를 입력하자.

1
sudo apt-get install -y solr-jetty
  1. jetty 설정

Jetty의 설정파일의 일부분을 수정해주어야 한다. 파일은 /etc/default/jetty8에 위치해있다.

1
2
3
NO_START=0            # (line 4)
JETTY_HOST=127.0.0.1 # (line 16)
JETTY_PORT=8983 # (line 20)

host의 경우 주의깊게 설정해주어야 한다. standalone으로 테스트를 위해 설치하는 것이라면 루프백 주소를 넣어도 상관없으나 지금 나의 경우는 외부 접속을 위해 AWS에서 제공해주는 EIP를 입력했다.

  1. 서버 재시작

jetty의 설정을 변경했다면 서버를 재시작 / 시작 하자.

1
2
sudo service jetty8 restart # for 16.04
sudo service jetty restart # for 14.04
  1. 확인

http://host_ip/solr/ 를 접속해보면 Solr의 welcome page를 볼 수 있다.

  1. schema.xml 수정

기본 schema.xml 파일을 ckan schema 파일로 심볼릭 링크를 걸어준다.

1
2
sudo mv /etc/solr/conf/schema.xml /etc/solr/conf/schema.xml.bak
sudo ln -s /usr/lib/ckan/default/src/ckan/ckan/config/solr/schema.xml /etc/solr/conf/schema.xml

그리고 Solr을 다시 시작한다.

1
2
sudo service jetty8 restart # for 16.04
sudo service jetty restart # for 14.04

4. 설정파일 업데이트 및 데이터베이스 시작

  1. ckan의 config 수정

아래의 코드는 예시이다. site_id에는 유니크한 값이 들어가야한다. 또한 site_url에도 실제 url을 적어준다.

1
2
3
# For example
ckan.site_id = default
ckan.site_url = http://demo.ckan.org
  1. ckan db 시동
1
sudo ckan db init

5. Apache / Nginx 재시작

아파치와 엔진엑스를 재시작하자. 서버 재시작후 접속해보자.

6. 마무리

맨 밑에 출처에도 있지만 ckan 공식문서를 보게되면 정말 자세하게 안내하고 있는 것을 볼수 있다. 본인이 직접 설치하면서 추가한 내용도 조금은 있지만 웬만한 내용은 다 문서에 있으니 문서를 두 세번 읽어 보는 게 좋을거 같다고 느꼈다. 또한 본인만의 방법으로 정리하는 것도 좋을 거 같다.


https://docs.ckan.org/en/2.8/maintaining/installing/install-from-package.html

Share

맥북에 nvm 설치하기

macOS에 nvm(노드 버전 매니저) 설치하기

맥북에 node를 설치하려고 찾던중, 파이썬의 pyenv 처럼 노드 버전을 관리할 수 있는 툴이 있을 것 같아서 찾아보았다. nvm이 라는 툴이 있었고 brew를 이용하여 맥북에 설치하는 과정을 간단하게 정리해본다.

  1. brew 업데이트 및 nvm 설치
    언제나 그렇듯이 homebrew를 사용하기 전에 앞서서 업데이트를 해주고 nvm을 설치한다.

    1
    2
    brew update
    brew install nvm
  2. 설치과정
    nvm을 설치하면 이것저것 뭘 하라는 안내가 나오는데 디렉토리 생성과 쉘 설정을 추가하라는 내용이다. nvm을 위한 working directory가 없으면 생성하고 bashrc나 zshrc와 같은 현재 사용중인 쉘의 설정파일에 내용을 추가하는 것이다.

    1
    2
    3
    4
    5
    6
    # 디렉토리 생성
    mkdir ~/.nvm

    # .zshrc 편집
    export NVM_DIR="$HOME/.nvm"
    . "/usr/local/opt/nvm/nvm.sh"
  3. 마무리
    터미널을 종료하고 다시 실행하거나 쉘을 재시작해주고 nvm이 제대로 설치 되었는지 확인해 본다.

    1
    2
    3
    4
    5
    # shell 재시작
    source ~/.zshrc

    # nvm 설치확인
    nvm

지금까지 잘 따라왔다면 여러 노드환경을 사용하기 위한 준비는 끝났다. nvm의 기본 사용법에 대해서 알아보자.

nvm

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 설치된 노드버전 출력
nvm list

# 노드 설치
# 원하는 노드 버전을 적어준다
nvm install (node_version)

# 노드 설치 - lts 버전
nvm install --lts

# 원하는 노드버전 사용
nvm use (node_version)

# 노드 사용 - lts 버전
nvm use --lts
Share