<?xml version="1.0" encoding="utf-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><title>Yusoon - ZBlog</title><link>https://blog.bee1001.com/</link><description>天下共石，吾独八斗!</description><item><title>Ubuntu系统 用acme.sh自动签发由腾讯云托管域名的泛域名证书</title><link>https://blog.bee1001.com/?id=46</link><description>&lt;h4 id=&quot;h4-1-acme-sh&quot;&gt;&lt;a name=&quot;1. 安装 acme.sh&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;1. 安装 acme.sh&lt;/h4&gt;&lt;pre&gt;&lt;code&gt;# 1. 从 Gitee 克隆 acme.sh 源码
git clone https://gitee.com/neilpang/acme.sh.git

# 2. 进入目录并执行安装
cd acme.sh
./acme.sh --install -m 2497209071@qq.com

# 3. 回到用户目录并让命令生效
cd ~
source ~/.bashrc&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;h4-2-ca-api-&quot;&gt;&lt;a name=&quot;2. 设置默认 CA 并导出腾讯云 API 密钥&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;2. 设置默认 CA 并导出腾讯云 API 密钥&lt;/h4&gt;&lt;p&gt;为了确保证书来自 Let’s Encrypt，并让 acme.sh 能调用腾讯云 API，需要进行以下设置。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 将默认证书颁发机构设为 Let's Encrypt (acme.sh 默认可能是 ZeroSSL)[citation:4][citation:8]
acme.sh --set-default-ca --server letsencrypt

# 导出腾讯云的 API 密钥，用于 DNS 验证
export Tencent_SecretId=&quot;你的SecretId&quot;
export Tencent_SecretKey=&quot;你的SecretKey&quot;&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;h4-3-dns-&quot;&gt;&lt;a name=&quot;3. 重新签发证书 (DNS 验证)&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;3. 重新签发证书 (DNS 验证)&lt;/h4&gt;&lt;p&gt;使用 –issue 命令，配合 –dns dns_tencent 参数，为你的域名重新签发证书。请将 example.com 替换为你自己的域名。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 同时为 example.com 和 *.example.com 申请证书，实现泛域名支持
acme.sh --issue --dns dns_tencent -d example.com -d '*.example.com'&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;h4-4-nginx-&quot;&gt;&lt;a name=&quot;4. 安装证书到 Nginx 目录&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;4. 安装证书到 Nginx 目录&lt;/h4&gt;&lt;p&gt;这一步很重要，它会将新签发的证书和私钥复制到你指定的、Nginx 实际读取的目录，并设置续期后自动重载 Nginx 的命令。请务必使用 –install-cert 命令，而不是直接复制 ~/.acme.sh/ 下的文件，因为后者无法享受自动部署的便利。&lt;/p&gt;
&lt;p&gt;先确保你的 Nginx 证书存放目录存在，例如 /etc/nginx/ssl。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;acme.sh --install-cert -d example.com \
--key-file       /etc/nginx/ssl/example.com.key \
--fullchain-file /etc/nginx/ssl/example.com.pem \
--reloadcmd      &quot;systemctl reload nginx&quot;&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;h4-5-nginx&quot;&gt;&lt;a name=&quot;5. 确认并重启 Nginx&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;5. 确认并重启 Nginx&lt;/h4&gt;&lt;p&gt;虽然 Nginx 配置没变，但为了确保一切正常，可以手动重载一次，然后测试 acme.sh 的自动续期流程。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 重载 Nginx
sudo systemctl reload nginx

# 手动模拟一次续期，验证所有配置是否正确 (不会真的续期)
acme.sh --renew -d example.com --force&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;h4-6-&quot;&gt;&lt;a name=&quot;6. 查看当前定时任务&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;6. 查看当前定时任务&lt;/h4&gt;&lt;p&gt;你可以用以下命令查看具体的 cron 配置：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;crontab -l | grep acme&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;通常你会看到类似这样的输出：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# 每天凌晨 0 点检测一次
0 0 * * * &quot;/home/ubuntu/.acme.sh&quot;/acme.sh --cron --home &quot;/home/ubuntu/.acme.sh&quot; &amp;gt; /dev/null&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;配置默认当证书剩余有效期 &amp;lt; 30 天 时，才会执行续期，如果需要修改触发条件，如证书剩余有效期 &amp;lt; 5 天触发，则可以通过一下命令修改：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;# crontab -e进入编辑模式
crontab -e

# 每天凌晨 3 点检测一次，&amp;lt; 5天触发续期
0 3 * * * &quot;/home/ubuntu/.acme.sh&quot;/acme.sh --cron --home &quot;/home/ubuntu/.acme.sh&quot; --days 5 &amp;gt; /dev/null
# 保存退出即可&lt;/code&gt;&lt;/pre&gt;</description><pubDate>Tue, 08 Sep 2026 11:42:04 +0800</pubDate></item><item><title>ubuntu 快速安装docker和compose插件</title><link>https://blog.bee1001.com/?id=45</link><description>&lt;pre&gt;&lt;code&gt;# 1. 安装docker，使用docker -v查看版本号
sudo apt install docker.io

# 2. 安装compose插件
sudo apt update
sudo apt install docker-compose -y
# 安装成功后显示安装的是docker-compose-v2，使用docker compose version可以查看版本号

# 3. 检查docker是否开机自启
sudo systemctl is-enabled docker

