Anduin Xue

let today = new Beginning();

Service engineering Skills and IT capabilities for operating and maintaining online services.


Aiursoft 事故调查、分析与总结

本篇博客详细记录了对Aiursoft发生的一次事故的调查、分析和总结过程。在NFS服务器的两块NVME固态都在线,机械硬盘也在线的情况下,发现了两次运行`zfs list -t snapshot`的结果不一致的问题,这引发了作者对数据安全的担忧。通过一系列的探究和实验,作者发现了两个zfs dataset的MOUNTPOINT竟然是同一个目录,这是ZFS不允许的。尽管遇到了无法卸载`/mnt/nvme`的问题,但作者通过重启NFS服务,成功地将两个dataset的MOUNTPOINT改为不同的目录,解决了NFS服务器的问题。 然而,这只是问题的一部分。作者还发现在事故发生时,由于数据中心的HA系统认为系统已经损坏,不停尝试将VM迁移,甚至对ESXI进行了关机,这导致了恢复数据中心时遇到了非常多的问题。经过大约3个小时的修复工作,数据中心最终恢复了正常。 而对于出现这一系列问题的原因,作者通过仔细阅读备份脚本和在试验室运行上述脚本得到了答案。这次事故的调查、分析和总结,不仅解决了问题,也为我们提供了一次深入理解和应对系统故障的机会。那么,你是否已经理解并掌握了这次事故的处理过程和原因呢?--GPT 4


在服务器中部署单独的Docker应用

本文针对在虚拟机(VM)中部署Docker应用的场景进行了详细的讨论。这种场景可能出现在数据中心仍基于VM部署,而某些业务只提供Docker映像的情况下。文章首先讨论了这种混合部署的挑战,包括管理复杂性的提升,以及未来发展方向的确定。然后,文章详细介绍了在VM中安装Docker、确定容器需要穿透的卷、确定端口映射、管理容器和VM、确保容器会随着主机开启、对容器升级以及直接操作容器的方法。文章指出,虽然容器的升级相对容易,但在实际部署中,我们还需要采用一些“笨办法”以确保新版本的容器能正确加载和使用持久化卷,并与之前的版本兼容。最后,文章强调在混合部署中,需要对容器和VM进行分别管理,并需要对容器的持久化卷和端口映射进行规划和管理,以确保系统的稳定性和可靠性。同时,也需要考虑未来的发展方向,逐步向基于容器的部署模式转变。那么,你是否已经准备好在VM中部署Docker应用了呢?--GPT 4

bash Linux Ubuntu Docker VM Container

Use your own cert to sign your package to identify your code identity.

This blog post offers a comprehensive guide on using a digital certificate to sign code and establish identity in the digital world. It first explains the concept of digital certificates, which are split into public and private keys. The public key is made available online for others to trust, while the private key is used to sign content. The post further elaborates on the subject and friendly name fields in a digital certificate. The subject field contains identity verification information, while the friendly name is an optional field used for easier identification and management of the certificate. For HTTPS certificates, the subject field typically includes the domain name or hostname of the certificate holder, which is crucial for ensuring secure communication. The blog then provides a step-by-step guide on generating a self-signed certificate and obtaining the private key. It also explains how to make the public key trusted by others. By generating a self-signed certificate and...--GPT 4

C# Certificate .NET Windows Sign Digicert Code Sign Signature nuget

Using ZFS is easy

ZFS is a modern file system with features such as copy-on-write, redirect-on-write, deduplication, and snapshots, making it suitable for large-scale storage and data management scenarios. It operates on the concept of storage pools, where a pool manages disks and provides storage space. Datasets can be created on top of these pools, which don't require allocated space and can utilize the entire storage capacity of the pool. Each dataset is mapped as a directory for file storage and organization. The blog post provides a detailed guide on how to install ZFS, locate your disk, list sets and pools, and manage pools and sets. It also explains how to use the deduplication property to remove redundant data from your ZFS file systems, resulting in only unique data being stored and common components being shared between files. Additionally, the blog post discusses the use of snapshots, which record the state of the file system at a specific point in time. This feature allows for easy resto...--GPT 4

bash Linux Disk ZFS File Sysytem Raid Dedup

Common SMTP settings to Office 365 to send Emails

