plausible 是个替代google analytics的开源服务,可以支持多站点、多用户,对资源的需求,相对较小。有个官网的demo 可以体验下。
准备
官网没有提供搭建服务所需要的软硬件环境,实际测试情况来看对硬件的要求是不高的。
1)一台512mb内存的vps,os为ubuntu20.04
2)为plausible服务申请一个域名,此处假设为analytics.xxx.com
3)服务上已经装好docker和docker-compose
搭建服务
1、搭建plausible官网服务
从github clone项目
$ git clone https://github.com/plausible/hosting $ cd hosting
生成base64随机数备用
$ openssl rand -base64 64
fDXqaBHwCwKivrc+HuMA7vsqICJ+yIKoRfHjzjFEilTNr9LgtFNnKwchs/CmJUDO
ZCO2jZne5TRfW9sBVac93Q==
修改配置文件plausible-conf.env,内容如下
[email protected] #你的用户邮箱,登录使用
ADMIN_USER_NAME=xxx #你的用户名
ADMIN_USER_PWD=xxxxxx #你的用户密码
BASE_URL=https://analytics.xxx.com
SECRET_KEY_BASE=fDXqaBHwCwKivrc+HuMA7vsqICJ+yIKoRfHjzjFEilTNr9LgtFNnKwchs/CmJUDOZCO2jZne5TRfW9sBVac93Q==
[email protected] #可以随便填写
SMTP_HOST_ADDR=smtp.google.com
[email protected]
SMTP_USER_PWD=建议使用google账号的gmail应用密码,而不是google账号的密码
SMTP_RETRIES=3
DISABLE_REGISTRATION=true # 个人使用就不需要注册用户了
DISABLE_SUBSCRIPTION=true
说明:
1)BASE_URL需要和后续配置的反向代理一致,否则plausible服务会一直告诉你visitors为0
2)SECRET_KEY_BASE使用openssl生成的结果,如果直接从terminal copy,会有换行符,需要去掉换行符,否则服务启动会报错
3)MAILER_EMAIL可以随便填写,但是发送邮件很可能会被邮件服务商认为是spam,需要在里面查找
4)使用gmail的smtp服务,建议参考 如何设置 SMTP Gmail 帐户以允许完整的谷歌授权
配置完成后,启动服务就好了
$ docker-compose up -d
使用 `docker stats` 看下资源占用情况,基本能接受

2、搭建nginx+certbot反向代理服务
nginx反向代理+certbot自签名的docker服务
docker-compose.yml
version: '3'
services:
nginx:
image: nginx:1.19.10-alpine
ports:
- "80:80"
- "443:443"
command: "/bin/sh -c 'while :; do sleep 6h & wait $${!}; nginx -s reload; done & nginx -g \"daemon off;\"'"
volumes:
- ./data/nginx:/etc/nginx/conf.d
- ./data/certbot/conf:/etc/letsencrypt
- ./data/certbot/www:/var/www/certbot
certbot:
image: certbot/certbot
entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew; sleep 12h & wait $${!}; done;'"
volumes:
- ./data/certbot/conf:/etc/letsencrypt
- ./data/certbot/www:/var/www/certbot
需要在./data/nginx目录下添加analytics.xxx.com的nginx配置文件app.conf
server {
listen 80;
server_name plausible.csdaomin.com;
location /.well-known/acme-challenge/ {
root /var/www/certbot;
}
location / {
return 301 https://$host$request_uri;
}
}
server {
listen 443 ssl;
server_name analytics.xxx.com;
ssl_certificate /etc/letsencrypt/live/analytics.xxx.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/analytics.xxx.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
location / {
proxy_pass http://127.0.0.1:8000; #for demo purposes
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
到这里还差一个certbot证书,要通过nginx的80端口验证,但是按照上面的配置,没有证书nginx会启动失败,从而无法验证证书。
处理方法见,Nginx and Let’s Encrypt with Docker in Less Than 5 Minutes,基本思路就是先生成一个假证书占位,先把nginx服务启动起来,再通过certbot生成证书,最后nginx reload配置。
$ curl -L https://raw.githubusercontent.com/wmnnd/nginx-certbot/master/init-letsencrypt.sh > init-letsencrypt.sh
$ chmod +x init-letsencrypt.sh
$ ./init-letsencrypt.sh
到此你就可以通过https://analytics.xxx.com访问你的服务了。
Be First to Comment