# 4. 设置开机自启
sudo systemctl enable docker --now&lt;/code&gt;&lt;/pre&gt;</description><pubDate>Mon, 07 Sep 2026 10:07:15 +0800</pubDate></item><item><title>openEuler 安装 Docker 的正确方法</title><link>https://blog.bee1001.com/?id=44</link><description>&lt;h3 id=&quot;h3-1-docker-docker-compose&quot;&gt;&lt;a name=&quot;1、官方仓库 一键安装docker和docker-compose&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;1、官方仓库 一键安装docker和docker-compose&lt;/h3&gt;&lt;pre&gt;&lt;code&gt;dnf install -y docker-engine docker-compose &amp;amp;&amp;amp; \
systemctl start docker &amp;amp;&amp;amp; \
systemctl enable docker &amp;amp;&amp;amp; \
docker --version&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;官方版本较低，可使用华为云源安装最新版&lt;/p&gt;
&lt;h3 id=&quot;h3-2-docker-&quot;&gt;&lt;a name=&quot;2、安装新版 Docker（使用华为云源）&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;2、安装新版 Docker（使用华为云源）&lt;/h3&gt;&lt;pre&gt;&lt;code&gt;# 安装工具
dnf install -y yum-utils

# 添加 Docker CE 仓库（使用 CentOS 8 源，openEuler 兼容）
cat &amp;gt; /etc/yum.repos.d/docker-ce.repo &amp;lt;&amp;lt;'EOF'
[docker-ce-stable]
name=Docker CE Stable - $basearch
baseurl=https://repo.huaweicloud.com/docker-ce/linux/centos/8/$basearch/stable
enabled=1
gpgcheck=1
gpgkey=https://repo.huaweicloud.com/docker-ce/linux/centos/gpg

[docker-ce-stable-debuginfo]
name=Docker CE Stable - Debuginfo $basearch
baseurl=https://repo.huaweicloud.com/docker-ce/linux/centos/8/debug-$basearch/stable
enabled=0
gpgcheck=1
gpgkey=https://repo.huaweicloud.com/docker-ce/linux/centos/gpg
EOF

# 清理缓存并安装
dnf clean all
dnf makecache
dnf install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin

# 启动并设置开机自启
systemctl start docker
systemctl enable docker

# 验证版本
docker --version
docker compose version&lt;/code&gt;&lt;/pre&gt;</description><pubDate>Wed, 15 Jul 2026 14:48:38 +0800</pubDate></item><item><title>Linux中避免rm -rf 误删操作</title><link>https://blog.bee1001.com/?id=42</link><description>&lt;h4 id=&quot;h4--profile-d-&quot;&gt;&lt;a name=&quot;一、先清理旧方案（如果之前建过 profile.d 的脚本）&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;一、先清理旧方案（如果之前建过 profile.d 的脚本）&lt;/h4&gt;&lt;pre&gt;&lt;code&gt;# 如果之前建过就删，没建过执行也无害
/bin/rm -f /etc/profile.d/safe_rm.sh

# 清掉当前 shell 里可能残留的 alias / hash
unalias rm 2&amp;gt;/dev/null
hash -r&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;h4--c-rm-&quot;&gt;&lt;a name=&quot;二、创建方案 C 的 rm 包装脚本&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;二、创建方案 C 的 rm 包装脚本&lt;/h4&gt;&lt;pre&gt;&lt;code&gt;cat &amp;gt; /usr/local/bin/rm &amp;lt;&amp;lt;'EOF'
#!/bin/bash
# 安全 rm 包装：只拦截真正危险的删除操作
# 保留：rm /tmp/xxx、rm /var/log/*.log 等正常绝对路径操作
# 拦截：rm -rf /、rm -rf /*、rm -rf /.*、--no-preserve-root 等

