Takahiro Octopress Blog

-1から始める情弱プログラミング

Dockerコンテナ内のUbuntuにSwiftサーバを立てよう!

はじめに

さて本日はDockerつながりで『UbuntuにSwiftサーバを立ててみたい』と思います。
今後、ますます加熱する Server Side Swift を誰でも簡単に使えるように、きっとDockerを使う場面も増えてくることでしょう。
ということで早速見ていきたいと思います。

Swiftのインストール方法

次の手順に従ってswiftコマンドが叩けるところまで進めてみましょう。

1.KitematicでUbuntuを検索してDLする

まずはDockerコンテナを作ります。

KitematicでUbuntuをダウンロード

※UbuntuのバージョンはUbuntu 16.04.2 LTSです。

2.Privileged modeをONにする

Dockerコンテナのあるある話ですが、Privileged modeをONにしないとコマンド利用制限かかったりするので、忘れずにしておきましょう。

Privileged modeをONにする

3.PortFowardを設定する

後々、Swiftサーバを立てた時にアクセスしたいので、Dockerにポートフォワード設定をしておきましょう。
後ほどSwiftサーバを起動したときに8080にアクセスすることになるので、

1
0.0.0.0:15700->8080/tcp

という形でポートフォワードを設定します。
もちろんKitematicから設定可能です。

4.apt-getを最新化する

毎度のことですが、最新化しておきます。
まずは、Dockerコンテナにアクセスする。

1
$ docker exec -it ubuntu /bin/bash
1
2
# apt-get update
# apt-get upgrade

5.wgetvimをインストールする

後ほど利用するのでwgetvimをインストールしておきます。

1
2
# apt-get install wget
# apt-get install vim

6.Swiftサーバの依存モジュールをインストールする

Swiftの公式サイトにも書かれていますが、依存モジュールがあるのでインストールしましょう。

1
# apt-get install clang libicu-dev

7.Swiftパッケージをインストールする

Swiftサーバを立てるのに必要なものは2つあります。
それぞれwgetでインストールしましょう。
今回インストールするSwiftのバージョンは 3.1 です。

1
2
3
4
// バイナリアーカイブの取得
# wget https://swift.org/builds/swift-3.1-release/ubuntu1604/swift-3.1-RELEASE/swift-3.1-RELEASE-ubuntu16.04.tar.gz
// 署名ファイルの取得
# wget https://swift.org/builds/swift-3.1-release/ubuntu1604/swift-3.1-RELEASE/swift-3.1-RELEASE-ubuntu16.04.tar.gz.sig

8.PGP鍵をインポートする

次の手順で実施しますが、PGP(Pretty Good Privacy)の公開鍵を利用してSwiftパッケージが安全なものであると署名されたかどうかを検証します。
その前準備としてPGP鍵をインポートします。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# gpg --keyserver hkp://pool.sks-keyservers.net \
      --recv-keys \
      '7463 A81A 4B2E EA1B 551F  FBCF D441 C977 412B 37AD' \
      '1BE1 E29A 084C B305 F397  D62A 9F59 7F4D 21A5 6D5F' \
      'A3BA FD35 56A5 9079 C068  94BD 63BC 1CFE 91D3 06C6'
gpg: requesting key 412B37AD from hkp server pool.sks-keyservers.net
gpg: requesting key 21A56D5F from hkp server pool.sks-keyservers.net
gpg: requesting key 91D306C6 from hkp server pool.sks-keyservers.net
gpg: /root/.gnupg/trustdb.gpg: trustdb created
gpg: key 412B37AD: public key "Swift Automatic Signing Key #1 <swift-infrastructure@swift.org>" imported
gpg: key 21A56D5F: public key "Swift 2.2 Release Signing Key <swift-infrastructure@swift.org>" imported
gpg: key 91D306C6: public key "Swift 3.x Release Signing Key <swift-infrastructure@swift.org>" imported
gpg: no ultimately trusted keys found
gpg: Total number processed: 3
gpg:               imported: 3  (RSA: 3)

9.PGP鍵で署名を検証する

公式で説明されている通り、keyのリフレッシュをします。

