✅ 前置要求
- 一台已安装 Docker 和 Docker Compose 的服务器
- 基本的命令行操作知识
📚 参考阅读:Docker 与 Docker Compose 安装部署
第一部分:设置 Redis KV 存储
首先,我们需要设置用于存储计数器数据的 Redis 实例。
- 在你的服务器上创建一个新目录并进入:
1 2
| mkdir vercount-redis cd vercount-redis
|
- 创建
docker-compose.yml 文件:
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
| services: redis: image: registry.cn-heyuan.aliyuncs.com/lusyoe/redis:latest environment: - REDIS_PASSWORD=${REDIS_PASSWORD} command: redis-server --requirepass ${REDIS_PASSWORD} volumes: - ./data:/data restart: unless-stopped ports: - "6379:6379" healthcheck: test: ["CMD-SHELL", "redis-cli -a ${REDIS_PASSWORD} ping | grep PONG"] interval: 3s timeout: 3s retries: 5
serverless-redis-http: image: registry.cn-heyuan.aliyuncs.com/lusyoe/serverless-redis-http:latest ports: - '5002:80' environment: - SRH_MODE=env - SRH_TOKEN=${REST_TOKEN} - SRH_CONNECTION_STRING=redis://:${REDIS_PASSWORD}@redis:6379 restart: unless-stopped depends_on: - redis
|
- 创建
.env 文件:
1 2
| REDIS_PASSWORD=你的安全密码 REST_TOKEN=你的安全令牌
|
- 启动 Redis 服务:
第二部分:部署vercount应用
- 从 GitHub 克隆 Vercount 仓库:
1 2
| git clone https://github.com/EvanNotFound/vercount.git cd vercount
|
- 创建Dockerfile文件(我是通过Docker部署到自己服务器的没有使用托管平台):
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
| FROM registry.cn-heyuan.aliyuncs.com/lusyoe/node:18-alpine AS base
RUN npm config set registry https://registry.npmmirror.com/
WORKDIR /app
FROM base AS builder
COPY package.json package-lock.json* ./
RUN npm ci
COPY . .
RUN npm install -g prisma RUN prisma generate
RUN npm install -g terser RUN terser ./src/lib/client.js -o ./public/js/client.min.js --compress --timings --mangle --toplevel
RUN npm run build
FROM base AS runner WORKDIR /app
ENV NODE_ENV production
RUN addgroup --system --gid 1001 nodejs RUN adduser --system --uid 1001 nextjs RUN mkdir .next RUN chown nextjs:nodejs .next
COPY --from=builder /app/next.config.js ./ COPY --from=builder /app/public ./public COPY --from=builder /app/.next/standalone ./ COPY --from=builder /app/.next/static ./.next/static COPY --from=builder /app/prisma ./prisma
USER nextjs
EXPOSE 3000 ENV PORT 3000 ENV HOSTNAME "0.0.0.0"
CMD ["node", "server.js"]
|
💡 原项目使用的是 pnpm 构建,但我这里失败较多,因此改为 npm 构建。
- 修改配置文件
修改配置文件next.config.js:
1 2 3 4 5 6
| const nextConfig = { output: 'standalone', rewrites: async () => [ { source: "/js",
|
修改配置文件:src/app/layout.tsx
1 2 3 4 5
| export const metadata: Metadata = { title: "Vercount - 网站流量计数器", metadataBase: new URL("https://vercount.lusyoe.com"),
|
修改配置文件:src/lib/client.js
1 2 3 4 5
| const getBaseUrl = () => { return "https://vercount.lusyoe.com"; };
|
- 构建Docker镜像
1
| docker build . -t lusyoe/vercount:latest
|
- 部署应用
1 2 3 4 5 6 7 8
| docker run -dp 3000:3000 --name vercount \ --restart unless-stopped \ -e KV_URL=redis://:你的安全密码@你的服务器内网地址:6379 \ -e KV_REST_API_URL=http://你的服务器内网地址:5002 \ -e KV_REST_API_TOKEN=你安全令牌 \ -e NEXTAUTH_SECRET=你的secret随便填 \ -e NODE_ENV=production \ lusyoe/vercount:latest
|
第三部分:配置使用
- 在你的网站中添加脚本标签,记得替换为你自己的域名,比如:
1
| <script defer src="https://你的域名.com/js"></script>
|
- 在 HTML 中添加计数器元素:
1 2 3
| 阅读次数:<span id="vercount_value_page_pv">Loading</span> 访问次数:<span id="vercount_value_site_pv">Loading</span> 访客数量:<span id="vercount_value_site_uv">Loading</span>
|
✅ 完美兼容 busuanzi,如果之前是用的busuanzi也可以完全不用改span!
第四部分:查看Redis所有计数
这里再提供一个shell脚本用于查看Redis里面的所有计数:
redis-list.sh
1 2 3 4 5 6
| #!/bin/bash export REDISCLI_AUTH="你的安全密码" redis-cli -n 0 --scan --pattern "*" | while read key; do value=$(redis-cli -n 0 GET "$key") echo "Key: $key | Value: $value" done
|
📎 参考文章
GitHub - EvanNotFound/vercount: Busuanzi Compatible Website Counter Powered by Vercel + Redis