0%

Plausible是一种轻量级、开源的网站分析工具。

1
2
3
4
5
6
7
8
9
10
11
ADMIN_USER_NAME=admin
ADMIN_USER_EMAIL=admin@yourdomain.com
ADMIN_USER_PWD=QAGvniNx7pEwYBYoHjD9AW3y8PmrQbJT

BASE_URL=https://plausible.yourdomain.com
SECRET_KEY_BASE=BwX9gsbCdYkMfRkaNecRTN4LVA4a8RyUjiENT5J93Dkmrg8LdZyabKBDDGqD43Wr
DATABASE_URL=postgres://postgres:postgres@plausible-postgres:5432/plausible
CLICKHOUSE_DATABASE_URL=http://plausible-clickhouse:8123/plausible

SMTP_HOST_ADDR=plausible-smtp
SMTP_HOST_PORT=25

更多配置参考:https://plausible.io/docs/self-hosting-configuration

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
version: '3.7'

services:
plausible:
image: plausible/analytics
restart: always
labels:
- traefik.http.routers.plausible.rule=Host(`plausible.yourdomain.com`)
- traefik.http.routers.plausible.entrypoints=websecure
- traefik.http.routers.plausible.service=plausible
- traefik.http.services.plausible.loadbalancer.server.port=8000
env_file: plausible.env
environment:
- GEOLITE2_COUNTRY_DB=/geoip/GeoLite2-Country.mmdb
volumes:
- geoip:/geoip:ro
plausible-init:
image: plausible/analytics
restart: on-failure
labels:
- traefik.enable=false
env_file: plausible.env
command: sh -c '/entrypoint.sh db createdb && /entrypoint.sh db migrate && /entrypoint.sh db init-admin'
plausible-postgres:
image: postgres:12-alpine
restart: always
labels:
- traefik.enable=false
environment:
- POSTGRES_PASSWORD=postgres
volumes:
- postgres:/var/lib/postgresql/data
plausible-clickhouse:
image: yandex/clickhouse-server:21.3 # 不能高于21.3
restart: always
labels:
- traefik.enable=false
volumes:
- clickhouse:/var/lib/clickhouse
plausible-smtp:
image: tianon/exim4
restart: always
labels:
- traefik.enable=false
plausible-geoipupdate:
image: maxmindinc/geoipupdate
labels:
- traefik.enable=false
environment:
- GEOIPUPDATE_ACCOUNT_ID=*** # https://dev.maxmind.com/geoip/geolite2-free-geolocation-data
- GEOIPUPDATE_LICENSE_KEY=***
- "GEOIPUPDATE_EDITION_IDS=GeoLite2-ASN GeoLite2-City GeoLite2-Country"
- GEOIPUPDATE_FREQUENCY=7
volumes:
- geoip:/usr/share/GeoIP

volumes:
postgres:
clickhouse:
geoip:
  1. start smtp & postgres & clockhouse & geoipupdate

    1
    2
    3
    docker-compose up -d plausible-smtp plausible-postgres plausible-clickhouse plausible-geoipupdate
    docker-compose exec plausible-clickhouse clickhouse-client --query 'CREATE DATABASE IF NOT EXISTS plausible;'
    docker-compose exec plausible-clickhouse clickhouse-client --query 'SHOW DATABASES;'
  2. plausible init

    1
    docker-compose up plausible-init
  3. run plausible

    1
    docker-compose up -d plausible

Verdaccio是一个 Node.js创建的轻量的私有npm proxy registry

Run Server

Run server with local storage

docker-compose.yaml文件内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
version: '3.7'

services:
verdaccio:
image: verdaccio/verdaccio
restart: always
labels:
- traefik.http.routers.verdaccio.rule=Host(`verdaccio.yourdomain.com`)
- traefik.http.routers.verdaccio.entrypoints=websecure
- traefik.http.routers.verdaccio.service=verdaccio
- traefik.http.services.verdaccio.loadbalancer.server.port=4873
volumes:
- storage:/verdaccio/storage

volumes:
storage:

最后,使用下面命令启动服务:

1
docker-compose up -d
Read more »

k6是一款高性能的负载测试工具,旨在在预生产和QA环境中以高负载运行测试,可使用JavaScript编写脚本。

1
2
3
4
5
6
7
8
9
10
11
12
import http from 'k6/http';
import { sleep, check } from 'k6';

export default function () {
const resp = http.get('https://httpbin.org/get');
check(resp, {
'status is 200': (r) => r.status === 200,
'less than 100ms': (r) => r.status === 200 && r.timings.duration <= 100,
'less than 500ms': (r) => r.status === 200 && r.timings.duration <= 500,
});
sleep(1);
}
1
docker run --rm -i loadimpact/k6 run --vus 100 --duration 300s - < script.js