1
# gpg --keyserver hkp://pool.sks-keyservers.net --refresh-keys Swift

続いて、署名を検証します。

1
2
3
4
5
6
7
# gpg --verify swift-3.1-RELEASE-ubuntu16.04.tar.gz.sig
gpg: assuming signed data in `swift-3.1-RELEASE-ubuntu16.04.tar.gz'
gpg: Signature made Tue Mar 28 07:36:36 2017 UTC using RSA key ID 91D306C6
gpg: Good signature from "Swift 3.x Release Signing Key <swift-infrastructure@swift.org>"
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: A3BA FD35 56A5 9079 C068  94BD 63BC 1CFE 91D3 06C6

正しいSwiftパッケージであることがわかります。

10.パッケージを展開する

パッケージは圧縮されているので展開しましょう。

1
# tar xzf swift-3.1-RELEASE-ubuntu16.04.tar.gz

11.パスを通す

さて、DLしたパッケージに対して検索パスを設定する必要があります。
Dockerコンテナには環境設定ファイルとして.dockerenvがあるのでこちらにパスを記載します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// 解凍フォルダの名前が長いので名称を変更する
# mv swift-3.1-RELEASE-ubuntu16.04 swift

// ファイルを開く
# vi .dockerenv

// 下記のようにパスを書く
export PATH=/swift/usr/bin:"${PATH}"

// 環境設定を更新する
# source .dockerenv

// 検索パスが通ったことを確認する
# which swift
/swift/usr/bin/swift
# swift --version
Swift version 3.1 (swift-3.1-RELEASE)
Target: x86_64-unknown-linux-gnu

12.必要なモジュールをインストールする

このままでswiftコマンドを叩いても下記のようにエラーが表示されます。

1
/swift/usr/bin/lldb: error while loading shared libraries: libedit.so.2: cannot open shared object file: No such file or directory

どうやら必要なモジュールが足りないようですね…
ということで下記をインストールしましょう。

1
2
3
# apt-get install libedit-dev
# apt-get install libpython-dev
# apt-get install libxml2-dev

これでswiftコマンドを実行できるようになります。
ついでにHello Worldまで出力してみます。

1
2
3
4
# swift
Welcome to Swift version 3.1 (swift-3.1-RELEASE). Type :help for assistance.
  1> print("Hello, world!")
Hello, world!

PerfectでSwiftサーバを立てよう!

今回もSwiftサーバを立てるためにPerfectを利用します。
下記手順に従って進めましょう。

1.gitをインストールする
まずはPerfectgit経由でダウンロードする必要があるのでgitをインストールしましょう。

1
# apt-get install git

2.PerfectTemplateをダウンロードする
簡潔にSwiftサーバを立てたいのでPerfectTemplateをダウンロードします。

1
# git clone https://github.com/PerfectlySoft/PerfectTemplate.git

3.必要モジュールをインストールする
PerfectのGet Startedに書かれている通り、次の必要なモジュールをインストールします。

1
# apt-get install openssl libssl-dev uuid-dev

4.不足モジュールをインストールする
このままだとswift build実行しても下記エラーが出てしまいました。

1
error while loading shared libraries: libcurl.so.4: cannot open shared object file: No such file or directory

上記解決のためにモジュールをインストールしましょう。

1
# apt-get install libcurl4-openssl-dev

5.swift buildを実行する
さて、ビルドしましょう。

1
2
# cd PerfectTemplate
# swift build

6.Swiftサーバを起動する
後は下記コマンドでSwiftサーバを起動しましょう。

1
2
3
# .build/debug/PerfectTemplate
[INFO] Starting HTTP server localhost on 0.0.0.0:8080
[INFO] Starting HTTP server localhost on 0.0.0.0:8181

Swiftサーバにアクセス

まとめ

さていかがでしたでしょうか?
筆者個人としては、途中で何回かハマったものの、DockerコンテナのUbuntuにSwiftサーバを立てられたことに満足できました。
今回はサーバを立てるという基本的なものでしたが、今度はWeb APIを作成して、iOSアプリからアクセスしてみたりなど遊んでみたいと思います。

と言ったところで本日はここまで。

参考:

Comments