本篇博客主要讲述了如何使用Office 365的SMTP设置为不同的开源软件配置电子邮件发送功能。文章分别介绍了如何为Gitea、GitLab、Mastodon、Nextcloud和Azure DevOps配置SMTP设置。 在Gitea部分,作者提供了一个配置文件示例,展示了如何在`/etc/gitea/app.ini`文件中设置SMTP相关参数。配置包括启用邮件发送功能、设置SMTP服务器地址、端口、用户名、密码等信息。 对于GitLab,作者给出了一个Ruby配置代码片段,展示了如何在`/etc/gitlab/gitlab.rb`文件中配置SMTP。配置内容与Gitea类似,包括服务器地址、端口、用户名、密码等信息,同时还包括了启用TLS等设置。 在Mastodon部分,作者展示了如何在`/home/mastodon/live/.env.production`文件中设置SMTP。配置内容与前两者类似,包括服务器地址、端口、用户名、密码等信息。 对于Nextcloud,作者首先提醒读者打开管理员设置页面,然后展示了如何在网页界面上配置SMTP。配置内容与前述软件类似,包括服务器地址、端口、用户名、密码等信息,并给出了禁用TLS的建议。 最后,作者为Azure DevOps提供了一张配置SMTP的截图,展示了如何在Azure DevOps的网页界面上配置SMTP。配置内容与前述软件类似,包括服务器地址、端口、用户名、密码等信息。 通过本篇博客,读者可以了解如何为不同的开源软件配置Office 365的SMTP设置,从而使这些软件具备发送电子邮件的功能。在实际操作中,读者可能需要根据自己的需求调整配置参数。同时,如果在配置过程中遇到问题,尝试更改TLS设置可能会有所帮助。在实际应用中,你是否遇到过类似的配置需求?在解决问题时,你是否有其他的经验和建议?--GPT 4

Microsoft 365 Mastodon GitLab Gitea SMTP Office365 Exchange

Install GitLab behind a reverse proxy on a Ubuntu 20.04\22.04 server

本篇博客详细介绍了如何在Ubuntu 20.04/22.04服务器上安装GitLab,并将其部署在反向代理之后。首先,博客讲述了如何安装和配置GitLab,接着演示了如何配置Nginx作为反向代理。为了解决SSH端口冲突的问题,文章还讨论了如何在GitLab服务器上使用2202端口作为克隆端口,并在代理服务器上进行端口转发。此外,博客还介绍了如何为GitLab实例添加运行器,并提供了一个示例项目,用于测试运行器的功能。最后,博客提供了一个完整的`.gitlab-ci.yml`配置文件示例,用于实现项目的构建、代码分析、测试和发布等任务。 在阅读本篇博客后,您将了解如何在Ubuntu服务器上部署GitLab,并配置反向代理以实现安全的访问。同时,您还可以借助本文提供的示例项目和`.gitlab-ci.yml`配置文件,快速实现项目的自动化构建和测试。在实践中,您可能需要根据自己的需求对配置进行调整,以满足不同的项目类型和技术栈。 那么,在配置GitLab和反向代理的过程中,可能会遇到哪些问题?如何确保GitLab运行器能够正确地执行任务?如何根据项目需求定制`.gitlab-ci.yml`配置文件?阅读全文,自己找到答案吧!--GPT 4

bash git Linux Ubuntu Proxy SSH Caddy GitLab nginx

How to install CUDA and cuDNN on Ubuntu 22.04 and test if its installed successfully

本篇博客详细介绍了如何在Ubuntu 22.04上安装CUDA和cuDNN,并测试它们是否安装成功。首先,博客提供了安装CUDA的下载链接以及具体的安装步骤。接下来,博客提供了安装cuDNN的下载链接和详细的安装步骤。文章还介绍了如何确认驱动程序是否已安装,以及如何检查CUDA和cuDNN是否已安装。 为了测试CUDA是否安装成功,博客提供了一个简单的“Hello CUDA”程序,并展示了如何编译和运行它。同样,博客也展示了如何测试cuDNN是否安装成功,通过运行一个简单的示例程序。 在阅读本篇博客后,读者应该能够顺利地在Ubuntu 22.04上安装CUDA和cuDNN,并确保它们已成功安装。此外,本文还提供了一些有用的命令来检查驱动程序、CUDA和cuDNN的安装状态和版本信息。 最后,你是否知道如何在自己的Ubuntu系统上安装CUDA和cuDNN?如何确保它们已成功安装并运行?阅读全文以获取详细的操作步骤和示例代码。--GPT 4

Ubuntu NVIDIA vGPU CUDA cuDNN GPU

让你的数据中心使用 GPU 算力!

本文介绍了如何在数据中心中使用 GPU 算力。首先,文章详细描述了安装并配置 NVIDIA Grid 驱动的过程,包括修改配置文件、添加许可等。接着,介绍了如何安装 CUDA,并给出了一些注意事项。文章还讨论了如何确保虚拟机可以在主机之间平滑迁移,并给出了在 VCenter Server 中开启迁移的方法。此外,文章提及了如何划分 SKU,以便提前规划每个物理 GPU 的切分方式。最后,文章介绍了如何开始炼丹,包括安装 cuDNN、使用 GPU 进行硬件加速编码以及运行 AI 应用。文章还提供了一些监控温度的方法,以便在家中服务器降低噪音。如果遇到问题,文章给出了一些建议和检查事项。那么,在这个过程中,哪些因素可能会影响 GPU 算力的使用?如何确保充分利用 GPU 算力以提高数据中心的性能?--GPT 4

Ubuntu VMware Vsphere Server NVIDIA Ai vGPU Python Tesla CUDA

自己独立运营一个面向你的朋友的 AI 绘画系统(基于 Stable Diffusion)