Axios是一个基于promise的网络请求库,可以用于浏览器和node.jsAxios使用简单,包尺寸小且提供了易于扩展的接口。

1
2
3
4
import axios from "axios";
axios.get('/users').then(res => {
console.log(res.data);
});

特性

  • 从浏览器创建 XMLHttpRequests
  • 从 node.js 创建 http 请求
  • 支持 Promise API
  • 拦截请求和响应
  • 转换请求和响应数据
  • 取消请求
  • 自动转换JSON数据
  • 客户端支持防御XSRF
Read more »

  • 基于Vue.js
  • 开箱即用的提供给网站和应用程序的最先进的UI(遵循《Material指南》)
  • 开箱即用的对桌面和移动浏览器(包括iOS Safari!)的最佳支持
  • 通过与我们自己的CLI紧密集成,对每种构建模式(SPA、SSR、PWA、移动应用程序、桌面应用程序和浏览器扩展)提供了一流的支持,并提供了最佳的开发人员体验
  • 易于自定义(CSS)和可扩展(JS)
  • 这是最注重性能的框架
  • 自动tree shaking
  • 在我们的论坛和Discord聊天基础上的很棒的社区
  • 具有包括新功能在内的定期发布周期
  • 获得快速修复并听取社区的要求
  • 处理整个开发经验(甚至包括创建应用程序的图标和启动画面)

Quasar是基于Vue的第一解决方案,无论您是仅构建桌面网站、桌面应用还是移动应用,或者所有这些。

Read more »

Wikijs是一款开源的基于nodejs的轻量级wiki系统。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
version: '3.7'

services:
wiki:
image: requarks/wiki
restart: always
labels:
- traefik.http.routers.wiki.rule=Host(`wiki.yourdomain.com`)
- traefik.http.routers.wiki.entrypoints=websecure
- traefik.http.routers.wiki.service=wiki
- traefik.http.services.wiki.loadbalancer.server.port=3000
environment:
- DB_TYPE=postgres
- DB_HOST=postgres
- DB_PORT=5432
- DB_USER=postgres
- DB_PASS=postgres
- DB_NAME=wiki
volumes:
- content:/wiki/data/content

volumes:
content:

Matomo(之前叫Piwik),是一款开源的网站流量统计系统。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
version: '3.7'

services:
matomo:
image: matomo
restart: always
labels:
- traefik.http.routers.matomo.rule=Host(`matomo.yourdomain.com`)
- traefik.http.routers.matomo.entrypoints=websecure
- traefik.http.routers.matomo.service=matomo
- traefik.http.services.matomo.loadbalancer.server.port=80
environment:
- MATOMO_DATABASE_HOST=matomo-db
- MATOMO_DATABASE_USERNAME=root
- MATOMO_DATABASE_PASSWORD=E315AECBADFF41E38C57EEFD9E03FCBC
- MATOMO_DATABASE_DBNAME=matomo
volumes:
- html:/var/www/html
matomo-db:
image: mysql:5.7
restart: always
labels:
- traefik.enable=false
environment:
- MYSQL_ROOT_PASSWORD=E315AECBADFF41E38C57EEFD9E03FCBC
volumes:
- data:/var/lib/mysql

volumes:
html:
data:

限流简介

在不同场景下限流的定义也各不相同,可以是每秒请求数、每秒事务处理数、网络流量。

通常我们所说的限流指的是限制到达系统并发请求数,使得系统能够正常的处理部分用户的请求,来保证系统的稳定性。

为什么限流

接口无法控制调用方的行为。热点业务突发请求、恶意请求攻击等会带来瞬时的请求量激增,导致服务占用大量的CPU、内存等资源,使得其他正常的请求变慢或超时,甚至引起服务器宕机。

按照请求次数进行收费的接口需要根据客户支付的金额来限制客户可用的次数。

限流的行为

限流的行为指的就是在接口的请求数达到限流的条件时要触发的操作,一般可进行以下行为。

  • 拒绝服务:把多出来的请求拒绝掉
  • 服务降级:关闭或是把后端服务做降级处理,这样可以让服务有足够的资源来处理更多的请求
  • 特权请求:资源不够了,我只能把有限的资源分给重要的用户
  • 延时处理:一般会有一个队列来缓冲大量的请求,这个队列如果满了,那么就只能拒绝用户了,如果这个队列中的任务超时了,也要返回系统繁忙的错误了
  • 弹性伸缩:用自动化运维的方式对相应的服务做自动化的伸缩
Read more »