<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>老丁的博客</title>
	<atom:link href="https://www.laoding.me/feed" rel="self" type="application/rss+xml" />
	<link>https://www.laoding.me</link>
	<description></description>
	<lastBuildDate>Fri, 06 Mar 2026 07:25:24 +0000</lastBuildDate>
	<language>zh-Hans</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.1</generator>

<image>
	<url>https://public-123.oss-cn-guangzhou.aliyuncs.com/2024/09/cropped-图片_20240927133356-768x768-1-32x32.jpg</url>
	<title>老丁的博客</title>
	<link>https://www.laoding.me</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>给博客添加IP属地</title>
		<link>https://www.laoding.me/archives/945</link>
					<comments>https://www.laoding.me/archives/945#respond</comments>
		
		<dc:creator><![CDATA[laoding]]></dc:creator>
		<pubDate>Thu, 05 Mar 2026 11:39:28 +0000</pubDate>
				<category><![CDATA[办公网络]]></category>
		<guid isPermaLink="false">https://www.laoding.me/?p=945</guid>

					<description><![CDATA[一.文章发布时显示IP属地 修改functions.php文件，增加如下代码： //获取文章 Meta fun [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>一.文章发布时显示IP属地</p>
<p>修改functions.php文件，增加如下代码：</p>
<pre class="code"> //获取文章 Meta
function get_article_meta($type){</pre>
<p>在上面的位置添加下面的代码</p>
<p>&nbsp;</p>
<p><img fetchpriority="high" decoding="async" class="alignnone wp-image-948" src="https://public-123.oss-cn-guangzhou.aliyuncs.com/2026/03/20260305113519448.jpg?x-oss-process=image/auto-orient,1/quality,q_90/format,webp" alt="" width="536" height="159" /></p>
<p>在末尾添加：</p>
<p><img decoding="async" class="alignnone wp-image-949" src="https://public-123.oss-cn-guangzhou.aliyuncs.com/2026/03/20260305113712451.jpg?x-oss-process=image/auto-orient,1/quality,q_90/format,webp" alt="" width="536" height="379" /></p>
<p>修改content-single.php文件，添加如何代码：</p>
<p><img decoding="async" class="alignnone wp-image-950" src="https://public-123.oss-cn-guangzhou.aliyuncs.com/2026/03/20260305113847520.jpg?x-oss-process=image/auto-orient,1/quality,q_90/format,webp" alt="" width="721" height="155" /></p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.laoding.me/archives/945/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>overlay2目录占用挤爆服务器的解决办法</title>
		<link>https://www.laoding.me/archives/927</link>
					<comments>https://www.laoding.me/archives/927#comments</comments>
		
		<dc:creator><![CDATA[laoding]]></dc:creator>
		<pubDate>Wed, 04 Mar 2026 11:29:55 +0000</pubDate>
				<category><![CDATA[办公网络]]></category>
		<guid isPermaLink="false">https://www.laoding.me/?p=927</guid>

					<description><![CDATA[今天早上客户来电话，说网站不能访问了，我以为又是服务器宕机，重启服务器后还是不行，猜想应该是文件爆了，因为这个 [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>今天早上客户来电话，说网站不能访问了，我以为又是服务器宕机，重启服务器后还是不行，猜想应该是文件爆了，因为这个客户的服务器每天被高强度扫描，产生了大量的访问文件。于是扫描了一下硬盘目录</p>
<pre class="code"> df -i</pre>
<blockquote><p>/dev/vda3 IUse% 100%<br />
Inodes: 13073424 used, 1 free</p></blockquote>
<p>提示系统文件数量达到上限，通过层级目录查找，最后定位是Docker容器目录，于量继续用命令查找多文件目录</p>
<pre class="code">for d in /var/lib/docker/*; do
echo -n "$(basename $d): "
find "$d" -xdev | wc -l
done</pre>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-930" src="https://public-123.oss-cn-guangzhou.aliyuncs.com/2026/03/20260304105523333.jpg?x-oss-process=image/auto-orient,1/quality,q_90/format,webp" alt="" width="623" height="138" /></p>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-931" src="https://public-123.oss-cn-guangzhou.aliyuncs.com/2026/03/20260304105605528-e1772621900352.jpg?x-oss-process=image/auto-orient,1/quality,q_90/format,webp" alt="" width="632" height="276" /></p>
<p>1Panel面板创建的容器有很多目录，于是再筛选哪个目录最多文件，并属于哪个容器</p>
<pre class="code">du -sh /var/lib/docker/overlay2/* 2&gt;/dev/null | sort -hr | head -20</pre>
<blockquote><p>70G /var/lib/docker/overlay2/……1f8b84994d2d<br />
3.7G /var/lib/docker/overlay2/……dd0d4e039ca86<br />
1.1G /var/lib/docker/overlay2/……dd41dbd59b01e</p></blockquote>
<p>目前算是找到发生问题的容器，查找对应的容器</p>
<pre class="code">docker ps -aq | while read id; do
docker inspect --format '{{.Id}} {{.GraphDriver.Data.UpperDir}}' $id
done | grep 37b2c2df71db3e7bb48e8dbbc6a1b27455f1185b007c907d469b1f8b84994d2d</pre>
<blockquote><p><span style="color: #800000;">356cd350a272</span>d5……eb /var/lib/docker/overlay2/37b2c2df71db3e……4d2d/diff</p></blockquote>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-933" src="https://public-123.oss-cn-guangzhou.aliyuncs.com/2026/03/20260304111718485.jpg?x-oss-process=image/auto-orient,1/quality,q_90/format,webp" alt="" width="706" height="174" /></p>
<p>至此已经看到容器ID：<span style="color: #800000;">356cd350a272<span style="color: #000000;">，查找该容器内的多文件目录</span></span></p>
<pre class="code">du -sh /var/lib/docker/overlay2/37b2c2df71db3e7bb48e8dbbc6a1b27455f1185b007c907d469b1f8b84994d2d/diff/* | sort -hr | head -20</pre>
<blockquote><p>35G /var/lib/docker/overlay2/37b2c……994d2d/diff/tmp<br />
28K /var/lib/docker/overlay2/37b2c……994d2d/diff/usr</p></blockquote>
<p>此时得知是1Panel-php8容器的缓存目录写满了，剩下的就是进入容器清除缓存目录/tmp下的文件</p>
<pre class="code">docker exec -it 356cd350a272 sh
find /tmp -maxdepth 1 -type f -name "sess_*" -delete</pre>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-934" src="https://public-123.oss-cn-guangzhou.aliyuncs.com/2026/03/20260304112634429.jpg?x-oss-process=image/auto-orient,1/quality,q_90/format,webp" alt="" width="571" height="94" /></p>
<p>至此，文件清除完成，服务器的磁盘空间也会增加很多，剩下的就是在容器的PHP配置里面，修改 PHP session 回收策略</p>
<pre class="code"><span class="ͼd">vi</span> /usr/local/etc/php/php.ini
/session.gc_probability  #查找代码位置
#修改如下
session.gc_probability = 1
session.gc_divisor = 100
session.gc_maxlifetime = 1440
#保存退出
Esc
:wq</pre>
]]></content:encoded>
					
					<wfw:commentRss>https://www.laoding.me/archives/927/feed</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Docker部署的Nocobase安装泰语字体</title>
		<link>https://www.laoding.me/archives/924</link>
					<comments>https://www.laoding.me/archives/924#respond</comments>
		
		<dc:creator><![CDATA[laoding]]></dc:creator>
		<pubDate>Mon, 02 Mar 2026 11:48:23 +0000</pubDate>
				<category><![CDATA[办公网络]]></category>
		<guid isPermaLink="false">https://www.laoding.me/?p=924</guid>

					<description><![CDATA[因为项目需要，使用的系统中需要泰语字体，官方的Nocobase镜像并不带泰语字体，制作的泰语账单模板显示乱码， [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>因为项目需要，使用的系统中需要泰语字体，官方的Nocobase镜像并不带泰语字体，制作的泰语账单模板显示乱码，每次更新升级后，也需要重新安装，具体步骤如下：</p>
<h3>1.进入容器，并更新</h3>
<pre class="code"> <span class="ͼd">sudo</span> docker exec <span class="ͼf">-it</span> nocobase <span class="ͼd">bash</span></pre>
<pre class="code"> apt update</pre>
<p>运行截图如下：</p>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-925" src="https://public-123.oss-cn-guangzhou.aliyuncs.com/2026/03/20260302114317422.jpg?x-oss-process=image/auto-orient,1/quality,q_90/format,webp" alt="" width="679" height="237" /></p>
<h3>2.安装泰语字体并刷新字体缓存</h3>
<pre class="code"> apt install -y fonts-thai-tlwg fonts-noto-core fonts-noto-cjk &amp;&amp; fc-cache -fv</pre>
<pre class="code"> fc-cache -fv</pre>
<h3>3.退出容器并重启 nocobase</h3>
<pre class="code"> <span class="ͼ8">exit</span> &amp;&amp; <span class="ͼd">sudo</span> docker <span class="ͼd">restart</span> nocobase</pre>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.laoding.me/archives/924/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>2026年1月，期待回家的倒计时</title>
		<link>https://www.laoding.me/archives/920</link>
					<comments>https://www.laoding.me/archives/920#respond</comments>
		
		<dc:creator><![CDATA[laoding]]></dc:creator>
		<pubDate>Sat, 07 Feb 2026 03:20:20 +0000</pubDate>
				<category><![CDATA[生活随笔]]></category>
		<guid isPermaLink="false">https://www.laoding.me/?p=920</guid>

					<description><![CDATA[在外这么多年， 每每临近春节， 就像迁徙的候鸟， 等待回程的归途。 从20岁到40多岁， 这种年末返乡的期盼， [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>在外这么多年，</p>
<p>每每临近春节，</p>
<p>就像迁徙的候鸟，</p>
<p>等待回程的归途。</p>
<p>从20岁到40多岁，</p>
<p>这种年末返乡的期盼，</p>
<p>从未消退，</p>
<p>可能随着年龄的攀升，</p>
<p>这种心态会愈发浓重。</p>
<p><img loading="lazy" decoding="async" class="alignnone wp-image-921" src="https://public-123.oss-cn-guangzhou.aliyuncs.com/2026/02/20260207024334174.jpg?x-oss-process=image/auto-orient,1/quality,q_90/format,webp" alt="" width="566" height="340" /></p>
<p>早早就订了回乡的机票，</p>
<p>然后就是倒计时，</p>
<p>每天盘算着回家还有几天，</p>
<p>倒也说不出对家人有多想念，</p>
<p>毕竟在外这么多年，</p>
<p>习惯了一个人漂泊，</p>
<p>但就是向往着回乡的路！</p>
<p>&nbsp;</p>
<p>2026年，</p>
<p>虚岁已经46岁，</p>
<p>从未想过工作是什么，</p>
<p>生活是什么…</p>
<p>什么样的前方，</p>
<p>才值得我们拥有和期待呢？</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.laoding.me/archives/920/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>NocoBase常用命令</title>
		<link>https://www.laoding.me/archives/901</link>
					<comments>https://www.laoding.me/archives/901#respond</comments>
		
		<dc:creator><![CDATA[laoding]]></dc:creator>
		<pubDate>Thu, 24 Jul 2025 04:05:04 +0000</pubDate>
				<category><![CDATA[办公网络]]></category>
		<guid isPermaLink="false">https://www.laoding.me/?p=901</guid>

					<description><![CDATA[一、部署与打包 git clone https://github.com/nocobase/nocobase. [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>一、部署与打包</p>
<pre class="code">git clone https://github.com/nocobase/nocobase.git
cd nocobase
yarn nocobase install
yarn dev</pre>
<pre class="code">yarn build
yarn start</pre>
<p>二、P2M管理与运行</p>
<table>
<thead>
<tr>
<th>操作</th>
<th>命令</th>
</tr>
</thead>
<tbody>
<tr>
<td>查看运行状态</td>
<td>pm2 list</td>
</tr>
<tr>
<td>查看日志</td>
<td>pm2 logs nocobase-dev</td>
</tr>
<tr>
<td>停止服务</td>
<td>pm2 stop nocobase-dev</td>
</tr>
<tr>
<td>重启服务</td>
<td>pm2 restart nocobase-dev</td>
</tr>
<tr>
<td>删除服务</td>
<td>pm2 delete nocobase-dev</td>
</tr>
<tr>
<td>开机启动</td>
<td>pm2 startup + pm2 save</td>
</tr>
</tbody>
</table>
]]></content:encoded>
					
					<wfw:commentRss>https://www.laoding.me/archives/901/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>制作的第1个Windows小软件</title>
		<link>https://www.laoding.me/archives/889</link>
					<comments>https://www.laoding.me/archives/889#respond</comments>
		
		<dc:creator><![CDATA[laoding]]></dc:creator>
		<pubDate>Fri, 11 Apr 2025 05:03:13 +0000</pubDate>
				<category><![CDATA[办公网络]]></category>
		<guid isPermaLink="false">https://www.laoding.me/?p=889</guid>

					<description><![CDATA[以前虽然用打包软件，把其他的程序打包成.exe执行程序，不算真正意义上自己做的软件； 近段时间由于工作需要，利 [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>以前虽然用打包软件，把其他的程序打包成.exe执行程序，不算真正意义上自己做的软件；</p>
<p>近段时间由于工作需要，利用AI的指导，把Python的程序转换成Microsoft Visual Studio的源码，并打包成可安装程序，在其他电脑上使用就非常方便，不就再安排Python环境和资源库。</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-890" src="https://public-123.oss-cn-guangzhou.aliyuncs.com/2025/04/20250411050021561.jpg?x-oss-process=image/auto-orient,1/quality,q_90/format,webp" alt="" width="679" height="506" /></p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-891" src="https://public-123.oss-cn-guangzhou.aliyuncs.com/2025/04/20250411050022622.jpg?x-oss-process=image/auto-orient,1/quality,q_90/format,webp" alt="" width="679" height="506" /></p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-892" src="https://public-123.oss-cn-guangzhou.aliyuncs.com/2025/04/20250411050023207.jpg?x-oss-process=image/auto-orient,1/quality,q_90/format,webp" alt="" width="679" height="506" /></p>
<p>使用起来确实非常方便，例如像批量查单，完成返回所有订单号的最后物流信息和更新时间，对于物流客服是非常方便的</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-893" src="https://public-123.oss-cn-guangzhou.aliyuncs.com/2025/04/20250411050240114.jpg?x-oss-process=image/auto-orient,1/quality,q_90/format,webp" alt="" width="992" height="264" /></p>
<p>后续会把其他更多的功能都加上，话说Python真是个好东西！</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.laoding.me/archives/889/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>谷歌浏览器Chrome在网站证书过期后，无法访问</title>
		<link>https://www.laoding.me/archives/879</link>
					<comments>https://www.laoding.me/archives/879#respond</comments>
		
		<dc:creator><![CDATA[laoding]]></dc:creator>
		<pubDate>Thu, 03 Apr 2025 04:39:52 +0000</pubDate>
				<category><![CDATA[办公网络]]></category>
		<category><![CDATA[Chrome]]></category>
		<guid isPermaLink="false">https://www.laoding.me/?p=879</guid>

					<description><![CDATA[一般的网站在SSL过期后，点击高级后，仍以继续访问；但是如果Chrome浏览器记录了该网站的SSL证书后，并且 [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>一般的网站在SSL过期后，点击高级后，仍以继续访问；但是如果Chrome浏览器记录了该网站的SSL证书后，并且该证书过期后，浏览器提示证书错误，点击<span class='badge badge-primary'>高级</span>，并没有<span class='badge badge-primary'>继续访问</span>的按钮，按下列步骤可重新显示<span class='badge badge-primary'>继续访问</span></p>
<p>1.浏览器中输入</p>
<pre class="code">chrome://net-internals/#hsts</pre>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-880" src="https://public-123.oss-cn-guangzhou.aliyuncs.com/2025/04/20250403043859160.jpg?x-oss-process=image/auto-orient,1/quality,q_90/format,webp" alt="" width="1041" height="640" /></p>
<p>2.输入要清除的网址，点击<span class='badge badge-primary'>Delete</span>就可以了</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.laoding.me/archives/879/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Pageplug/Appsmith如何重置管理员密码</title>
		<link>https://www.laoding.me/archives/874</link>
					<comments>https://www.laoding.me/archives/874#respond</comments>
		
		<dc:creator><![CDATA[laoding]]></dc:creator>
		<pubDate>Wed, 02 Apr 2025 03:05:03 +0000</pubDate>
				<category><![CDATA[办公网络]]></category>
		<guid isPermaLink="false">https://www.laoding.me/?p=874</guid>

					<description><![CDATA[最近在部署Pageplug项目的时候，不知道怎么把密码忘记了，怎么也登陆不上去，通过修改/stacks/con [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>最近在部署Pageplug项目的时候，不知道怎么把密码忘记了，怎么也登陆不上去，通过修改/stacks/configuration/docker.env文件添加了邮件服务，但无奈怎么也发不出重置邮件；幸好有Deepspeak和Chatgpt，多翻询问后，总算解决了，下面是步骤：</p>
<h3>1.获取Pageplug/Appsmith主数据库的连接地址</h3>
<p>在<span class='badge badge-primary'>/stacks/configuration/docker.env</span>文件中的第60行，将<span class='badge badge-primary'>mongodb://appsmith:***@localhost:27017/appsmith</span>复制出来，这就是<span class='badge badge-primary'>mongodb</span>数据库的连接url</p>
<h3>2.登陆容器，连接mongodb数据库</h3>
<pre class="code">sudo docker exec -it pageplug6 bash
mongo "mongodb://appsmith:L7HapFqpsSCE4@localhost:27017/appsmith"</pre>
<p>更新密码</p>
<pre class="code">db.user.update({ email: "szlaoding@gmail.com" },{$set: {password: "$2b$12$WTrkHNtkUQcgPSZZDVzgpu.mFImnNlwKuBfcwiuvk/5MNdtjayxOS"}});</pre>
<p>返回下面代码，即表示修改成功</p>
<pre class="code">WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })</pre>
<ul>
<li class="" data-start="105" data-end="172">
<p class="" data-start="107" data-end="172"><strong data-start="107" data-end="124"><code data-start="109" data-end="122">nMatched: 1</code></strong> 说明找到了 1 条匹配 <code data-start="137" data-end="167">email: "szlaoding@gmail.com"</code> 的记录。</p>
</li>
<li class="" data-start="173" data-end="205">
<p class="" data-start="175" data-end="205"><strong data-start="175" data-end="193"><code data-start="177" data-end="191">nModified: 1</code></strong> 说明成功修改了该记录。</p>
</li>
<li class="" data-start="206" data-end="249">
<p class="" data-start="208" data-end="249"><strong data-start="208" data-end="226"><code data-start="210" data-end="224">nUpserted: 0</code></strong> 说明没有插入新记录（表示目标用户已经存在）。</p>
</li>
</ul>
<h3>3.验证密码是否修改成功</h3>
<pre class="code">db.user.find({ email: "szlaoding@gmail.com" }).pretty();  #查看管理员szlaoding@gmail.com的数据库信息</pre>
<p>在返回的代码中，看到密码的哈希值应该是<span class='badge badge-primary'>&#8220;$2b$12$WTrkHNtkUQcgPSZZDVzgpu.mFImnNlwKuBfcwiuvk/5MNdtjayxOS&#8221;</span></p>
<h3>4.如何获取密码的哈希值</h3>
<p>可以用Ptyhon或其他在线工具来获取，Python获取命令如下</p>
<pre class="code">import bcrypt
password = b"abc123456"
hashed_pw = bcrypt.hashpw(password, bcrypt.gensalt())
print(hashed_pw.decode())</pre>
<p>运行后返回</p>
<pre class="code">$2b$12$WTrkHNtkUQcgPSZZDVzgpu.mFImnNlwKuBfcwiuvk/5MNdtjayxOS</pre>
]]></content:encoded>
					
					<wfw:commentRss>https://www.laoding.me/archives/874/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Docker搭建Shlink的详细教程</title>
		<link>https://www.laoding.me/archives/864</link>
					<comments>https://www.laoding.me/archives/864#comments</comments>
		
		<dc:creator><![CDATA[laoding]]></dc:creator>
		<pubDate>Sat, 29 Mar 2025 07:08:49 +0000</pubDate>
				<category><![CDATA[办公网络]]></category>
		<guid isPermaLink="false">https://www.laoding.me/?p=864</guid>

					<description><![CDATA[1.搭建服务端 sudo docker run \ --name my_shlink \ -p 6180:80 [&#8230;]]]></description>
										<content:encoded><![CDATA[<h3>1.搭建服务端</h3>
<pre class="code">sudo docker run \
--name my_shlink \
-p 6180:8080 \
-e DEFAULT_DOMAIN=u.e-123.cn \
-e IS_HTTPS_ENABLED=true \
-e GEOLITE_LICENSE_KEY=hDhwWY_2***_mmk \ # GEOLITE地址解析的Key，要去申请
-e DB_DRIVER=mysql \
-e DB_USER=laoding\ #数据库名字
-e DB_PASSWORD=dfghdfghdfgh \ # 数据库密码
-e DB_HOST=156.***.***.228 \
-e DB_NAME=laoding\
-e SHELL_VERBOSITY=3 \
-v /path/to/cert:/etc/ssl/certs \
-v /path/to/cert-key:/etc/ssl/private \
shlinkio/shlink:stable</pre>
<h3>2.搭建客户端</h3>
<pre class="code">docker run -d \
--name shlink-web-client \
-p 6181:8080 \
-e REACT_APP_SHLINK_SERVER_URL="u.e-123.cn" \
shlinkio/shlink-web-client</pre>
<h3>3.生成API-Key</h3>
<pre class="code">docker exec -it my_shlink shlink api-key:generate</pre>
<h3>4.打开客户网页，进行短地址添加</h3>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-870" src="https://public-123.oss-cn-guangzhou.aliyuncs.com/2025/03/20250329095953633.jpg?x-oss-process=image/auto-orient,1/quality,q_90/format,webp" alt="" width="760" height="587" /></p>
<h3>5.注意事项</h3>
<ul>
<li>完全取消端口号，需要做对API做反向代理，例如用u.e-123.cn做短地址域名，在部署时DEFAULT_DOMAIN=u.e-123.cn，同时给该域名添加一个反向代理，如u.e-123.cn代理到127.0.0.1:6180，添加服务器url时，可直接填写u.e-123.cn</li>
<li>服务器用了u.e-123.cn做反向代理，前端WEB就要用其他的域名做反向代理，以免报错</li>
</ul>
<p>&nbsp;</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.laoding.me/archives/864/feed</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>EXCEL增加自定义函数，实现对收件人信息解析并分离数据</title>
		<link>https://www.laoding.me/archives/856</link>
					<comments>https://www.laoding.me/archives/856#respond</comments>
		
		<dc:creator><![CDATA[laoding]]></dc:creator>
		<pubDate>Sat, 01 Mar 2025 06:13:45 +0000</pubDate>
				<category><![CDATA[办公网络]]></category>
		<guid isPermaLink="false">https://www.laoding.me/?p=856</guid>

					<description><![CDATA[一、实现后的效果如下 =PERSONAL.XLSB!jionlpadd(B1,"province") #获取省 [&#8230;]]]></description>
										<content:encoded><![CDATA[<h2>一、实现后的效果如下</h2>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-857" src="https://public-123.oss-cn-guangzhou.aliyuncs.com/2025/03/20250301054703606.jpg?x-oss-process=image/auto-orient,1/quality,q_90/format,webp" alt="" width="731" height="534" /></p>
<pre class="code">=PERSONAL.XLSB!jionlpadd(B1,"province")  #获取省份的数据</pre>
<pre class="code">=PERSONAL.XLSB!jionlpadd(B1,"city")  #获取市的数据</pre>
<pre class="code">=PERSONAL.XLSB!jionlpadd(B1,"county")  #获取行政区划的数据</pre>
<pre class="code">=PERSONAL.XLSB!addparser(B1,"name")  #获取收件人的数据</pre>
<pre class="code"> =PERSONAL.XLSB!addparser(B1,"mobile")  #获取收件人电话的数据</pre>
<pre class="code">=PERSONAL.XLSB!addparser(B1,"fulladd") #获取补全后、含省市区的地址数据</pre>
<p>上面用到了两个自定义函数，一个是jionlpadd，一个是addparser</p>
<p>&nbsp;</p>
<h2>二、实现方法</h2>
<h3>1.用Flask新建解析地址的API</h3>
<p>先用Python新建一个解析地址的API（直接在EXCEL的VB编辑器里面做没成功），Python的代码如下：</p>
<pre class="code">from flask import Flask, request, jsonify
import jionlp

app = Flask(__name__)

@app.route('/parse_address', methods=['GET'])
def parse_address():
    value = request.args.get('value')
    parts = request.args.get('part', 'province,city,full_location')

    if not value:
        return jsonify({"error": "缺少参数 'value'"}), 400

    # 使用 parse_location 解析地址
    result = jionlp.parse_location(value)

    # 解析部分地址
    parts = parts.split(',')
    response_list = []

    if 'province' in parts:
        response_list.append(result.get('province', ''))
    if 'city' in parts:
        response_list.append(result.get('city', ''))
    if 'county' in parts:
        response_list.append(result.get('county', ''))
    if 'full_location' in parts:
        response_list.append(result.get('full_location', ''))


    return ", ".join(response_list)
    
if __name__ == '__main__':
    app.run(debug=True, host='0.0.0.0', port=5001)</pre>
<p>运行上面的代码后，可在浏览器中测试效果，如下图：</p>
<p><img loading="lazy" decoding="async" class="alignnone size-full wp-image-858" src="https://public-123.oss-cn-guangzhou.aliyuncs.com/2025/03/20250301055833709.jpg?x-oss-process=image/auto-orient,1/quality,q_90/format,webp" alt="" width="1055" height="198" /></p>
<h3>2.用nssm将Python执行文件安装为windows服务</h3>
<pre class="code">nssm install idapi C:\Users\sz\AppData\Local\Programs\Python\Python313\python.exe D:\文档\GPI文件\单证制作\idapi.py</pre>
<pre class="code">nssm start idapi</pre>
<h3>3.创建宏并存储在个人宏工作簿</h3>
<p>打开 Excel.点击视图——点击宏——录制宏。在弹出的窗口中，选择存储宏的位置选择个人宏工作簿。给宏取一个名字，然后点击确定。点击停止录制，这将创建一个宏并自动将其存储在个人宏工作簿中。</p>
<h3>4.用VBA编辑器创建自自定义函数</h3>
<p>按 Alt + F11 打开 VBA 编辑器。在左侧的 项目资源管理器 中，查找名为 VBAProject (PERSONAL.XLSB) 的项目。这个项目就是你个人宏工作簿。展开 VBAProject (PERSONAL.XLSB)，右键点击 Module1，选择 查看代码，然后可以将你要添加的 jionlpadd 函数代码粘贴到这里，并点击保存。</p>
<pre class="code">Function jionlpadd(x As String, y As String) As String
    Dim url As String
    Dim http As Object
    Dim response As String
    Dim parsedValue As String
    
    ' 构建请求的 URL
    url = "http://127.0.0.1:5001/parse_address?value=" &amp; WorksheetFunction.EncodeURL(x) &amp; "&amp;part=" &amp; y
    
    ' 创建 HTTP 请求对象
    Set http = CreateObject("MSXML2.XMLHTTP")
    
    On Error GoTo ErrHandler ' 如果发生错误，跳到错误处理程序
    
    http.Open "GET", url, False
    http.Send
    
    ' 获取响应内容
    response = http.responseText
    
    ' 输出响应内容，用于调试
    Debug.Print "Response: " &amp; response
    
    ' 检查返回的响应内容并处理
    If Len(response) &gt; 0 Then
        ' 去除多余的空格或特殊字符
        response = Trim(response)
        
        ' 直接返回解析结果
        parsedValue = response
    Else
        parsedValue = "Error: Empty response"
    End If
    
    ' 返回解析后的结果
    jionlpadd = parsedValue
    Exit Function
    
ErrHandler:
    ' 错误处理
    jionlpadd = "Error: " &amp; Err.Description
End Function
</pre>
<h3>5.启用宏</h3>
<p>在 Excel 中点击 文件 &gt; 选项 &gt; 信任中心 &gt; 信任中心设置 &gt; 宏设置。选择 启用所有宏 和 信任对 VBA 工程对象模型的访问。至此，就可以在所有的EXCEL表格，使用自定义的jionlpadd，对混合的收件地址数据进行解析和分离，得到自己想要的数据</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.laoding.me/archives/856/feed</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
