👋

Alfresco Governance Services Community Editionを起動する

2025/01/23に公開

概要

以下のマニュアルを参考に、Alfresco Governance Services Community Editionのインストールを試みましたので、備忘録です。

https://support.hyland.com/r/Alfresco/Alfresco-Governance-Services-Community-Edition/23.4/Alfresco-Governance-Services-Community-Edition

参考

同様の取り組みとして、以下があります。こちらも参考にしてください。

https://irisawadojo.blogspot.com/2020/11/72alfresco2.html

仮想マシン

以下のマシンをAzureの仮想マシンとして作成しました。

  • イメージ: Ubuntu Server 24.04 LTS - Gen2
  • VM アーキテクチャ: x64
  • サイズ: Standard D2ads v6 (2 vcpu 数、8 GiB のメモリ)

8080ポートを使用するために、ポートを開けておきます。

Dockerのインストール

Dockerをインストールします。

sudo apt-get update
sudo apt-get install -y ca-certificates curl gnupg

# Docker の公式 GPG キーを追加
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo tee /etc/apt/keyrings/docker.asc > /dev/null
sudo chmod a+r /etc/apt/keyrings/docker.asc

# Docker のリポジトリを追加
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

# Docker をインストール
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

# sudo なしで Docker を実行
sudo usermod -aG docker $USER
newgrp docker

# Docker の動作確認
docker run hello-world

インストール

以下の「Install using Docker Compose」を使用します。

https://support.hyland.com/r/Alfresco/Alfresco-Governance-Services-Community-Edition/23.4/Alfresco-Governance-Services-Community-Edition/Install/Install-using-Docker-Compose

以下で起動します。

git clone https://github.com/Alfresco/acs-deployment
cd acs-deployment/docker-compose

ここにあるcommunity-compose.yamlを編集します。以下の2箇所を変更します。マニュアルでは、quay.io/alfresco/alfresco-governance-repository-community:23.x.xとなっていますが、docker.ioを指定します。

community-compose.yaml
    # image: docker.io/alfresco/alfresco-content-repository-community:23.4.0
    image: docker.io/alfresco/alfresco-governance-repository-community:23.4.0

    # image: docker.io/alfresco/alfresco-share:23.4.0
    image: docker.io/alfresco/alfresco-governance-share-community:23.4.0

そして、以下により、コンテナが起動します。

docker compose -f community-compose.yaml up

例えば、http://locahost:8080/shareでアクセスできます。

カスタムドメインの設定

Amazon Route 53などを使ってカスタムドメインを割り当ててみます。ここでは、以下を例としてます。

alfresco-demo.aws.ldas.jp

この時、http://alfresco-demo.aws.ldas.jp:8080/share/にアクセスすると、ログイン後、以下のように表示されてしまいます。

この対応として、以下のように変更します。

community-compose.yaml
  share:
    # image: docker.io/alfresco/alfresco-share:23.4.0
    image: docker.io/alfresco/alfresco-governance-share-community:23.4.0
    mem_limit: 1g
    environment:
      # CSRF_FILTER_ORIGIN: http://localhost:8080
      CSRF_FILTER_ORIGIN: http://alfresco-demo.aws.ldas.jp:8080
      # CSRF_FILTER_REFERER: http://localhost:8080/share/.*
      CSRF_FILTER_REFERER: http://alfresco-demo.aws.ldas.jp:8080/share/.*

この結果、カスタムドメインでアクセスしても、エラーを回避できました。

80ポートでアクセスする

次に、80ポートでアクセスできるようにしてみます。主に、traefikの設定を変更することで、http://alfresco-demo.aws.ldas.jp/share/のようなURLでアクセスできるようになりました。

変更する箇所は4つです。

community-compose.yaml
...
      # CSRF_FILTER_ORIGIN: http://localhost:8080
      # CSRF_FILTER_ORIGIN: http://alfresco-demo.aws.ldas.jp:8080
      CSRF_FILTER_ORIGIN: http://alfresco-demo.aws.ldas.jp
      # CSRF_FILTER_REFERER: http://localhost:8080/share/.*
      # CSRF_FILTER_REFERER: http://alfresco-demo.aws.ldas.jp:8080/share/.*
      CSRF_FILTER_REFERER: http://alfresco-demo.aws.ldas.jp/share/.*
...
      # - "--entrypoints.web.address=:8080"
      - "--entrypoints.web.address=:80"
...
    ports:
      # - "8080:8080"
      - "80:80"

HTTPSでアクセスする

最後に、HTTPSでアクセスできるように修正します。

まず、以下を実行します。

mkdir -p ./letsencrypt
touch ./letsencrypt/acme.json
chmod 600 ./letsencrypt/acme.json

そして、以下のように変更します。HTTPS対応とコメントをつけている点に注意してください。

community-compose.yaml
...
    labels:
      - "traefik.enable=true"
      # - "traefik.http.routers.alfresco.rule=PathPrefix(`/`)"
      - "traefik.http.routers.alfresco.rule=Host(`alfresco-demo.aws.ldas.jp`) && PathPrefix(`/`)" # HTTPS対応
      - "traefik.http.services.alfresco.loadbalancer.server.port=8080"
      - "traefik.http.routers.solrapideny.rule=PathRegexp(`^/alfresco/(wc)?s(ervice)?/api/solr/.*$`)"
      - "traefik.http.middlewares.acsfakeauth.basicauth.users=fake:"
      - "traefik.http.routers.solrapideny.middlewares=acsfakeauth@docker"
      - "traefik.http.routers.alfresco.entrypoints=websecure" # HTTPS対応
      - "traefik.http.routers.alfresco.tls.certresolver=myresolver" # HTTPS対応
