Decentralization? We're still early!
返回課程

主权个人的WordPress入门课

0%完成
0/0 Steps
  1. 第一部分 WordPress基础知识入门

    WordPress:内容创作者的知识输出及展示利器
  2. WordPress的开源生态:开源软件运动、GPL协议与AI赋能
  3. WordPress的软件版本、路线图与社区文化
  4. 值得关注的WordPress信息源与常用工具
  5. 五分钟安装指南、主题插件与备份还原方法
  6. 第二部分 WordPress与本地知识管理
    如何在本地电脑/服务器快速部署WordPress站点
  7. 最强CMS:WordPress的文件结构、前端与后端
  8. 学习使用Gutenberg编辑器进行内容创作和排版
  9. 学习使用全站编辑主题(FSE)进行站点设计
  10. 自定义文章类型:WordPress的基础功能及其拓展
  11. 第三部分 如何在云端部署WordPress
    云端部署WordPress的方法:选购虚拟主机或VPS
  12. 如何实现WordPress站点的自动化部署
  13. 如何优化Linux服务器设置实现安全加固
  14. 如何压缩WordPress站点图片并设置CDN
  15. 第四部分 WordPress的维护优化与安全加固
    WordPress数据管理:学习导入导出数据、清理冗余数据
  16. 动态数据调取优化:为WordPress站点添加配置Redis缓存
  17. 页面速度优化:为WordPress站点添加配置fastcgi缓存
  18. 优化WordPress的安全设置,实现站点的安全加固
  19. 第五部分 WordPress主题及插件进阶研究
    WordPress主题的选择与站点设计基础知识
  20. 善用WordPress插件:优秀插件推荐及其使用
  21. 学习使用Kadence Blocks优化页面设计
  22. 学习使用Jetengine为WordPress创建管理动态内容
  23. 学习使用LearnDash创建 WordPress 学习管理系统
  24. 学习使用Woocommerce创建网上商店
  25. 第六部分 内容创作者的WordPress:迈向Web3
    如何通过WordPress打造个人品牌:一个简易指南
  26. AI时代的内容创作:文章配图与音视频版本生成
  27. 如何使用JPG Store铸造基于Cardano链的NFT
  28. 为WordPress添加比特币收款和比特币支付网关
  29. 为WordPress添加Cardano支付网关和Cardano钱包登录
  30. 为WordPress添加以太坊支付网关和以太坊钱包登录
  31. WordPress用户管理与会员管理、内容门控
  32. 第七部分 WordPress汉化与设计优化
    WordPress主题、插件的汉化:Poedit 使用教程
  33. 为WordPress站点添加自定义字体、繁简体转换、多语言
  34. 如何通过调整CSS美化WordPress站点细节
  35. 如何开发自定义插件完善WordPress功能
  36. WordPress的功能扩展:FSE与Interactivity API
  37. 第八部分 AI时代的WordPress实践
    AI赋能WordPress开发:技术实践与未来展望
  38. Trilium RSS Digest 插件使用教程
  39. Cardano NFT Minter 插件使用教程
  40. Trilium AI Design 插件使用教程
課 6 的 40
In Progress

如何在本地电脑/服务器快速部署WordPress站点

Brave 2024-02-01

如果你想学习或测试 WordPress,或者想在发布网站之前进行开发和调试,你可能不想花钱购买服务器或域名,也不想让你的网站暴露在互联网上。这时,你可以选择在本地搭建 WordPress 站点,也就是在本地的电脑上模拟一个网站运行环境,让你可以在本地浏览器中访问你的网站,而无需联网或上传文件。本节课将在之前Local的基础上,向你介绍基于Docker的快速部署方法。


一、为什么要在本地搭建WordPress?

1.1 快速地学习和体验 WordPress

在本地搭建 WordPress 站点的一个好处是,你可以快速地学习和体验 WordPress 的功能和特点,无需购买服务器或域名。这样,你可以在没有任何成本或风险的情况下,探索 WordPress 的各种可能性,找到适合你的网站类型和风格。

