<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>CDN on Astarry技术日记</title>
        <link>http://cccc.astarry.cn/tags/cdn/</link>
        <description>Recent content in CDN on Astarry技术日记</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh</language>
        <lastBuildDate>Fri, 01 Nov 2024 18:36:00 +0800</lastBuildDate><atom:link href="http://cccc.astarry.cn/tags/cdn/index.xml" rel="self" type="application/rss+xml" /><item>
            <title>写了个小脚本，方便家宽ipv6配合CDN建站。（失控CDN）</title>
            <link>http://cccc.astarry.cn/p/7d513ae1-9110-4118-8e47-f32902a84792/</link>
            <pubDate>Fri, 01 Nov 2024 18:36:00 +0800</pubDate>
            <guid>http://cccc.astarry.cn/p/7d513ae1-9110-4118-8e47-f32902a84792/</guid>
            <description>&lt;p&gt;因为家庭宽带的ipv6会不停变动，所以即便是使用CDN搭配建站，也要很频繁的修改CDN控制台里的IPV6地址。&lt;br&gt;&#xA;所有为了方便，写了个py脚本，自动检测ipv6地址是否有变化，如果有就自动提交到CDN控制台。&lt;/p&gt;&#xA;&lt;p&gt;需要使用python3，所以需要安装好。&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;sudo apt install python3&#xA;&#xA;root@astarry:/# python3 --version&#xA;Python 3.8.10&#xA;&#xA;&#xA;#就OK了。&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;记得先开启失控CDN的api功能。&lt;/p&gt;&#xA;&lt;p&gt;1、脚本&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;import requests&#xA;import json&#xA;import requests&#xA;import time&#xA;url = &#39;https://user.cdn1.vip/v1/sites/****&#39;  ##***填入CDN的网站ID&#xA;&#xA;def getIPv6Address():&#xA;    text = requests.get(&#39;https://v6.ident.me&#39;).text&#xA;    return text&#xA;&#xA;&#xA;if __name__ == &amp;quot;__main__&amp;quot;:&#xA;    print(getIPv6Address())&#xA;&#xA;&#xA;lastAddress=&amp;quot;&amp;quot;&#xA;while True:&#xA;    ipAddress = getIPv6Address()&#xA;    data = {&#xA;   &amp;quot;backend&amp;quot;: [{&amp;quot;index&amp;quot;: 0, &amp;quot;state&amp;quot;: &amp;quot;up&amp;quot;, &amp;quot;addr&amp;quot;: ipAddress, &amp;quot;weight&amp;quot;: &amp;quot;1&amp;quot;}]&#xA;}&#xA;    headers={&#xA;    &amp;quot;api-key&amp;quot;: &amp;quot;&amp;quot;,  ##填入自己的api key&#xA;    &amp;quot;api-secret&amp;quot;: &amp;quot;&amp;quot; ##填入自己的api secret&#xA;}&#xA;    if lastAddress!=ipAddress:&#xA;        response = requests.put(url, data=json.dumps(data),headers=headers)&#xA;        print(response.json())&#xA;        lastAddress=ipAddress&#xA;        time.sleep(60)&#xA;    else:&#xA;        print(&amp;quot;IP地址未发生变化&amp;quot;)&#xA;        time.sleep(60)&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;ps:此脚本只会修改CDN的源站IP地址，且只能用于IPV6。&lt;/p&gt;&#xA;&lt;p&gt;2、使用systemd作为服务运&lt;/p&gt;&#xA;&lt;p&gt;使用文本编辑器（如vim）在 /etc/systemd/system 目录下创建一个 cdn.service 文件，用于配置此脚本服务。&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;sudo vim /etc/systemd/system/cdn.service&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;写入内容：&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;[Unit]&#xA;Description=cdn server&#xA;Afteer=network.target&#xA;Wants=network.target&#xA;&#xA;[Service]&#xA;Type=simple&#xA;#启动脚本的命令，需要替换成脚本的存放位置。&#xA;ExecStart=/usr/bin/python3 /home/astarry/123/cdn.py  &#xA;Restart=always&#xA;&#xA;[Install]&#xA;WantedBy=multi-user.target&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;保存退出即可。&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;#启动&#xA;systemctl start cdn&#xA;#重启&#xA;systemctl restart cdn&#xA;#查看cdn状态&#xA;systemctl status cdn   &#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;3、将cdn.service设置开机自启&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;systemctl enable cdn&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;这样就不用担心光猫重启，或者断网重连导致ipv6变动，CDN无法访问到源站的情况了。&lt;/p&gt;&#xA;</description>
        </item><item>
            <title>NAT服务器搭配CDN创建halo博客系统</title>
            <link>http://cccc.astarry.cn/p/67d8c895-042c-452c-94c8-fd6031f94dde/</link>
            <pubDate>Sat, 01 Jun 2024 16:03:00 +0800</pubDate>
            <guid>http://cccc.astarry.cn/p/67d8c895-042c-452c-94c8-fd6031f94dde/</guid>
            <description>&lt;p&gt;最近在市面上看到好多NAT服务器，在同等配置下NAT服务器价格相比起普通云服务器会便宜很多。&lt;br&gt;&#xA;因为通常云服务器都是拥有独立IPV4的，而NAT服务器却是共享IP只有数个或者数十个转发端口。&lt;br&gt;&#xA;今天就来玩一下NAT服务器搭配CDN创建halo个人博客网站。&lt;/p&gt;&#xA;&lt;h3 id=&#34;说明&#34;&gt;说明：&#xA;&lt;/h3&gt;&lt;p&gt;halo博客系统支持docker、docker-compose、jar等等方式部署。本文使用ar方式部署。&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;一台NAT服务器&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;ssh工具&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;java环境&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;mysql数据库&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;1配置环境&#34;&gt;1、配置环境&#xA;&lt;/h2&gt;&lt;p&gt;由于使用jar方式部署halo需要使用到java环境，所以需要安装java环境。&lt;/p&gt;&#xA;&lt;p&gt;第一步，先使用ssh工具连接NAT服务器。&lt;br&gt;&#xA;注意：由于NAT服务器是共享IP，所以会有端口转发，需要看清楚自己的NT服务器地址和端口分别是什么。比如我的就是63982&lt;/p&gt;&#xA;&lt;p&gt;&lt;img loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;http://cccc.astarry.cn/images/查看端口是什么.png&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;连上服务器之后，先安装java环境。&lt;br&gt;&#xA;由于halo博客系统需要的最低的JDK版本是17，所以我们最低也要安装openjdk-17才行。&lt;br&gt;&#xA;输入命令：&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;sudo apt install openjdk-17-jre-headless -y&#xA;&#xA;E: Unable to locate package openjdk-17-jre-headless&#xA;#若是出现如上错误则代表需要更换一下Ubuntu的镜像源&#xA;&#xA;#先备份当前镜像源&#xA;cp /etc/apt/sources.list&#xA;#使用vim修改镜像源&#xA;vim /etc/apt/sources.list&#xA;&#xA;#添加镜像源   此为Ubuntu20.04&#xA;deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse&#xA;&#xA;apt-get update&#xA;#更新，然后重新输入安装JDK命令即可。&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;安装完成后，输入：&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;java -version&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;出现版本号就是安装成功。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;http://cccc.astarry.cn/images/java版本号.png&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;下一步，安装MySQL数据库。&lt;br&gt;&#xA;如果你不打算使用MySQL或者就想使用默认的H2数据库，那么可以跳过这一步。&lt;/p&gt;&#xA;&lt;p&gt;安装MySQL，输入命令：&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;apt install mysql-server -y #在输入 apt install mysql-server在此处连按两下‘TAB’键，就会出现可选的版本。&#xA;#halo博客对mysql数据库的版本要求是5.7以上。&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;查看一下MySQL数据库是否正常运行。&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;systemctl status mysql&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;img loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;http://cccc.astarry.cn/images/mysql正常运行.png&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;接下来，创建halo数据库。&lt;/p&gt;&#xA;&lt;p&gt;输入命令：&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;mysql -uroot -p #隐藏式输入密码，密码为root账户的密码。&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;&lt;img loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;http://cccc.astarry.cn/images/连接数据库.png&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;输入命令创建数据库。&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;create database halo2 character set utf8mb4 collate utf8mb4_bin;&#xA;#创建一个名为halo2的数据库 &#xA;&#xA;exit #退出mysql&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;到此，环境配置结束。&lt;/p&gt;&#xA;&lt;h2 id=&#34;2安装halo博客系统&#34;&gt;2、安装halo博客系统&#xA;&lt;/h2&gt;&lt;p&gt;先创建一个./halo2文件夹&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;mkdir ~/.halo2  #在指定目录创建文件夹 如mkdir /home/.halo2 就是在home目录中创建一个名为.halo2的文件夹&#xA;cd ~/.halo2  #进入目录&#xA;&#xA;vim application.yaml #创建halo的配置文件。&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;将配置文件修改并保存好。&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;server:&#xA;  # 运行端口&#xA;  port: 8090&#xA;spring:&#xA;  # 数据库配置，支持 MySQL、MariaDB、PostgreSQL、H2 Database，具体配置方式可以参考下面的数据库配置&#xA;  r2dbc:&#xA;    url: r2dbc::pool:mysql://127.0.0.1:3306/halo2&#xA;    username: root&#xA;    password: 123456 #密码&#xA;  sql:&#xA;    init:&#xA;      mode: always&#xA;      # 需要配合 r2dbc 的配置进行改动&#xA;      platform: mysql&#xA;halo:&#xA;  caches:&#xA;    page:&#xA;      # 是否禁用页面缓存&#xA;      disabled: true&#xA;  # 工作目录位置&#xA;  work-dir: ${user.home}/.halo2  #例如/home/.halo2&#xA;  # 外部访问地址&#xA;  external-url: http://localhost:8090&#xA;  # 附件映射配置，通常用于迁移场景&#xA;  attachment:&#xA;    resource-mappings:&#xA;      - pathPattern: /images/**&#xA;        locations:&#xA;          - migrate-from-1.x&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;如果没有安装和配置数据库，那么使用默认即可。&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;server:&#xA;  # 运行端口&#xA;  port: 8090&#xA;spring:&#xA;  # 数据库配置，支持 MySQL、MariaDB、PostgreSQL、H2 Database，具体配置方式可以参考下面的数据库配置&#xA;  r2dbc:&#xA;    url: r2dbc:h2:file:///${halo.work-dir}/db/halo-next?MODE=MySQL&amp;amp;DB_CLOSE_ON_EXIT=FALSE&#xA;    username: admin&#xA;    password: 123456&#xA;  sql:&#xA;    init:&#xA;      mode: always&#xA;      # 需要配合 r2dbc 的配置进行改动&#xA;      platform: h2&#xA;halo:&#xA;  caches:&#xA;    page:&#xA;      # 是否禁用页面缓存&#xA;      disabled: true&#xA;  # 工作目录位置&#xA;  work-dir: ${user.home}/.halo2  #例如/home/.halo2&#xA;  # 外部访问地址&#xA;  external-url: http://localhost:8090&#xA;  # 附件映射配置，通常用于迁移场景&#xA;  attachment:&#xA;    resource-mappings:&#xA;      - pathPattern: /images/**&#xA;        locations:&#xA;          - migrate-from-1.x&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;接下来创建一个存放halo运行包的文件夹。&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;mkdir ~/halo  cd ~/halo     #可指定目录不必非要当前用户目录。&#xA;&#xA;wget https://dl.halo.run/release/halo-2.16.0-rc.2.jar -O halo.jar&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h2 id=&#34;3测试运行halo博客&#34;&gt;3、测试运行halo博客&#xA;&lt;/h2&gt;&lt;p&gt;先在NAT服务器管理面板中添加端口转发。&lt;br&gt;&#xA;我们要转发的内部端口为8090。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;http://cccc.astarry.cn/images/添加转发.png&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;进入halo目录运行halo.jar。&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;cd ~/halo&#xA;&#xA;java -jar halo.jar --spring.config.additional-location=optional:file:XXX&#xA;#注意 XXX为你的.halo2文件目录 如 /home/.halo2&#xA;#如果提示权限不足，那使用chmod 赋予halo.jar运行权限即可。&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;然后在浏览器输入ip+转发端口号。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;http://cccc.astarry.cn/images/成功-mquh.png&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;由于这是测试运行的命令，所以断开ssh连接时，halo也会被关闭，所以我们需要使用Systemd让其作为服务运行。&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;vim /etc/systemd/system/halo.service&#xA;&#xA;[Unit]&#xA;Description=Halo Service&#xA;Documentation=https://docs.halo.run&#xA;After=network-online.target&#xA;Wants=network-online.target&#xA;&#xA;[Service]&#xA;Type=simple&#xA;User=USER&#xA;ExecStart=/usr/bin/java -server -Xms256m -Xmx256m -jar JAR_PATH --spring.config.additional-location=optional:file:/home/halo/.halo2/&#xA;ExecStop=/bin/kill -s QUIT $MAINPID&#xA;Restart=always&#xA;StandOutput=syslog&#xA;#JAR_PATH为halo运行包的绝对路径。&#xA;StandError=inherit&#xA;&#xA;[Install]&#xA;WantedBy=multi-user.target&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;配置完后保存退出即可。&lt;/p&gt;&#xA;&lt;p&gt;重新加载Systemd&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;systemctl daemon-reload&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;运行服务&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;systemctl start halo&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;现在halo就作为服务在后台运行了，即便断开ssh也能正常运行。&lt;/p&gt;&#xA;&lt;h2 id=&#34;4配置cdn使用域名访问博客&#34;&gt;4、配置CDN使用域名访问博客&#xA;&lt;/h2&gt;&lt;p&gt;由于我们没有使用Nginx一类的反代理工具，所以我们这里使用CDN来进行解析。&lt;/p&gt;&#xA;&lt;p&gt;进入CDN控制台&lt;br&gt;&#xA;新增网站&lt;/p&gt;&#xA;&lt;p&gt;&lt;img loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;http://cccc.astarry.cn/images/新增网站.png&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;填好源IP和端口，如果你的NAT服务器是域名地址，也可以直接填写域名地址和端口。&lt;/p&gt;&#xA;&lt;p&gt;由于我们是使用了非标准端口，所以回源协议只能选择http，不可以选择https或者跟随协议。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;http://cccc.astarry.cn/images/回源端口.png&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;将CDN服务商提供给我们的CNAME解析到我们的域名中。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;http://cccc.astarry.cn/images/域名解析.png&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;现在就可以直接通过域名访问我们的halo博客了。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;http://cccc.astarry.cn/images/完成了.png&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;至此，博客就顺利搭建完毕了。&lt;/p&gt;&#xA;&lt;h2 id=&#34;5给网站开启https&#34;&gt;5、给网站开启HTTPS&#xA;&lt;/h2&gt;&lt;p&gt;由于我们是NAT服务器，所以无法走443端口。但是我们可以利用CDN来开启HTTPS。&lt;/p&gt;&#xA;&lt;p&gt;原站不开启HTTPS，CDN节点开启HTTPS。&lt;/p&gt;&#xA;&lt;p&gt;在CDN控制台中，上传我们域名的SSL证书。然后开启https监听，选择我们上传的证书。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;http://cccc.astarry.cn/images/选择ssl证书.png&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;回源协议依旧使用http。&lt;/p&gt;&#xA;&lt;p&gt;&lt;img loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;http://cccc.astarry.cn/images/真的完成了.png&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;我们就成功给网站开启了https。&lt;/p&gt;&#xA;</description>
        </item></channel>
</rss>
