<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Tutorial on Youqing Han - DevOps Engineer</title>
    <link>https://hanyouqing.com/categories/tutorial/</link>
    <description>Recent content in Tutorial on Youqing Han - DevOps Engineer</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <managingEditor>ihanyouqing#gmail.com (#->@) (Youqing Han)</managingEditor>
    <webMaster>ihanyouqing#gmail.com (#->@) (Youqing Han)</webMaster>
    <lastBuildDate>Mon, 15 Sep 2025 10:00:00 +0800</lastBuildDate>
    <atom:link href="https://hanyouqing.com/categories/tutorial/feed.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Comprehensive DNS Guide</title>
      <link>https://hanyouqing.com/blog/2025/09/comprehensive-dns-guide/</link>
      <pubDate>Mon, 15 Sep 2025 10:00:00 +0800</pubDate><author>ihanyouqing#gmail.com (#->@) (Youqing Han)</author>
      <guid>https://hanyouqing.com/blog/2025/09/comprehensive-dns-guide/</guid>
      <description>&lt;h1 id=&#34;comprehensive-dns-guide&#34;&gt;Comprehensive DNS Guide&lt;/h1&gt;&#xA;&lt;p&gt;DNS (Domain Name System) is one of the most fundamental technologies in modern internet infrastructure. As a DevOps or SRE engineer, understanding DNS is crucial for troubleshooting, performance optimization, and system reliability. This comprehensive guide covers all DNS concepts you need to know for real-world scenarios and technical implementations.&lt;/p&gt;&#xA;&lt;h2 id=&#34;table-of-contents&#34;&gt;Table of Contents&lt;/h2&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#dns-fundamentals&#34;&gt;DNS Fundamentals&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#dns-record-types&#34;&gt;DNS Record Types&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#dns-resolution-process&#34;&gt;DNS Resolution Process&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#dns-caching-mechanisms&#34;&gt;DNS Caching Mechanisms&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#dns-security&#34;&gt;DNS Security&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#performance-optimization&#34;&gt;Performance Optimization&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#troubleshooting-dns-issues&#34;&gt;Troubleshooting DNS Issues&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#cloud-dns-services&#34;&gt;Cloud DNS Services&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#monitoring-and-alerting&#34;&gt;Monitoring and Alerting&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;#common-dns-scenarios-and-solutions&#34;&gt;Common DNS Scenarios and Solutions&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;dns-fundamentals&#34;&gt;DNS Fundamentals&lt;/h2&gt;&#xA;&lt;h3 id=&#34;what-is-dns&#34;&gt;What is DNS?&lt;/h3&gt;&#xA;&lt;p&gt;DNS is a hierarchical, distributed naming system that translates human-readable domain names (like hanyouqing.com) into IP addresses (like 104.21.25.158) that computers use to identify each other on the network.&lt;/p&gt;</description>
    </item>
    <item>
      <title>CentOS下Nginx配置地理访问控制：限制仅允许特定地区/国家访问</title>
      <link>https://hanyouqing.com/blog/2025/09/nginx-geo-access-control-centos/</link>
      <pubDate>Mon, 01 Sep 2025 10:00:00 +0800</pubDate><author>ihanyouqing#gmail.com (#->@) (Youqing Han)</author>
      <guid>https://hanyouqing.com/blog/2025/09/nginx-geo-access-control-centos/</guid>
      <description>&lt;h2 id=&#34;概述&#34;&gt;概述&lt;/h2&gt;&#xA;&lt;p&gt;需求来自某好友某生产环境，有古老的应用运行于远古的操作系统之上，年久失修，无人维护。某日，或老板/或领导/或客户，心血来潮提出一些需求，比如根据访问者的地理位置来限制对网站或API的访问。以应对以下场景：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;合规性要求（如GDPR、数据本地化）&lt;/li&gt;&#xA;&lt;li&gt;许可证限制（某些服务仅在特定国家可用）&lt;/li&gt;&#xA;&lt;li&gt;安全防护（阻止来自特定地区的恶意流量）&lt;/li&gt;&#xA;&lt;li&gt;业务需求（仅服务特定市场）&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;本文将详细介绍在CentOS系统上配置Nginx实现地理访问控制的多种方法。&lt;/p&gt;&#xA;&lt;h2 id=&#34;方法一使用nginx-geoip模块推荐&#34;&gt;方法一：使用Nginx GeoIP模块（推荐）&lt;/h2&gt;&#xA;&lt;p&gt;&lt;strong&gt;注意：CentOS 7兼容性&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;在CentOS 7上，默认的Nginx包可能不包含GeoIP模块。如果遇到模块缺失问题，请参考以下解决方案：&lt;/p&gt;&#xA;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;检查现有Nginx是否支持GeoIP&lt;/strong&gt;：&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nginx -V 2&amp;gt;&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep -o with-http_geoip_module&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;如果支持，直接使用；如果不支持，选择以下方案之一&lt;/strong&gt;：&#xA;&lt;ul&gt;&#xA;&lt;li&gt;使用防火墙规则（方法二）&lt;/li&gt;&#xA;&lt;li&gt;使用第三方服务（方法三）&lt;/li&gt;&#xA;&lt;li&gt;重新编译Nginx（见下方安装步骤）&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h3 id=&#34;1-安装geoip模块&#34;&gt;1. 安装GeoIP模块&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 安装EPEL仓库&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo yum install -y epel-release&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 安装GeoIP工具和数据库&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;yum -y install GeoIP GeoIP-devel GeoIP-data.noarch GeoIP geoipupdate geoipupdate-cron&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 检查Nginx是否已安装GeoIP模块&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;nginx -V 2&amp;gt;&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep -o with-http_geoip_module&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 如果没有GeoIP模块，需要重新编译Nginx&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 安装编译依赖&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo yum groupinstall -y &lt;span class=&#34;s2&#34;&gt;&amp;#34;Development Tools&amp;#34;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo yum install -y pcre-devel zlib-devel openssl-devel libxml2-devel libxslt-devel gd-devel perl-devel perl-ExtUtils-Embed&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 安装Google perftools（如果启用该模块）&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo yum install -y gperftools gperftools-devel&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 下载Nginx源码并编译（如果需要）&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;wget http://nginx.org/download/nginx-1.28.0.tar.gz&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;tar -xvf nginx-1.28.0.tar.gz&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;nb&#34;&gt;cd&lt;/span&gt; nginx-1.28.0&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 参数从原 nginx -V 中获取，追加 --with-http_geoip_module &lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;./configure --prefix&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/share/nginx --sbin-path&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/sbin/nginx --modules-path&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/lib64/nginx/modules --conf-path&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/etc/nginx/nginx.conf --error-log-path&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/var/log/nginx/error.log --http-log-path&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/var/log/nginx/access.log --http-client-body-temp-path&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/var/lib/nginx/tmp/client_body --http-proxy-temp-path&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/var/lib/nginx/tmp/proxy --http-fastcgi-temp-path&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/var/lib/nginx/tmp/fastcgi --http-uwsgi-temp-path&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/var/lib/nginx/tmp/uwsgi --http-scgi-temp-path&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/var/lib/nginx/tmp/scgi --pid-path&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/run/nginx.pid --lock-path&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/run/lock/subsys/nginx --user&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;nginx --group&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;nginx --with-compat --with-debug --with-file-aio --with-google_perftools_module --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_degradation_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_image_filter_module&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;dynamic --with-http_mp4_module --with-http_perl_module&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;dynamic --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-http_xslt_module&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;dynamic --with-mail&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;dynamic --with-mail_ssl_module --with-pcre --with-pcre-jit --with-stream&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;dynamic --with-stream_ssl_module --with-stream_ssl_preread_module --with-threads --with-cc-opt&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -m64 -mtune=generic&amp;#39;&lt;/span&gt; --with-ld-opt&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;&lt;span class=&#34;s1&#34;&gt;&amp;#39;-Wl,-z,relro -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -Wl,-E&amp;#39;&lt;/span&gt; --with-http_geoip_module &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;make &lt;span class=&#34;o&#34;&gt;&amp;amp;&amp;amp;&lt;/span&gt; sudo make install&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 检查Nginx是否支持GeoIP模块&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;/usr/sbin/nginx -V 2&amp;gt;&lt;span class=&#34;p&#34;&gt;&amp;amp;&lt;/span&gt;&lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep -o with-http_geoip_module&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;2-下载maxmind-geoip数据库&#34;&gt;2. 下载MaxMind GeoIP数据库&lt;/h3&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# # 创建目录&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# sudo mkdir -pv /usr/share/GeoIP&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# # 下载GeoIP2数据库（需要Nginx支持geoip2模块）&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# wget -P /usr/share/GeoIP https://github.com/P3TERX/GeoLite.mmdb/raw/download/GeoLite2-ASN.mmdb&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# wget -P /usr/share/GeoIP https://github.com/P3TERX/GeoLite.mmdb/raw/download/GeoLite2-Country.mmdb&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# wget -P /usr/share/GeoIP https://github.com/P3TERX/GeoLite.mmdb/raw/download/GeoLite2-City.mmdb&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# ln -s /usr/share/GeoIP/GeoLite2-Country.mmdb /usr/share/GeoIP/GeoLite2-Country.dat&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# 验证数据库文件&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ls -la /usr/share/GeoIP/&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;geoiplookup 8.8.8.8&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id=&#34;3-配置nginx&#34;&gt;3. 配置Nginx&lt;/h3&gt;&#xA;&lt;p&gt;在&lt;code&gt;/etc/nginx/nginx.conf&lt;/code&gt;中添加：&lt;/p&gt;</description>
    </item>
    <item>
      <title>Complete macOS Development Environment Setup for SRE/DevOps Engineers</title>
      <link>https://hanyouqing.com/blog/2025/09/macos-devops-environment-setup/</link>
      <pubDate>Mon, 01 Sep 2025 00:00:00 +0000</pubDate><author>ihanyouqing#gmail.com (#->@) (Youqing Han)</author>
      <guid>https://hanyouqing.com/blog/2025/09/macos-devops-environment-setup/</guid>
      <description>&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;This guide is a synthesis of my personal configuration journey and best practices for SRE/DevOps engineers. It details how to set up a robust, reproducible macOS development environment, covering essential tools, configuration management, and automation strategies. The goal is to make environment setup painless, portable, and scalable—whether you’re starting over, joining a new team, or enabling seamless collaboration.&lt;/p&gt;&#xA;&lt;h2 id=&#34;prerequisites&#34;&gt;Prerequisites&lt;/h2&gt;&#xA;&lt;p&gt;Before we begin, ensure you have:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;macOS 12.0 (Monterey) or later&lt;/li&gt;&#xA;&lt;li&gt;Administrator access to your machine&lt;/li&gt;&#xA;&lt;li&gt;Basic familiarity with command line operations&lt;/li&gt;&#xA;&lt;li&gt;A GitHub account for configuration storage&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;core-development-tools&#34;&gt;Core Development Tools&lt;/h2&gt;&#xA;&lt;p&gt;Install required develop tools &amp;amp; Set update/upgrade&lt;/p&gt;</description>
    </item>
    <item>
      <title>Infrastructure as Code Pipeline: Architecture with Terraform, GitHub Actions, and OCI Always Free Resources</title>
      <link>https://hanyouqing.com/blog/2025/08/infrastructure-as-code-pipeline/</link>
      <pubDate>Fri, 22 Aug 2025 00:00:00 +0000</pubDate><author>ihanyouqing#gmail.com (#->@) (Youqing Han)</author>
      <guid>https://hanyouqing.com/blog/2025/08/infrastructure-as-code-pipeline/</guid>
      <description>&lt;div class=&#34;callout bg-blue-50 border-l-4 border-blue-200 p-4 my-6 rounded-r-lg&#34;&gt;&#xA;  &lt;div class=&#34;flex items-start&#34;&gt;&#xA;    &lt;div class=&#34;flex-shrink-0&#34;&gt;&#xA;      &lt;svg class=&#34;w-5 h-5 text-blue-800&#34; fill=&#34;none&#34; stroke=&#34;currentColor&#34; viewBox=&#34;0 0 24 24&#34;&gt;&#xA;        &lt;path stroke-linecap=&#34;round&#34; stroke-linejoin=&#34;round&#34; stroke-width=&#34;2&#34; d=&#34;M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z&#34;&gt;&lt;/path&gt;&#xA;      &lt;/svg&gt;&#xA;    &lt;/div&gt;&#xA;    &lt;div class=&#34;ml-3 flex-1&#34;&gt;&#xA;      &#xA;      &lt;div class=&#34;text-sm text-blue-800 prose prose-sm max-w-none&#34;&gt;&#xA;        This article demonstrates a production-ready Infrastructure as Code pipeline that leverages OCI&amp;rsquo;s Always Free tier resources, making it perfect for learning, development, and small-scale production workloads.&#xA;      &lt;/div&gt;&#xA;    &lt;/div&gt;&#xA;  &lt;/div&gt;&#xA;&lt;/div&gt; &#xA;&#xA;&lt;h2 id=&#34;introduction&#34;&gt;Introduction&lt;/h2&gt;&#xA;&lt;p&gt;Infrastructure as Code (IaC) has revolutionized how we manage cloud infrastructure. By treating infrastructure configuration as code, we gain version control, automated deployments, consistency, and reproducibility. In this article, I&amp;rsquo;ll walk you through building a complete IaC pipeline using Terraform, GitHub Actions, and Oracle Cloud Infrastructure (OCI) Always Free resources.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Marp Slide Demo - DevOps Best Practices</title>
      <link>https://hanyouqing.com/slides/2025-09/marp-slide-demo/</link>
      <pubDate>Mon, 27 Jan 2025 00:00:00 +0000</pubDate><author>ihanyouqing#gmail.com (#->@) (Youqing Han)</author>
      <guid>https://hanyouqing.com/slides/2025-09/marp-slide-demo/</guid>
      <description>&lt;p&gt;This is a demonstration of how Marp slides can be integrated with Hugo for creating professional technical presentations. The slides are defined in the front matter and rendered using the Marp template system.&lt;/p&gt;&#xA;&lt;h2 id=&#34;features-demonstrated&#34;&gt;Features Demonstrated&lt;/h2&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;Title Slides&lt;/strong&gt;: Professional opening and closing slides&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Content Slides&lt;/strong&gt;: Regular content with bullet points and formatting&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Code Slides&lt;/strong&gt;: Syntax-highlighted code examples&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Section Slides&lt;/strong&gt;: Clear section dividers&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Navigation&lt;/strong&gt;: Keyboard and mouse navigation&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Responsive Design&lt;/strong&gt;: Works on desktop and mobile&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Fullscreen Mode&lt;/strong&gt;: Professional presentation mode&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;usage&#34;&gt;Usage&lt;/h2&gt;&#xA;&lt;p&gt;To use this Marp integration in your own content:&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
