DockerでEtherCalcを動かす

2023年1月30日

Dockerを使ってEtherCalcというオンラインスプレッドシートを動かしてみる。要するにオンラインのExcelであり、Googleスプレッドシートを使えばいいじゃないかと思うかもしれないが、Googleにスパイされるのが嫌なので、オープンソースのオンラインスプレッドシートを使うことにする。

まともに使ったことが無いので、Googleスプレッドシートもそうなのかわからないのだが、EtherCalcの面白いところは、複数のユーザが一つのスプレッドシートを編集していた場合、互いに相手の編集がリアルタイムで見れるところである。だから、相手がどこを編集しているのかわかる。

これによって、通常のデスクトップのExcelのように、互いの上書きによっていつのまにかデータが消えるようなことはない。リモートで複数の人間が一つのスプレッドシートファイルをいじっていれば、これはありうることだ。実際に経験して困ったことはないのだが。

今回もDockerを使って簡単にインストールし、Traefikを使って簡単にSSL化する。

しかし、困ったことにEtherCalcは、ユーザ認証を全く考えていないようなので、BASIC認証を付加して、パスワードを知っている者だけが使えるようにする。

ちなみに、このEtherCalcの開発者の何とか言う人は、現在台湾のデジタル大臣だそうな。もともと名うてのハッカーだったらしいのだが、物のわかっている人間をデジタル大臣にするところは、もはや日本と台湾のレベルの違いがあまりに大きすぎるというところだろう。

docker-compose.yml

docker-compose.ymlは以下

version: '3'

services:

  ethercalc:
    image: audreyt/ethercalc
# Traefikに任せるのでポートオープンしない
#    ports:
#      - "80:8000"
    environment:
      REDIS_PORT_6379_TCP_ADDR: redis
      REDIS_PORT_6379_TCP_PORT: 6379
    links:
      - redis:redis
    restart: always
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.ec-https.rule=Host(`ec.example.com`)"
      - "traefik.http.routers.ec-https.entrypoints=websecure"
      - "traefik.http.routers.ec-https.tls=true"
      - "traefik.http.routers.ec-https.tls.certResolver=myresolver"
      - "traefik.http.middlewares.ec-https.redirectscheme.scheme=https"
      # EtherCalcのhttpポート番号は8000なので、それをTraefikに教えてやるため
      - "traefik.http.services.ec-https.loadbalancer.server.port=8000"
      # basic認証の文字列は以下のようにして作成する
      # echo $(htpasswd -nb user password) | sed -e s/\\$/\\$\\$/g
      - "traefik.http.routers.ec-https.middlewares=test-auth"
      - "traefik.http.middlewares.test-auth.basicauth.users=user:$$apr1$$kyJ21Ke1$$************"
  redis:
    image: redis:latest
    volumes:
      - ./redis:/data
    command: redis-server --appendonly yes
    restart: always

networks:
  default:
    external:
      # traefikがこちら側にアクセスするために、共通ネットワークを使う
      name: traefik-network

これだけだ。後は、redisデータベースの定期的なバックアップでも考えてやればいいだろう。