你可以在本地安装不同版本的 WordPress,比较它们的差异和优劣,了解 WordPress 的更新和变化。你也可以在本地安装不同的主题和插件,尝试不同的网站布局和功能,找到你喜欢的组合和配置。你还可以在本地创建不同的网站,比如博客、商城、社区等,学习不同类型的网站的建设和管理方法。

💡 学习场景示例:

学习目标本地实践方式
了解WordPress版本差异同时运行WordPress 6.7和6.8,对比区块编辑器的改进
主题开发入门安装官方Twenty Twenty-Five主题,逐步修改CSS和模板文件
插件兼容性测试在隔离环境中测试WooCommerce、Elementor等插件的组合效果
多站点网络启用WordPress Multisite功能,模拟企业级多站点管理

1.2 在本地环境中开发和测试网站

在本地搭建 WordPress 站点的另一个好处是,你可以在本地环境中开发和测试网站的设计、内容、插件和代码,避免影响线上网站的正常运行。这样,你可以在一个安全和私密的空间中,尝试不同的网站元素和功能,检查和修复网站的错误和问题,提高网站的质量和性能。

你可以在本地修改网站的样式和颜色,调整网站的布局和结构,添加或删除网站的内容和图片,看到网站的实时效果,而不需要每次修改后都上传文件或刷新页面。你也可以在本地安装和测试不同的插件,检查插件的兼容性和稳定性,优化插件的设置和参数,提升插件的功能和效率。你还可以在本地编写和运行不同的代码,检查代码的正确性和合理性,优化代码的格式和性能,增强代码的安全性和可维护性。

⚠️ 真实案例警示:许多WordPress网站曾因在生产环境直接更新插件导致网站崩溃。本地测试环境可以有效避免这类灾难性事故。

1.3 随时备份和恢复网站的数据

在本地搭建 WordPress 站点的还有一个好处是,更加便利随时备份和恢复网站的数据,保证网站的安全和完整。这样,你可以在发生任何意外或灾难的情况下,快速地恢复你的网站,避免数据的丢失或损坏。

你可以在本地定期或手动地备份你的网站的文件和数据库,保存在你的电脑或外部存储设备上,以防止你的网站被黑客攻击、服务器故障、文件损坏等问题影响。你也可以在本地轻松地恢复你的网站的文件和数据库,只需要将备份的文件和数据库复制到本地的网站目录和数据库中,就可以恢复你的网站的原貌,而不需要重新安装或配置你的网站。

🔄 Docker环境下的备份优势:

与传统本地开发环境(如XAMPP、MAMP)相比,Docker提供了更优雅的备份方案——你的整个WordPress站点(包括所有主题、插件、上传的媒体文件和数据库)都可以作为一个整体进行版本控制和迁移。

1.4 轻松地将本地网站迁移至线上服务器

在本地搭建 WordPress 站点的最后一个好处是,你可以轻松地将本地网站迁移至线上服务器,或者反之,实现网站的同步和更新。这样,你可以在不同的环境中,保持网站的一致性和最新性,方便你的网站管理和维护。

你可以在本地完成网站的开发和测试后,将本地网站的文件和数据库上传到线上服务器,通过修改一些设置,就可以让你的网站在互联网上正常运行,向公众展示你的网站。你也可以在线上服务器上完成网站的更新和优化后,将线上网站的文件和数据库下载到本地,通过修改一些设置,就可以让你的网站在本地正常运行,备份你的网站。

📦 迁移工作流概览:

┌─────────────────┐    导出     ┌─────────────────┐    导入     ┌─────────────────┐
│   本地开发环境   │ ─────────▶ │   迁移包/镜像    │ ─────────▶ │   生产服务器     │
│  (Docker容器)   │            │  (.sql + files) │            │  (云服务器)      │
└─────────────────┘            └─────────────────┘            └─────────────────┘

二、技术基础与工具选择

在开始实际部署之前,我们需要理解本课程涉及的核心技术概念。这些基础知识将帮助你更好地理解后续的操作步骤。

2.1 Docker:现代化的应用容器技术

