Skip to content

搭建plausible服务

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访问你的服务了。

参考

plausible官网的self hosted文档

如何设置 SMTP Gmail 帐户以允许完整的谷歌授权

Nginx and Let’s Encrypt with Docker in Less Than 5 Minutes

Published in自建服务

Be First to Comment

Leave a Reply

Your email address will not be published.