Ubuntu Weekly Recipe

第622回 Spacedeckでホワイトボードを共有する

この記事を読むのに必要な時間:およそ 4.5 分

DockerでSpacedeckを試す

Spacedeck自体はNode.js製のソフトウェアです。しかしながらnpm用にパッケージが公開されているわけでも,Ubuntu/Debianリポジトリにパッケージが用意されているわけでもないため,ソースコードをダウンロードするところから始めなくてはなりません。また,描画のためにGraphicsmagickが必要です。さらに動画やPDFをホワイトボードに添付するならffmpegやghostscriptも必要になります。

幸いなことにDockerfileとdocker-compose.ymlファイルは用意されているので,それを使うことにしましょう。ちなみにDockerHubにSpacedeckのコンテナイメージが存在しますが,これはだいぶ古いものですので使用しないほうが良いでしょう。

まずはDockerをインストールするところから始めます。今回はUbuntu 20.04 LTS上で動かすことを想定し,DockerはUbuntuのリポジトリにある19.03.8をインストールします。ちなみにもしLXD上でDockerを動かすなら,あらかじめ次のように設定しておいてください。

$ lxc config set spacedeck security.nesting true
$ lxc config set spacedeck security.privileged yes
$ lxc restart spacedeck

Dockerと一緒にdocker-composeもインストールしておきましょう。

$ sudo apt install docker.io docker-compose git

次にソースコードをダウンロードします。

$ git clone https://github.com/spacedeck/spacedeck-open.git
$ cd spacedeck-open

残念なことに開発再開以降,いまだ正式リリースは行われていません。タグも開発再開前に打たれたものがひとつだけです。今回はデフォルトブランチにもなっているmntブランチの最新版をそのまま使うことにします。

基本的な設定はconfig/default.jsonで行います。

{
  "team_name": "My Open Spacedeck",
  "contact_email": "support@example.org",

  "endpoint": "http://localhost:9666",
  "invite_code": "top-sekrit",

  "storage_region": "eu-central-1",

  "storage_bucket": "my_spacedeck_bucket",
  "storage_cdn": "/storage",
  "storage_local_path": "./storage",
  "storage_local_db": "./database.sqlite",

  "redis_mock": true,
  "mongodb_host": "localhost",
  "redis_host": "localhost",

  "google_access" : "",
  "google_secret" : "",
  "admin_pass": "very_secret_admin_password",
  "phantom_api_secret": "very_secret_phantom_password",

  "mail_provider": "smtp",
  "mail_smtp_host": "your.smtp.host",
  "mail_smtp_port": 465,
  "mail_smtp_secure": true,
  "mail_smtp_require_tls": true,
  "mail_smtp_user": "your.smtp.user",
  "mail_smtp_pass": "your.secret.smtp.password"
}

このうち最低限変更が必要なのは,mail_providerだけです。

ストレージ関連の設定はAWS S3へのアクセスが必要そうに見えますが,storage_local_pathを指定している場合はそのローカルディレクトリをmock-aws-s3によってS3っぽく使います。よってお試しならこのままでも問題ありません。ちなみにこのディレクトリは,ホワイトボードにアップロードしたメディアファイルの保管に使われます。

描画データそのものはstorage_local_dbに保存されます。名前のとおりSQLite3形式のデータベースファイルです。

google_accessadmin_passは過去の遺物であり現時点では使われていません。実際にシークレット情報となるのはSMTPの他にはinvite_codeだけです。これはアカウントを作る際に,アカウント作成権限があるかどうかを判断するために使われます。インターネットに公開するサイトにする予定であれば,この設定は変更しておきましょう。

mail_providerはホワイトボードへのメール経由の招待,各ユーザーへの通知,パスワードを忘れた時の対応などメールが必要な処理で使われます。本格的に運用するなら適切なSMTPサーバーを設定しておきましょう。ちなみにmail_provider「console」と入力しておけば,メールを送る代わりにログに送るはずだった情報を記録してくれます。テスト目的であれば,とりあえずconsoleを入れておくのも良いでしょう。

もうひとつ変更が必要なのは,docker-compose.ymlファイルです。

version: "2.0"

services:
  spacedeck:
    build: .
    container_name: spacedeck
    ports:
      - "9666:9666"
    volumes:
      - /absolute/path/to/storage:/app/storage
      - /absolute/path/to/database.sqlite:/app/database.sqlite

こちらも変更が必要なのはvolumesフィールドの部分のみです。ここには先程のconfig/default.jsonstorage_local_pathstorage_local_dbの絶対パスを入力します。ただし初回起動時はデータベースを作る必要があるため,まずはvolumesを空にして起動しなくてはなりません。そうしないと,Docker Volumeの都合で空のディレクトリが作られてしまいます。

というわけで,まずは次のように記述しておいてください。

version: "2.0"

services:
  spacedeck:
    build: .
    container_name: spacedeck
    ports:
      - "9666:9666"
    #volumes:
    #  - /absolute/path/to/storage:/app/storage
    #  - /absolute/path/to/database.sqlite:/app/database.sqlite

この状態で一度サービスを起動してみましょう。

$ mkdir storage
$ sudo docker-compose -f docker-compose.yml up -d --build
$ sudo docker cp spacedeck:/app/database.sqlite .
$ sudo docker-compose -f docker-compose.yml stop

初回実行時はDockerイメージを構築するところから始まるため,それなりに時間はかかるはずです。これでデータベースファイルが作成されました。

$ file database.sqlite
database.sqlite: SQLite 3.x database, last written using SQLite version 3031001

ちなみにイメージには諸々インストールされるため,それなりのサイズになります。

$ docker images
REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
spacedeck-open_spacedeck   latest              ceaec4245b4e        24 hours ago        1.17GB
node                       10-alpine3.11       6bf4087f2679        4 days ago          83.8MB

今度はデータベースファイルもローカルのファイルを使うよう設定を変更します。

version: "2.0"

services:
  spacedeck:
    build: .
    container_name: spacedeck
    ports:
      - "9666:9666"
    volumes:
      - (storageディレクトリへのパス):/app/storage
      - (database.sqliteへのパス):/app/database.sqlite

最後に再びコンテナを起動しましょう。

$ sudo docker-compose -f docker-compose.yml up -d

これで準備ができました。

著者プロフィール

柴田充也(しばたみつや)

Ubuntu Japanese Team Member株式会社 創夢所属。数年前にLaunchpad上でStellariumの翻訳をしたことがきっかけで,Ubuntuの翻訳にも関わるようになりました。