Drone CICD自动化部署指南

Drone CICD自动化部署指南 一、Drone核心优势与架构设计 1.1 为什么选择Drone 官方文档 Drone作为轻量级云原生CI/CD工具,相比Jenkins具有显著优势: 资源占用低:基于Docker容器化运行,单个Pipeline平均内存消耗<100MB 云原生支持:原生集成Kubernetes、Docker等云原生技术栈 配置即代码:完全通过.drone.yml定义流程,版本可控 高性能:测试显示并发构建能力比Jenkins高3-5倍16 1.2 企业级架构设计 [Gitee/GitHub] → [Drone Server] → [Docker Runner] (开发环境) ↘ [K8s Runner] (生产环境) ↘ [SSH Runner] (特殊场景) 二、 注册 OAuth 应用 (Gitee为例) 登录 Gitee → 点击右上角头像 → 设置 → 第三方应用 → 创建应用 填写应用信息: 应用名称:Drone CI(自定义) 应用描述:Drone CI/CD 工具(自定义) 授权回调地址:http://你的服务器IP或域名/login(必须正确,否则无法登录) 应用主页:http://你的服务器IP或域名 权限选择:(最少权限原则)user_info,projects,pull_requests,hooks 提交后,记录生成的 Client ID 和 Client Secret(后续配置需要) 三、安装 Drone 服务器和 Runner Drone 由两部分组成: Drone Server:管理项目、接收仓库事件、协调任务 Drone Runner:执行流水线任务(编译、测试、部署等) 3.1 手动启动 Drone Server docker run -d \ --name drone-server \ --restart always \ -p 80:80 \ # 端口映射(生产环境建议加 HTTPS) -v /var/lib/drone:/data \ # 数据持久化 -e DRONE_RPC_SECRET=your_agent_secret \ # 自定义密钥(与 Runner 保持一致) -e DRONE_GITEE_CLIENT_ID=你的Gitee Client ID \ # 替换为 Gitee 应用的 Client ID -e DRONE_GITEE_CLIENT_SECRET=你的Gitee Client Secret \ # 替换为 Gitee 应用的 Secret -e DRONE_GITEE_SERVER=https://gitee....

August 9, 2025 · 6 min · Leanku

轻量级容器编排工具指南

轻量级容器编排工具指南 在 Docker 环境中,除了 K8s,还有多种轻量级方案可以实现服务自动重启、健康检查等功能,特别适合单机或中小规模部署。 一、简单方案 1.1 Docker 自身的重启策略(最基础方案) Docker Engine 内置了容器重启策略,可直接在启动容器时配置,实现容器退出后自动重启。 常用重启策略: --restart always:无论容器因何种原因退出(包括正常退出),总是自动重启。 --restart on-failure[:max-retries]:仅在容器以非 0 状态码退出时重启,可选最大重试次数(如on-failure:3最多重启 3 次)。 --restart unless-stopped:除非手动执行docker stop,否则始终重启(包括 Docker daemon 重启时) 示例: # 启动PHP容器,配置always重启策略 docker run -d \ --name php-app \ --restart always \ # 核心:容器挂掉后自动重启 -p 80:80 \ -v /path/to/php/code:/var/www/html \ php:8.2-apache 优势: 零依赖,直接使用 Docker 原生功能,适合单机部署。 局限: 仅能监控容器本身是否存活,无法检测应用内部故障(如 PHP-FPM 假死但容器仍运行)。 1.2 ocker Compose(适合多容器应用) 如果 项目依赖其他服务(如 MySQL、Redis),可使用docker-compose管理,通过配置restart参数实现自动重启,同时支持健康检查。 docker-compose.yml示例: version: '3.8' services: php-app: image: php:8.2-apache restart: always # 容器退出后自动重启 ports: - "80:80" volumes: - ....

August 9, 2025 · 2 min · Leanku

PHPUnit使用指南

