本指南用于服务器部署企业微信自建应用,配置 HTTPS 证书、Nginx、网页授权、JS-SDK、可信 IP、以及通过 JupyterLab 调试接口和 FRP 实现外网访问。
第一部分:HTTPS 证书申请与 Nginx 配置
1. 申请域名
可通过服务商(如阿里云、腾讯云、Cloudflare 等)注册一个用于内部系统的域名,例如:your-domain.com
2. 配置 DNS 解析
将 your-domain.com
的 A 记录指向你的服务器公网 IP。
3. 安装 Certbot 并申请 HTTPS 证书
sudo apt update
sudo apt install certbot python3-certbot-nginx -y
申请证书:
sudo certbot --nginx -d your-domain.com
证书默认会被安装到:
/etc/letsencrypt/live/your-domain.com/
PS:
证书申请完成以后会添加默认的 Nginx 配置。
4. Certbot 申请证书后自动生成的 Nginx 配置在哪?
使用 sudo certbot --nginx -d your-domain.com
命令后,Certbot 会做两件事:
- 申请证书
- 自动修改 Nginx 配置 以启用 HTTPS 支持,并使用申请到的证书
通常会自动生成/修改以下两个位置的文件:
类型 | 路径 | 说明 |
---|---|---|
主配置 | /etc/nginx/sites-available/default |
默认站点配置文件(已被 certbot 修改) |
证书路径 | /etc/letsencrypt/live/your-domain.com/ |
证书文件目录,包含 .pem 文件 |
链接文件 | /etc/nginx/sites-enabled/default |
指向 sites-available/default 的软链接 |
5. 配置 Nginx
编辑 Nginx 配置文件(推荐单独建立):
# /etc/nginx/sites-available/yourapp
server {
listen 443 ssl http2;
server_name your-domain.com;
ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
location / {
proxy_pass http://127.0.0.1:80; # 转发到本地服务
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
server {
listen 80;
server_name your-domain.com;
return 301 https://$host$request_uri;
}
启用配置并重启 Nginx:
sudo ln -s /etc/nginx/sites-available/yourapp /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl restart nginx
PS:
如果之前没有创建 /etc/nginx/sites-available/yourapp
文件,那么会出现警告,并且使用的是申请证书默认追加的配置(/etc/nginx/sites-enabled/default),建议删除追加的 your-domain.com
配置。
6. 设置自动续期 & 重载 Nginx
Let’s Encrypt 的证书有效期是 90 天,Certbot 会自动续期,但你要确保续期后能让 nginx 重新加载。
手动测试续期任务是否正常:
sudo certbot renew --dry-run
配置 Nginx 自动 reload(只需一次):
创建一个钩子脚本:
sudo nano /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh
内容如下:
#!/bin/bash
systemctl reload nginx
保存后添加执行权限:
sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/reload-nginx.sh
这样以后自动续期后 Nginx 会立即 reload。
第二部分:配置企业微信自建应用
1. 创建应用
企业微信后台 →【应用管理】→【创建应用】
- 填写名称、上传图标、设置可见范围(不要选择个人,不然获取不到用户信息)
2. 设置网页授权及 JS-SDK
授权域名设置:
企业微信后台 →【应用管理】→ 选择应用 → 【网页授权及 JS-SDK】
- 添加
your-domain.com
⚠️ 注意:必须先完成“域名验证”才能添加
3. 域名验证操作
下载验证文件(如 WW_verify_BSOkbabMjTbIiT0M.txt
)
上传到服务器域名根目录(默认是 /var/www/html
),确保能访问:
http://your-domain.com/WW_verify_BSOkbabMjTbIiT0M.txt
Nginx 示例配置支持方式:
location ~* ^/WW_verify_.*\.txt$ {
root /var/www/html; # 替换为验证文件存放路径
try_files $uri =404;
}
验证成功后,再次设置网页授权域名即可通过。
4. 设置可信 IP
企业微信后台 →【企业可信 IP】→ 添加你的服务器公网 IP
5. 设置 Web 网页授权回调域
授权回调域输入域名即可:
your-domain.com
可用于嵌入你部署的 Web 页面或系统界面。
6. 设置应用主页
设置该应用点击后的跳转页面:
https://your-domain.com/index.html
可用于嵌入你部署的 Web 页面或系统界面,也可以先输入其他网站测试。
第三部分:JupyterLab 调试企业微信 API
1. 安装 JupyterLab
pip install jupyterlab
jupyter lab --ip=0.0.0.0 --port=8888 --allow-root
2. 浏览器访问
http://your-domain.com:8888/?token=xxxxxx
或设置密码访问。
3. Python 调用企业微信接口
import requests
import json
# 企业微信的 CorpID 和 Secret
CORP_ID = '你的企业微信 CorpID' # 企业微信 CorpID
SECRET = '你的企业微信 Secret' # 企业微信 Secret
# 获取 access_token 的 URL
url = f'https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={
CORP_ID}&corpsecret={
SECRET}'
def get_access_token():
response = requests.get(url)
data = response.json()
if 'access_token' in data:
return data['access_token']
else:
print("Error:", data)
return None
# 获取并打印 access_token
access_token = get_access_token()
if access_token:
print("Access Token:", access_token)
# 发送消息
url = f"https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token={
access_token}"
data = {
"touser": "@all",
"msgtype": "text",
"agentid": 1000002,
"text": {
"content": "Hello from Python!"
},
"safe": 0
}
resp = requests.post(url, json=data)
print(resp.json())
第四部分:通过 FRP 实现外网访问本地服务
适用于内网部署但需公网可访问的 Web 服务。
1. 服务端 frps(推荐使用 Docker)
docker run -d --name frps \
-v /etc/frp/frps.ini:/etc/frp/frps.ini \
-p 7000:7000 -p 7500:7500 \
snowdreamtech/frps
2. 客户端 frpc(Windows 示例)
配置文件 frpc.ini
示例:
[common]
server_addr = your-frps-server.com
server_port = 7000
token = your_token
[web]
type = http
local_port = 8000
custom_domains = your-domain.com
通过 FRP,即可将本地端口 8000 映射为公网访问。
总结流程图(简要):
[域名注册 & HTTPS证书]
↓
[Nginx配置 + 反向代理]
↓
[企业微信创建应用]
↓
[验证域名 ➜ 设置网页授权 + 可信IP]
↓
[部署业务页面 ➜ 设置应用主页 URL]
↓
[JupyterLab 调试API / Python SDK]
↓
[使用 FRP 代理内网服务,如需]
如需对接扫码登录、打卡、消息推送等具体 API,可结合企业微信官方 API 文档继续开发。