diff --git a/README.md b/README.md index 70db801c5..30a29bc93 100644 --- a/README.md +++ b/README.md @@ -95,7 +95,15 @@ https://certd.handfree.work/ 3. 【推荐】[1Panel面板方式部署](https://certd.docmirror.cn/guide/install/1panel/) 4. 【推荐】[雨云一键部署](https://app.rainyun.com/apps/rca/store/6646/?ref=NzExMDQ2) : 首充翻倍,每月仅需2.2元 [](https://app.rainyun.com/apps/rca/store/6646/?ref=NzExMDQ2) -5. 【不推荐】[源码方式部署 ](https://certd.docmirror.cn/guide/install/source/) + +5. 【推荐】[一键安装脚本](https://certd.docmirror.cn/guide/install/docker/)(自动安装 Docker,Certd): +```bash + curl -fsSL https://raw.atomgit.com/certd/certd/raw/v2/docker/run/install.sh | bash +``` + +6. 【不推荐】[源码方式部署 ](https://certd.docmirror.cn/guide/install/source/) + + #### Docker镜像说明: * 国内镜像地址: diff --git a/docker/run/install.sh b/docker/run/install.sh new file mode 100644 index 000000000..e530bc27d --- /dev/null +++ b/docker/run/install.sh @@ -0,0 +1,354 @@ +#!/bin/bash +set -e + +CERTD_VERSION="${CERTD_VERSION:-latest}" +INSTALL_DIR="${INSTALL_DIR:-/opt/certd}" +COMPOSE_FILE_URL="https://raw.atomgit.com/certd/certd/raw/v2/docker/run/docker-compose.yaml" +COMPOSE_FILE="$INSTALL_DIR/docker-compose.yaml" + +DOCKER_MIRROR="https://mirrors.aliyun.com" + +RED='\033[0;31m' +GREEN='\033[0;32m' +YELLOW='\033[1;33m' +NC='\033[0m' + +log_info() { + echo -e "${GREEN}[INFO]${NC} $1" +} + +log_warn() { + echo -e "${YELLOW}[WARN]${NC} $1" +} + +log_error() { + echo -e "${RED}[ERROR]${NC} $1" +} + +check_command() { + command -v "$1" >/dev/null 2>&1 +} + +get_local_ip() { + LOCAL_IP=$(ip route get 1.1.1.1 2>/dev/null | grep -oP 'src \K[^ ]+' | head -1) + if [ -z "$LOCAL_IP" ]; then + LOCAL_IP=$(hostname -I 2>/dev/null | awk '{print $1}') + fi + if [ -z "$LOCAL_IP" ]; then + LOCAL_IP="127.0.0.1" + fi + echo "$LOCAL_IP" +} + +get_public_ip() { + PUBLIC_IP=$(curl -s --max-time 5 https://api.ipify.org 2>/dev/null) + if [ -z "$PUBLIC_IP" ]; then + PUBLIC_IP=$(curl -s --max-time 5 https://checkip.amazonaws.com 2>/dev/null) + fi + if [ -z "$PUBLIC_IP" ]; then + PUBLIC_IP="" + fi + echo "$PUBLIC_IP" +} + +show_access_urls() { + LOCAL_IP=$(get_local_ip) + PUBLIC_IP=$(get_public_ip) + + echo "" + echo "==========================================" + log_info "安装完成!" + echo "==========================================" + echo "" + echo "访问地址:" + if [ -n "$PUBLIC_IP" ]; then + echo -e " ${GREEN}外网访问:${NC} http://$PUBLIC_IP:7001" + fi + echo -e " ${GREEN}局域网:${NC} http://$LOCAL_IP:7001" + echo "" + echo "配置文件: $COMPOSE_FILE" + echo "" + echo "常用命令:" + echo " cd $INSTALL_DIR" + echo " docker compose logs -f # 查看日志" + echo " docker compose restart # 重启服务" + echo " docker compose down # 停止服务" + echo "" +} + +detect_os() { + if [ -f /etc/os-release ]; then + . /etc/os-release + OS=$ID + VER=$VERSION_ID + elif [ -f /etc/centos-release ]; then + OS="centos" + elif [ -f /etc/redhat-release ]; then + OS="rhel" + else + OS="unknown" + fi +} + +check_docker() { + if check_command docker; then + DOCKER_VERSION=$(docker --version 2>/dev/null | awk '{print $3}' | tr -d ',') + log_info "Docker 已安装: $DOCKER_VERSION" + return 0 + else + log_warn "Docker 未安装" + return 1 + fi +} + +check_docker_compose() { + if check_command docker-compose; then + COMPOSE_VERSION=$(docker-compose --version 2>/dev/null | awk '{print $3}' | tr -d ',') + log_info "Docker Compose 已安装: $COMPOSE_VERSION" + return 0 + elif docker compose version >/dev/null 2>&1; then + log_info "Docker Compose (插件版) 已安装" + return 0 + else + log_warn "Docker Compose 未安装" + return 1 + fi +} + +install_docker_ubuntu() { + log_info "正在安装 Docker (Ubuntu/Debian)..." + apt-get update + apt-get install -y ca-certificates curl gnupg lsb-release + + mkdir -p /etc/apt/keyrings + curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/${OS}/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg 2>/dev/null || \ + curl -fsSL https://download.docker.com/linux/${OS}/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg + + echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.aliyun.com/docker-ce/linux/${OS} $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null + + apt-get update + apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin + systemctl enable docker + systemctl start docker + + log_info "Docker 安装完成" +} + +install_docker_centos() { + log_info "正在安装 Docker (CentOS/RHEL)..." + yum install -y yum-utils + yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo + yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin + systemctl enable docker + systemctl start docker + + log_info "Docker 安装完成" +} + +install_dockerrocky() { + log_info "正在安装 Docker (Rocky Linux/AlmaLinux)..." + dnf install -y yum-utils + dnf config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo + dnf install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin + systemctl enable docker + systemctl start docker + + log_info "Docker 安装完成" +} + +install_docker_debian() { + log_info "正在安装 Docker (Debian)..." + apt-get update + apt-get install -y ca-certificates curl gnupg2 + + mkdir -p /etc/apt/keyrings + curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/debian/gpg | gpg --armor -o /etc/apt/keyrings/docker.gpg 2>/dev/null || \ + curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --armor -o /etc/apt/keyrings/docker.gpg + + echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.aliyun.com/docker-ce/linux/debian $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list + + apt-get update + apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin + systemctl enable docker + systemctl start docker + + log_info "Docker 安装完成" +} + +install_docker() { + detect_os + log_info "检测到操作系统: $OS" + + case $OS in + ubuntu) + install_docker_ubuntu + ;; + debian) + install_docker_debian + ;; + centos) + install_docker_centos + ;; + rhel|rocky|almalinux) + install_dockerrocky + ;; + *) + log_error "不支持的操作系统: $OS" + log_info "请手动安装 Docker" + exit 1 + ;; + esac +} + +install_docker_compose_standalone() { + log_info "正在安装 Docker Compose (独立版本)..." + + COMPOSE_URLS=( + "https://get.daocloud.io/docker/compose/releases/download/v2.12.2/docker-compose-$(uname -s)-$(uname -m)" + "https://mirror.sjtu.edu.cn/github/docker/compose/releases/download/v2.12.2/docker-compose-$(uname -s)-$(uname -m)" + "https://github.com/docker/compose/releases/download/v2.12.2/docker-compose-$(uname -s)-$(uname -m)" + ) + + for url in "${COMPOSE_URLS[@]}"; do + log_info "尝试从: $url" + if curl -L "$url" -o /usr/local/bin/docker-compose 2>/dev/null; then + chmod +x /usr/local/bin/docker-compose + log_info "Docker Compose 安装完成" + return 0 + fi + log_warn "下载失败,尝试下一个源..." + done + + log_error "Docker Compose 安装失败" + return 1 +} + +install_docker_compose() { + if check_command docker && docker compose version >/dev/null 2>&1; then + log_info "Docker Compose 插件已可用" + return 0 + fi + + if check_command docker-compose; then + log_info "Docker Compose 独立版本已安装" + return 0 + fi + + install_docker_compose_standalone +} + +download_compose_file() { + log_info "正在下载 docker-compose.yaml..." + mkdir -p "$INSTALL_DIR" + + if curl -fsSL "$COMPOSE_FILE_URL" -o "$COMPOSE_FILE.tmp"; then + mv "$COMPOSE_FILE.tmp" "$COMPOSE_FILE" + log_info "docker-compose.yaml 已下载到 $COMPOSE_FILE" + + if [ "$CERTD_VERSION" != "latest" ]; then + sed -i "s|certd:latest|certd:$CERTD_VERSION|g" "$COMPOSE_FILE" + log_info "已修改镜像版本为: $CERTD_VERSION" + fi + else + log_error "下载失败,请检查网络连接" + exit 1 + fi +} + +start_certd() { + log_info "正在启动 Certd 容器..." + cd "$INSTALL_DIR" + + if docker compose -f "$COMPOSE_FILE" up -d 2>/dev/null; then + log_info "Certd 启动成功!" + elif docker-compose -f "$COMPOSE_FILE" up -d; then + log_info "Certd 启动成功!" + fi + + sleep 2 + docker ps --filter "name=certd" --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" +} + +show_usage() { + echo "用法: $0 [选项]" + echo "" + echo "选项:" + echo " -v, --version VERSION 指定 Certd 版本 (默认: latest)" + echo " -p, --path PATH 指定安装路径 (默认: /opt/certd)" + echo " -h, --help 显示帮助信息" + echo "" + echo "示例:" + echo " $0 # 使用默认配置安装" + echo " $0 -v 1.29.0 # 安装指定版本" + echo " $0 -p /data/certd # 安装到指定目录" +} + +main() { + echo "==========================================" + echo " Certd 一键安装脚本" + echo "==========================================" + echo "" + + while [[ $# -gt 0 ]]; do + case $1 in + -v|--version) + CERTD_VERSION="$2" + shift 2 + ;; + -p|--path) + INSTALL_DIR="$2" + COMPOSE_FILE="$INSTALL_DIR/docker-compose.yaml" + shift 2 + ;; + -h|--help) + show_usage + exit 0 + ;; + *) + log_error "未知选项: $1" + show_usage + exit 1 + ;; + esac + done + + log_info "Certd 版本: $CERTD_VERSION" + log_info "安装路径: $INSTALL_DIR" + echo "" + + DOCKER_INSTALLED=true + COMPOSE_INSTALLED=true + + if ! check_docker; then + DOCKER_INSTALLED=false + echo "" + read -p "是否安装 Docker? (y/n): " -n 1 -r + echo "" + if [[ $REPLY =~ ^[Yy]$ ]]; then + install_docker + else + log_error "Docker 是必需组件,脚本退出" + exit 1 + fi + fi + + if ! check_docker_compose; then + COMPOSE_INSTALLED=false + echo "" + read -p "是否安装 Docker Compose? (y/n): " -n 1 -r + echo "" + if [[ $REPLY =~ ^[Yy]$ ]]; then + install_docker_compose + else + log_error "Docker Compose 是必需组件,脚本退出" + exit 1 + fi + fi + + download_compose_file + start_certd + + show_access_urls +} + +main "$@" diff --git a/docs/guide/install/docker/index.md b/docs/guide/install/docker/index.md index 58591ccb5..dfc55df1b 100644 --- a/docs/guide/install/docker/index.md +++ b/docs/guide/install/docker/index.md @@ -1,6 +1,19 @@ # Docker方式部署 -## 一、安装 +## 一、 一键脚本安装(推荐) + +如果您的服务器未安装 Docker,该脚本会自动为您安装 Docker 和 Docker Compose,并启动 Certd 容器。 + +```bash +curl -fsSL https://raw.atomgit.com/certd/certd/raw/v2/docker/run/install.sh | bash +``` + +> 支持 Ubuntu、Debian、CentOS、Rocky Linux、AlmaLinux 等主流发行版。 +> 如需指定版本,可使用参数:`-v 1.29.0` +> 如需指定数据保存路径,可使用参数:`-p /data/certd` + + +## 二、手动安装 ### 1. 环境准备 diff --git a/docs/guide/plugins/access.md b/docs/guide/plugins/access.md index c37551af6..ceaa69302 100644 --- a/docs/guide/plugins/access.md +++ b/docs/guide/plugins/access.md @@ -36,45 +36,48 @@ | 32.| **Gcore** | Gcore | | 33.| **Github授权** | | | 34.| **godaddy授权** | | -| 35.| **金山云授权** | | -| 36.| **FTP授权** | | -| 37.| **七牛OSS授权** | | -| 38.| **腾讯云COS授权** | 腾讯云对象存储授权,包含地域和存储桶 | -| 39.| **s3/minio授权** | S3/minio oss授权 | -| 40.| **namesilo授权** | | -| 41.| **Next Terminal 授权** | 用于访问 Next Terminal API 的授权配置 | -| 42.| **1panel授权** | 账号和密码 | -| 43.| **支付宝** | | -| 44.| **白山云授权** | | -| 45.| **宝塔云WAF授权** | 用于连接和管理宝塔云WAF服务的授权配置 | -| 46.| **cdnfly授权** | | -| 47.| **k8s授权** | | -| 48.| **括彩云cdn授权** | 括彩云CDN,每月免费30G,[注册即领](https://kuocaicdn.com/register?code=8mn536rrzfbf8) | -| 49.| **LeCDN授权** | | -| 50.| **lucky** | | -| 51.| **猫云授权** | | -| 52.| **plesk授权** | | -| 53.| **长亭雷池授权** | | -| 54.| **群晖登录授权** | | -| 55.| **uniCloud** | unicloud授权 | -| 56.| **微信支付** | | -| 57.| **易盾rcdn授权** | 易盾CDN,每月免费30G,[注册即领](https://rhcdn.yiduncdn.com/register?code=8mn536rrzfbf8) | -| 58.| **易发云短信** | sms.yfyidc.cn/ | -| 59.| **易盾DCDN授权** | https://user.yiduncdn.com | -| 60.| **易支付** | | -| 61.| **proxmox** | | -| 62.| **Spaceship.com 授权** | Spaceship.com API 授权插件 | -| 63.| **UCloud授权** | 优刻得授权 | -| 64.| **又拍云** | | -| 65.| **网宿授权** | | -| 66.| **西部数码授权** | | -| 67.| **我爱云授权** | 我爱云CDN | -| 68.| **新网授权(代理方式)** | | -| 69.| **新网授权** | | -| 70.| **新网互联授权** | 仅支持代理账号,ip需要加入白名单 | -| 71.| **Zenlayer授权** | Zenlayer授权 | -| 72.| **GoEdge授权** | | -| 73.| **雨云授权** | https://app.rainyun.com/ | +| 35.| **HiPM DNSMgr** | HiPM DNSMgr API Token 授权 | +| 36.| **金山云授权** | | +| 37.| **FTP授权** | | +| 38.| **七牛OSS授权** | | +| 39.| **腾讯云COS授权** | 腾讯云对象存储授权,包含地域和存储桶 | +| 40.| **s3/minio授权** | S3/minio oss授权 | +| 41.| **namesilo授权** | | +| 42.| **Next Terminal 授权** | 用于访问 Next Terminal API 的授权配置 | +| 43.| **Nginx Proxy Manager 授权** | 用于登录 Nginx Proxy Manager,并为代理主机证书部署提供授权。 | +| 44.| **1panel授权** | 账号和密码 | +| 45.| **支付宝** | | +| 46.| **白山云授权** | | +| 47.| **宝塔云WAF授权** | 用于连接和管理宝塔云WAF服务的授权配置 | +| 48.| **cdnfly授权** | | +| 49.| **k8s授权** | | +| 50.| **括彩云cdn授权** | 括彩云CDN,每月免费30G,[注册即领](https://kuocaicdn.com/register?code=8mn536rrzfbf8) | +| 51.| **LeCDN授权** | | +| 52.| **lucky** | | +| 53.| **猫云授权** | | +| 54.| **plesk授权** | | +| 55.| **长亭雷池授权** | | +| 56.| **群晖登录授权** | | +| 57.| **uniCloud** | unicloud授权 | +| 58.| **微信支付** | | +| 59.| **易盾rcdn授权** | 易盾CDN,每月免费30G,[注册即领](https://rhcdn.yiduncdn.com/register?code=8mn536rrzfbf8) | +| 60.| **易发云短信** | sms.yfyidc.cn/ | +| 61.| **易盾DCDN授权** | https://user.yiduncdn.com | +| 62.| **易支付** | | +| 63.| **proxmox** | | +| 64.| **Spaceship.com 授权** | Spaceship.com API 授权插件 | +| 65.| **Technitium DNS Server** | Technitium DNS Server 自建DNS服务器授权 | +| 66.| **UCloud授权** | 优刻得授权 | +| 67.| **又拍云** | | +| 68.| **网宿授权** | | +| 69.| **西部数码授权** | | +| 70.| **我爱云授权** | 我爱云CDN | +| 71.| **新网授权(代理方式)** | | +| 72.| **新网授权** | | +| 73.| **新网互联授权** | 仅支持代理账号,ip需要加入白名单 | +| 74.| **Zenlayer授权** | Zenlayer授权 | +| 75.| **GoEdge授权** | | +| 76.| **雨云授权** | https://app.rainyun.com/ |