Docker是一种容器化技术,它将应用程序及其所有依赖项打包到一个标准化的单元(称为"容器")中运行。你可以把Docker容器想象成一个轻量级的虚拟机,但它比传统虚拟机启动更快、资源占用更少。

🎯 为什么选择Docker部署WordPress?

对比维度传统方式 (XAMPP/MAMP)Docker方式
环境一致性本地与服务器环境可能不同开发、测试、生产环境完全一致
依赖管理手动安装PHP、MySQL等自动处理所有依赖
多版本共存困难,可能产生冲突轻松运行多个独立环境
清理与重建残留文件难以清理删除容器即完全清理
迁移部署需要重新配置导出镜像即可迁移
资源占用服务常驻后台按需启停,不用时零占用

2.2 Docker Compose:多容器编排利器

Docker Compose是Docker官方提供的多容器编排工具。一个完整的WordPress站点需要多个服务协同工作:Web服务器、PHP运行环境、数据库和缓存服务。Docker Compose允许我们用一个YAML配置文件定义和管理这些相互关联的服务。

📝 核心概念解释:

# docker-compose.yml 基本结构
services:        # 定义要运行的服务(容器)
  wordpress:     # 服务名称
    image: wordpress:fpm   # 使用的Docker镜像
    ports:
      - "80:80"            # 端口映射:主机端口:容器端口
    volumes:
      - wp_data:/var/www/html # 数据持久化
    environment:             # 环境变量配置
      WORDPRESS_DB_HOST: db
    depends_on:              # 服务依赖关系
      - db
  
  db:            # 数据库服务
    image: mariadb:latest
    volumes:
      - db_data:/var/lib/mysql

volumes:         # 声明数据卷,用于持久化存储
  wp_data:
  db_data:

⚡ 重要说明:从Docker Compose V2开始(现已成为默认版本),配置文件顶部的version: "3"声明已被弃用。虽然保留它不会报错,但新项目建议直接省略。本课程后续的配置文件均已采用最新规范。

2.3 根据操作系统选择合适的Docker运行方案

不同操作系统用户应选择最适合自己的Docker运行方案:

操作系统推荐方案说明
macOSOrbStackOrbStack更轻量高效,提供虚拟环境
Linux原生Docker + Dockge性能最佳,图形界面管理
HomeLab用户Umbrel / CasaOS提供图形化管理界面,适合入门

三、macOS用户方案:OrbStack + Docker + Dockge

随着容器技术的不断发展,开发者对轻量级、高效的虚拟化工具需求日益增长。OrbStack作为一款专为macOS设计的新一代容器和虚拟机平台,提供了比传统Docker Desktop更轻量高效的解决方案。本章将探讨如何在OrbStack上运行Ubuntu系统,并在其中部署Docker和Dockge,构建一个灵活且高效的容器管理环境。

3.1 OrbStack简介

OrbStack是一个为macOS设计的现代化容器和虚拟机平台,它比Docker Desktop更轻量、更快速,具有以下特点:

特性说明
🔋 资源占用低相比Docker Desktop,CPU和内存占用显著降低**(实测内存占用仅为Docker Desktop的1/3至1/5)**
启动速度快几乎即时启动容器和虚拟机**(冷启动通常在2秒内完成)**
🔗 与macOS深度集成支持文件共享、端口转发等功能**,容器内服务可直接通过 容器名.orb.local 访问**
🐳 支持Docker和Kubernetes兼容Docker命令和工作流**,无需修改现有Docker Compose文件**

💡 适用场景判断:如果你是macOS用户,且主要进行Web开发或需要运行Docker容器,OrbStack几乎是目前最优选择。

3.2 在OrbStack上运行Ubuntu的优势

在OrbStack上运行Ubuntu虚拟机并在其中部署Docker有以下优势:

  • 🔒 环境隔离:Ubuntu虚拟机提供了与宿主机完全隔离的环境,避免容器运行时可能对macOS系统产生的任何副作用
  • 🎛️ 灵活性:可以选择特定版本的Ubuntu系统(如Ubuntu 22.04 LTS或24.04 LTS)
  • 兼容性:解决某些应用在macOS上的兼容性问题**,特别是那些依赖Linux内核特性的应用**
  • 📦 可移植性:整个环境可以轻松备份和迁移**,虚拟机可导出为标准格式供团队共享**