PHPUnit 使用指南 一、介绍 PHPUnit 是 PHP 领域最流行的单元测试框架,它受到 JUnit 的启发,为 PHP 开发者提供了编写和运行单元测试的工具和方法。使用 PHPUnit 可以带来以下好处: 验证代码的正确性,确保函数和方法按预期工作 便于代码重构,修改后可以快速验证是否破坏了现有功能 帮助理解代码功能,测试用例本身就是一种文档 支持测试驱动开发 (TDD) 流程 二、安装 PHPUnit 1. 安装 PHPUnit(可以通过 composer require --dev phpunit/phpunit 安装) 2. 配置PhpStorm 运行 PHPUnit(Docker环境为例) 2.1. 配置 Docker 远程解释器 打开 PhpStorm,进入 File > Settings > Build, Execution, Deployment > Docker 在右侧选择 Docker for Windows(通常会自动检测) 点击 Apply 确认配置,确保连接成功(底部会显示 “Connection successful”) 进入 File > Settings > Languages & Frameworks > PHP 点击 CLI Interpreter 右侧的 … 按钮,点击左上角 + 号,选择 From Docker, Vagrant, VM, WSL, Remote… 选择 Docker 并找到你的 php 容器 选择容器中的 PHP 可执行文件路径(如 /usr/local/bin/php) 点击 OK 完成配置,PhpStorm 会自动检测 PHP 版本和扩展 2....

June 30, 2025 · 2 min · Leanku

wrk 使用指南

wrk 使用指南 一、介绍 wrk 是一款现代化的 HTTP 基准测试工具,使用 C 语言编写,基于事件通知机制(如 epoll, kqueue),能够产生巨大的负载。相比 ab(apache benchmark),wrk 具有以下优势: 支持多线程 + 协程模式,能更好地利用多核 CPU 支持 LuaJIT 脚本扩展,可自定义请求生成和结果处理 性能更高,单机可轻松产生数万 QPS 提供更详细的统计信息(延迟分布等) 二、安装 wrk Linux 系统安装 # Ubuntu/Debian sudo apt install wrk -y # CentOS/RHEL sudo yum install wrk -y # 或从源码编译安装 git clone https://github.com/wg/wrk.git cd wrk make sudo cp wrk /usr/local/bin/ macos brew install wrk 三、基础使用方法 1. 基本命令格式 wrk <选项> <测试URL> 2. 常用选项说明 选项 说明 示例值 -t 使用的线程数 12 (建议设置为CPU核心数的2-4倍) -c 保持打开的连接数 100 -d 测试持续时间 30s (30秒), 2m (2分钟) -s 指定Lua脚本 post....

June 30, 2025 · 2 min · Leanku

EFK技术栈解析及PHP应用实践

EFK 技术栈深度解析:从原理到 PHP 应用的全流程实践 日志系统是现代企业级应用不可或缺的基础设施,它如同软件系统的 “黑匣子”,记录着系统运行的每一个关键节点。在众多日志解决方案中,EFK 技术栈以其轻量级、高性能的特点,成为容器化环境和高并发场景下的首选方案。本文将从 EFK 的核心概念出发,详细阐述其安装配置流程,并结合 PHP 开发场景,展示如何将 EFK 集成到实际项目中。 一、EFK 技术栈核心概念与架构解析 EFK 是 Elasticsearch、Fluentd 和 Kibana 三个开源组件的组合缩写,作为 ELK 技术栈的优化变种,它将 Logstash 替换为更轻量级的 Fluentd,形成了更适合现代云原生环境的日志处理体系。 1.1 EFK 各组件功能定位 Elasticsearch:分布式日志存储与检索引擎 基于 Lucene 的分布式文档存储系统,支持 PB 级日志数据的存储与检索 采用倒排索引结构,实现毫秒级日志搜索响应 天生支持集群架构,通过分片和副本机制保证高可用性 提供 RESTful API 接口,方便与 PHP 等语言集成 Fluentd:高性能日志收集与处理管道 用 C 语言开发的轻量级日志收集器,内存占用仅为 Logstash 的 1/10 支持 “一次写入,多次输出” 的 Buffer 机制,确保日志不丢失 插件化架构支持 150 + 数据源,包括 PHP 应用、MySQL、Kafka 等 内置 JSON 格式标准化处理,解决多源日志格式不一致问题 Kibana:可视化日志分析与监控平台 为 Elasticsearch 提供图形化查询界面,支持 DSL 语句可视化构建 内置多种可视化组件(折线图、仪表盘、拓扑图等) 支持基于日志数据的实时告警规则配置 提供日志模式识别功能,自动发现异常日志模式 1....

June 22, 2025 · 5 min · Leanku

使用 MinIO 自建云存储

使用 MinIO 自建云存储 1. MinIO 是什么 定位:一款高性能、开源的 对象存储(Object Storage)系统,完全兼容 AWS S3 API。 核心目标:提供轻量级、易部署的私有云存储方案,适用于云原生和大数据场景。 开源协议:GNU AGPL v3(商业版提供企业级支持)。 核心特性 高性能: 速度优势:支持并行多线程上传/下载,单节点吞吐量可达 10-100 Gbps 低延迟: 采用 Golang 编写,优化内存管理,响应时间在毫秒级 S3 完全兼容 无缝迁移:所有 AWS S3 SDK、CLI 工具(如 awscli)可直接对接 MinIO。 API 支持:覆盖 Put/Get/Object、分片上传、生命周期管理等全部 S3 操作 分布式架构 纠删码(Erasure Code):数据分片存储,允许节点故障自动恢复(如 4节点容忍2节点失效)。 多租户:支持为不同业务创建隔离的存储桶(Bucket)和访问策略。 轻量易部署 单二进制文件:无需复杂依赖,Docker/Kubernetes 一键部署。 资源占用低:单节点运行仅需 ~200MB 内存,适合边缘计算和 IoT 设备。 适用场景 私有云存储 替代方案:替代阿里云 OSS、AWS S3,实现数据自主可控。 用例:企业文档库、备份归档。 大数据与 AI 兼容性:直接对接 Hadoop HDFS、Spark、TensorFlow 的 S3 接口。 用例:训练数据存储、模型版本管理。 云原生应用 Kubernetes 集成:通过 CSI 驱动为容器提供持久化存储。 用例:微服务应用的文件共享。 边缘计算 轻量级:在树莓派等设备上运行,就近处理数据。 用例:物联网设备数据采集。 2....

May 19, 2025 · 3 min · Leanku

基于 Gogs + Jenkins + Harbor + Docker 的自动化部署方案

基于 Gogs + Jenkins + Harbor + Docker 的自动化部署方案 1. 系统架构总览 开发者提交代码 → Git仓库 → Jenkins触发构建 → Docker构建镜像 → 推送至Harbor → Kubernetes部署更新 → 监控反馈 2. 环境准备 2.1 硬件要求 最低配置:2核CPU/4GB内存/100GB存储 推荐配置:4核CPU/8GB内存/200GB SSD 3. 组件安装与配置 3.1 Gogs 安装 另外一篇Jenkins 使用 3.2 Jenkins 安装 另外一篇Gogs 使用 3.3 Harbor 安装 另外一篇Harbor 使用 4. 环境配置 下面以wordpress项目为例 wordpress/ ├── app/ # 项目代码 ├── docker # Docker 相关文件 | ├── Dockerfile | ├── entrypont.sh | └── nginx.conf | └── nginx-wordpress....

May 17, 2025 · 5 min · Leanku

K3s使用指南

K3s使用指南+Rancher 1. K3s 简介 K3s 是一个轻量级的 Kubernetes 发行版,由 Rancher Labs(现在是 SUSE 旗下)开发。 它完全兼容 Kubernetes API,但设计上更轻便、易安装,适合边缘计算、物联网设备、单节点或资源有限环境。 K3s 把 Kubernetes 的很多组件做了简化,比如内置了 containerd,默认启用 flannel 网络,去掉了复杂的插件,安装非常简单。 主要目标是让 Kubernetes 快速部署、低资源占用,并且更适合国内和小型集群使用。 2. K3s 对比 kubeadm 特性/方面 K3s kubeadm 定位 轻量级、开箱即用的 Kubernetes 发行版 官方工具,用于标准 Kubernetes 集群的快速部署和引导 安装复杂度 极简安装,单条命令搞定 需要多个步骤,配置复杂,适合有一定 Kubernetes 经验的用户 组件集成 集成了 containerd,默认内置 flannel 网络,默认关闭了部分复杂组件(如部分云插件、Helm等) 只负责初始化集群,组件和网络插件需要用户自行选择安装 资源占用 非常低,适合边缘设备、物联网、单机小集群 资源占用较大,适合生产多节点环境 多节点支持 支持多节点,但更适合轻量和小规模集群 原生支持多节点和大规模集群,灵活度高 适用场景 单机、开发测试、小型集群、资源受限环境 生产环境,多节点,企业级集群部署 网络插件 默认集成 Flannel,安装简单 用户需自行部署网络插件(Flannel、Calico、Weave等) 更新升级 版本更新简单,内置自动化升级工具 需要手动升级,过程复杂 集成工具和生态 内置 Traefik(可选关闭),轻量且默认功能有限 灵活,可按需安装 Ingress、Dashboard、Helm 等组件 社区和支持 Rancher 支持,社区活跃 CNCF 官方支持,社区广泛 官网文档 https://k3s....

