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

Kong+Konga+Consul

Kong+Konga+Consul 安装和使用 此处使用Docker安装方式 一、 安装Kong kong具体使用可参考另一篇文章:Kong API网关 为了确保 Kong、Konga 和 Consul 能够通信,Kong 和 Konga 也需要加入到同一个网络。如果你尚未创建网络,或者希望使用新的网络,可以创建一个: docker network create kong-net 1.1 安装 PostgreSQL (Kong 的数据库) Kong 需要 PostgreSQL 来存储其配置数据 docker run -d --name kong-database \ --network=kong-net \ -p 5432:5432 \ -e "POSTGRES_USER=kong" \ -e "POSTGRES_DB=kong" \ -e "POSTGRES_PASSWORD=kong" \ postgres:13 –network=kong-net: 确保数据库与 Kong、Consul 在同一网络。 -e 环境变量:设置数据库的用户名、数据库名和密码。 建议使用 PostgreSQL 9.6 或更高版本,这里使用了 13 版本。 1.2 初始化 Kong 数据库 运行一个临时容器来执行数据库迁移: docker run --rm \ --network=kong-net \ -e "KONG_DATABASE=postgres" \ -e "KONG_PG_HOST=kong-database" \ -e "KONG_PG_USER=kong" \ -e "KONG_PG_PASSWORD=kong" \ kong:3....

August 1, 2025 · 3 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

PHP8新特性:JIT

PHP8新特性:JIT(Just-In-Time) 一、JIT(Just-In-Time)编译技术概述 1.1 什么是JIT编译 JIT(Just-In-Time)编译是一种动态编译技术,它在程序运行时将字节码或中间代码编译为机器码执行,而不是预先编译(AOT,Ahead-Of-Time)或纯粹解释执行。PHP 8.0首次引入了JIT编译器,这是PHP性能演进史上的重要里程碑。 1.2 PHP执行模式的演进 解释执行模式(PHP 5.x及之前): 每次请求都需要解析、编译和执行 无任何形式的持久化缓存 OPCache缓存模式(PHP 5.5+): 缓存预编译的opcode 减少重复编译开销 但仍需解释执行opcode JIT编译模式(PHP 8.0+): 将热代码(频繁执行的代码)编译为机器码 直接执行机器码,绕过解释器 1.3 JIT带来的性能提升 根据官方基准测试,JIT在某些计算密集型工作负载上可带来: 数学运算:1.5-3倍提升 字符串处理:1.2-2倍提升 框架综合性能:10-30%提升 注意:JIT对I/O密集型应用(如纯数据库CRUD)提升有限 二、PHP JIT工作原理 2.1 PHP脚本执行流程 PHP源代码 ↓ Zend编译器 (生成opcode) ↓ OPCache (缓存opcode) ↓ Zend VM解释执行 ↓ JIT编译器 (追踪热代码) ↓ 生成机器码 ↓ 直接执行机器码 2.2 JIT编译流程 代码追踪: 监控执行过程中的热代码(频繁执行的代码路径) 默认阈值:执行次数超过3次触发JIT编译 编译优化: 寄存器分配 循环优化 死代码消除 内联函数调用 机器码生成: 针对当前CPU架构生成优化后的机器码 支持x86和ARM架构 执行切换: 后续执行直接跳转到机器码 绕过Zend虚拟机解释器 2.3 JIT与OPCache的关系 协同工作: OPCache是JIT的基础 JIT只编译OPCache中缓存的opcode 内存管理: JIT使用OPCache的共享内存存储机器码 opcache....

June 22, 2025 · 2 min · Leanku

PHP底层原理与性能优化深度解析

PHP底层原理与性能优化深度解析 一、PHP生命周期与SAPI PHP的生命周期是一个复杂但有序的过程,理解它对于性能优化至关重要。 1.1 PHP生命周期概述 PHP的生命周期可以概括为以下几个阶段: 模块初始化阶段 (MINIT) 只在PHP启动时执行一次 注册常量、类、资源类型等 所有扩展的MINIT方法被调用 请求初始化阶段 (RINIT) 每个请求开始时执行 初始化脚本运行环境 所有扩展的RINIT方法被调用 脚本执行阶段 解析、编译、执行PHP脚本 生成响应内容 请求关闭阶段 (RSHUTDOWN) 每个请求结束时执行 清理请求级资源 所有扩展的RSHUTDOWN方法被调用 模块关闭阶段 (MSHUTDOWN) PHP关闭时执行一次 清理持久化资源 所有扩展的MSHUTDOWN方法被调用 1.2 SAPI (Server API) SAPI是PHP与外部环境交互的接口层,常见的SAPI类型包括: Web服务器集成: Apache (mod_php) Nginx (PHP-FPM) IIS 命令行接口: CLI (Command Line Interface) CGI 嵌入式PHP: 嵌入到其他应用程序中 不同的SAPI实现会影响PHP的生命周期。例如: 在mod_php中,PHP作为Apache模块运行,生命周期与Apache进程绑定 在PHP-FPM中,PHP作为独立的FastCGI进程运行,可以独立管理进程池 二、OPCache原理与优化 2.1 PHP脚本执行流程 传统PHP脚本执行流程: 词法分析 (Lexing) - 将源代码转换为token流 语法分析 (Parsing) - 将token流转换为抽象语法树(AST) 编译 (Compilation) - 将AST转换为opcodes 执行 (Execution) - 执行opcodes 每次请求都需要重复这些步骤,造成大量CPU资源浪费。...

June 22, 2025 · 2 min · Leanku

分布式锁详解

分布式锁详解 在高并发和分布式系统中,为保证资源的一致性和互斥访问,分布式锁是必不可少的技术手段。本文将系统地讲解分布式锁的概念、场景、实现原理、使用方式,并附 PHP 示例。 1. 什么是分布式锁 定义: 分布式锁(Distributed Lock)是用于在 多台机器或多个服务实例中控制共享资源访问的机制。它保证在同一时间,只有一个客户端可以操作某个资源,从而避免并发冲突。 特点: 互斥性:同一时间只有一个客户端持有锁。 可重入性(可选):同一客户端可以重复获取锁。 可靠性:锁过期或客户端异常可自动释放,避免死锁。 可扩展性:适用于分布式系统和微服务架构。 2. 分布式锁的应用场景 分布式锁在企业场景非常常见,典型使用场景包括: 库存扣减 秒杀或抢购场景,防止库存超卖。 订单号生成 保证全局唯一订单号。 任务调度 多实例系统中,保证任务只被单实例执行。 缓存更新 防止缓存击穿时,多实例同时重建缓存。 支付或转账操作 防止重复扣款或资金异常。 3. 分布式锁的实现原理 3.1 数据库锁 原理: 利用数据库唯一索引或事务机制创建锁记录。 示例: INSERT INTO locks(name, create_time) VALUES('order_123', NOW()); -- 成功表示获得锁,失败表示锁已被占用 优缺点: 优点:简单易用,直接使用现有数据库。 缺点:高并发性能较差,数据库可能成为瓶颈。 3.2 Redis 锁 原理: 利用 Redis 的 SETNX 或 SET key value NX PX 原子操作。 设置锁过期时间,防止死锁。 (RedLock红锁可以解决在 Redis ​主从复制或哨兵模式下,使用单实例 Redis 锁可能遇到的锁失效问题。) 释放锁: 需要验证当前客户端持有锁,防止误删他人锁。 优点:...

June 11, 2025 · 1 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