本篇博客介绍了如何独立运营一个面向朋友的AI绘画系统,基于Stable Diffusion。文章首先建议限制某些功能,以避免暴露给朋友的任意Prompt填写导致的潜在危险。接下来,博客详细介绍了如何编辑`ui-config.json`文件来限制Stable Diffusion画色图的功能,并提供了一份示例配置。 文章还建议编辑`user.css`文件,隐藏一些可能让人困惑的按钮,提供了相应的CSS代码。最后,博客介绍了如何使用FRPC和Caddy将Stable Diffusion暴露到公网,并使用加密通信。文章给出了一个搭建成功的示例网址,并提供了FRP和Caddy的使用教程链接。 在阅读本文后,你是否对如何独立运营一个面向朋友的AI绘画系统有了更清晰的认识?如何确保系统的安全性和用户体验?如何将本地服务暴露到公网并保证通信安全?希望这篇博客能为你提供启发和帮助。--GPT 4

Web Server Tune Stable Diffusion Ai Self hosting

存储、计算、显示分离的游戏体验

本文探讨了存储、计算和显示分离的游戏体验。通常,大多数人会在家里组装一台电脑来满足游戏需求,但这种方法存在一些缺点。本文详细分析了这些缺点,并提出了一种新的解决方案,即将存储、计算和显示分离。 文章首先指出,多台设备意味着需要在每台设备上重复安装游戏,而且不同设备之间的性能可能不同,导致游戏体验也截然不同。因此,作者提出了将存储、计算和显示分离的方法。这样,可以让存储设备承担游戏数据的存储,让游戏主机负责游戏的渲染和计算,再让平板、手机负责游戏画面的展示。 文章接着讨论了实现这种分离的具体方法。首先,需要准备一个存储设备,可以选择自己搭建NAS或购买一台群晖。其次,计算设备和平时的游戏电脑没有太大区别,只是不需要安装太大的硬盘。最后,显示设备可以选择iPad或安卓平板,并使用Moonlight这样的应用来实现游戏画面的串流。 为了实现存储与计算分离,需要选择合适的通信协议。作者推荐使用ISCSI、NFS或SMB。如果遇到某些游戏无法识别远程路径的问题,可以尝试在远程路径上创建一个VHDX文件,然后挂载为本地硬盘。 总之,通过将存储、计算和显示分离,可以充分发挥每个设备的优势,实现在不同设备上的优质游戏体验。这种方法可以解决传统游戏设备无法满足多设备需求的问题,让游戏体验更加丰富和便捷。那么,你是否会尝试这种新的游戏体验呢?--GPT 4

Game Storage Disk Gaming NVIDIA Steam

Interface selection when Linux has multiple network interface at the same time

本篇博客讨论了一个在Linux设备上使用多个网络接口时遇到的问题,以及如何解决这个问题。在一个数据中心中,作者创建了多个子网,并将Linux设备的两个接口同时连接到这两个子网上。问题在于,当尝试访问互联网时,可能会出现“目标主机不可达”的错误消息。通过运行`ip route list`,作者发现蓝色网络具有较高的优先级,这是问题的根本原因。 为了解决这个问题,首先需要查看当前的路由表,可以使用`ip route list`命令。然后需要删除现有的默认路由,使用`ip route del default`命令。接下来,使用`sudo ip route add default via 172.16.50.1 dev ens160 proto dhcp metric 102`命令为具有较低度量值的网络接口添加新的默认路由。最后,可以使用`ip route get 8.8.8.8`命令询问Linux将使用哪个接口发送数据包到特定的IP地址,或者尝试连接互联网,例如使用`ping www.baidu.com`命令。 总之,如果在Linux设备上有多个默认路由,可以通过删除并使用较低度量值重新添加它们来调整优先级。这样就可以确保在具有多个网络接口的情况下,Linux设备能够正确地访问互联网。--GPT 4

IP Linux Network Routing Interface

Read from joystick output based on C#

在本篇博客中,我们将探讨如何使用C#语言从游戏操纵杆上读取输出。文章以购买Thrustmaster TCA空客油门为例,作者计划将其用于控制数据中心服务器的风扇速度。 首先,需要安装`SharpDX.DirectInput`库。安装完成后,我们可以运行一段代码来从`GameControl`中读取数据。同样地,也可以从其他类型(如`Joystick`)中读取。 本文提供了一段简单的C#代码示例,展示了如何使用DirectInput库获取设备信息、实例化操纵杆对象、设置缓冲区大小并获取操纵杆的输入数据。通过不断轮询操纵杆并获取缓冲数据,我们可以实时查看操纵杆的状态变化。 这篇博客为我们提供了一个有趣的应用场景,即使用游戏操纵杆控制数据中心服务器的风扇速度。这让我们思考,游戏操纵杆在其他领域还有哪些潜在的应用呢?如何将这种控制方式应用到其他设备上,以提供更直观、更有趣的交互方式?在探索这些问题的过程中,我们可能会发现更多有趣的应用场景和创新点。--GPT 4

Game SharpDX DirectInput Joystick