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服务
默认用户名admin
,默认密码umami
右上角小地球切换语言
设置里添加你的网站
集成进Halo
在Halo的应用市场中安装Umami插件
在Umami面板中选择你博客的网站点击编辑
在Halo控制台中填写Umami相关配置
这里的网站ID填写到Halo中Umami设置的站点ID
这里的跟踪代码填到Halo控制台->设置->代码注入->全局head标签 中
这里打开共享链接,并将共享链接填到Halo控制台Umami设置的共享链接中,保存即可