3.3 实施步骤

步骤一:安装OrbStack

方式A:使用Homebrew安装(推荐)

brew install orbstack

方式B:官网下载安装包
访问 https://orbstack.dev/download 下载对应芯片版本(Apple Silicon / Intel)的安装包。

🔍 安装验证:安装完成后,在终端输入 orb version 确认安装成功。

步骤二:创建Ubuntu虚拟机

启动OrbStack后,可以通过GUI界面或命令行创建Ubuntu虚拟机:

# 创建一个名为"ubuntu"的Ubuntu虚拟机
orb create ubuntu ubuntu

# 进入虚拟机的shell
orb shell ubuntu

💡 提示:OrbStack创建的Linux虚拟机与macOS主机共享文件系统,你的Mac用户目录自动挂载在虚拟机的 /Users/你的用户名 路径下。

步骤三:在Ubuntu中安装Docker

进入Ubuntu虚拟机后,按以下步骤安装Docker:

# 1. 更新包索引并安装必要的依赖
sudo apt update
sudo apt install apt-transport-https ca-certificates curl software-properties-common -y

# 2. 添加Docker官方GPG密钥
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc

# 3. 添加Docker仓库到APT源
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

# 4. 安装Docker引擎和相关组件
sudo apt update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y

# 5. 验证安装
sudo docker --version

步骤四:部署Dockge——可视化Docker Compose管理器

Dockge是一个轻量级、开源的Docker Compose管理工具,由Uptime Kuma的作者开发。相比Portainer等重量级方案,Dockge专注于Docker Compose项目的管理,界面更简洁直观。

# 1. 创建Dockge所需的目录
sudo mkdir -p /opt/stacks /opt/dockge
cd /opt/dockge

# 2. 下载官方compose.yaml文件
sudo curl https://raw.githubusercontent.com/louislam/dockge/master/compose.yaml --output compose.yaml

# 3. 启动Dockge
sudo docker compose up -d

📋 Dockge核心功能:

  • 🖥️ 直观的Web界面管理Docker Compose项目
  • 📝 内置YAML编辑器,支持语法高亮
  • 🔄 一键启动/停止/重启Compose堆栈
  • 📊 实时查看容器日志和状态

步骤五:访问Dockge Web界面

Dockge部署完成后,需要配置端口转发以便从macOS主机访问:

# 在macOS终端执行(不是在虚拟机内)
orb expose ubuntu 5001:5001

然后在浏览器中访问: http://localhost:5001

3.4 常见问题及解决方案

🔧 问题1:端口映射不生效

# 重新配置端口映射
orb expose ubuntu 5001:5001

🔧 问题2:Docker权限问题

# 将当前用户添加到docker组
sudo usermod -aG docker $USER
# 重新登录以使更改生效

🔧 问题3:存储空间不足

# 查看磁盘使用情况
df -h

# 清理未使用的Docker资源
docker system prune -a

3.5 使用场景

这种嵌套虚拟化方案适用于以下场景:

场景说明
🖥️ 开发环境提供与生产环境一致的开发测试环境
📚 学习与测试安全地学习和测试Docker技术
📦 容器管理通过Dockge简化Docker Compose项目的管理
🔄 跨平台开发在macOS上运行需要Linux环境的应用

四、使用Docker Compose部署WordPress

无论你使用哪种Docker运行方案,部署WordPress的方式都是相同的。本章提供经过验证的最佳实践配置,包含Nginx + PHP-FPM + MariaDB + Redis的完整技术栈,并配置了FastCGI缓存以获得极致性能。

4.1 架构概览

┌─────────────────────────────────────────────────────────────┐
│                        浏览器请求                            │
└─────────────────────────┬───────────────────────────────────┘
                          ▼
┌─────────────────────────────────────────────────────────────┐
│                    Nginx (端口80)                           │
│              ┌─────────────────────────┐                    │
│              │   FastCGI 缓存层        │                    │
│              │  (静态化HTML缓存)        │                    │
│              └───────────┬─────────────┘                    │
└──────────────────────────┼──────────────────────────────────┘
                           ▼
