? 查看快捷键菜单确保你系统里已经有 Node.js 环境。
克隆代码:
git clone https://github.com/jason5ng32/MyIP.git
安装与编译:
npm install && npm run build
运行:
npm start
程序会运行在 18966 端口。
点击顶部的部署到 Docker 按钮,即可完成部署,又或者,直接输入下面的命令:
docker run -d -p 18966:18966 --name myip --restart always jason5ng32/myip:latest
你可以不添加环境变量直接使用,但是如果你想使用一些高级功能,可以添加下面的环境变量:
| 变量名 | 是否必须 | 默认值 | 说明 |
|---|---|---|---|
BACKEND_PORT | 否 | "11966" | 程序后端部分的运行端口 |
FRONTEND_PORT | 否 | "18966" | 程序前端部分的运行端口 |
SECURITY_RATE_LIMIT | 否 | "0" | 控制每 60 分钟一个 IP 可以对后端服务器请求的次数(设置为 0 则为不限制) |
SECURITY_DELAY_AFTER | 否 | "0" | 控制每 20 分钟一个 IP 的前 X 次请求不受速度限制,超过 X 次后会逐次增加延迟 |
SECURITY_BLACKLIST_LOG_FILE_PATH | 否 | "logs/blacklist-ip.log" | 路径设置。记录由 SECURITY_RATE_LIMIT 开启后,触发限制的 IP 列表 |
GOOGLE_MAP_API_KEY= | 否 | "" | Google 地图的 API Key,用于展示 IP 所在地的地图 |
ALLOWED_DOMAINS | 否 | "" | 允许访问的域名,用逗号分隔,用于防止后端 API 被滥用 |
IPCHECKING_API_KEY | 否 | "" | IPCheck.ing 的 API Key,用于获取精准的 IP 归属地信息 |
IPINFO_API_TOKEN | 否 | "" | IPInfo.io 的 API Token,用于通过 IPInfo.io 获取 IP 归属地信息 |
IPAPIIS_API_KEY | 否 | "" | IPAPI.is 的 API Key,用于通过 IPAPI.is 获取 IP 归属地信息 |
IP2LOCATION_API_KEY | 否 | "" | IP2Location.io 的 API Key,用于通过 IP2Location.io 获取 IP 归属地信息 |
CLOUDFLARE_API | 否 | "" | Cloudflare 的 API Key,用于通过 Cloudflare 获取 AS 系统的信息 |
MAC_LOOKUP_API_KEY | 否 | "" | MAC 查询的 API Key,用于通过 MAC Lookup 获取 MAC 地址的归属信息 |
IPCHECKING_API_ENDPOINT | 是 | "" | IPCheck.ing 的 API 端点 URL |
VITE_GOOGLE_ANALYTICS_ID | 是 | "" | Google Analytics 的 ID,用于统计访问量 |
VITE_CURL_IPV4_DOMAIN | 否 | "" | 为用户提供 CURL API 的 IPv4 域名 |
VITE_CURL_IPV6_DOMAIN | 否 | "" | 为用户提供 CURL API 的 IPv6 域名 |
VITE_CURL_IPV64_DOMAIN | 否 | "" | 为用户提供 CURL API 的双网络栈域名 |
需要注意的是,如果 CURL 系列的环境变量任意一个缺失,都不会启用 CURL API。
创建环境变量:
cp .env.example .env
修改 .env 里的内容,比如:
BACKEND_PORT=11966
FRONTEND_PORT=18966
GOOGLE_MAP_API_KEY="YOUR_KEY_HERE"
ALLOWED_DOMAINS="example.com"
IPCHECKING_API="YOUR_KEY_HERE"
然后重新启动后端服务。
你可以在运行 Docker 的时候,添加环境变量,比如:
docker run -d -p 18966:18966 \
-e GOOGLE_MAP_API_KEY="YOUR_KEY_HERE" \
-e ALLOWED_DOMAINS="example.com" \
-e IPCHECKING_API="YOUR_TOKEN_HERE" \
--name myip \
jason5ng32/myip:latest
如果你在通过代理上网,可以考虑在你的代理配置里,增加下面的规则(请根据你使用的客户端进行修改),这样就可以实现同时查询真实 IP 和代理后的 IP:
# IP Testing
IP-CIDR,1.0.0.2/32,Proxy,no-resolve
IP-CIDR6,2606:4700:4700::1111/128,Proxy,no-resolve
DOMAIN,4.ipcheck.ing,DIRECT
DOMAIN,6.ipcheck.ing,DIRECT
# Rule Testing
DOMAIN,ptest-1.ipcheck.ing,Proxy1
DOMAIN,ptest-2.ipcheck.ing,Proxy2
DOMAIN,ptest-3.ipcheck.ing,Proxy3
DOMAIN,ptest-4.ipcheck.ing,Proxy4
DOMAIN,ptest-5.ipcheck.ing,Proxy5
DOMAIN,ptest-6.ipcheck.ing,Proxy6
DOMAIN,ptest-7.ipcheck.ing,Proxy7
DOMAIN,ptest-8.ipcheck.ing,Proxy8
在 V2.0 发布的时候,我曾经说:这个程序的 70% 的代码不是我写的,是通过 ChatGPT 写的。大概来回 90 个回合,外加一些细微的手动修改,完成了全部代码。
当然,程序的架构和 UI 还是需要自己进行设计。
随着 V3.0 及后续的代码发布,ChatGPT 帮助我写代码的比例逐渐下降,估计现在在 40% - 50% 之间。相反,在这个过程中,我从完全不会 JavaScript 和 Vue ,与 AI 结对编程后,我现在已经能看懂大部分的 JS 代码了,并且也已经能手撸一些。
感谢 AI ,给了我这样一个失业产品经理快速学习编程的机会。
作为一个开源项目,我非常感谢以下赞助者对我的支持: