Mac Mini Goes Cloud: Building Your Own Private Cloud Workstation

Mac Mini Goes Cloud: Building Your Own Private Cloud Workstation Preface As a programmer, I’ve been thinking about how to protect company data security while flexibly managing my personal development environment. The company’s HBI computer has strict information security monitoring, which is necessary, but it also means my personal projects, learning materials, and development tools are not suitable for the company computer. After some tinkering, I found a perfect solution: place a Mac Mini at home and make it “go to the cloud” through intranet penetration technology to achieve access from anywhere. This article will share my entire setup process in detail. ...

2025-11-14 · 10 min · geekhuashan

One-Click Blog Publishing with Claude Agent Skills: From Complex Workflow to Natural Language Interaction

One-Click Blog Publishing with Claude Agent Skills: From Complex Workflow to Natural Language Interaction Introduction: From Multi-Step to One Sentence Imagine these two blog publishing experiences: Traditional Way (even with automation scripts): # 1. Security check ./check_sensitive.sh # 2. Publish article python publish.py \ -f "ready/article.md" \ -t "Article Title" \ -c tech \ --tags "tag1,tag2" \ -d "Article description" # 3. Sync to Obsidian python sync.py # 4. Preview cd blog && hugo server -D # 5. Deploy cd blog && hugo && git add . && git commit -m "..." && git push Using Claude Agent Skills: ...

2025-11-14 · 14 min · geekhuashan

Complete Configuration Guide for Setting up Emby on FNOS System

Complete Configuration Guide for Setting up Emby on FNOS System System Environment Hardware: PVE Virtual Machine System: FNOS (Debian-based) Network: PVE VM, gateway is Mac Mini (192.168.71.100) FNOS IP: 192.168.71.9 FNOS Management Port: 5666 Objectives Install Emby Server via Docker Mount cloud storage (115 Cloud, Baidu Cloud, etc.) via CloudDrive2 Emby reads content from cloud storage Enable remote access via FRP MetaTube Plugin: Provide complete metadata scraping for adult content Part 1: Basic Environment Setup 1.1 SSH Login and Root Access # SSH login to FNOS ssh username@192.168.71.9 # Get root privileges sudo -i 1.2 Create Directory Structure # Create the following directory structure in file manager: /vol1/1000/ ├── Docker/ │ ├── emby/ │ │ ├── config/ │ │ └── metadata/ │ └── clouddrive2/ │ └── config/ ├── CloudNAS/ # For mounting cloud storage └── Media/ └── Videos/ # Local videos (optional) Part 2: Configure Docker Mount Sharing 2.1 Set Docker Mount to Shared Mode # Create Docker service configuration directory sudo mkdir -p /etc/systemd/system/docker.service.d/ # Create mount sharing configuration sudo cat <<EOF > /etc/systemd/system/docker.service.d/clear_mount_propagation_flags.conf [Service] MountFlags=shared EOF # Restart Docker service sudo systemctl restart docker.service Part 3: Install CloudDrive2 3.1 Install CloudDrive2 via Command Line # Remove any existing CloudDrive2 containers (if any) docker stop clouddrive2 2>/dev/null || true docker rm clouddrive2 2>/dev/null || true # Create CloudDrive2 container docker run -d \ --name clouddrive2 \ --restart=unless-stopped \ --env CLOUDDRIVE_HOME=/Config \ -v /vol1/1000/CloudNAS:/CloudNAS:shared \ -v /vol1/1000/Docker/clouddrive2/config:/Config \ --network host \ --pid host \ --privileged \ --device /dev/fuse:/dev/fuse \ cloudnas/clouddrive2 3.2 Configure Cloud Storage Mounting Access CloudDrive2 management interface: http://192.168.71.9:19798 Login to your CloudDrive2 account (requires lifetime membership) Add mount point: Name: 115 (or other cloud storage name) Mount Point: Select CloudNAS directory Auto-mount on startup: Check User ID: 0 Group ID: 0 Permissions: 0755 3.3 Verify Mount # Check mount status ls -la /vol1/1000/CloudNAS/ # Should see cloud storage folders, like: 115, baidu, etc. Part 4: Install Emby Server 4.1 Install Emby via Command Line # Remove any existing Emby containers (if any) docker stop emby 2>/dev/null || true docker rm emby 2>/dev/null || true # Create Emby container docker run -d \ --name emby \ -p 8096:8096 \ -p 8920:8920 \ -e TZ=Asia/Shanghai \ -e UID=0 \ -e GID=0 \ --privileged=true \ --device /dev/dri:/dev/dri \ -v /vol1/1000/Docker/emby/config:/config \ -v /vol1/1000/CloudNAS:/media:shared \ -v /vol1/1000/Docker/emby/metadata:/metadata \ --restart=unless-stopped \ --network host \ emby/embyserver:latest 4.2 Verify Emby Can Access Cloud Storage # Enter Emby container to check mount docker exec -it emby sh ls -la /media/ ls -la /media/115/ # Should see 115 cloud storage content exit 4.3 Configure Emby Access Emby management interface: http://192.168.71.9:8096 Complete initial setup Add media library: Type: Movies/TV Shows Path: /media/115/movie/ (based on actual cloud storage directory structure) Add other cloud storage paths as needed Part 5: Configure FRP Remote Access 5.1 Download and Install FRP # Download latest FRP version cd /opt wget https://github.com/fatedier/frp/releases/download/v0.64.0/frp_0.64.0_linux_amd64.tar.gz tar -xzf frp_0.64.0_linux_amd64.tar.gz cd frp_0.64.0_linux_amd64 5.2 Create FRP Client Configuration # Create configuration file cat > frpc.toml << 'EOF' [common] server_addr = "101.132.148.140" server_port = 7000 [fnos_auth] method = "token" token = "Qws@33615336" [fnos_transport] protocol = "tcp" tls_enable = true [fnos_web_5666] type = "tcp" local_ip = "127.0.0.1" local_port = 5666 remote_port = 5666 [fnos_emby_8096] type = "tcp" local_ip = "127.0.0.1" local_port = 8096 remote_port = 8096 [fnos_ssh_2233] type = "tcp" local_ip = "127.0.0.1" local_port = 22 remote_port = 2233 EOF Note: ...

2025-11-13 · 7 min · geekhuashan

Quick Guide to Setting up Emby Media System on Generic VPS

🚀 Quick Guide to Setting up Emby Media System on Generic VPS 🧠 Overview This tutorial teaches you how to build a complete media system on a VPS, based on Docker environment, achieving: CloudDrive2: Mount cloud storage resources like Baidu Cloud, Aliyun Drive, etc. Emby: Media server for managing and streaming videos online MetaTube: Advanced scraping plugin for Emby that automatically completes video metadata, covers, and actor information The advantages of this solution are: ...

2025-11-13 · 4 min · geekhuashan

Git Basics and Workflow Practices: A Complete Guide from Principles to Team Collaboration

In software development, a clear workflow is the cornerstone of efficient collaboration and stable releases. This article summarizes a Git workflow validated across multiple projects. It’s suitable for both individual developers iterating quickly and teams collaborating at scale. The core design follows three principles: three-tier environment isolation, semantic version management, and fast rollback capability. Git Working Principles Basics Before diving into workflows, understanding Git’s basic working principles is crucial for comprehending the subsequent processes. ...

2025-11-12 · 4 min · geekhuashan

Internal Platform Development vs. GitHub Open Source Publishing: Process Comparison and Reflections

Recently, I’ve been developing on our company’s internal platform and accumulated considerable experience with enterprise-level release processes. I also maintain some open-source projects on GitHub, and these two different release processes form an interesting contrast. Today I want to discuss the similarities and differences between them, which might provide some reference for developers experiencing similar transitions. Background Internal Project: Recently delivered an NTBT snapshot monitoring Dashboard on the enterprise internal platform, went through the complete DEV → QUAL → PROD three-environment release process, strictly following enterprise internal platform standards. ...

2025-11-12 · 8 min · geekhuashan

Laboratory Image Color Analysis: Complete Workflow from RGB to CIELAB

Laboratory Image Color Analysis: Complete Workflow from RGB to CIELAB How to precisely measure color in specific regions from laboratory-captured images? How to convert RGB pixel values to device-independent CIELAB color space? How to objectively quantify color differences between samples? This article provides a complete web-based solution, no installation needed, use directly in browser. 👉 Use Online Tool Now 🎨 RGB→CIELAB Conversion Demo Tool - Interactive learning of color space conversion process ...

2025-11-11 · 13 min · geekhuashan

Integrating Cloudflare Workers + Google Analytics Pageviews in Hugo Blog

Background As a Hugo static blog hosted on Cloudflare Pages, I’ve always wanted to display real pageview data on article pages. But the problem is: Google Analytics gtag.js can only “write” data, can’t “read” historical data Static blogs have no backend, can’t directly call GA4 Data API Don’t want to depend on third-party services (like Busuanzi), want complete control over data After research, I chose the Cloudflare Workers + Google Analytics Data API solution, which perfectly solved this problem. ...

2025-11-04 · 7 min · geekhuashan

Lighthouse Performance Optimization: The Journey from 98 to Perfect Score

Background After completing [[ai-agent-seo-optimization|AI SEO optimization]], I conducted a comprehensive Lighthouse performance test on my blog. The results were both gratifying and surprising: ✅ Already excellent metrics: LCP (Largest Contentful Paint): 0.4 seconds (target < 2.5s) INP (Interaction to Next Paint): 0 milliseconds (target < 200ms) CLS (Cumulative Layout Shift): 0.026 (target < 0.1) Performance Score: 98 points ⚠️ Areas still improvable: Render-blocking resources causing 147ms FCP delay Footer color contrast not meeting accessibility standards Heatmap component causing 0.026 layout shift Third-party scripts occupying 417ms main thread time This article documents my complete process of optimizing from “already fast” to “perfect”, and why these optimizations still matter. ...

2025-11-03 · 15 min · geekhuashan

AI Era SEO Optimization Practices: Making Your Blog Visible to AI Agents

Background In 2025, AI is changing how we access information. When users ask ChatGPT questions, search with Perplexity, or see Google’s AI Overview, the rules of traditional SEO have changed. Key Statistics: 13.14% of Google searches now trigger AI Overview (March 2025, doubled from 6.49% in January) Pages with Schema markup are 36% more likely to be cited by AI Gartner predicts traditional SEO traffic will decline 25% due to AI chatbots AI crawler timeouts are typically 1-5 seconds, requiring fast responses As a technical blog maintainer, I realized: if my content cannot be understood and cited by AI Agents, its future visibility will significantly decline. ...

2025-11-03 · 9 min · geekhuashan