はじめに
さて本日はDockerつながりで『UbuntuにSwiftサーバを立ててみたい』と思います。
今後、ますます加熱する Server Side Swift を誰でも簡単に使えるように、きっとDockerを使う場面も増えてくることでしょう。
ということで早速見ていきたいと思います。
Swiftのインストール方法
次の手順に従ってswift
コマンドが叩けるところまで進めてみましょう。
1.KitematicでUbuntuを検索してDLする
まずはDockerコンテナを作ります。
※UbuntuのバージョンはUbuntu 16.04.2 LTS
です。
2.Privileged mode
をONにする
Dockerコンテナのあるある話ですが、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.wget
とvim
をインストールする
後ほど利用するのでwget
とvim
をインストールしておきます。
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
をインストールする
まずはPerfect
をgit
経由でダウンロードする必要があるので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
|
まとめ
さていかがでしたでしょうか?
筆者個人としては、途中で何回かハマったものの、DockerコンテナのUbuntuにSwiftサーバを立てられたことに満足できました。
今回はサーバを立てるという基本的なものでしたが、今度はWeb APIを作成して、iOSアプリからアクセスしてみたりなど遊んでみたいと思います。
と言ったところで本日はここまで。
参考: