Juice

Docker部署Umami并集成进Halo

2024-03-07

在docker上部署

这里默认完成docker和docker compose的安装

创建docker-compose.yml配置文件

mkdir /home/umami
vim docker-compose.yml

Umami使用MySQL的话建议使用MySQL8,使用5.7可能会有语法报错导致容器无法启动。如果性能不够的话可以使用PostgreSQL,下面贴出使用两种数据库的配置文件。

在终端中输入openssl rand -hex 16生成随机字符串替换到配置文件中的APP_SECRET

#使用PostgreSQL
version: '3'
services:
  umami:
    image: docker.umami.is/umami-software/umami:postgresql-latest
    ports:
      - "3000:3000"
    environment:
      DATABASE_URL: postgresql://umami:umami@db:5432/umami
      DATABASE_TYPE: postgresql
      APP_SECRET: replace-me-with-a-random-string
    depends_on:
      - db
    restart: always
  db:
    image: postgres:12.22
    environment:
      POSTGRES_DB: umami
      POSTGRES_USER: umami
      POSTGRES_PASSWORD: umami
    volumes:
      - /home/umami/umami-db-data:/var/lib/postgresql/data
    restart: always
​
#使用MySQL,同时创建数据库容器
version: '3'
services:
  umami:
    image: ghcr.io/umami-software/umami:mysql-latest
    restart: always
    depends_on:
      - umami-db
    ports:
      - 3000:3000
    environment:
      DATABASE_TYPE: mysql
      DATABASE_URL: mysql://umami:password@umami-db:3306/umami
      APP_SECRET: replace-me-with-a-random-string
    container_name: umami
  umami-db:
    image: mysql:8.0
    restart: always
    volumes:
      - ./data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: umami
      MYSQL_USER: umami
      MYSQL_PASSWORD: password
    container_name: umami-db
​
#使用MySQL,使用宿主机数据库
version: '3'
services:
  umami:
    image: ghcr.io/umami-software/umami:mysql-latest
    restart: always
    network_mode: "host"
    ports:
      - "3000:3000"
    environment:
      DATABASE_TYPE: mysql
      #数据库信息,自行修改
      DATABASE_URL: mysql://username:password@localhost:3306/databasename
      APP_SECRET: replace-me-with-a-random-string
    container_name: umami

保存配置文件后

docker compose up -d启动容器

nginx反代

如果要在Halo控制台中通过Umami插件直接访问Umami面板,会出现跨域问题,这个是官方给出的配置https://www.halo.run/store/apps/app-KfOps?tab=readme#faq,下面是我的配置文件,可以都试一下。如果域名配置了SSL证书的话记得加上SSL的配置。

upstream umami {
  server 127.0.0.1:3000;
}
server{
    listen 80;
    listen [::]:80;
    server_name xxxx.com www.xxxx.com;#这里改为你的umami服务的域名
    #...
    add_header Access-Control-Allow-Origin 'http://xxxx.com';#这里改为你的博客的域名
    add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
    add_header Access-Control-Allow-Headers 'DNT,X-Mx-ReqToken,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization';
    if ($request_method = 'OPTIONS') {
        return 204;
    }
​
    add_header Content-Security-Policy 'frame-ancestors www.xxxx.com/';#这里改为你的博客的域名
    location / {
    #...
    proxy_pass http://umami;
    proxy_set_header HOST $host;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
​
    proxy_hide_header 'Access-Control-Allow-Origin';
    proxy_hide_header 'Content-Security-Policy';
    }
}
​

如果不需要考虑跨域

upstream umami {
  server 127.0.0.1:3000;
}
server {
    listen 80;
    listen [::]:80;
    server_name xxxx.com www.xxxx.com;#这里改为你的umami服务的域名
    client_max_body_size 1024m;
  location / {
    proxy_pass http://umami;
    proxy_set_header HOST $host;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
}

重启nginx

nginx -s reload

Umami配置

访问Umami服务

202412170047961.png

默认用户名admin,默认密码umami

202412170048056.png

右上角小地球切换语言

202412170048990.png

设置里添加你的网站

集成进Halo

  1. 在Halo的应用市场中安装Umami插件

  2. 在Umami面板中选择你博客的网站点击编辑

    202412170052243.png

  3. 在Halo控制台中填写Umami相关配置

    202412170055299.png

    202412170054365.png

    这里的网站ID填写到Halo中Umami设置的站点ID

    202412170055225.png

    这里的跟踪代码填到Halo控制台->设置->代码注入->全局head标签 中

    202412170057133.png

这里打开共享链接,并将共享链接填到Halo控制台Umami设置的共享链接中,保存即可