- Update the script to provide clear installation commands for mkcert on macOS and Ubuntu, improving user guidance for certificate setup.
65 lines
2.3 KiB
Bash
Executable File
65 lines
2.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# 用 mkcert 生成本地受信任 TLS 证书,供开发 nginx 配置使用。
|
|
#
|
|
# mkcert 会建一个"本地 CA"并装进系统/浏览器信任库,之后它签的证书在本机零警告。
|
|
# 局域网里其它设备(手机/别的电脑)要免警告,需把这个 CA 根证书也装到那台设备上
|
|
# (见末尾提示)。
|
|
#
|
|
# 用法:
|
|
# ./deploy/setup-certs.sh
|
|
# ./deploy/setup-certs.sh 192.168.1.20 dev.example.com
|
|
set -euo pipefail
|
|
|
|
CERT_DIR="$(cd "$(dirname "$0")" && pwd)/certs"
|
|
mkdir -p "$CERT_DIR"
|
|
|
|
# 1) 确认 mkcert 已安装
|
|
if ! command -v mkcert >/dev/null 2>&1; then
|
|
echo "✗ 未找到 mkcert。先安装:"
|
|
echo " macOS: brew install mkcert nss # nss 是给 Firefox 用的"
|
|
echo " Ubuntu: sudo apt update && sudo apt install -y mkcert libnss3-tools"
|
|
exit 1
|
|
fi
|
|
|
|
# 2) 安装本地 CA(幂等,已装过会跳过)
|
|
echo "▶ 安装/确认本地 CA(mkcert -install)…"
|
|
mkcert -install
|
|
|
|
# 3) 探测本机局域网 IP(其它设备靠这个 IP 访问)
|
|
LAN_IP="$(
|
|
ipconfig getifaddr en0 2>/dev/null \
|
|
|| ipconfig getifaddr en1 2>/dev/null \
|
|
|| hostname -I 2>/dev/null | awk '{print $1}' \
|
|
|| true
|
|
)"
|
|
if [ -z "$LAN_IP" ]; then
|
|
echo "⚠ 没探测到局域网 IP(en0/en1),证书将只覆盖 localhost。"
|
|
echo " 如需 LAN 访问,手动重跑:mkcert ... <你的IP>"
|
|
fi
|
|
|
|
# 4) 签证书:覆盖 localhost / 回环 / 局域网 IP / 一个好记的本地域名
|
|
HOSTS=(localhost 127.0.0.1 ::1 ai-video.local)
|
|
[ -n "$LAN_IP" ] && HOSTS+=("$LAN_IP")
|
|
for extra_host in "$@"; do
|
|
[ -n "$extra_host" ] && HOSTS+=("$extra_host")
|
|
done
|
|
|
|
echo "▶ 为以下名字签发证书:${HOSTS[*]}"
|
|
mkcert -cert-file "$CERT_DIR/ai-video.pem" \
|
|
-key-file "$CERT_DIR/ai-video-key.pem" \
|
|
"${HOSTS[@]}"
|
|
|
|
echo
|
|
echo "✓ 证书已生成:"
|
|
echo " $CERT_DIR/ai-video.pem"
|
|
echo " $CERT_DIR/ai-video-key.pem"
|
|
echo
|
|
echo "下一步:"
|
|
echo " • 本机访问: https://localhost 或 https://ai-video.local"
|
|
[ -n "$LAN_IP" ] && echo " • 局域网访问:https://$LAN_IP"
|
|
echo " • 别的设备要免警告,把本地 CA 根证书装到那台设备:"
|
|
echo " 根证书位置:\$(mkcert -CAROOT)/rootCA.pem → 拷到设备并信任"
|
|
echo
|
|
echo " ai-video.local 解析:在 /etc/hosts 加一行(可选)"
|
|
[ -n "$LAN_IP" ] && echo " $LAN_IP ai-video.local"
|