...
    environment:
      # CSRF_FILTER_ORIGIN: http://localhost:8080
      # CSRF_FILTER_ORIGIN: http://alfresco-demo.aws.ldas.jp:8080
      # CSRF_FILTER_ORIGIN: http://alfresco-demo.aws.ldas.jp
      CSRF_FILTER_ORIGIN: https://alfresco-demo.aws.ldas.jp
      # CSRF_FILTER_REFERER: http://localhost:8080/share/.*
      # CSRF_FILTER_REFERER: http://alfresco-demo.aws.ldas.jp:8080/share/.*
      # CSRF_FILTER_REFERER: http://alfresco-demo.aws.ldas.jp/share/.*
      CSRF_FILTER_REFERER: https://alfresco-demo.aws.ldas.jp/share/.*
...
    labels:
      - "traefik.enable=true"
      # - "traefik.http.routers.share.rule=PathPrefix(`/share`)"
      - "traefik.http.routers.share.rule=Host(`alfresco-demo.aws.ldas.jp`) && PathPrefix(`/share`)" # HTTPS対応
      - "traefik.http.services.share.loadbalancer.server.port=8080"
      - "traefik.http.routers.proxiedsolrapideny.rule=PathRegexp(`^/share/proxy/alfresco(-(noauth|feed|api))?/api/solr/`)"
      - "traefik.http.middlewares.sharefakeauth.basicauth.users=fake:"
      - "traefik.http.routers.proxiedsolrapideny.middlewares=sharefakeauth@docker"
      - "traefik.http.routers.share.entrypoints=websecure" # HTTPS対応
      - "traefik.http.routers.share.tls.certresolver=myresolver" # HTTPS対応
...
    labels:
      - "traefik.enable=true"
      # - "traefik.http.routers.aca.rule=PathPrefix(`/content-app`)"
      - "traefik.http.routers.aca.rule=Host(`alfresco-demo.aws.ldas.jp`) && PathPrefix(`/content-app`)" # HTTPS対応
      - "traefik.http.middlewares.acaroot.stripprefix.prefixes=/content-app"
      - "traefik.http.middlewares.acaforceslash.redirectregex.regex=^(.*/content-app)$$"
      - "traefik.http.middlewares.acaforceslash.redirectregex.replacement=$${1}/"
      - "traefik.http.middlewares.acachain.chain.middlewares=acaforceslash,acaroot"
      - "traefik.http.routers.aca.middlewares=acachain@docker"
      - "traefik.http.routers.aca.entrypoints=websecure" # HTTPS対応
      - "traefik.http.routers.aca.certresolver=myresolver" # HTTPS対応
...
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.acc.rule=PathPrefix(`/control-center`) || PathPrefix(`/admin`)"
      - "traefik.http.middlewares.accroot.stripprefix.prefixes=/admin,/control-center"
      - "traefik.http.middlewares.accforceslash.redirectregex.regex=^(.*/(admin|control-center))$$"
      - "traefik.http.middlewares.accforceslash.redirectregex.replacement=$${1}/"
      - "traefik.http.middlewares.accchain.chain.middlewares=accforceslash,accroot"
      - "traefik.http.routers.acc.middlewares=accchain@docker"
      - "traefik.http.routers.acc.entrypoints=websecure" # HTTPS対応
      - "traefik.http.routers.acc.tls.certresolver=myresolver" # HTTPS対応
...
    command:
      - "--api.insecure=true"
      - "--providers.docker=true"
      # - "--entrypoints.web.address=:8080"
      - "--entrypoints.web.address=:80"
      - "--entryPoints.traefik.address=:8888"
      - "--accesslog=true"
      - "--providers.docker.exposedByDefault=false"
      - "--ping.entrypoint=web"
      - "--ping=true"
      - "--certificatesresolvers.myresolver.acme.httpchallenge.entrypoint=web"  # HTTPS対応
      - "--certificatesresolvers.myresolver.acme.email=[xxx@example.org]" # 要修正  # HTTPS対応
      - "--certificatesresolvers.myresolver.acme.storage=/letsencrypt/acme.json"  # HTTPS対応
      - "--entrypoints.web.http.redirections.entryPoint.to=websecure"  # HTTPS対応
      - "--entrypoints.web.http.redirections.entryPoint.scheme=https"  # HTTPS対応
      - "--entrypoints.websecure.address=:443"  # HTTPS対応
    ports:
      # - "8080:8080"
      - "80:80"
      - "443:443"  # HTTPS対応
      - "8888:8888"
    healthcheck:
      test: ["CMD", "traefik", "healthcheck", "--ping"]
      interval: 20s
      timeout: 10s
      retries: 3
      start_period: 10s
    security_opt:
      - label=disable # Required for accessing the Docker socket on Selinux enabled systems
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./letsencrypt:/letsencrypt  # HTTPS対応

これにより、以下のようなアドレスでアクセスできるようになりました。

https://alfresco-demo.aws.ldas.jp/share/

まとめ

当初、localhostや8080ポートを一括置換してみましたが、うまくいかず、上記のように段階を追って挙動を確認してみました。

まだ確認不足の点が多く、間違っている点もあるかもしれませんが、参考になりましたら幸いです。

Discussion