Skip to content
Kosuke Tanabe edited this page Jul 6, 2024 · 37 revisions

外部への公開方法

既定では、Enjuにはインストールしたコンピュータ(localhost)からしかアクセスできません。Enjuを実際に公開する際には、アプリケーションの設定・リバースプロキシの設定を変更する必要があります。

アプリケーションの設定

  1. Enjuに外部からアクセスする際のホスト名を決めます。
    • IIIFサーバの機能を使用する場合は、Enju本体のホスト名とは別に、IIIFサーバのホスト名を決める必要があります
  2. .envの以下の内容を変更します。
    # PostgreSQLのユーザ名
    # PostgreSQLが別サーバで動作している場合、そのサーバのユーザ名を使用
    POSTGRES_USER=enju
    
    # PostgreSQLのパスワード
    # PostgreSQLが別サーバで動作している場合、そのサーバのパスワードを使用
    POSTGRES_PASSWORD=password
    
    # PostgreSQLのホスト名
    # PostgreSQLが別サーバで動作している場合、実際にPostgreSQLが動作しているサーバに変更
    POSTGRES_HOST=192.168.2.10
    
    # nginxを動作させるIPアドレス。公開する場合は127.0.0.0から0.0.0.0に変更する
    ENJU_LEAF_BIND_ADDRESS=0.0.0.0
    
    # Enjuを公開するURL
    ENJU_LEAF_BASE_URL=http://localhost:8080
    

httpsの設定

以下はnginxをEnjuと同じホストで動作させる場合の設定の例です。

サーバ証明書の取得

サーバ証明書は、Let's Encryptなどを用いて取得することができます。 (TBD)

nginxの設定

# アクセスログの設定はこの例では省略しています

# httpでのアクセスをすべてhttpsに転送する
server {
  listen 80;
  server_name enju.example.jp; # Enjuの外部公開ホスト名。.envのENJU_LEAF_BASE_URLで指定したホスト名と同じもの

  location / {
    return 301 https://$host$request_uri;
  }
}

# Enju本体へのアクセスの設定
server {
  listen 443 ssl http2;
  server_name enju.example.jp; # Enjuの外部公開ホスト名。.envのENJU_LEAF_BASE_URLで指定したホスト名と同じもの

  # アップロードできるファイルの最大サイズ
  client_max_body_size 5m;

  root /opt/enju_leaf/public;

  # サーバ証明書と鍵のファイルの保存場所を指定 
  ssl_certificate /etc/nginx/certs/enju.example.jp.pem;
  ssl_certificate_key /etc/nginx/certs/enju.example.jp-key.pem;
  ssl_session_timeout 1d;
  ssl_session_tickets off;
  ssl_protocols TLSv1.2 TLSv1.3;
  ssl_prefer_server_ciphers off;

  # Enjuのその他の機能へのアクセスの設定
  location @web {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_redirect off;
    # EnjuのDockerコンテナが動作しているホスト名を指定
    proxy_pass http://localhost:8080;
  }

  # 外部のIIIFビューワからIIIFマニフェストファイルへのアクセスを受け付ける設定
  location ~ ^/iiif_presentations/ {
    add_header Access-Control-Allow-Origin '*' always;
    proxy_pass http://localhost:8080; # EnjuのDockerコンテナが動いているホスト名を指定
  }

  # Enjuのその他の機能へのアクセスの設定
  location / {
    try_files $uri @web;
  }
}

# IIIFサーバへのアクセスの設定
server {
  listen 443 ssl http2;
  server_name iiif.example.jp; # IIIFサーバの外部公開ホスト名

  # アップロードできるファイルの最大サイズ
  client_max_body_size 10m;

  # サーバ証明書と鍵のファイルの保存場所を指定 
  ssl_certificate /etc/nginx/certs/iiif.example.jp.pem;
  ssl_certificate_key /etc/nginx/certs/iiif.example.jp-key.pem;
  ssl_session_timeout 1d;
  ssl_session_tickets off;
  ssl_protocols TLSv1.2 TLSv1.3;
  ssl_prefer_server_ciphers off;

  location / {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_redirect off;
    if ($request_uri ~* "/(.*)") {
      proxy_pass http://cantaloupe:8182;
    }
  }
}
  1. リバースプロキシを動作させているサーバのIPアドレスと、リバースプロキシに外部からアクセスする際のホスト名(環境変数ENJU_LEAF_BASE_URLに設定したURLのホスト名)を、DNSサーバに登録します。
  2. これらの設定が完了したら、Webブラウザで環境変数ENJU_LEAF_BASE_URLに設定したURLを開き、アクセスできるかどうかを確認します。
Clone this wiki locally