┌─────────────────────────────────────────────────────────────┐
│              WordPress (PHP-FPM, 端口9000)                  │
│              ┌─────────────────────────┐                    │
│              │   Redis 对象缓存        │◀───────────────────┤
│              │  (数据库查询缓存)        │                    │
│              └───────────┬─────────────┘                    │
└──────────────────────────┼──────────────────────────────────┘
                           ▼
┌─────────────────────────────────────────────────────────────┐
│                  MariaDB 数据库                              │
└─────────────────────────────────────────────────────────────┘

🎯 双层缓存策略说明:

  • FastCGI缓存(Nginx层):将PHP生成的完整HTML页面缓存为静态文件,后续相同请求直接返回缓存,无需执行PHP
  • Redis对象缓存(WordPress层):缓存WordPress内部的数据库查询结果,减少数据库压力

4.2 文件结构

wordpress-docker/
├── docker-compose.yml    # Docker Compose配置文件
├── nginx.conf            # Nginx配置文件
└── logs/
    └── nginx/            # Nginx日志目录(自动创建)

4.3 docker-compose.yml

services:
  db:
    image: mariadb:latest
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: somewordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress
    volumes:
      - db_data:/var/lib/mysql

  redis:
    image: redis:latest
    restart: always

  wordpress:
    depends_on:
      - db
      - redis
    image: wordpress:fpm
    restart: always
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
      WORDPRESS_DB_NAME: wordpress
      WORDPRESS_CONFIG_EXTRA: |
        define('WP_REDIS_HOST', 'redis');
        define('WP_REDIS_PORT', 6379);
        define('WP_CACHE', true);
    volumes:
      - wordpress_data:/var/www/html

  nginx:
    depends_on:
      - wordpress
    image: nginx:latest
    restart: always
    ports:
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/conf.d/default.conf
      - wordpress_data:/var/www/html
      - nginx_cache:/var/cache/nginx
      - ./logs/nginx:/var/log/nginx

volumes:
  db_data:
  wordpress_data:
  nginx_cache:

4.4 nginx.conf

# FastCGI 缓存定义
fastcgi_cache_path /var/cache/nginx levels=1:2 keys_zone=WPCACHE:64m inactive=60m max_size=256m;
fastcgi_cache_key "$scheme$request_method$host$request_uri";

server {
    listen 80;
    server_name localhost;

    root /var/www/html;
    index index.php index.html index.htm;

    # 缓存状态头(用于调试,可查看是否命中缓存)
    add_header X-Cache-Status $upstream_cache_status;

    location / {
        try_files $uri $uri/ /index.php?$args;
    }

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass wordpress:9000;
        fastcgi_index index.php;

        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;

        # FastCGI 缓存配置
        fastcgi_cache WPCACHE;
        fastcgi_cache_valid 200 60m;
        fastcgi_cache_valid 404 1m;

        # 跳过缓存的条件
        set $skip_cache 0;

        # POST请求不缓存
        if ($request_method = POST) {
            set $skip_cache 1;
        }

        # 已登录用户或评论者不缓存
        if ($http_cookie ~* "wordpress_logged_in|comment_author") {
            set $skip_cache 1;
        }

        # 后台页面不缓存
        if ($request_uri ~* "/wp-admin/|/wp-login.php") {
            set $skip_cache 1;
        }

        fastcgi_cache_bypass $skip_cache;
        fastcgi_no_cache $skip_cache;
    }

    # 静态资源缓存
    location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg)$ {
        expires max;
        log_not_found off;
    }

    # 禁止访问隐藏文件
    location ~ /\.ht {
        deny all;
    }
}

4.5 镜像说明

