Alfresco Governance Services Community Editionを起動する
概要
以下のマニュアルを参考に、Alfresco Governance Services Community Editionのインストールを試みましたので、備忘録です。
参考
同様の取り組みとして、以下があります。こちらも参考にしてください。
仮想マシン
以下のマシンを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」を使用します。
以下で起動します。
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
を指定します。
# 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/にアクセスすると、ログイン後、以下のように表示されてしまいます。
この対応として、以下のように変更します。
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つです。
...
# 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対応
とコメントをつけている点に注意してください。
...
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