Debian PHP如何进行自动化运维
小樊
36
2025-12-26 18:37:15
Debian PHP自动化运维实践指南
一 架构与工具选型
- 基础设施即代码与批量编排:使用 Ansible 统一管理多台 Debian 主机,编排 Nginx/Apache + PHP-FPM + MariaDB/MySQL,保证环境一致性与可重复部署。
- 持续交付与流水线:结合 Jenkins/GitHub Actions/GitLab CI 实现代码拉取、测试、构建、发布到测试/生产环境的自动化。
- 应用侧自动化:使用 Composer 管理依赖,并在 composer.json 中定义 scripts 执行缓存清理、迁移、优化自动加载等部署步骤。
- 监控与可观测性:进程/日志层面用 top/htop、systemctl、Nginx/PHP-FPM 日志;应用性能用 New Relic/Datadog/Tideways;指标可视化用 Prometheus + Grafana。
- 安全与合规:通过 UFW 放通必要端口,使用 Let’s Encrypt 自动签发与续期 HTTPS 证书。
二 快速落地流程
- 基线环境自动化部署(Ansible示例)
- 安装与控制节点准备:sudo apt update && sudo apt install -y ansible
- 主机清单 inventory.ini:
- Playbook lnmp.yml(按需替换 PHP 版本与扩展):
- hosts: webservers
become: yes
vars:
php_version: “8.2”
tasks:
- name: Update apt cache
apt: update_cache: yes
- name: Install Nginx
apt: name: nginx state: present
- name: Start and enable Nginx
service: name: nginx state: started enabled: yes
- name: Install MariaDB
apt: name: mariadb-server state: present
- name: Secure MariaDB
command: mysql_secure_installation
args: stdin: “y\nYourRootPass\nYourRootPass\ny\ny\ny\n”
- name: Install PHP and common extensions
apt:
name:
- “php{{ php_version }}-fpm”
- “php{{ php_version }}-mysql”
- “php{{ php_version }}-curl”
- “php{{ php_version }}-gd”
- “php{{ php_version }}-mbstring”
- “php{{ php_version }}-xml”
state: present
- name: Configure Nginx for PHP
copy:
dest: /etc/nginx/sites-available/default
content: |
server {
listen 80;
server_name _;
root /var/www/html;
index index.php index.html;
location / { try_files $uri $uri/ =404; }
location ~ .php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php{{ php_version }}-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
- name: Reload Nginx
service: name: nginx state: reloaded
- name: Ensure PHP-FPM is running
service: name: “php{{ php_version }}-fpm” state: started enabled: yes
- 执行:ansible-playbook -i inventory.ini lnmp.yml
- 一键脚本与可视化面板(适合快速交付)
- 一键脚本:Oneinstack(支持自定义组件版本与多环境)、LNMP一键安装脚本(快速部署基础环境)。
- 管理面板:宝塔面板、耗子面板(可视化安装与日常运维)。
三 应用发布与回滚
- Git + SSH 脚本化发布(最小化方案)
- 部署脚本 deploy.sh(示例):
- REPO_URL=“git@github.com:org/app.git”
- BRANCH=“main”
- APP_DIR=“/var/www/app”
- if [ ! -d “$APP_DIR” ]; then git clone -b “$BRANCH” “$REPO_URL” “$APP_DIR”; else cd “$APP_DIR” && git pull origin “$BRANCH”; fi
- cd “$APP_DIR” && composer install --no-dev --optimize-autoloader --no-interaction
-
可选:Laravel 迁移 php artisan migrate --force
- sudo systemctl reload php8.2-fpm && sudo systemctl reload nginx
- 权限与安全:为部署用户配置 SSH 密钥,限制 sudo 权限仅对必要命令生效。
- Composer 编排部署(适合框架项目)
- composer.json 示例:
- “scripts”: {
“deploy”: [
“@clear-cache”,
“composer install --no-dev --optimize-autoloader”,
“php artisan migrate --force”
],
“clear-cache”: [
“rm -rf var/cache/*”
]
}
- 触发方式:本地执行 composer deploy;或结合 GitHub Actions/GitLab CI 在推送时远程执行部署脚本。
四 监控告警与性能优化
- 进程与日志
- 进程/资源:top/htop、ps aux | grep php、systemctl status php-fpm
- 日志:/var/log/php-fpm.log(或按版本路径)、/var/log/nginx/access.log 与 error.log
- PHP-FPM 状态页:在 /etc/php/*/fpm/pool.d/www.conf 中启用 pm.status_path,访问如 /php_status 查看进程池状态
- 性能与 APM
- 开源/轻量:Tideways(添加 APT 源、安装扩展与守护进程、配置 API Key 与采样率,重启 PHP-FPM/Apache)
- 商用 APM:New Relic、Datadog
- 指标可视化:Prometheus + Grafana 自定义面板与告警规则
- 安全与证书
- 防火墙:UFW allow ‘Nginx Full’
- 证书:certbot --nginx -d yourdomain.com 自动签发与续期
五 日常维护与合规
- 安全更新自动化
- 安装与启用 unattended-upgrades,定期自动安装安全补丁,降低暴露窗口
- 备份与变更审计
- 数据库:定期 mysqldump/mariadb-dump 并异地/离线存储
- 代码与配置:纳入 Git 管理,发布过程留痕,支持快速回滚
- 合规与加固
- 最小权限原则、禁用不必要扩展与端口、定期审计日志与账户权限
- 版本与扩展管理
- 明确 Debian 版本与 PHP 版本 的对应关系,统一扩展清单,避免生产/测试环境漂移