はじめての docker-compose / Jpsonic をのっけてみる

タイトルまんまなわけだが。

いままで、Jpsonic 専用サーバとして運用してたのが、なんだかもったいなく感じて、いっそのこと docker に乗っけてみるのはどうだろうと思った次第。 Subsonic でもやりかけてたけど、うまくいかなかったのであきらめていたのだが、調べてみると airsonic/Jpsonic では先人がいらっしゃったので、それに沿ってやってみようかと。

Docker / Docker Compose

これは公式情報に沿って導入。

Jpsonic をのっけてみる

JpsonicをDockerで動かす | sound of rudeness に沿ってやったけど、もともとの構成と同等にするためと、今後 Jpsonic のバージョンが上がった時に制御しやすいように、以下を変更した。

  • ファイル構成
    • 配置先を ~/docker/compose/jpsonic にした (後述する systemd unit 化に備えて)
    • jpsonic.war ではなく jpsonic-jetty-embed.war にした
    • Jpsonic のバージョン番号のフォルダを作成し、その中に jpsonic-jetty-embed.war をおいた
    • install/target/dependency には warファイルのコピーを置かずシンボリックリンクを置いた
  • Dockerfile 具体的に変えた部分は後述。
    • Alpine linux のバージョンを上げた(v3.11)
    • 日本語用フォント導入 (font-noto-cjk)
    • タイムゾーンAsia/Tokyo に変更
  • docker-compose.yml
    • ポート変更
    • musicフォルダを先に用意したオブジェクトストレージのファイルシステム配下に変更

これらの試行のため、git で管理下はいいものの、勢い余って war ファイルを追加してしまったのであとでいろいろ困った。*1

Tips: Git で空のディレクトリを扱う方法

空のディレクトリを維持するための、 .gitkeep と .gitignore の使い分け - Qiita

.gitignore でやる方法思いつかなかった。ずっと .gitkeep 派だった。 適材適所で使い分けられるようになりたい。

Systemd Unit 化

Add doker-compose as a systemd unit · GitHub を使用。docker-compose のパスが /usr/bin/usr/local/bin 混在になっている点と、ワーキングディレクトリを作業用アカウントのホームディレクトリ配下にする点を調整した。 (…… Gist って、引用するとこうなるのか……以下の Gist は、修正したものではなく、参考にしたオリジナルです。)

gist.github.com

おわり

大規模システムじゃなければ、これでも十分かなって、思った。

補足:Dockerfile 変更点抜粋

RUN apk --no-cache add \
    ffmpeg \
    lame \
    bash \
    libressl \
    fontconfig \
    ttf-dejavu \
    font-noto-cjk \
    ca-certificates \
    tini \
    curl \
    openjdk8-jre \
    tzdata && \
    cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime

RUN mkdir -p /usr/lib/jvm/java-1.8-openjdk/jre/lib/fonts/fallback && \
    cd /usr/lib/jvm/java-1.8-openjdk/jre/lib/fonts/fallback && \
    ln -s /usr/share/fonts/noto/NotoSansCJK-Regular.ttc . && \
    ln -s /usr/share/fonts/noto/NotoSerifCJK-Regular.ttc . && \
    ln -s /usr/share/fonts/noto/NotoSansCJK-Bold.ttc . && \
    ln -s /usr/share/fonts/noto/NotoSerifCJK-Bold.ttc .

*1:公開できないという点と、GitHub のプライベートリポジトリに上げるには Git LFS にしなければならず、それを後追いでやることになった点と。