일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- appium
- Jupyter Notebook
- Jupyter
- perfect
- port forwarding
- STF
- insert
- openpyxl
- 실행권한
- kitura
- 28015
- ubuntu
- PYTHON
- ftp
- Materials
- centos
- create table
- nmap
- mysql
- sshpass
- nohup
- rethinkdb
- postgres
- SWIFT
- appium server
- nGrinder
- GoCD
- ssh
- postgresql
- STF_PortForwarding
- Today
- Total
don't stop believing
docker 사용해 개발 환경 구축하기 (kitura init) 본문
Kitura도 1년 사이 많이 변경되었습니다. 추가된 라이브러리나 지원 도구들도 늘었습니다.
docker를 사용해 Mac에 개발 환경을 구성하고 Ubuntu에 배포해 보겠습니다.
우선 Mac에 docker가 설치되어 있어야 합니다.
http://dejavuqa.tistory.com/195
설치가 되었다면 docker 정보를 확인해 보겠습니다.
$ docker version Client: Version: 17.12.0-ce API version: 1.35 Go version: go1.9.2 Git commit: c97c6d6 Built: Wed Dec 27 20:03:51 2017 OS/Arch: darwin/amd64 Server: Engine: Version: 17.12.0-ce API version: 1.35 (minimum version 1.12) Go version: go1.9.2 Git commit: c97c6d6 Built: Wed Dec 27 20:12:29 2017 OS/Arch: linux/amd64 Experimental: true
IBM-Swift에서 배포한 swift-ubuntu-docker 이미지가 있으나 우리는 swift에서 공식 배포한 이미지를 사용해 보겠습니다.
https://hub.docker.com/_/swift/
swift docker 이미지를 다운받습니다.
$ docker pull swift
docker 이미지가 잘 다운되었는지 확인해 봅니다.
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE swift latest 934835f58041 2 weeks ago 1.3GB ubuntu 16.04 f975c5035748 2 weeks ago 112MB ubuntu latest f975c5035748 2 weeks ago 112MB ibmcom/swift-ubuntu 4.0.3 41829ee5a097 2 weeks ago 1.37GB swiftdocker/swift latest 466addff05d1 2 months ago 1.3GB
REPOSITORY 항목에 swift가 있네요. 그 외에도 저는 여러개의 이미지가 다운로드 되어있습니다.
이제 docker 이미지로 컨테이너를 만들기 전에 kitura를 개발할 폴더를 지정합니다. 저는 아래처럼 Test_Kitura/nGleServer01이라고 만들었습니다.
/Users/tongchunkim/Documents/Test_Kitura/nGleServer01
해당 경로를 컨테이너에 연결할겁니다.
컨테이너를 실행 할 때 아래와 같이 몇가지 옵션을 추가합니다.
-it: docker 터미널 입력을 위한 옵션으로 -i와 -t를 함께 사용한 것입니다.
-p: Mac의 port와 docker의 포트를 연결해 줍니다. (포워딩)
-v: Mac의 디렉토리와 docker의 디렉토리를 연결해 줍니다. (마운트)
--name: 컨테이너의 이름을 지정합니다.
위 옵션으로 swift:latest 이미지를 실행합니다.
docker run -it -p 8080:8080 -v /Users/tongchunkim/Documents/Test_Kitura/nGleServer01:/nGleServer01 --name nGleServer01 swift:latest /bin/bash
정상적으로 실행이 되었다면 docker는 swift:latest 이미지로 nGleServer01이라는 이름으로 컨테이너를 생성했습니다.
Mac의 8080 포트와 컨테이너의 8080 포트는 연동되어 있으며, Mac의 /Users/tongchunkim/Documents/Test_Kitura/nGleServer01 폴더는 컨테이너의 /nGleServer01와 연동되어 있습니다.
docker run 마지막에 /bin/bash를 넣어 컨테이너의 프롬프트로 연결하게 됩니다.
컨테이너 안의 swift 버전을 확인해 봅시다.
root@8390d507a4cd:/# swift -version Swift version 4.0.3 (swift-4.0.3-RELEASE) Target: x86_64-unknown-linux-gnu
swift 4.0.3 버전이 설치되어 있습니다.
Ubuntu 버전도 확인해 봅시다.
root@8390d507a4cd:/# lsb_release -a bash: lsb_release: command not found
lsb_release 가 설치가 안되어 있네요. apt-get을 업데이트하고 lsb_release를 설치해 줍니다.
root@8390d507a4cd:/# apt-get update root@8390d507a4cd:/# apt-get install lsb-release
설치가 되었다면 Ubuntu 버전을 확인해 줍니다.
root@8390d507a4cd:/# lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 16.04.4 LTS Release: 16.04 Codename: xenial
Ubuntu 16.0.4 버전입니다.
ls -al 또는 ll 명령으로 디렉토리를 확인하면 최상위에 /nGleServer01 폴더가 보일것입니다.
이제 Kitura를 이용한 Swift 서버를 만들기 위한 Package들을 설치해 줍니다.
root@8390d507a4cd:/# apt-get update root@8390d507a4cd:/# apt-get install clang libicu-dev libcurl4-openssl-dev libssl-dev
정상적으로 설치되어 있는지 apt list --installed 명령으로 설치된 리스트를 확인할 수 있습니다.
javascript package manager인 npm도 설치해 줍니다. npm 설치를 위해서 tmp 폴더를 이동합니다.
root@8390d507a4cd:/# cd tmp root@8390d507a4cd:/tmp# curl -sL https://deb.nodesource.com/setup_8.x -o nodesource_setup.sh root@8390d507a4cd:/tmp# bash nodesource_setup.sh root@8390d507a4cd:/tmp# apt-get install nodejs
설치되었다면 npm의 버전을 확인합니다.
root@8390d507a4cd:/tmp# npm -version 5.6.0
npm으로 yo를 설치 합니다. yo에 대한 설명을 아래 링크에서 확인하세요.
[https://github.com/yeoman/yo]
root@8390d507a4cd:/tmp# npm install -g yo
npm을 이용해 generator-swiftserver도 설치해 줍니다.
root@8390d507a4cd:/tmp# npm install -g generator-swiftserver
이제 Mac에서 구성해 줄 차례입니다.
먼저 Mac에서도 npm으로 yo와 generator-swiftserver를 설치해 줍니다.
$ npm install -g yo $ npm install -g generator-swiftserver
brew tap으로 Kitura package repository로 연결합니다.
$ brew tap ibm-swift/kitura
그리고 brew로 kitura를 설치합니다.
$ brew install kitura
이제 kitura 프로젝트를 만들 차례입니다. docker 컨테이너와 연결한(마운트) 디렉토리로 이동해 kitura 를 초기화 합니다.
$ cd ~/Documents/Test_Kitura/nGleServer01/ $ kitura init
kitura init을 실행하면 kitura 실행에 필요한 package가 설치됩니다.
xcodeproj까지 생성되어 있습니다. nGleServer01.xcodeproj를 열어 봅시다.
$ open nGleServer01.xcodeproj/
xcode가 실행되면서 기본 package가 모두 구성되어 있는것을 확인할 수 있습니다.
xcode의 build scheme을 프로젝트인 nGleServer01로 변경합니다.
이제 실행하고 브라우저에서 확인해 봅시다.
Command + R 을 누르거나 실행 버튼을 클릭합니다.
빌드 했을 때 위 메시지 처럼 Error가 보인데면 8080 포트가 충돌이 난 것입니다.
docker 컨테이너를 실행할 때 8080으로 실행했고 xcode에서 빌드 후 실행할 때 kitura 기본 포트인 8080으로 실행하려고 해서 충돌이 발생한 것입니다.
docker 컨테이너에서 exit로 컨테이너를 중지하고 다시 빌드하면 아래와 같이 정상적으로 서버가 실행이 됩니다.
SwiftMetrics: Error finding .build directory
SwiftMetrics: Error finding directory containing source code in
위 두 에러에 대해서는 좀 찾아봐게 겠네요.
이제 브라우저를 열고 localhost:8080으로 접속해 봅니다. kitura의 기본 port는 8080 입니다.
kitura 페이지가 보이네요.
port를 10260으로 변경하고 get method도 하나 추가해 봅시다.
다시 xcode로 와서 nGleServer01 프로젝트의 Source/Application/Application.swift 파일로 이동합니다.
postInit() 함수 안에 아래와 같이 get method를 추가합니다.
func postInit() throws { // Endpoints initializeHealthRoutes(app: self) router.get("/") { request, response, next in response.send("Hello, Tongchun!") next() } }
그리고 바로 밑에 run() 함수에서 아래와 같이 포트를 10260으로 변경합니다.
public func run() throws { try postInit() Kitura.addHTTPServer(onPort: 10260, with: router) Kitura.run() }
다시 실행하고 브라우저에서 localhost:10260을 연결합니다.
kitura 페이지가 아닌 Hello Tongchun!이 보이는지 확인합니다.
자.. 일단 여기까지 하고... 여기서 부터는 docker를 봅시다.
xcode에서 실행을 종료하거나, xcode를 종료해 봅시다. 그리고 terminal에서 docker 컨테이너를 살펴 봅시다.
docker 컨테이너를 확인하는 명령은 docker ps -a 입니다.
$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 527ed6bfbd28 swift:latest "/bin/bash" 26 minutes ago Exited (0) 31 seconds ago nGleServer01 80570e58b9f4 swift:latest "/bin/bash" 46 hours ago Exited (0) 45 hours ago swift01 d5347cad3f94 swiftdocker/swift:latest "/bin/bash" 7 days ago Exited (0) 7 days ago swiftfun 0992cd10635f ubuntu:16.04 "/bin/bash" 8 days ago Exited (255) 7 days ago nervous_bhaskara d5fdc08eeb99 ubuntu "/bin/bash" 8 days ago Exited (0) 8 days ago pedantic_meitner dec67aa13a15 ibmcom/swift-ubuntu:4.0.3 "/bin/sh -c /bin/bash" 8 days ago Exited (255) 7 days ago 0.0.0.0:10260->10260/tcp macaron
방금 swift:latest 이미지로 만든 nGleServer01이라는 docker 컨테이너가 제일 위에 보입니다.
nGleServer01 컨테이너를 실행하고 접속해 봅니다. 컨테이너를 실행하는 명령은 docker start <컨테이너 이름> 입니다. 컨테이너 실행과 함께 접속하는 옵션은 -a 입니다.
$ docker start -a nGleServer01
컨테이너 안에 있는 /nGleServer01 폴더로 이동해서 swift build를 해줍니다.
root@527ed6bfbd28:/nGleServer01# cd nGleServer01/ root@527ed6bfbd28:/nGleServer01# swift build
빌드가 정상적으로 실행되었다면 마지막 라인에 빌드 경로가 나옵니다.
Linking ./.build/x86_64-unknown-linux/debug/nGleServer01
swift build 처럼 옵션없이 빌드하면 debug 모드로 빌드가 됩니다. 릴리즈 모드로 빌드하고 실행해 보겠습니다.
root@527ed6bfbd28:/nGleServer01# swift build -c release root@527ed6bfbd28:/nGleServer01# ./.build/x86_64-unknown-linux/release/nGleServer01 [2018-03-23T06:07:22.801Z] [WARNING] [ConfigurationManager.swift:261 load(url:deserializerName:)] Unable to load data from URL /nGleServer01/config/mappings.json 2018-03-23 06:07:22.803 nGleServer01[605:e07c6800] CFPropertyListCreateFromXMLData(): Old-style plist parser: missing semicolon in dictionary on line 1. Parsing will be abandoned. Break on _CFPropertyListMissingSemicolon to debug. [Fri Mar 23 06:07:22 2018] com.ibm.diagnostics.healthcenter.loader INFO: Swift Application Metrics [2018-03-23T06:07:22.897Z] [INFO] [Metrics.swift:20 initializeMetrics(router:)] Initialized metrics. [2018-03-23T06:07:22.899Z] [INFO] [HTTPServer.swift:124 listen(on:)] Listening on port 10260
Kitura 라이브러리로 만든 swift 서버가 10260 포트로 실행되었습니다.
이제 브라우저에서 동일하게 localhost:10260으로 접속해 보겠습니다.
처음 docker 컨테이너를 만들때 포트 옵션을 8080으로 줬기 때문에 10260이란 포트는 컨테이너가 인식하지 못하고 있습니다.
이제 컨테이너에서 이미지로 만들고 다시 포트 옵션을 10260으로 만들어 컨테이너를 실행해 보겠습니다.
실행하고 있는 컨테이너에서 exit을 치고 중지합니다. Mac 프롬프트로 나온 다음 아래와 같이 nGleServer01 컨테이너로 이미지를 만듭니다.
$ docker commit nGleServer01 ngleserver01:0.0.1 sha256:db397d07ac76a046df0897eedc0d360b00a1bb2765797f5407fcf42caef14036
docker 이미지 이름은 소문자여야 합니다. 그래서 ngleserver01입니다. 콜론(:) 다음은 tag 입니다. 보통 버전명을 사용합니다.
이미지가 잘 만들어 졌는지 docker 이미지를 확인해 봅니다.
$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE ngleserver01 0.0.1 db397d07ac76 About a minute ago 1.54GB swift latest 934835f58041 2 weeks ago 1.3GB ubuntu 16.04 f975c5035748 2 weeks ago 112MB ubuntu latest f975c5035748 2 weeks ago 112MB ibmcom/swift-ubuntu 4.0.3 41829ee5a097 2 weeks ago 1.37GB swiftdocker/swift latest 466addff05d1 2 months ago 1.3GB
ngleserver01에 0.0.1로 잘 만들어 졌습니다.
이제 ngleserver01 이미지로 새롭게 컨테이너를 만들어 봅니다.
$ docker run -it -p 10260:10260 -v /Users/tongchunkim/Documents/Test_Kitura/nGleServer01:/nGleServer01 --name nGleServer01-1 ngleserver01:0.0.1 /bin/bash
포트 옵션에서 mac의 10260과 컨테이너의 10260 포트를 매칭시켰습니다. 그리고 폴더는 mac의 /Users/tongchunkim/Documents/Test_Kitura/nGleServer01 폴더와 컨테이너의 /nGleServer01 폴더를매칭했습니다. 컨테이너의 이름은 nGleServer01-1으로 했구요. ngleserver01 이미지의 0.0.1 태그인 것으로 컨테이너를 만들었습니다.
새로 실행된 컨테이너에서 /nGleServer01 폴더로 이동해서 다시 swift build를 해줘보겠습니다.
root@a2389a634a28:/# cd /nGleServer01 root@a2389a634a28:/nGleServer01# swift build root@a2389a634a28:/nGleServer01# ./.build/x86_64-unknown-linux/debug/nGleServer01 [2018-03-23T07:16:09.926Z] [WARNING] [ConfigurationManager.swift:261 load(url:deserializerName:)] Unable to load data from URL /nGleServer01/config/mappings.json 2018-03-23 07:16:09.927 nGleServer01[253:c0bc6800] CFPropertyListCreateFromXMLData(): Old-style plist parser: missing semicolon in dictionary on line 1. Parsing will be abandoned. Break on _CFPropertyListMissingSemicolon to debug. [Fri Mar 23 07:16:09 2018] com.ibm.diagnostics.healthcenter.loader INFO: Swift Application Metrics [2018-03-23T07:16:10.028Z] [INFO] [Metrics.swift:20 initializeMetrics(router:)] Initialized metrics. [2018-03-23T07:16:10.031Z] [INFO] [HTTPServer.swift:124 listen(on:)] Listening on port 10260
빌드가 정상적으로 되었다면 빌드를 실행합니다.
root@a2389a634a28:/nGleServer01# ./.build/x86_64-unknown-linux/debug/nGleServer01 [2018-03-23T07:16:09.926Z] [WARNING] [ConfigurationManager.swift:261 load(url:deserializerName:)] Unable to load data from URL /nGleServer01/config/mappings.json 2018-03-23 07:16:09.927 nGleServer01[253:c0bc6800] CFPropertyListCreateFromXMLData(): Old-style plist parser: missing semicolon in dictionary on line 1. Parsing will be abandoned. Break on _CFPropertyListMissingSemicolon to debug. [Fri Mar 23 07:16:09 2018] com.ibm.diagnostics.healthcenter.loader INFO: Swift Application Metrics [2018-03-23T07:16:10.028Z] [INFO] [Metrics.swift:20 initializeMetrics(router:)] Initialized metrics. [2018-03-23T07:16:10.031Z] [INFO] [HTTPServer.swift:124 listen(on:)] Listening on port 10260
10260 포트로 잘 실행이 되었습니다. 이제 다시 브라우저에서 localhost:10260으로 접속해 보겠습니다.
localhost 즉 Mac의 10260 포트를 호출하면 컨터이너의 10260과 매칭되어 컨테이너안에 있는 swift 서버로 접속되게 됩니다.
이제 Mac에서 xcode를 이용해 swift로 개발하고 바로 로컬 PC(Mac)에서 Ubuntu환경(docker)를 이용해 확인하는 개발 환경을 만들었습니다.
'Swift > Kitura' 카테고리의 다른 글
[swift] kitura requests 기본 Parsing 하기 (0) | 2017.08.28 |
---|---|
[swift] Kitura Web Server 기본 시작하기 (0) | 2017.08.22 |