<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="https://wangye.org/rss.xsl"?><rss version="2.0"><channel><title>WANGYE / 王晔</title><description>Latest posts from WANGYE / 王晔</description><link>https://wangye.org/</link><image><url>https://wangye.org/img/logo.png</url><title>Wang Ye</title><link>https://wangye.org/</link><description>Wang Ye / 王晔</description></image><pubDate>Wed, 01 Jul 2026 00:05:41 GMT</pubDate><copyright>(c) 2026 WANGYE / 王晔</copyright><generator>WANGYE v3.0.0</generator><item><title>网站平台迁移到ASP.NET 8.0</title><link>https://wangye.org/posts/2023/11/website-migrate-to-aspnet-core-8.html</link><description>距离微软正式发布.NET 8.0已经有一段时间，这也是新的LTS（长期技术支持）版本，这个版本更新了多个新的特性，并且提升了性能，似乎每一代框架发布总是能比上一代提升不少性能。近期抽空将本网站平台适配到了.NET 8.0，暂时没有发现什么Breaking Changes，一切很平滑，除了升级到.NET 8.0外，还对以下特性进行了修改： 1. 软件层面 1.1 验证码模块 验证码（CAPTCHA）又称全自动区分计算机和人类的图灵测试，之前本站验证码使用了两套：一套是Edi Wang开发的图形化验证码，主要用在评论发布页面；另一套是Google的reCAPTCHA，主要用在联系表单。但是这两套验证码都存在问题，其中Edi Wang的图形验证码使用了传统的数字字母图片，为了避免OCR还加了变形扭曲，在Web 2.0兴起的年代，这种方法足够抗击机器人和爬虫的不法攻击，随着人工打码平台和 …</description><author>sa@wangye.org</author><category>Web Development</category><guid isPermaLink="false">77f0ac12-e646-4dcd-975c-bbda49b3c836</guid><pubDate>Mon, 27 Nov 2023 23:56:57 GMT</pubDate></item><item><title>使用umami自建博客流量统计分析平台</title><link>https://wangye.org/posts/2023/08/deploy-web-analytics-software-with-umami.html</link><description>博客一直使用谷歌分析（Google Analytics）作为流量统计分析平台，随着大家对隐私的重视，尤其是欧洲通用数据保护条例（GDPR）的颁布，谷歌分析的使用就有必要征求用户的同意，本博客自改版之后在隐私条款处已经说明使用了谷歌分析，并且在Cookie设置处也将允许谷歌分析的权限交给用户，经过一年多的运行发现存在相应的问题，最主要的是如果本博客访问的用户不设置Cookie，这也是大多数情况，一般博客右下角的Cookie提醒是可以忽略的，那么统计必然不准确，那么谷歌分析就失去了参考价值，好在由于全站套用了Cloudflare CDN，其中Cloudflare基础版（Free Plan）提供了一个简单的流量分析模块，让自己也大概能够窥探自己博客的流量情况。 为了能够更好的得到博客热门文章、访问者设备类型、设备分辨率这些信息以供以后改进博客内容和用户体验，同时兼顾用户隐私，决定尝试使用 …</description><author>sa@wangye.org</author><category>Web Development</category><guid isPermaLink="false">39315083-ade2-49a7-959f-79aaee33db69</guid><pubDate>Wed, 16 Aug 2023 23:56:45 GMT</pubDate></item><item><title>解决PPPoE宽带上网IPv6卡顿问题</title><link>https://wangye.org/posts/2023/08/circumventing-ipv6-path-mtu-discovery-issues-with-mss-clamping.html</link><description>早期电信家用宽带支持IPv6的时候，我就尝试通过PPPoE拨号获取原生（Native）IPv6，一直使用正常，唯一遗憾就是由于当时IPv6刚刚起步，所以大部分支持IPv6的网站延迟都比较高，相应的访问速度比较慢，经过这几年发展国内IPv6业务日趋成熟，延迟和速度都有了较大提高，新的计算机、移动设备等都能较好的支持IPv4和IPv6双栈（Dual-Stack）访问。 近两年开始出现部分网站访问卡顿、应用无法加载的情况，经过调查发现这些网站和应用使用了IPv6的访问方式，极大影响了浏览体验，于是我决定先暂停IPv6的解析（DNS仅返回A记录）以缓解卡顿的问题，不过后来搜索网络我终于找到了问题的根源，彻底解决了，在这里把解决的过程记录下来以备忘用，如果读者想快速解决问题的话建议直接跳转到第2节 配置路由器TCP MSS。 1 配置返回IPv4 Only DNS服务器 可能有人说配置返回IPv4 …</description><author>sa@wangye.org</author><category>Networking &amp; InfoSec</category><guid isPermaLink="false">b8130c0d-b201-4212-a21d-342e2a6de6bf</guid><pubDate>Wed, 16 Aug 2023 06:16:43 GMT</pubDate></item><item><title>网站近期的维护情况</title><link>https://wangye.org/posts/2023/04/recent-web-developments.html</link><description>很长时间没有更新网站内容，不过还是抽出时间对网站架构进行了升级。 主要升级点 将网站平台由.NET 6.0迁移至.NET 7.0，这次迁移是平滑的，没有Break changes。 数据库也升级至PostgreSQL 15。 之前网站是基于Docker容器部署的，后来了解到Podman这个最佳替代，于是将Docker部署迁移至Podman部署。 编写了网站引导脚本（Boot Script），在启动网站程序前执行自动化测试检测外部环境设施（数据库、消息队列、邮件系统、传输代理等）是否正常，测试通过后拉起网站程序。 全站迁移至Cloudflare CDN。  需要特别提出的 使用Podman部署，其好处是去中心化，Podman不像Docker一样有个守护进程，守护进程崩溃了所有Docker容器也会崩溃，Podman是Rootless的相比较而言会更加安全（Docker也有Rootless部署方 …</description><author>sa@wangye.org</author><category>Thought &amp; Life</category><guid isPermaLink="false">3b245746-d988-4808-8206-8a2aed17fb6c</guid><pubDate>Thu, 06 Apr 2023 18:28:32 GMT</pubDate></item><item><title>restic使用rclone后端备份数据至WebDAV服务器</title><link>https://wangye.org/posts/2022/10/backup-file-to-webdav-via-restic-and-rclone.html</link><description>备份是运维避不开的一个话题，架构再精巧的服务器环境或者关键业务数据总会遇到不可控的事件而在顷刻之间遭到摧毁。勒索病毒、黑客入侵、主机商跑路、员工删库等等，这些不可控因素仿佛是悬在运维头顶的达摩克利斯之剑，一旦发生就要靠最后时刻的备份救场了，正所谓后方有粮，心中不慌。 手动的脱机备份也是正常运维的一部分，一般情况下我在每次大的修改配置或者升级系统前会将数据脱机备份一份，以备在发生问题时可以迅速恢复。对于云主机可以设置快照（Snapshots），或者直接cp一份，但这种简单的手动备份不仅耗时耗力而且容易遗忘，大部分情况下我们可能就仅仅是本地备份，无法做到异地灾备，所以我们就不得不考虑软件远程备份作为兜底。 本文就介绍了我在实际运维中所采用的几种远程备份方式供读者参考，最后介绍的restic是我比较推荐的一种备份方式。 1 常见的备份途径 工作室里有一台24小时运行的网络存储器（NAS），数据存 …</description><author>sa@wangye.org</author><category>Server Management &amp; Tools</category><guid isPermaLink="false">6b93e717-bdc8-4e3c-99ac-8a4921f39d5d</guid><pubDate>Sun, 30 Oct 2022 03:45:08 GMT</pubDate></item><item><title>Linux LVM分区管理学习备忘</title><link>https://wangye.org/posts/2022/10/learning-linux-lvm.html</link><description>由于平常开发主要是在Windows下进行，对于Linux的使用仅局限于服务器端虚拟机，所以初始分区这块一直使用的是默认配置，随着目前Windows Only开发收窄以及考虑今后跨平台开发，后期主力开发系统将逐渐迁移到Linux下，当然发行版肯定是基于Debian的，毕竟这个发行版较熟悉一些。如果主力开发系统迁移到Linux下那么分区又是一个绕不开的话题，所以我又将目前主流的LVM分区管理方式进行了学习，记录本文以备忘。 1 LVM 介绍 LVM 全称是逻辑卷管理（Logical Volume Manager），既然是逻辑卷就需要和传统的物理卷作出区分，传统物理卷一般在安装操作系统的时候进行分区划分，分区多少空间以后就是多少空间，空间不够怎么办？对不起，这个就麻烦了，就好比Windows下经常有人问C盘空间不够怎么办？能不能从其他分区划出一部分空间给C盘？以前我一般建议使用压缩卷或者一些第三 …</description><author>sa@wangye.org</author><category>Server Management &amp; Tools</category><guid isPermaLink="false">be4dc3e0-e7b6-4ce6-85d0-f8d3572a5172</guid><pubDate>Sun, 16 Oct 2022 00:47:17 GMT</pubDate></item><item><title>本站使用PGP/GPG加密技术保护联系表单</title><link>https://wangye.org/posts/2022/07/using-pgp-encryption-to-protect-contact-form.html</link><description>我的网站老访客可能会有印象，之前的联系表单是支持PGP/GPG加密正文的，后来使用ASP.NET重构后这一部分实现始终存在问题，判断可能是第三方库的BUG，一直没有再加上这个功能，最近该第三方库进行了升级，发现这个BUG已经修复了，于是在联系表单启用了PGP/GPG加密特性。 1 什么是PGP/GPG PGP/GPG虽然是两种写法，但实际上是一种东西，首先我们要介绍PGP（Pretty Good Privacy），这是一套消息加密、验证的技术，由一系列散列、数据压缩、对称密钥加密，以及公钥加密的算法组合而成，最早由菲利普·齐默曼（Philip R. Zimmermann）发明并应用于电子邮件安全隐私保障，可以这么说在没有PGP和TLS加密的时代电子邮件或多或少的在互联网上明文裸奔，而且被篡改的几率很大。PGP最初由Philip免费在互联网上发布，但其本人也因此违反了美国政府关于加密软件出口 …</description><author>sa@wangye.org</author><category>Networking &amp; InfoSec</category><guid isPermaLink="false">803d2e98-d3bd-448f-a034-f7e74cc638e0</guid><pubDate>Tue, 12 Jul 2022 04:58:32 GMT</pubDate></item><item><title>5月29日网站nginx运维故障复盘</title><link>https://wangye.org/posts/2022/06/website-down-for-hours-due-to-nginx-issues.html</link><description>29日下午正好有时间例行网站应用代码升级维护，正好发现nginx HTTP3模块进行了更新，一直关注HTTP3的发展，网站一开始使用的是Cloudflare开发的HTTP3扩展，等nginx官方有了HTTP3支持后也是第一时间升级了，由于本站架构运行在Docker之上，所以这次升级也就改一下nginx代码库commit id，然后重新编译Docker镜像，一直都是这么升级，结果今天翻车了。 由于编译一次Docker镜像需要耗费较长时间，所以我会习惯性把一些该升级的组件进行一次升级：例如更新频率比较高的BoringSSL。这次还发现了ngx_brotli这个很长时间没有更新的扩展也有了更新记录，顺带也升级到最新commit。 完成编译后便直接将这个最新版本的nginx镜像推送至registry，然后服务器同步拉取（pull）完成更新容器更新，由于没有测试直接更新容器，结果炸了。受问题镜像同步 …</description><author>sa@wangye.org</author><category>Server Management &amp; Tools</category><guid isPermaLink="false">588b5945-af00-42bb-8c3f-a3d8f405afc1</guid><pubDate>Wed, 01 Jun 2022 20:55:55 GMT</pubDate></item><item><title>看门狗（Watchdog）使Linux设备从异常运行中快速恢复</title><link>https://wangye.org/posts/2022/05/linux-device-recover-via-watchdog.html</link><description>看门狗（Watchdog）应该是计算机世界中较为形象的一个动物化的特性，就好像光猫和鼠标一样，在那个混沌初开的计算机时代，技术专家和极客们总会给冷冰冰的机器赋予身边活物的灵性。看门狗的功能简要的来说就是侦测到设备异常并恢复设备状态，这里的恢复一般是重启，就好像公司IT部门在接到设备报障电话总是会问一句：“您尝试重启设备了吗？”，确实，重启能解决绝大部分故障，重启后的设备也能工作在较好的状态，随着时间的推移，待故障再次发生的时候怎么办？再重启一下呗。如果无法确认故障的原因或者无法解决故障，那么重启确实很好，但是这仍然需要有人值守，手动重启。看门狗的出现就是为了解决这个痛点，看门狗每间隔一段时间（Interval）会检测设备状态，检测的方式就是一系列测试（Test），如果测试不通过则自动重启。 第一次接触到看门狗（Watchdog）功能还是在树莓派（Raspberry Pi），当时硬件清单说明 …</description><author>sa@wangye.org</author><category>Server Management &amp; Tools</category><guid isPermaLink="false">7141c392-6b85-41d7-854c-dab5a6b72207</guid><pubDate>Tue, 03 May 2022 05:38:49 GMT</pubDate></item><item><title>Docker容器使用dumb-init作为进程supervisor和init系统</title><link>https://wangye.org/posts/2022/05/use-dumb-init-for-docker-container-process-supervisor-and-init.html</link><description>经过一段时间的实践，目前我的IT基础设施基本上完成了向Docker容器化的迁移，通过容器的隔离大大减轻了运维的负担，尤其对于我个人来说，可以专注于业务代码的实现，在容器化的具体实践中也遇到一些问题，本文介绍的就是其中容器内进程管理和僵尸进程（Zombie Process）的消除。 1 Linux init进程 使用过Linux系统的同学可能对init这个进程并不陌生，此进程也是内核启动的第一个进程，PID为1，此进程包含多个任务，其中重要的任务之一：接管孤儿进程和消除僵尸进程。 孤儿进程指的是在其父进程执行完成或被终止后仍继续运行的一类进程，而僵尸进程是指子进程先于父进程结束，而父进程没有调用wait或者waitpid等待，这样结束的子进程将会变成僵尸进程，系统会自动将孤儿进程和僵尸进程过继给PID为1的init进程，这样init进程重新成为孤儿进程的父进程并给僵尸进程收尸（消除），避免大 …</description><author>sa@wangye.org</author><category>Server Management &amp; Tools</category><guid isPermaLink="false">a8023e37-b597-439f-8667-3e1384f6903f</guid><pubDate>Tue, 03 May 2022 00:21:50 GMT</pubDate></item><item><title>让过时浏览器支持新技术 JavaScript Polyfill</title><link>https://wangye.org/posts/2022/03/polyfills-in-javascript-for-newer-features.html</link><description>互联网上有很多关于IE（Internet Explorer）的梗，确实IE已经是一款很老的浏览器了，刚才我打开Windows 10自带的IE，除了推荐我使用Edge外也在明示IE将在6月正式退役，所以现在开发的网站基本也不会在考虑IE，同样的考虑到本站的访客大部分应该是有一定技术背景的，用IE的可能性也不大，所以网站也不兼容IE，尤其是淘汰了TLS 1.1加密套件后，基本上也就目前最高版本的IE还能打开，我也稍微调整了一下JavaScript和CSS，让IE勉强可以浏览内容，但是交互的部分就无法保证了，等IE彻底退役后将不再考虑IE的可访问性。 实际上对于类似IE这类老旧浏览器最大的问题就是新的前端特性支持不全，导致脚本报错，除了可以使用jQuery替代外，也能使用一些Polyfill进行对应的Hack，其实随着新的前端技术的引入，我们对于jQuery的依赖越来越小，以后大的方向应该是抛弃 …</description><author>sa@wangye.org</author><category>Web Development</category><guid isPermaLink="false">95365e51-28f8-4bf8-a8ef-2c3f0aa7eea5</guid><pubDate>Fri, 04 Mar 2022 21:20:37 GMT</pubDate></item><item><title>网站近期的维护情况</title><link>https://wangye.org/posts/2022/02/recent-web-developments.html</link><description>从去年3月15日网站全新改版到现在整个系统（服务器、应用程序）已经迭代了N轮，重点还是解决访问速度的问题，为此没有新增加栏目，好在是docker部署所以大大减轻了运维负担，并且通过自主编译也让Web服务器程序集成了HTTP/3、WAF等扩展功能，针对jsDelivr国内镜像失效导致引用的第三方库CDN拖慢了网站速度的问题，现在中国大陆的访客流量会自动切换到Staticfile CDN，速度有了改善，其实对于第三方库的引用我一直比较保守，如果不是为了优先保障用户体验，我更倾向于将流量限制在本机上，目前所有第三方库均做了完整性校验和匿名跨域，第三方CDN除了可能探测到访客IP外应该不会再获取其他信息。 据威言威语讲目前网站算是恢复到一个正常能访问的水平，之前第一次访问的访客甚至会看着旋转的加载动画发呆（笑），以前一直受到缓存的影响（毕竟自己刷自己网站是最多的）没有感觉到这点，直到有一天向别人推 …</description><author>sa@wangye.org</author><category>Thought &amp; Life</category><guid isPermaLink="false">dc694148-f5f8-4221-93b9-466ca4a6ca4b</guid><pubDate>Mon, 28 Feb 2022 06:11:10 GMT</pubDate></item><item><title>Bash Shell脚本得到宽带公网动态IP地址</title><link>https://wangye.org/posts/2022/02/bash-shell-to-find-dynmatic-public-ip-address.html</link><description>如何确定公网IP地址是一个让很多家用宽带朋友们经常遇到的问题，毕竟固定IP地址总是价格不菲因而不适用于家庭宽带，而我们的电信宽带运营商（ISP）往往给我们分配的是动态IP地址，之所以称作为动态IP地址，是因为每次拨号得到的IP地址可能会不一样，还有更骚的操作就是有的运营商每天或不定期在某个时间刷新IP地址池，这样已经获得的IP地址将会被强制释放并分配新的IP地址，这对于我们一些运行在家用带宽下的服务带来了影响——需要重新设置服务端IP地址，比如监控、网络存储等等，这时候DDNS就发挥作用的，现在大部分路由器内置了DDNS客户端，比如花生壳等服务客户端，但是这些客户端存在收费、不稳定以及刷新间隔小等问题，对于自己有域名的朋友可以使用DNS服务商的API自己实现IP更新操作，比如阿里云（Aliyun）、Cloudflare均可以实现。 对于DDNS如何使用API更新不在本文叙述范围内，但调用 …</description><author>sa@wangye.org</author><category>Server Management &amp; Tools</category><category>Scripting &amp; Automation</category><guid isPermaLink="false">b799c870-28fa-4452-8e40-e2cd47cc4b06</guid><pubDate>Sun, 20 Feb 2022 00:27:58 GMT</pubDate></item><item><title>FreePBX解决动态公网IP环境SIP地址更新问题</title><link>https://wangye.org/posts/2022/02/configure-freepbx-asterisk-sip-static-ip-with-dynamic-changes.html</link><description>记得很久以前看过一个留学生使用华为上网棒架设越洋VOIP服务器实现境外使用国内SIM卡拨打电话的文章，颇为有意思，操作简单来说就是购买华为特定型号的USB上网棒（Dongle Modem），手机卡使用特定运营商的SIM，当然这里选择最便宜的套餐，国内使用树莓派安装RasPBX系统，将上网棒接入树莓派，配置FreePBX之后就可以愉快使用树莓派接打电话或收发短信了，而且在地球的任意角落也可以通过互联网实现境内通话资费。 一直对这种新鲜Geek范儿的事情比较感兴趣，正好手头闲置有树莓派，于是动手实施，当然本着不折腾不舒服的理由，我没有直接安装RasPBX这个定制的系统，当然另外的考虑就是树莓派仅作为话务中心服务对于我来说没有充分榨干其价值，毕竟上面还跑有其他各种特殊的服务，于是参考了RasPBX的定制脚本开始了折腾之路......遗憾的是这个事情已经过去有六七年了，当时没有记录折腾的步骤，虽然 …</description><author>sa@wangye.org</author><category>Server Management &amp; Tools</category><category>Scripting &amp; Automation</category><guid isPermaLink="false">79e04a0b-8075-4464-b262-03f1a94846fe</guid><pubDate>Sat, 19 Feb 2022 05:14:52 GMT</pubDate></item><item><title>从Socket error丢失网络连接的Linux SSH恢复pts会话</title><link>https://wangye.org/posts/2022/02/restore-ssh-pts-session-after-socket-error.html</link><description>日常运维中经常会接触到SSH（Secure Shell，安全外壳协议），通过SSH登录到要管理的服务器，通过各种命令完成整个服务器的维护，这个过程在内网中或者网络质量较高的时候总是很顺畅，但是当网络质量比较差的时候就会出现意外断开连接的情况了，比如比较常见的报错Socket error Event: 32 Error: 10053，这时候往往需要我们重新发起SSH连接，问题是新发起的连接无法继续上一个连接执行的命令，比如在断开连接前我们在虚拟终端执行了一个需要长时间等待的Shell命令，但是命令没执行完网络中断了，实际上此时的命令仍然在执行，如果遇到需要交互的部分还会停下来，只是我们新的连接将看不到命令的输出，可以通过ps aux | grep 进程名定位到进程。本文将介绍对于此类问题的应对方法供参考 1 终端的概念 1.1 什么是TTY TTY 是 Teletype 或 …</description><author>sa@wangye.org</author><category>Server Management &amp; Tools</category><guid isPermaLink="false">c1cdae43-c89d-4885-9a38-63892e7afba3</guid><pubDate>Wed, 09 Feb 2022 04:34:26 GMT</pubDate></item><item><title>Bash Shell使用curl POST向Web API提交JSON</title><link>https://wangye.org/posts/2022/02/bash-shell-post-json-with-curl.html</link><description>一些项目中对外服务需要开放一些API接口，常见也是最易用的就是使用GET方式向URL传参查询字符串（Query String），这种方式的缺点主要有①传输的数据需要进行URL编码（URL Encode）；②受到URL最大长度限制，超过限制则有可能被Web服务器拒绝；③一种可能的安全缺陷就是Web服务器的日志有可能暴露敏感信息，比如查询字符串传递了密码，虽然使用HTTPS加密传输的URL能够避免被中间人拦截识别敏感信息，但是无法避免服务器端Web应用日志记录的问题，敏感信息可能会通过日志暴露给审计人员或者攻击者。 可能有读者会考虑使用POST方法是不是能够避免这些问题，确实对于复杂数据传输场景使用POST方式更为合适，因为POST请求的载荷（Payload）主要位于HTTP请求的主体（Body）部分，除非特殊配置，否则有效避免了②和③，对于①，常见的POST主体编码是表单模式，常见提交表单就 …</description><author>sa@wangye.org</author><category>Server Management &amp; Tools</category><category>Scripting &amp; Automation</category><guid isPermaLink="false">e730d678-219e-4133-8bf6-a0411abf7c6f</guid><pubDate>Fri, 04 Feb 2022 05:33:21 GMT</pubDate></item><item><title>nginx njs利用ipset集合实现黑名单（白名单）访问控制</title><link>https://wangye.org/posts/2022/01/nginx-njs-use-ipset-blacklist-or-whitelist-acl.html</link><description>nginx作为反向代理服务器一直以轻巧高效著称，在日常实践中我将其作为项目的反向代理应用前端并取得了不错的效果，这里记录nginx其中利用njs模块的脚本支持读取ipset黑名单（白名单）从而实现访问控制列表（Access Control List）的方法，做法仅供参考，如有想法欢迎评论提出。 1 主要背景 1.1 问题的提出 互联网环境日益复杂和危险，对于新上线的服务器主机来说，每天都将面临大量的漏洞扫描、DDoS攻击，对于配置不当或者存在安全漏洞的主机，很容易就会沦为跳板机或者挖矿机，继而攻击网络中其他主机或者白白消耗宝贵的计算资源，对于互联网威胁我认为有必要采取积极的防御策略。 1.2 基本的防御策略 主要有这几种手段：① 关注安全公告并及时打补丁避免漏洞；② 复杂的身份认证策略，避免弱口令存在于SSH或者数据库系统中，建议采取证书或者key方式完成认证流程；③ 最小权限划分原则，避 …</description><author>sa@wangye.org</author><category>Networking &amp; InfoSec</category><category>Server Management &amp; Tools</category><guid isPermaLink="false">914ba6aa-6801-4156-8893-7b2f5d849282</guid><pubDate>Sun, 23 Jan 2022 03:33:08 GMT</pubDate></item><item><title>网站平台由ASP.NET 5.0迁移到.NET 6.0</title><link>https://wangye.org/posts/2021/11/website-migrate-from-aspnet-core-5-to-6.html</link><description>本网站自从3月上线以来已经有8个月时间，期间也有各种bug，也勉强修复了，最初网站运行在.NET 5.0平台上，后来一直关注着.NET 6.0的进展，在微软正式Release的时候立马开始适配新的6.0平台，期间也遇到过各种坑，留有这篇文章仅做记载。 1 安装Visual Studio 2022 因为Visual Studio 2019不再支持NET 6.0 SDK，如果想继续在VS平台下开发，必须升级到Visual Studio 2022，对于个人来说我们选择Community版本就可以了，安装完成后选择用最新的VS2022打开你的项目。 2 升级NuGet Package到最新版本 由于我是等到.NET 6.0正式版出来的时候升级的，大部分的第三方包（Package）已经适配了.NET 6.0，可以直接升级，但仍然建议各位查阅项目官方的文档，特别是breaking changes以及用 …</description><author>sa@wangye.org</author><category>Web Development</category><guid isPermaLink="false">3dcdc8b6-5d0e-4c11-8990-b1bbced9c02e</guid><pubDate>Tue, 16 Nov 2021 05:34:37 GMT</pubDate></item><item><title>Linux环境.NET Core zh-CN中文语言问题</title><link>https://wangye.org/posts/2021/11/zh-cn-language-missing-in-net-core-under-linux.html</link><description>.NET Core多语言本地化支持可以让所开发的应用更加国际化，但是不同操作系统平台之间可能会遇到一些特有的部署问题，本文将介绍我在Linux环境下部署国际化应用过程中遇到的zh-CN中文资源丢失问题的解决方案，当然可能有其他更好的方案，这里不做推荐，本文操作使用的软件环境是Debian 11、ASP.NET 5.0、nginx，仅供参考。 1 多语言国际化应用的建立 .NET Core本地化方式参考《Globalization and localization in ASP.NET Core》，通常情况下，在Startup.cs的ConfigureServices部分会包含如下代码： services.AddLocalization(options =&gt; options.ResourcesPath = "Resources"); services.AddMvc()     . …</description><author>sa@wangye.org</author><category>Web Development</category><guid isPermaLink="false">a13869ff-20e4-47b2-aa3b-249a084aaff9</guid><pubDate>Mon, 15 Nov 2021 07:19:41 GMT</pubDate></item><item><title>Docker桥接网络开启IPv6支持</title><link>https://wangye.org/posts/2021/06/enable-docker-ipv6-support.html</link><description>Docker默认是不开启IPv6支持的，但是我们某些业务往往又需要IPv6的支持，特别是IPv6普及大势所趋，本文主要介绍的是如何开启Docker桥接网络IPv6支持，这篇文章具体操作仅供参考，建议以官方文档为准。 本文最重要的先决条件是主机商已经分配给你一个公网IPv6地址段，我们可以通过查看主机控制面板中信息、询问主机供应商或者直接SSH登录主机使用命令ip -f inet6 addr show eth0获取。命令方式获取的ipv6地址输出如下： 6: eth0:  mtu 9000      inet6 2607:f0d0:1002:51::4/64 scope global         valid_lft forever preferred_lft forever     inet6 fe80::230:48ff:fe33:bc33/64 scope link …</description><author>sa@wangye.org</author><category>Networking &amp; InfoSec</category><category>Server Management &amp; Tools</category><guid isPermaLink="false">e12c27a6-774c-493b-8431-9033aeb19031</guid><pubDate>Fri, 18 Jun 2021 20:13:17 GMT</pubDate></item></channel></rss>