服务镜像说明
dbmariadb:latestMariaDB最新稳定版
redisredis:latestRedis最新稳定版
wordpresswordpress:fpmWordPress PHP-FPM版本(自动指向最新PHP版本
nginxnginx:latestNginx最新稳定版

4.6 部署步骤

# 1. 创建项目目录
mkdir wordpress-docker && cd wordpress-docker

# 2. 创建日志目录
mkdir -p logs/nginx

# 3. 创建 docker-compose.yml 文件
# (将上面的内容保存到此文件)

# 4. 创建 nginx.conf 文件
# (将上面的内容保存到此文件)

# 5. 启动所有服务
docker compose up -d

# 6. 查看运行状态
docker compose ps

# 7. 查看日志(可选)
docker compose logs -f

🎉 启动成功后,访问 http://localhost 即可开始WordPress安装向导!

也可以使用Docker在Web端图形界面中配置。

4.7 验证缓存是否生效

# 使用curl查看响应头
curl -I http://localhost

# 查看 X-Cache-Status 头的值:
# MISS   = 缓存未命中(首次访问)
# HIT    = 缓存命中(从缓存返回)
# BYPASS = 跳过缓存(登录用户或后台页面)

第一次访问会显示 MISS,刷新页面后应该显示 HIT,表示缓存生效。

4.8 WordPress后台配置

部署完成后,还需要在WordPress后台启用Redis对象缓存:

  1. 安装Redis Object Cache插件
    • 进入 WordPress 后台 → 插件 → 安装插件
    • 搜索 "Redis Object Cache"
    • 安装并启用
  2. 启用对象缓存
    • 进入 设置 → Redis
    • 点击 "Enable Object Cache" 按钮
    • 确认状态显示 "Connected"

✅ 至此,你已经拥有一个配置了双层缓存(FastCGI + Redis)的高性能本地WordPress环境!之后的课程中,会进一步介绍缓存原理。

4.9 常用管理命令

# 停止所有服务
docker compose down

# 停止并删除数据卷(完全重置)
docker compose down -v

# 重启服务
docker compose restart

# 查看某个服务的日志
docker compose logs wordpress
docker compose logs nginx

# 进入WordPress容器
docker compose exec wordpress bash

# 进入数据库容器
docker compose exec db mysql -u wordpress -p

五、在HomeLab工具中安装WordPress

在个人服务器或家庭实验室(HomeLab)环境中运行应用程序也是个技术爱好者和注重隐私用户的热门选择。诸如 Umbrel、CasaOS 或其他基于 Docker 的 HomeLab 管理平台,极大地简化了自托管服务的部署和管理过程。

5.1 HomeLab平台概览

平台特点适用场景
Umbrel界面美观,应用商店丰富,专注隐私比特币节点、个人云服务
CasaOS轻量级,安装简单,中文友好入门用户、NAS设备
Portainer功能强大,适合专业用户复杂的多容器管理

5.2 一键式部署的优势

利用 Umbrel 这类工具安装 WordPress 通常非常便捷。这些平台往往提供类似"应用商店"的界面,只需找到 WordPress 应用,点击几下即可启动安装程序。后台系统会自动处理复杂的配置,包括设置所需的依赖环境,如 Web 服务器(通常是 Nginx 或 Apache)、PHP 运行环境以及数据库(常用 MariaDB 或 MySQL)。这种一键式部署或引导式安装,免去了手动配置服务器、数据库和下载 WordPress 文件的繁琐步骤,大大降低了技术门槛。

5.3 自托管WordPress的价值

在 HomeLab 中运行自己的 WordPress 实例,主要优势在于完全的数据所有权和控制权。与使用第三方托管服务不同,你的所有网站内容、用户数据都存储在你自己的硬件上,增强了隐私性和安全性。此外,这还提供了一个绝佳的学习和实验环境,你可以自由地测试主题、插件,深入了解网站的运作机制,而不必担心影响线上业务或产生额外费用(除了硬件和电费)。对于开发者或希望完全定制其在线空间的用户来说,这是一个理想的解决方案。

📊 HomeLab vs 传统托管 对比:

方面HomeLab自托管传统云托管
数据控制✅ 完全自主⚠️ 依赖服务商
月度成本💰 仅电费💰💰 $10-50+/月
学习价值🎓 极高较低

📋 课程总结

🎉 恭喜你完成本节课程!通过本节课程,你已经学会了:


📚 参考资源:

回复