docker-compose
---
services:
umami:
image: ghcr.io/umami-software/umami:latest
ports:
- "3000:3000"
environment:
DATABASE_URL: postgresql://umami:umami@db:5432/umami
APP_SECRET: replace-me-with-a-random-string
# Required for two-factor authentication, generate with: openssl rand -hex 32
TWO_FACTOR_ENCRYPTION_KEY: replace-me-with-a-64-character-hex-string
depends_on:
db:
condition: service_healthy
init: true
restart: always
healthcheck:
test: ["CMD-SHELL", "curl http://localhost:3000/api/heartbeat"]
interval: 5s
timeout: 5s
このファイルは切り詰められています。 オリジナルを表示
ドキュメント
.envとdocker-compose.ymlの作成
docker-compose.yml
services:
umami:
image: ghcr.io/umami-software/umami:latest
container_name: umami
ports:
- "3080:3000"
environment:
DATABASE_URL: postgresql://${DB_USER}:${DB_PASSWORD}@umami-db:5432/${DB_DATABASE}
APP_SECRET: ${SECRET}
TWO_FACTOR_ENCRYPTION_KEY: ${KEY}
depends_on:
umami-db:
condition: service_healthy
init: true
restart: always
healthcheck:
test: ["CMD-SHELL", "curl http://localhost:3000/api/heartbeat"]
interval: 5s
timeout: 5s
retries: 5
umami-db:
image: postgres:16-alpine
container_name: umami-db
environment:
POSTGRES_DB: ${DB_DATABASE}
POSTGRES_USER: ${DB_USER}
POSTGRES_PASSWORD: ${DB_PASSWORD}
volumes:
- ./umami-db-data:/var/lib/postgresql/data
restart: always
healthcheck:
test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
interval: 5s
timeout: 5s
retries: 5
注)ホストのポート3000は使用中のため3080へ変更。.envでユーザ名、パスワードなどを指定。
.env
### # Required for two-factor authentication, generate with: openssl rand -hex 32
KEY="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
### $ uuidgen
SECRET="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
DB_DATABASE="umami"
DB_USER="umami"
### $ pwgen -s 15 1 or $ openssl rand -base64 16
DB_PASSWORD="xxxxxxxxxxxxxxxxxxxxxxx"
起動
$ docker compose up -d
ステータス
$ docker compose ps
NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
umami ghcr.io/umami-software/umami:latest "docker-entrypoint.s…" umami 2 hours ago Up 2 hours (healthy) 0.0.0.0:3080->3000/tcp, [::]:3080->3000/tcp
umami-db postgres:16-alpine "docker-entrypoint.s…" umami-db 2 hours ago Up 2 hours (healthy) 5432/tcp
アクセス:http://<host_pc_local_ip>:3080
ユーザ名:admin
パスワード:umami
ログイン画面
ユーザ名・パスワード変更
ユーザ名とパスワードはログイン後変更すること。
サイト追加
注)Nginxのプロキシを利用してパブリックドメインでアクセスできるようにすること。
例)https://umami.example.com
トラブルシュート
アクセス元の地域、都市が表示されない
オープン 05:44AM - 23 Mar 24 UTC
閉鎖 05:59PM - 24 Mar 24 UTC
troubleshooting
### Describe the Bug
No region and cities are showing in Umami dashboard, while… countries are showing.
Countries:
<img width="586" alt="image" src="https://github.com/umami-software/umami/assets/57860123/10cc931a-db15-4743-a8d3-f41e5013c1b8">
Region:
<img width="1393" alt="image" src="https://github.com/umami-software/umami/assets/57860123/8ceb984c-9f92-4279-a962-c780e473c1c8">
Cities:
<img width="1445" alt="image" src="https://github.com/umami-software/umami/assets/57860123/9632a05d-d696-4296-ab00-1eaeb1d4d869">
### Database
PostgreSQL
### Relevant log output
_No response_
### Which Umami version are you using? (if relevant)
v2.10.2
### Which browser are you using? (if relevant)
Chrome
### How are you deploying your application? (if relevant)
Docker
Cloudflareの設定
domain → Rules → Settings → Managed Transforms
Add visitor location headers
Cloudflareを経由している場合、リクエストは実質的に クライアント → Cloudflareのエッジサーバー → オリジン(Nginx→Umami) という経路になります。この構成では、オリジン側(Umamiのnode-geoip処理)が見ているIPは最終的に正しいクライアントIPになりますが、Cloudflare自体が既に独自の高精度な位置情報判定 を行っており、それを CF-IPCountry, CF-IPCity, CF-Region などの専用ヘッダーとして付与できる仕組みを持っています。
「Managed Transforms → Add visitor location headers」を有効にすることで、Cloudflareが位置情報ヘッダーをオリジンまで転送するようになるため、Umami(または対応しているアプリ)側でそれを利用できるようになります。
Nuxtフレームワークへ導入
nuxt-umamiのインストール
$ docker run --rm -it --env-file ./agency-os/.env \
-v "$(pwd)/agency-os:/app" -w /app node:24-alpine \
sh -c "corepack enable && corepack prepare --activate && \
pnpm install --frozen-lockfile && pnpm add -D nuxt-umami"
上記パッケージをインストール後nuxt.config.tsに設定を追加
agency-os/nuxt.config.ts
export default defineNuxtConfig({
modules: [
'nuxt-umami'
],
umami: {
host: 'https://umami.ficusonline.com',
id: 'a8226e9a-73ee-444b-9006-8300ef72300c',
autoTrack: true,
// 開発環境でもテスト送信したい場合は true、止めたい場合は false
// (旧 logModal は廃止されたため、テスト環境での無効化等は ignoreLocal などを使用)
ignoreLocal: true, // localhostからのアクセスを除外する場合
},
});
リビルド
注)corepackを使用しないとpackage.jsonで指定したpnpmのパージョンが採用されないためビルドエラー
$ docker run --rm -it --env-file ./agency-os/.env
-v "$(pwd)/agency-os:/app" -w /app node:24-alpine
sh -c "corepack enable && corepack prepare --activate && \
pnpm install --frozen-lockfile && pnpm build"
Discourseへ適用
テーマとコンポーネント—>テーマの編集—>カスタムコード—>コードを編集
<head>タグにumamiで取得したトラッキングコード追加
<script defer src="https://example.com/script.js" data-website-id="xxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"></script>
Prestashopへ適用
テーマのhead.tplへトラッキングコードを追加
themes/classic/templates/_partials/head.tpl
{block name='hook_extra'}
<script defer src="https://umami.example.com/script.js" data-website-id="xxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"></script>
{/block}
注)アップデート後にファイルが更新されるため、その都度置き換える必要あり。