for p in &quot;$@&quot;; do
    # 跳过选项参数（-f, -r, -rf, --preserve-root 等）
    [[ &quot;$p&quot; == -* ]] &amp;amp;&amp;amp; continue

    # 1) 根目录本身
    if [[ &quot;$p&quot; == &quot;/&quot; ]]; then
        echo -e &quot;\033[31m[安全拦截] 禁止删除根目录：$p\033[0m&quot; &amp;gt;&amp;amp;2
        exit 1
    fi

    # 2) 根目录下的通配删除，如 /*  /.*  /[a-z]*
    #    特征：以 / 开头，剩余部分不含 / 但含 * 或 ? 或 [
    if [[ &quot;$p&quot; =~ ^/[^/]*[*?\[] ]]; then
        echo -e &quot;\033[31m[安全拦截] 禁止删除根目录通配：$p\033[0m&quot; &amp;gt;&amp;amp;2
        exit 1
    fi
done

# 3) 禁止 --no-preserve-root（rm -rf / 的经典危险写法）
for a in &quot;$@&quot;; do
    if [[ &quot;$a&quot; == &quot;--no-preserve-root&quot; ]]; then
        echo -e &quot;\033[31m[安全拦截] 禁止使用 --no-preserve-root\033[0m&quot; &amp;gt;&amp;amp;2
        exit 1
    fi
done

exec /bin/rm &quot;$@&quot;
EOF

chmod +x /usr/local/bin/rm&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;h4--shell-&quot;&gt;&lt;a name=&quot;三、让当前 shell 立即识别新脚本&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;三、让当前 shell 立即识别新脚本&lt;/h4&gt;&lt;pre&gt;&lt;code&gt;hash -r
type rm&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;期望输出：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;rm is /usr/local/bin/rm&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;h4--&quot;&gt;&lt;a name=&quot;四、验证&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;四、验证&lt;/h4&gt;&lt;pre&gt;&lt;code&gt;# 应被拦截
rm -rf /
rm -rf /*
rm -rf /.*
rm -rf --no-preserve-root /

# 应正常执行
mkdir -p /tmp/safetest &amp;amp;&amp;amp; touch /tmp/safetest/a.txt
rm -rf /tmp/safetest
rm -f /var/log/dmesg.old 2&amp;gt;/dev/null   # 若存在则删，正常&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;被拦截时你会看到红色提示，比如：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[安全拦截] 禁止删除根目录：/&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;h4--path-&quot;&gt;&lt;a name=&quot;五、确认 PATH 顺序（关键）&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;五、确认 PATH 顺序（关键）&lt;/h4&gt;&lt;pre&gt;&lt;code&gt;echo $PATH&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;你的输出是：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;/usr/local/bin 排在 /usr/bin 前面 ✅，脚本会被优先调用，无需再改 PATH。&lt;/p&gt;
&lt;h4 id=&quot;h4--&quot;&gt;&lt;a name=&quot;六、最终状态检查清单&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;六、最终状态检查清单&lt;/h4&gt;&lt;pre&gt;&lt;code&gt;# 1. 无 alias 干扰
alias | grep rm          # 应无输出

# 2. rm 指向新脚本
type rm                  # 应为 /usr/local/bin/rm

# 3. 脚本存在且可执行
ls -l /usr/local/bin/rm  # 应有 x 权限

# 4. 旧脚本已删
ls /etc/profile.d/safe_rm.sh  # 应显示 No such file&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;全部符合就完成了。&lt;/p&gt;
&lt;h4 id=&quot;h4--&quot;&gt;&lt;a name=&quot;七、回滚（万一需要）&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;七、回滚（万一需要）&lt;/h4&gt;&lt;pre&gt;&lt;code&gt;/bin/rm -f /usr/local/bin/rm
hash -r&lt;/code&gt;&lt;/pre&gt;</description><pubDate>Tue, 14 Apr 2026 16:24:39 +0800</pubDate></item><item><title>CentOS 上一键创建 2GB Swap 虚拟内存</title><link>https://blog.bee1001.com/?id=41</link><description>&lt;h4 id=&quot;h4-1-swap-2gb-&quot;&gt;&lt;a name=&quot;1. 创建 Swap 文件（2GB）&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;1. 创建 Swap 文件（2GB）&lt;/h4&gt;&lt;pre&gt;&lt;code&gt;dd if=/dev/zero of=/swapfile bs=1M count=2048&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;h4-2-&quot;&gt;&lt;a name=&quot;2. 设置权限（必须）&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;2. 设置权限（必须）&lt;/h4&gt;&lt;pre&gt;&lt;code&gt;chmod 600 /swapfile&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;h4-3-swap&quot;&gt;&lt;a name=&quot;3. 格式化为 Swap&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;3. 格式化为 Swap&lt;/h4&gt;&lt;pre&gt;&lt;code&gt;mkswap /swapfile&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;h4-4-swap&quot;&gt;&lt;a name=&quot;4. 启用 Swap&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;4. 启用 Swap&lt;/h4&gt;&lt;pre&gt;&lt;code&gt;swapon /swapfile&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;h4-5-&quot;&gt;&lt;a name=&quot;5. 开机自动挂载（永久生效）&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;5. 开机自动挂载（永久生效）&lt;/h4&gt;&lt;pre&gt;&lt;code&gt;echo &quot;/swapfile none swap defaults 0 0&quot; &amp;gt;&amp;gt; /etc/fstab&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;h4-6-&quot;&gt;&lt;a name=&quot;6. 查看结果&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;6. 查看结果&lt;/h4&gt;&lt;pre&gt;&lt;code&gt;free -h&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;你会看到 Swap 从 0B 变成 2.0G，就成功了。&lt;/p&gt;
&lt;h4 id=&quot;h4-7-&quot;&gt;&lt;a name=&quot;7. 优化（建议执行）&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;7. 优化（建议执行）&lt;/h4&gt;&lt;p&gt;你的内存只有 2G，建议把 swappiness 调高点，让系统更愿意用 Swap 避免 OOM：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;echo &quot;vm.swappiness=60&quot; &amp;gt;&amp;gt; /etc/sysctl.conf
sysctl -p&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;最终效果&lt;br&gt;执行完后 free -h 会变成类似这样：
&lt;pre&gt;&lt;code&gt;plaintext
Mem:           2.0G        1.0G         89M        1.8M        888M        784M
Swap:          2.0G          0B        2.0G&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;如果需要调整swap大小，可以按一下操作&lt;/p&gt;
&lt;h4 id=&quot;h4--swap&quot;&gt;&lt;a name=&quot;一、先关闭当前 Swap&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;一、先关闭当前 Swap&lt;/h4&gt;&lt;pre&gt;&lt;code&gt;swapoff /swapfile&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;h4--swap-&quot;&gt;&lt;a name=&quot;二、删除旧 Swap 文件&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;二、删除旧 Swap 文件&lt;/h4&gt;&lt;pre&gt;&lt;code&gt;rm -f /swapfile&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;h4--swap&quot;&gt;&lt;a name=&quot;三、重新创建新大小的 Swap&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;三、重新创建新大小的 Swap&lt;/h4&gt;&lt;p&gt;重复上面的操作&lt;/p&gt;
</description><pubDate>Tue, 14 Apr 2026 14:23:37 +0800</pubDate></item><item><title>用acme.sh自动签发由阿里云托管域名的泛域名证书</title><link>https://blog.bee1001.com/?id=40</link><description>&lt;h4 id=&quot;h4--1-acme-sh-&quot;&gt;&lt;a name=&quot;步骤 1：安装 acme.sh（官方一键脚本）&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;步骤 1：安装 acme.sh（官方一键脚本）&lt;/h4&gt;&lt;pre&gt;&lt;code&gt;# 安装
curl https://get.acme.sh | sh -s email=你的邮箱@example.com

# 让当前 shell 立即识别命令
source ~/.bashrc&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;安装完成后，acme.sh 位于 ~/.acme.sh/，并已自动创建 cron 任务。&lt;/p&gt;
&lt;h4 id=&quot;h4--2-dns-api-ram-&quot;&gt;&lt;a name=&quot;步骤 2：配置阿里云 DNS API 密钥（RAM 子用户）&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;步骤 2：配置阿里云 DNS API 密钥（RAM 子用户）&lt;/h4&gt;&lt;p&gt;1、登录阿里云控制台 → RAM → 用户 → 创建用户 → 勾选编程访问&lt;br&gt;2、权限策略：AliyunDNSFullAccess&lt;br&gt;3、拿到 AccessKey ID 和 AccessKey Secret
&lt;pre&gt;&lt;code&gt;# 写入全局环境变量（重启也生效）
echo 'export Ali_Key=&quot;LTAIxxxxxxxxxx&quot;' &amp;gt;&amp;gt; /etc/profile
echo 'export Ali_Secret=&quot;xxxxxxxxxxxxxxxxxxxxxxxxxxxx&quot;' &amp;gt;&amp;gt; /etc/profile
source /etc/profile&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;h4--3-dns-&quot;&gt;&lt;a name=&quot;步骤 3：签发泛域名证书（DNS 验证）&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;步骤 3：签发泛域名证书（DNS 验证）&lt;/h4&gt;&lt;pre&gt;&lt;code&gt;acme.sh --issue --dns dns_ali -d example.com -d '*.example.com'&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;多域名时使用&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;acme.sh --issue --dns dns_ali \
  -d example.com \
  -d '*.example.com' \
  -d '*.child.example.com'&lt;/code&gt;&lt;/pre&gt;&lt;h5 id=&quot;h5-u8981u70B9&quot;&gt;&lt;a name=&quot;要点&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;要点&lt;/h5&gt;&lt;p&gt;1、每个 -d 只带一个域名&lt;br&gt;2、通配符必须用单引号包住，防止 shell 展开&lt;br&gt;3、可以混用普通域名 + 多个通配符，一张证书全覆盖&lt;br&gt;4、签发后所有域名会写进 SAN 字段，Nginx 里随便哪个 server_name 只要匹配其中一项就合法
&lt;p&gt;成功后会看到：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;Cert success.
证书已保存在 ~/.acme.sh/example.com/&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;h4--4-nginx-&quot;&gt;&lt;a name=&quot;步骤 4：安装证书到 Nginx（统一路径）&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;步骤 4：安装证书到 Nginx（统一路径）&lt;/h4&gt;&lt;pre&gt;&lt;code&gt;# 创建目录
mkdir -p /etc/nginx/ssl

# 安装并指定 reload 命令
acme.sh --install-cert -d example.com \
  --key-file /home/cert/multi.key \
  --fullchain-file /home/cert/multi.cer \
  --reloadcmd &quot;nginx -s reload&quot;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;根据实际重载nginx命令修改 &lt;code&gt;--reloadcmd&lt;/code&gt; ，如 &lt;code&gt;&quot;service nginx reload&quot;&lt;/code&gt;&lt;br&gt;续期成功后自动复制新证书并重载 Nginx。&lt;br&gt;若/home/cert/目录下无.key文件，则重新运行命令。
&lt;h4 id=&quot;h4--5-3-&quot;&gt;&lt;a name=&quot;步骤 5：设置提前 3 天续期（全局生效）&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;步骤 5：设置提前 3 天续期（全局生效）&lt;/h4&gt;&lt;pre&gt;&lt;code&gt;# 立即生效并写入配置
acme.sh --set-default-ca --server letsencrypt
acme.sh --cron --home ~/.acme.sh --days 3&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;h4--6-&quot;&gt;&lt;a name=&quot;步骤 6：验证自动续期逻辑&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;步骤 6：验证自动续期逻辑&lt;/h4&gt;&lt;pre&gt;&lt;code&gt;# 手动模拟 cron 运行
acme.sh --cron --home ~/.acme.sh --days 3&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;如果证书剩余天数 &amp;gt; 3，提示 Skip；&lt;br&gt;如果 ≤ 3，会立即续期并重启 Nginx。
&lt;h4 id=&quot;h4--7-amp-&quot;&gt;&lt;a name=&quot;步骤 7：查看证书信息 &amp;amp; 剩余天数&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;步骤 7：查看证书信息 &amp;amp; 剩余天数&lt;/h4&gt;&lt;pre&gt;&lt;code&gt;# 列表
acme.sh --list

# 详细
acme.sh --info -d example.com&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;h4--8-cron-&quot;&gt;&lt;a name=&quot;步骤 8：确认 cron 任务存在（默认已创建）&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;步骤 8：确认 cron 任务存在（默认已创建）&lt;/h4&gt;&lt;pre&gt;&lt;code&gt;crontab -l&lt;/code&gt;&lt;/pre&gt;</description><pubDate>Fri, 17 Oct 2025 15:20:34 +0800</pubDate></item><item><title>在 Ubuntu 上安装 官方Docker</title><link>https://blog.bee1001.com/?id=39</link><description>&lt;p&gt;在 Ubuntu 上安装官方 Docker 的步骤如下：&lt;/p&gt;
&lt;h4 id=&quot;h4-1-&quot;&gt;&lt;a name=&quot;1. 卸载旧版本（如有）&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;1. 卸载旧版本（如有）&lt;/h4&gt;&lt;pre&gt;&lt;code&gt;sudo apt-get remove docker docker-engine docker.io containerd runc&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;h4-2-&quot;&gt;&lt;a name=&quot;2. 更新软件包索引并安装依赖&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;2. 更新软件包索引并安装依赖&lt;/h4&gt;&lt;pre&gt;&lt;code&gt;sudo apt-get update
sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;h4-3-docker-gpg-&quot;&gt;&lt;a name=&quot;3. 添加 Docker 官方 GPG 密钥&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;3. 添加 Docker 官方 GPG 密钥&lt;/h4&gt;&lt;pre&gt;&lt;code&gt;sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;h4-4-docker-&quot;&gt;&lt;a name=&quot;4. 设置 Docker 仓库&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;4. 设置 Docker 仓库&lt;/h4&gt;&lt;pre&gt;&lt;code&gt;echo \
  &quot;deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable&quot; | sudo tee /etc/apt/sources.list.d/docker.list &amp;gt; /dev/null&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;h4-5-docker-&quot;&gt;&lt;a name=&quot;5. 安装 Docker 引擎&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;5. 安装 Docker 引擎&lt;/h4&gt;&lt;pre&gt;&lt;code&gt;sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;如果在 Ubuntu 上安装 Docker 时遇到 docker-ce 及相关软件包无法找到的问题，可能是由于软件源未正确配置或系统版本不兼容。以下是解决方案：&lt;/p&gt;
&lt;h5 id=&quot;h5-u89E3u51B3u65B9u6CD5&quot;&gt;&lt;a name=&quot;解决方法&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;解决方法&lt;/h5&gt;&lt;h5 id=&quot;h5-1-docker-&quot;&gt;&lt;a name=&quot;1. 确保已正确添加 Docker 官方源&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;1. 确保已正确添加 Docker 官方源&lt;/h5&gt;&lt;p&gt;运行以下命令检查是否已正确设置仓库：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo ls -l /etc/apt/sources.list.d/docker.list&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;如果文件不存在或内容为空，重新执行仓库设置命令：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
  &quot;deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable&quot; | sudo tee /etc/apt/sources.list.d/docker.list &amp;gt; /dev/null&lt;/code&gt;&lt;/pre&gt;&lt;h5 id=&quot;h5-2-&quot;&gt;&lt;a name=&quot;2. 更新软件包列表&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;2. 更新软件包列表&lt;/h5&gt;&lt;pre&gt;&lt;code&gt;sudo apt-get update&lt;/code&gt;&lt;/pre&gt;&lt;h5 id=&quot;h5-3-ubuntu-&quot;&gt;&lt;a name=&quot;3. 检查系统架构和 Ubuntu 版本&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;3. 检查系统架构和 Ubuntu 版本&lt;/h5&gt;&lt;p&gt;确认架构（通常为 amd64 或 arm64）：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;  dpkg --print-architecture&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;确认 Ubuntu 版本：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;  lsb_release -cs&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;如果输出不是 Docker 支持的版本（如 jammy for Ubuntu 22.04），可能需要手动指定版本。例如：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;  echo &quot;deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu jammy stable&quot; | sudo tee /etc/apt/sources.list.d/docker.list&lt;/code&gt;&lt;/pre&gt;&lt;h5 id=&quot;h5-4-deb-&quot;&gt;&lt;a name=&quot;4. 如果问题仍存在，尝试手动下载 .deb 包&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;4. 如果问题仍存在，尝试手动下载 .deb 包&lt;/h5&gt;&lt;p&gt;从 Docker 官网下载对应版本的 .deb 包并安装：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;wget https://download.docker.com/linux/ubuntu/dists/$(lsb_release -cs)/pool/stable/$(dpkg --print-architecture)/docker-ce_24.0.7-1~ubuntu.22.04~jammy_amd64.deb
sudo apt-get install ./docker-ce_*.deb&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;（注意替换版本号和路径）&lt;/p&gt;
&lt;p&gt;替代方案：使用 Docker 提供的便捷脚本&lt;br&gt;如果上述方法复杂，可以直接运行 Docker 官方的一键安装脚本：
&lt;pre&gt;&lt;code&gt;curl -fsSL https://get.docker.com | sudo sh&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;h4-6-&quot;&gt;&lt;a name=&quot;6. 验证安装&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;6. 验证安装&lt;/h4&gt;&lt;pre&gt;&lt;code&gt;sudo docker run hello-world&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;如果看到欢迎消息，说明安装成功。&lt;/p&gt;
&lt;h4 id=&quot;h4-7-docker-sudo-&quot;&gt;&lt;a name=&quot;7. （可选）添加用户到 docker 组（避免每次使用 sudo）&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;7. （可选）添加用户到 docker 组（避免每次使用 sudo）&lt;/h4&gt;&lt;pre&gt;&lt;code&gt;sudo usermod -aG docker $USER
newgrp docker  # 立即生效，或重新登录&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;h4-8-docker-&quot;&gt;&lt;a name=&quot;8. （可选）设置 Docker 开机自启&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;8. （可选）设置 Docker 开机自启&lt;/h4&gt;&lt;pre&gt;&lt;code&gt;sudo systemctl enable docker.service
sudo systemctl enable containerd.service&lt;/code&gt;&lt;/pre&gt;</description><pubDate>Fri, 19 Sep 2025 14:53:09 +0800</pubDate></item><item><title>git强制回退版本</title><link>https://blog.bee1001.com/?id=38</link><description>&lt;h4 id=&quot;h4-u5F3Au5236u56DEu9000&quot;&gt;&lt;a name=&quot;强制回退&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;强制回退&lt;/h4&gt;&lt;p&gt;如果你已经切换到了正确的版本，但想要强制将当前分支重置到这个版本，可以使用git reset命令：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git reset --hard &amp;lt;commit-hash&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;这个命令会将HEAD指针移动到指定的版本，并丢弃当前工作目录和暂存区的所有更改。&lt;/p&gt;
&lt;h4 id=&quot;h4-u63A8u9001u5230u8FDCu7A0Bu4ED3u5E93&quot;&gt;&lt;a name=&quot;推送到远程仓库&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;推送到远程仓库&lt;/h4&gt;&lt;p&gt;如果你想要将这个强制回退的版本推送到远程仓库，可以使用git push命令：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git push origin &amp;lt;branch-name&amp;gt; --force  # 如果需要推送到远端，则需要使用强制推送&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;使用–force选项可以覆盖远程仓库中的历史记录，但请谨慎使用，因为这可能会影响其他协作者的工作。&lt;/p&gt;
</description><pubDate>Wed, 30 Apr 2025 13:54:46 +0800</pubDate></item><item><title>CentOS系统-Linux上使用 Certbot工具申请和续签Let's Encrypt证书</title><link>https://blog.bee1001.com/?id=37</link><description>&lt;h3 id=&quot;h3--certbot&quot;&gt;&lt;a name=&quot;一、安装Certbot&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;一、安装Certbot&lt;/h3&gt;&lt;h4 id=&quot;h4-1-linux-certbot&quot;&gt;&lt;a name=&quot;1. 在Linux系统上安装Certbot&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;1. 在Linux系统上安装Certbot&lt;/h4&gt;&lt;pre&gt;&lt;code&gt;sudo yum install certbot&lt;/code&gt;&lt;/pre&gt;&lt;h3 id=&quot;h3--let-s-encrypt-&quot;&gt;&lt;a name=&quot;二、申请Let’s Encrypt证书&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;二、申请Let’s Encrypt证书&lt;/h3&gt;&lt;h4 id=&quot;h4-1-web-&quot;&gt;&lt;a name=&quot;1. 使用Web服务器插件申请证书&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;1. 使用Web服务器插件申请证书&lt;/h4&gt;&lt;p&gt;Certbot提供了多种插件，用于与不同的Web服务器集成。以下是一些常见的Web服务器插件：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo certbot --nginx certonly&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;运行命令后，Certbot会自动检测你的Nginx配置文件，并提示你选择要保护的域名。完成域名验证后，Certbot会自动更新Nginx配置文件，添加SSL证书和相关配置。&lt;/p&gt;
&lt;h4 id=&quot;h4-2-&quot;&gt;&lt;a name=&quot;2. 手动申请证书&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;2. 手动申请证书&lt;/h4&gt;&lt;p&gt;如果你不想使用插件，也可以手动申请证书：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo certbot certonly&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;运行命令后，Certbot会提示你输入一系列信息，包括域名、邮箱等。完成输入后，Certbot会通过ACME协议与Let’s Encrypt服务器通信，完成域名验证。&lt;/p&gt;
&lt;h4 id=&quot;h4--&quot;&gt;&lt;a name=&quot;域名验证方式：&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;域名验证方式：&lt;/h4&gt;&lt;p&gt;&lt;strong&gt;HTTP验证：&lt;/strong&gt;Certbot会在你的Web服务器上创建一个临时文件，Let’s Encrypt服务器会访问该文件以验证域名所有权。&lt;br&gt;&lt;strong&gt;DNS验证：&lt;/strong&gt;你可以在DNS记录中添加特定的TXT记录，Let’s Encrypt服务器会检查该记录以验证域名所有权。&lt;/p&gt;
&lt;h3 id=&quot;h3--&quot;&gt;&lt;a name=&quot;三、配置自动续签&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;三、配置自动续签&lt;/h3&gt;&lt;p&gt;Let’s Encrypt证书的有效期为90天，因此需要配置自动续签功能，以确保证书始终有效。&lt;/p&gt;
&lt;h4 id=&quot;h4-1-&quot;&gt;&lt;a name=&quot;1. 测试自动续签&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;1. 测试自动续签&lt;/h4&gt;&lt;p&gt;在配置自动续签之前，可以先手动测试续签功能：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo certbot renew --dry-run&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;如果测试成功，表示你的系统已经具备自动续签的能力。&lt;/p&gt;
&lt;h4 id=&quot;h4-2-&quot;&gt;&lt;a name=&quot;2. 设置定时任务&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;2. 设置定时任务&lt;/h4&gt;&lt;p&gt;为了实现自动续签，需要在系统中设置定时任务（Cron Job）。&lt;br&gt;在CentOS系统上设置Cron Job：
&lt;pre&gt;&lt;code&gt;# 打开Cron配置文件：
sudo crontab -e
# 添加以下内容：
0 2 * * * /usr/bin/certbot renew --quiet
# 这表示每天凌晨2点运行certbot renew --quiet命令&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Cron Job的语法格式为：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;* * * * * command_to_be_executed
- - - - -
| | | | |
| | | | +----- 星期几 (0 - 7) (星期天为0或7)
| | | +------- 月份 (1 - 12)
| | +--------- 日期 (1 - 31)
| +----------- 小时 (0 - 23)
+------------- 分钟 (0 - 59)&lt;/code&gt;&lt;/pre&gt;&lt;hr&gt;
&lt;p&gt;要将 certbot 的自动续签任务从每天运行一次修改为每90天运行一次，可以通过以下方法实现。由于 cron 本身不支持直接设置“每90天”这样的周期，我们需要借助一些额外的逻辑来实现。&lt;br&gt;以下是实现每90天运行一次 certbot renew 的方法：
&lt;h4 id=&quot;h4-1-&quot;&gt;&lt;a name=&quot;1. 创建一个脚本&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;1. 创建一个脚本&lt;/h4&gt;&lt;p&gt;创建一个脚本文件，例如 certbot_renew.sh，并写入以下内容：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;#!/bin/bash

# 设置任务的最后运行时间文件
LAST_RUN_FILE=&quot;/var/log/certbot_last_run.txt&quot;

# 获取当前日期
CURRENT_DATE=$(date +%s)

# 如果文件不存在，初始化为当前日期
if [ ! -f &quot;$LAST_RUN_FILE&quot; ]; then
    echo &quot;$CURRENT_DATE&quot; &amp;gt; &quot;$LAST_RUN_FILE&quot;
fi

# 获取上次运行的日期（以秒为单位）
LAST_RUN_DATE=$(cat &quot;$LAST_RUN_FILE&quot;)

# 计算两个日期之间的天数差（单位：秒）
DATE_DIFF=$((CURRENT_DATE - LAST_RUN_DATE))

# 如果天数差大于或等于90天，则执行任务并更新日期
if [ &quot;$DATE_DIFF&quot; -ge $((90 * 86400)) ]; then
    # 执行 Certbot 续签任务
    /usr/bin/certbot renew --quiet

    # 更新最后运行日期
    echo &quot;$CURRENT_DATE&quot; &amp;gt; &quot;$LAST_RUN_FILE&quot;
fi&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;h4-2-&quot;&gt;&lt;a name=&quot;2. 设置脚本的可执行权限&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;2. 设置脚本的可执行权限&lt;/h4&gt;&lt;pre&gt;&lt;code&gt;chmod +x certbot_renew.sh&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;h4-3-cron&quot;&gt;&lt;a name=&quot;3. 添加到 cron&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;3. 添加到 cron&lt;/h4&gt;&lt;p&gt;将该脚本添加到 cron 中，使其每天运行一次。编辑 cron 任务：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;crontab -e&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;添加以下内容：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;0 2 * * * /path/to/certbot_renew.sh&lt;/code&gt;&lt;/pre&gt;&lt;ul&gt;
&lt;li&gt;这表示每天凌晨2点运行该脚本。&lt;/li&gt;&lt;li&gt;脚本会检查上次运行的时间，如果距离上次运行时间超过90天，则执行 certbot renew 命令并更新时间。&lt;/li&gt;&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id=&quot;h3--&quot;&gt;&lt;a name=&quot;四、验证证书状态&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;四、验证证书状态&lt;/h3&gt;&lt;h4 id=&quot;h4-1-&quot;&gt;&lt;a name=&quot;1. 检查证书状态&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;1. 检查证书状态&lt;/h4&gt;&lt;p&gt;你可以使用以下命令检查证书的状态：&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;sudo certbot certificates&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;该命令会列出所有已安装的证书及其状态，包括有效期、是否已自动续签等信息。&lt;/p&gt;
&lt;h4 id=&quot;h4-2-web-&quot;&gt;&lt;a name=&quot;2. 检查Web服务器配置&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;2. 检查Web服务器配置&lt;/h4&gt;&lt;p&gt;在证书更新后，确保Web服务器正确加载了新的证书。可以通过访问你的网站并查看浏览器的安全提示来验证证书是否有效。&lt;/p&gt;
&lt;h3 id=&quot;h3--&quot;&gt;&lt;a name=&quot;五、注意事项&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;五、注意事项&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;域名验证：&lt;/strong&gt;在申请证书时，确保你的域名已经正确解析到你的服务器。如果域名解析有问题，Let’s Encrypt无法完成验证。&lt;br&gt;&lt;strong&gt;防火墙设置：&lt;/strong&gt;确保你的服务器防火墙允许Let’s Encrypt服务器访问你的域名用于验证（通常是80端口或443端口）。&lt;br&gt;&lt;strong&gt;备份配置文件：&lt;/strong&gt;在操作过程中，建议备份你的Web服务器配置文件，以便在出现问题时可以快速恢复。&lt;/p&gt;
</description><pubDate>Mon, 07 Apr 2025 11:25:34 +0800</pubDate></item><item><title>华为云Huawei Cloud EulerOS 2.0 安装 docker-ce</title><link>https://blog.bee1001.com/?id=36</link><description>&lt;h4 id=&quot;h4-1-docker-yum-yum-docker-&quot;&gt;&lt;a name=&quot;1、将Docker的yum仓库添加到系统中，以便通过yum包管理器安装Docker。&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;1、将Docker的yum仓库添加到系统中，以便通过yum包管理器安装Docker。&lt;/h4&gt;&lt;pre&gt;&lt;code&gt;yum-config-manager --add-repo https://repo.huaweicloud.com/docker-ce/linux/centos/docker-ce.repo&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;h4-2-sed-releasever-8-centos-8-&quot;&gt;&lt;a name=&quot;2、使用sed命令将$releasever替换为8，这样可以确保使用CentOS 8的仓库配置。&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;2、使用sed命令将$releasever替换为8，这样可以确保使用CentOS 8的仓库配置。&lt;/h4&gt;&lt;pre&gt;&lt;code&gt;sed -i 's/\$releasever/8/g' /etc/yum.repos.d/docker-ce.repo&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;h4-3-download-docker-com-repo-huaweicloud-com-docker-ce-docker-&quot;&gt;&lt;a name=&quot;3、将仓库地址中的download.docker.com替换为repo.huaweicloud.com/docker-ce，以确保使用华为云的Docker仓库。&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;3、将仓库地址中的download.docker.com替换为repo.huaweicloud.com/docker-ce，以确保使用华为云的Docker仓库。&lt;/h4&gt;&lt;pre&gt;&lt;code&gt;sed -i 's+download.docker.com+repo.huaweicloud.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;h4-4-yum-&quot;&gt;&lt;a name=&quot;4、更新yum缓存，以便系统可以识别并获取新的软件包信息。&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;4、更新yum缓存，以便系统可以识别并获取新的软件包信息。&lt;/h4&gt;&lt;pre&gt;&lt;code&gt;yum makecache&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;h4-5-dnf-dandified-yum-&quot;&gt;&lt;a name=&quot;5、清理dnf（Dandified YUM）包管理器的缓存。&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;5、清理dnf（Dandified YUM）包管理器的缓存。&lt;/h4&gt;&lt;pre&gt;&lt;code&gt;dnf clean all&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;h4-6-dnf-&quot;&gt;&lt;a name=&quot;6、更新dnf缓存，以确保系统可以识别并获取新的软件包信息。&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;6、更新dnf缓存，以确保系统可以识别并获取新的软件包信息。&lt;/h4&gt;&lt;pre&gt;&lt;code&gt;dnf makecache&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;h4-7-dnf-docker-&quot;&gt;&lt;a name=&quot;7、使用dnf包管理器安装Docker容器引擎。&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;7、使用dnf包管理器安装Docker容器引擎。&lt;/h4&gt;&lt;pre&gt;&lt;code&gt;dnf -y install docker-ce&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;h4-8-docker-&quot;&gt;&lt;a name=&quot;8、启动 Docker 服务。&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;8、启动 Docker 服务。&lt;/h4&gt;&lt;pre&gt;&lt;code&gt;systemctl start docker&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;h4-9-docker-&quot;&gt;&lt;a name=&quot;9、查看 Docker 服务的状态。&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;9、查看 Docker 服务的状态。&lt;/h4&gt;&lt;pre&gt;&lt;code&gt;systemctl status docker&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;h4-10-docker-&quot;&gt;&lt;a name=&quot;10、设置 Docker 服务开机自启。&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;10、设置 Docker 服务开机自启。&lt;/h4&gt;&lt;pre&gt;&lt;code&gt;systemctl enable docker&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;h4-11-docker-hello-world-docker-&quot;&gt;&lt;a name=&quot;11、行一个简单的Docker容器（hello-world）以验证Docker是否正确安装和配置。&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;11、行一个简单的Docker容器（hello-world）以验证Docker是否正确安装和配置。&lt;/h4&gt;&lt;pre&gt;&lt;code&gt;docker run hello-world&lt;/code&gt;&lt;/pre&gt;&lt;h4 id=&quot;h4-12-docker-&quot;&gt;&lt;a name=&quot;12、列出本地已经下载的 Docker 镜像。&quot; class=&quot;reference-link&quot; href=&quot;#&quot;&gt;&lt;/a&gt;&lt;span class=&quot;header-link octicon octicon-link&quot;&gt;&lt;/span&gt;12、列出本地已经下载的 Docker 镜像。&lt;/h4&gt;&lt;pre&gt;&lt;code&gt;docker images&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;最后如果在镜像列表里面能看到hello-world，docker就是安装成功了~&lt;/p&gt;
</description><pubDate>Wed, 23 Oct 2024 16:51:20 +0800</pubDate></item></channel></rss>