May 12, 2025 · 3 min · Leanku

Kubernetes(k8s)单机环境部署

Kubernetes(k8s)单机环境部署 1. Kubernetes (K8s) 简介 此文适合新手快速上手,涵盖安装、配置、基本使用 单机环境 2. 环境 系统要求 操作系统:Linux(Ubuntu/CentOS)或 macOS(开发环境) 内存:至少 2GB(推荐 4GB+) CPU:2 核+ 存储:20GB+ 可用空间 安装工具 Docker(K8s 依赖容器运行时) kubectl(K8s 命令行工具) Minikube(本地单节点 K8s,适合学习) 3. 前置配置 # 1.关闭 swap sudo swapoff -a sudo sed -i '/ swap / s/^\(.*\)$/#\1/g' /etc/fstab # 2.加载内核模块 sudo modprobe overlay sudo modprobe br_netfilter # 3.设置内核参数 cat <<EOF | sudo tee /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1 net.bridge.bridge-nf-call-iptables = 1 net.ipv4.ip_forward = 1 EOF sudo sysctl --system 4....

May 11, 2025 · 8 min · Leanku

Kubernetes学习指北

Kubernetes学习指北 一、 大纲 1. 了解基础概念 概念 说明 Pod 最小的调度单位,一个 Pod 可以包含一个或多个容器 Node Kubernetes 集群的工作节点 Deployment 管理 Pod 的副本和升级策略 Service 用于 Pod 间通信和对外暴露 ConfigMap / Secret 配置和敏感信息管理 Volume 数据卷,用于持久化数据 Namespace 命名空间,多租户环境的逻辑隔离 Ingress 对外 HTTP/HTTPS 流量管理 kube-apiserver、kube-scheduler、kube-controller-manager Master 组件,负责调度、管理集群 2. 核心组件及职责 (必须的核心组件) kube-apiserver (API 服务器) 作用: 集群的 大脑入口 负责 接收请求(kubectl、Dashboard、其他服务),然后转给 etcd 或控制器 所有组件(scheduler、controller、kubelet)都通过它通信。 像是办事大厅,所有人(开发、运维、调度器)都必须来这里递交申请。 kube-scheduler (调度器) * 作用: 负责 给 Pod 找宿主机。 根据 资源情况(CPU、内存)、约束(亲和性、污点)、策略 来决定 Pod 放在哪个 Node 上。 * 像是一个 派单员,根据司机(Node)的空闲情况,把订单(Pod)分配给合适的人。 kube-controller-manager (控制器管理器) * 作用: 内部包含很多 控制器(controller),比如: Deployment Controller:保证副本数量正确 Node Controller:监控节点状态。 Endpoint Controller:维护 Service → Pod 的映射。 核心任务是:对比实际状态和期望状态,不断修正。 * 像是一个 巡检员,不停检查「理想状态」和「现实情况」是不是一致,如果发现差错,就赶紧修正。 kubelet (节点代理) 作用: 跑在每个 Node 上的 代理。 负责和 kube-apiserver 交互,接收“要运行哪些 Pod”。 调用底层 容器运行时(containerd、CRI-O、Docker) 来真正启动容器。 还会 汇报 Pod 和 Node 的运行状态。 * 像是 工地上的施工队长,接到上级(apiserver)的命令,就去调度工人(containerd)建房子(Pod)。 etcd 作用: 分布式键值存储,保存集群的所有状态(Pod、Service、配置等) * 像是 工地上的施工队长,接到上级(apiserver)的命令,就去调度工人(containerd)建房子(Pod) 容器运行时(Container Runtime,如 containerd、CRI-O、DockerShim) 作用: kubelet 本身不会直接运行容器,它要依赖运行时。 真正负责创建和运行容器的底层引擎。 常见的有 containerd(最主流,K8s 默认推荐) CRI-O(轻量化,专门为 K8s 服务) Docker(以前常用,但现在 K8s 不直接依赖它了,而是通过 containerd) * 比喻:工人,真正搬砖盖房子(运行容器)。 3....

May 1, 2025 · 2 min · Leanku