ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Alibaba Cloud Linux 3 搭建 LNMP 环境实战指南

Alibaba Cloud Linux 3 搭建 LNMP 环境实战指南 1. 为什么要用 Alibaba Cloud Linux 3 搭服务器环境最近把一台跑了三年 CentOS 7 的业务服务器迁移到了 Alibaba Cloud Linux 3 上整个过程踩了不少坑也总结出一些实打实的经验。这篇文章不打算写什么官方文档式的教程就是把这次真实搭建 LNMP 环境的记录整理出来包括每一步我为什么这么选、命令怎么敲、遇到问题怎么排查希望对正在折腾服务器环境的朋友有帮助。先说结论如果你用的是阿里云 ECS而且业务对稳定性要求比较高Alibaba Cloud Linux 3 是目前非常值得考虑的系统选择。它是阿里云官方推出的 Linux 发行版基于社区版 Linux 构建和 RHEL 8 系列保持高度的二进制兼容。这意味着 CentOS 8 上能跑的软件包大部分可以直接用在 Alibaba Cloud Linux 3 上迁移成本比想象中低很多。我选择它的原因也很现实CentOS 7 已经停止维护继续用相当于裸奔安全漏洞没人管CentOS Stream 是滚动更新不适合生产环境。与其折腾换到 Ubuntu 或 Debian 重新适配不如直接用阿里云自家维护的 Alibaba Cloud Linux 3毕竟 ECS 上跑它属于原汤化原食内核和虚拟化层都有针对性优化。1.1 Alibaba Cloud Linux 3 到底是个什么系统很多人一听阿里云 Linux以为是 CentOS 换了层皮这个说法不准确。Alibaba Cloud Linux 3 是阿里云操作系统团队独立维护的发行版和 RHEL 8 保持 ABI 兼容但不是简单复制。它的内核默认带了针对云场景的调度优化、网络栈优化在内存回收、CPU 负载均衡这些方面和普通发行版内核有明显差异。从版本上看Alibaba Cloud Linux 3 的版本号对应的是 3.2104 系列核心库和工具链对齐 RHEL 8.4 左右。包管理器用的也是 DNF/YUM对习惯 CentOS 的用户来说几乎没有学习成本。默认软件源指向阿里云内部镜像在国内服务器上拉包速度非常快不像某些系统默认源在海外装个软件等半天。1.2 和 CentOS 7 的差异对比如果你之前用的是 CentOS 7切换到 Alibaba Cloud Linux 3 需要注意几个关键差异包管理器从 YUM 升级为 DNF虽然命令行用法几乎一致但 DNF 对依赖解析更严格有时候会报出 CentOS 7 时代没见过的事务错误。默认 Python 版本从 2.7 变成了 3.6很多老脚本直接用python命令会失效需要改成python3。防火墙从 firewalld 变成 nftables 后端虽然命令还是firewall-cmd但底层规则变化较大。PHP 默认版本更高通过 dnf 直接装的 PHP 是 8.0 或 8.1而不是 CentOS 7 时代的 5.4。MySQL 相关的默认包变成了 MariaDB如果业务指定要 MySQL 8.0需要通过 MySQL 官方源或阿里云镜像单独安装。这些差异我在搭建过程中都遇到了下面会逐个详细说。2. 环境准备与基础初始化设置正式搭 LNMP 之前先把系统层面的准备工作做扎实。服务器环境搭建最怕的就是一开始图省事后面遇到问题排查起来特别痛苦。我在这一阶段花了大概半小时但后面整个搭建过程顺利了很多。2.1 创建 ECS 实例时的关键选择如果你还没创建 ECS 实例在购买页面选择镜像时直接选Alibaba Cloud Linux 3.2104 LTS 64位即可。这里有几个参数我建议重点关注实例规格如果只是搭建中小型 Web 服务2核4G 起步基本够用。我这次用的就是 ecs.c6.xlarge 规格跑 LNMP 加一个日活几万的 API 服务CPU 和内存都比较宽裕。系统盘容量建议至少 40GAlibaba Cloud Linux 3 装完基础系统加 LNMP 软件包占用大约 8-10G但后续日志、数据库数据、临时文件会快速增长。40G 是最低配有条件直接上 60G。网络带宽按需选择即可但如果涉及到数据库远程连接或者大量静态文件传输注意区分公网带宽和内网带宽。注意创建实例后root 密码一定要设置一个复杂度足够的强密码并在后续步骤中禁用 root 密码登录改用密钥认证。这一步在云上环境尤其重要不要嫌麻烦。2.2 安全组规则的合理配置阿里云 ECS 的安全组相当于云防火墙很多新手在服务器环境搭建时忽略了这个东西导致 Nginx 装好了却发现外网访问不了。安全组规则是在 ECS 控制台配置的不在服务器内部。我的配置习惯是仅放行必要端口22SSH、80HTTP、443HTTPS。数据库端口如 3306不对公网开放只允许内网 IP 访问或者干脆不配置安全组规则需要时通过 SSH 隧道访问。额外为办公 IP 单独放行避免 SSH 暴露到全网。如果公司 IP 固定配置一个/32的规则即可。这里踩过一个坑有一次我图方便把安全组配置成允许所有来源访问所有端口结果不到半天服务器就被扫描并尝试暴力破解 SSH。这个教训希望大家引以为戒。2.3 SSH 密钥登录与基础安全加固创建实例时我选择了密钥对登录方式。这样做的好处是几乎不可能被暴力破解因为 SSH 服务端没有启用密码认证。创建好密钥对后私钥一定要下载保存好丢了就等于失去服务器访问权限。实例启动后用密钥登录ssh -i ~/.ssh/my-key.pem rootyour_server_ip登录成功后建议立刻做一些基础加固创建一个普通用户并赋予 sudo 权限日常操作不要直接使用 rootuseradd -m -G wheel admin passwd admin2.4 系统更新与软件源检查登录系统后的第一件事我习惯先全面更新一次软件包dnf update -yAlibaba Cloud Linux 3 默认的软件源是阿里云内部镜像速度非常快。如果遇到某些第三方软件源需要配置我建议只添加官方源或阿里云镜像源不要从网上随便找源安全风险太高。可以用dnf repolist查看当前启用的源dnf repolist更新过程中我看到内核也升级到了新版本建议更新完成后重启一次让新内核生效。虽然这一步不是必须的但可以避免内核版本和模块不匹配之类的诡异问题。2.5 系统时间同步与主机名设置服务器时间不准会导致很多莫名其妙的问题比如日志时间错乱、HTTPS 证书校验失败等。Alibaba Cloud Linux 3 默认安装了 chrony但需要确认服务状态systemctl status chronyd如果没启动systemctl enable --now chronyd同时把时区设置为 Asia/Shanghaitimedatectl set-timezone Asia/Shanghai主机名我一并改成了有辨识度的名称方便后续运维管理hostnamectl set-hostname web-prod-013. 编译安装还是包管理安装我选择的方案服务器环境搭建最核心的问题之一Nginx、PHP、MySQL 这些软件到底是编译安装还是用 dnf 直接装先说结论除非你有特殊需求比如需要编译特定模块、定制编译选项否则在生产环境推荐使用 dnf 包管理器安装。好处显而易见——升级方便、依赖处理自动化、配置文件位置规范、出现问题可以通过 systemctl 和 systemd 直接管理。我之前在 CentOS 7 时代特别迷信编译安装觉得源码编译更稳定更高效。后来发现这个观念需要修正。编译安装带来的性能提升微乎其微但管理和升级成本高出不少。有一次为了给 PHP 增加一个扩展需要重新编译整个 PHP折腾了大半天。包管理器安装的话一条dnf install php-pecl-redis就搞定了。还有一个现实因素Alibaba Cloud Linux 3 的软件仓库里有 Nginx 1.20、PHP 8.0、MariaDB 10.5这些版本完全满足绝大多数业务需求。没有必要为了追新去冒兼容性风险。3.1 启用 EPEL 和必要的软件仓库DNF 默认仓库里的软件可能不够全比如 Nginx 在默认仓库中可能没有或者版本偏旧。好在 Alibaba Cloud Linux 3 提供了 EPEL 兼容仓库。可以通过以下命令启用dnf install -y epel-release启用后搜索验证一下 Nginx 是否可用dnf search nginx如果你需要安装 MySQL 8.0 而不是默认的 MariaDB后面我会单独说明通过官方仓库安装的方法。4. Nginx 安装配置全流程Nginx 是整个 LNMP 环境的前端入口负责处理 HTTP 请求、静态文件、反向代理。这里记录我安装和配置的全过程。4.1 Nginx 安装与 systemd 管理启用 EPEL 后直接安装dnf install -y nginx装完后查看版本nginx -vAlibaba Cloud Linux 3 仓库里的 Nginx 版本通常带了一些安全补丁版本号可能不是最新的但安全性和稳定性是有保障的。安装完成后服务管理用 systemdsystemctl enable --now nginx检查运行状态systemctl status nginx如果一切正常你会看到active (running)状态。此时在浏览器访问服务器公网 IP应该能看到 Nginx 默认欢迎页。如果看不到优先级最高的排查方向是安全组是否放行了 80 端口。4.2 Nginx 主配置核心参数解读Nginx 的主配置文件在/etc/nginx/nginx.conf默认包含/etc/nginx/conf.d/*.conf和/etc/nginx/default.d/*.conf。我不建议在大配置文件里堆砌所有站点配置而是为每个站点建立一个独立配置文件放在/etc/nginx/conf.d/下。先看几个关键参数user nginx;worker 进程运行用户默认是 nginx这个不要改避免权限问题。worker_processes auto;自动匹配 CPU 核心数通常设为 auto 即可。worker_connections 1024;单 worker 最大连接数可以根据内存和并发适当调大比如 2048 或 4096。gzip on;开启 gzip 压缩对静态文件传输有显著效果。一个基础但完整的站点配置示例server { listen 80; server_name example.com www.example.com; root /var/www/html; index index.php index.html; access_log /var/log/nginx/example.com.access.log; error_log /var/log/nginx/example.com.error.log; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { fastcgi_pass unix:/run/php-fpm/www.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } location ~ /\.ht { deny all; } }这个配置里的fastcgi_pass指向 PHP-FPM 的 socket 文件后面配置 PHP 时会用到。try_files规则用于支持伪静态。4.3 配置 Nginx 支持 PHP 解析Nginx 本身不能解析 PHP需要将 PHP 请求转发给 PHP-FPM 处理。这也是 LNMP 环境中Nginx 和 PHP 如何协同这个问题的最关键配置点。在 server 块中增加以下 location 规则location ~ \.php$ { root /var/www/html; fastcgi_pass unix:/run/php-fpm/www.sock; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; }注意fastcgi_param SCRIPT_FILENAME这一行很多 PHP 文件找不到的报错都是因为这个参数配置错误。$document_root对应的是站点配置里的root路径$fastcgi_script_name是请求的 PHP 文件路径两者拼接后就是 PHP 文件的实际绝对路径。修改配置文件后测试语法并重载nginx -t systemctl reload nginx提示每次修改 Nginx 配置后先执行nginx -t测试语法再重载服务这个习惯能帮你避免很多因配置错误导致的服务崩溃。4.4 HTTP/2 与 HTTPS 配置要点如果站点需要 HTTPS建议在监听端口上直接启用 HTTP/2listen 443 ssl http2; server_name example.com; ssl_certificate /etc/nginx/certs/example.com.pem; ssl_certificate_key /etc/nginx/certs/example.com.key; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5;证书可以配置为自动续期的证书只要保证证书路径正确、定时任务生效即可。HTTP/2 对并发请求的优化非常明显强烈建议启用。5. PHP 8.1 安装与 FPM 配置PHP 是动态业务的核心这里记录从安装到定制 PHP-FPM 的全部过程。5.1 通过 DNF 安装 PHP 及常用扩展Alibaba Cloud Linux 3 仓库中默认提供 PHP 8.0 或更高版本。安装命令dnf install -y php php-fpm php-cli php-mysqlnd php-pdo php-gd php-mbstring php-xml php-curl php-zip php-intl php-bcmath php-opcache这里我安装的扩展覆盖了绝大多数 Web 应用的需求。php-mysqlnd是连接 MySQL 的驱动php-opcache是 PHP 字节码缓存对性能提升非常关键。查看 PHP 版本和已加载的扩展php -v php -m安装完成后启动 php-fpmsystemctl enable --now php-fpm5.2 php-fpm 进程池配置优化php-fpm 的主要配置文件是/etc/php-fpm.d/www.conf。这个文件里的几个参数决定了 PHP 并发处理能力值得仔细调整。生产环境推荐使用ondemand或dynamic进程管理模式pm dynamic pm.max_children 50 pm.start_servers 5 pm.min_spare_servers 5 pm.max_spare_servers 35参数含义pm.max_children最大 PHP 进程数决定了 PHP 能同时处理多少请求。设置过高会导致内存耗尽设置过低会引发请求排队。pm.start_servers启动时创建的进程数。pm.min_spare_servers和pm.max_spare_servers空闲进程数的上下限。计算参考每个 PHP-FPM 进程大约占用 30-50MB 内存2G 内存的服务器建议pm.max_children不超过 40。还需要修改运行用户为 Nginx 用户避免权限问题user nginx group nginx默认情况下这个配置是apache如果不修改Nginx 通过 socket 和 PHP-FPM 通信时会遇到权限报错。5.3 把 PHP-FPM 的监听方式改成 Unix Socketphp-fpm 默认监听127.0.0.1:9000通过 TCP 协议通信。对于本机 Nginx 转发请求的场景用 Unix Socket 比 TCP 更高效因为不需要经过网络协议栈性能更好。修改www.conflisten /run/php-fpm/www.sock同时确保 socket 文件权限能够被 nginx 用户访问listen.owner nginx listen.group nginx listen.mode 0660修改后重启 php-fpmsystemctl restart php-fpm如果 Nginx 配置里fastcgi_pass指向的是unix:/run/php-fpm/www.sock两者就对接上了。5.4 配置 PHP 的时区和上传限制编辑/etc/php.ini修改几个生产中常用的参数date.timezone Asia/Shanghai upload_max_filesize 20M post_max_size 20M max_execution_time 60 memory_limit 256M这几个参数具体怎么设取决于业务。如果站点有文件上传功能upload_max_filesize和post_max_size需要同步调整如果某些接口执行时间较长max_execution_time需要相应放大。修改后重启 php-fpm 生效。注意修改了php.ini后一定要重启 php-fpm否则配置不会生效。很多新手在这里容易忽略导致改了参数没反应。6. MySQL 8.0 数据库安装与初始化数据库是环境搭建的重头戏。Alibaba Cloud Linux 3 默认仓库中的是 MariaDB但我这次明确选择了 MySQL 8.0原因不复杂公司已有的数据同步工具、备份脚本都是基于 MySQL 8 测试的暂时不想冒兼容性风险。6.1 通过官方仓库安装 MySQL 8.0不建议直接用 MySQL 官方 yum 源因为在国内网络环境下速度不稳定。我的做法是使用阿里云镜像的 MySQL 源速度很快且版本齐全。配置阿里云 MySQL 镜像源dnf install -y https://mirrors.aliyun.com/mysql/mysql80-community-release-el8-1.noarch.rpm然后替换源地址为阿里云镜像sed -i s/repo.mysql.com/mirrors.aliyun.com/g /etc/yum.repos.d/mysql-community.repo更新缓存后安装dnf clean all dnf makecache dnf install -y mysql-community-server安装完成后启动服务systemctl enable --now mysqld6.2 初始密码获取与安全初始化MySQL 8.0 在首次启动时会生成一个临时 root 密码日志文件里记录着。查看方式grep temporary password /var/log/mysqld.log用这个临时密码登录mysql -uroot -p登录后立刻修改 root 密码。MySQL 8.0 默认密码策略要求密码至少 8 位且包含大小写字母、数字和特殊字符ALTER USER rootlocalhost IDENTIFIED BY YourStrongPassw0rd!;如果你觉得默认密码策略太严格可以调整SET GLOBAL validate_password.policy LOW; SET GLOBAL validate_password.length 6;但这个方法只对当前会话生效重启后恢复。永久修改需要编辑配置文件[mysqld] validate_password.policy LOW validate_password.length 6从安全角度我不建议设置过弱的口令策略生产环境应至少保持默认的中等强度策略。6.3 创建业务数据库与专用账号生产环境不要用 root 账号连接业务这是基本常识。创建一个业务专用的数据库账号CREATE DATABASE app_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER app_userlocalhost IDENTIFIED BY AppUserPassword123!; GRANT ALL PRIVILEGES ON app_db.* TO app_userlocalhost; FLUSH PRIVILEGES;这里localhost表示只允许从本机连接。如果你的应用和数据库不在同一台服务器需要把localhost改为应用服务器的内网 IP。6.4 MySQL 配置文件几个值得调整的参数编辑/etc/my.cnf在[mysqld]段中根据服务器内存调整几个关键参数[mysqld] character-set-server utf8mb4 collation-server utf8mb4_unicode_ci innodb_buffer_pool_size 1G innodb_log_file_size 256M max_connections 500innodb_buffer_pool_size是 MySQL 性能的关键建议设置为服务器物理内存的 50%-70%。这里配合我的 2G 内存实例设置为 1G如果内存更小可以按比例调低。修改后重启 MySQL 并确认状态systemctl restart mysqld systemctl status mysqld用mysql -uapp_user -p app_db测试一下业务账号能否正常连接。7. LNMP 联调测试与全链路验证所有组件装好后最重要的就是联调测试确认环境真的能跑通。这一步不要马虎我总结了几个层的验证方法。7.1 创建 PHP 探针测试文件在站点根目录下创建test.php?php phpinfo();然后通过浏览器访问http://your_server_ip/test.php。如果能看到 PHP 信息页面说明 Nginx 和 PHP-FPM 链路已经打通。验证完毕记得删除这个文件避免暴露服务器敏感信息。7.2 测试 PHP 连接 MySQL在test.php中增加数据库连接测试?php $mysqli new mysqli(127.0.0.1, app_user, AppUserPassword123!, app_db); if ($mysqli-connect_error) { die(连接失败: . $mysqli-connect_error); } echo 数据库连接成功; $mysqli-close();这一步能同时验证 PHP 的 MySQL 扩展是否正常工作、MySQL 服务是否正常、账号权限是否配置正确。如果这一步失败优先检查php-mysqlnd扩展是否安装MySQL 服务状态账号权限是否正确SELinux 是否拦截了 PHP 连接数据库Alibaba Cloud Linux 3 默认 SELinux 是 enforcing 状态MySQL 监听地址和端口7.3 修改 SELinux 策略避免诡异问题Alibaba Cloud Linux 3 默认开启 SELinux这在某些云服务器环境下会遇到权限拦截的问题。比如 Nginx 需要访问某个目录、PHP-FPM 需要向外发起网络请求等都可能被 SELinux 拦下来。查看 SELinux 状态getenforce如果是Enforcing建议先按需调整策略而不是直接关闭。比如允许 PHP-FPM 发起网络连接setsebool -P httpd_can_network_connect 1如果嫌排查麻烦也可以将 SELinux 设为宽松模式setenforce 0然后编辑/etc/selinux/config将SELINUXenforcing改为SELINUXpermissive重启后保持生效。我个人的态度是生产环境如果要快速定位 LNMP 问题可以先设为 permissive等业务稳定后再评估是否需要重新启用 enforcing。7.4 完整的联调测试流程测试完成后不要急着上线业务建议按以下顺序做一遍完整验证测试静态文件访问创建一个test.html确认 Nginx 静态文件服务正常。测试 PHP 解析确认test.php能被 PHP-FPM 正确处理。测试 PHP 连接 MySQL确认数据库链路通畅。测试 HTTP 重定向如果有 HTTPS 需求确认 http 自动跳转 https。检查日志/var/log/nginx/error.log和/var/log/php-fpm/error.log确认无异常。8. 常见问题排查与避坑指南这一部分是我这次搭建环境时踩过的最深刻的坑写出来帮大家省点时间。8.1 Nginx 502 Bad Gateway 的典型原因LNMP 搭建过程中最常见的报错就是 502 错误表示 Nginx 无法访问 PHP-FPM 服务。排查步骤第一步确认 php-fpm 进程状态systemctl status php-fpm第二步确认 php-fpm 监听地址或 socket 路径与 Nginx 配置一致。我之前把 php-fpm 改成了 Unix socket但 Nginx 配置里还写着127.0.0.1:9000自然就 502 了。第三步查看 php-fpm 错误日志tail -f /var/log/php-fpm/error.log常见错误包括权限不足socket 文件无法访问检查listen.owner和listen.group是否设置为 nginx。进程数打满pm.max_children太小请求全部排队表现为 502 或者响应极慢。8.2 PHP 文件 404 的排查思路配置完 Nginx 后发现访问 PHP 文件返回 404而不是 500 或 502。这通常不是文件不存在而是fastcgi_param SCRIPT_FILENAME配置错误。检查 Nginx 配置中这个参数是否指向了正确的root路径。比如站点根目录是/var/www/html而配置里fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html$fastcgi_script_name;路径不匹配就会 404。8.3 MySQL 连接失败的几个隐蔽原因有时候 PHP 连 MySQL 报Connection refused但 MySQL 明明在运行。优先级高的排查方向MySQL 是否只监听了127.0.0.1而 PHP 尝试连接localhost时走了 IPv6导致连接方式不匹配。MySQL 配置文件里skip-networking是否被注释。账号 host 限制导致从某 IP 无法连接。SELinux 拦住了 PHP 连接 MySQL 的网络请求。8.4 防火墙相关云服务器安全组优先虽然系统里也装了 firewalld但在阿里云 ECS 上网络安全的第一道防线是安全组而不是系统防火墙。我曾见过有人在系统防火墙里开了端口却忘了配置安全组或者反过来导致端口外部不可访问。我的建议是如果服务器在云上以安全组为准系统防火墙可以保持默认状态不做额外干预。如果一定要启用系统防火墙注意不要和安全组规则冲突。8.5 Swap 空间是否需要配置Alibaba Cloud Linux 3 在内存不足时会触发 OOM Killer直接杀掉进程。如果服务器内存不大建议配置 Swap 作为兜底。创建 2G Swapfallocate -l 2G /swapfile chmod 600 /swapfile mkswap /swapfile swapon /swapfile持久化配置echo /swapfile none swap sw 0 0 /etc/fstabSwap 不能替代内存但在突发流量到来时可以避免进程被直接杀死。9. 环境性能优化与安全加固建议环境搭建完成后强烈建议再做一轮优化和安全加固这关系到服务器长期稳定运行。9.1 内核参数优化编辑/etc/sysctl.conf在文件末尾增加net.ipv4.tcp_tw_reuse 1 net.ipv4.tcp_fin_timeout 30 net.core.somaxconn 1024生效sysctl -ptcp_tw_reuse允许重用处于 TIME_WAIT 状态的连接对短连接请求多的 Web 场景有效能在高并发时减少端口占用。somaxconn调整的是 socket 监听队列长度如果并发连接数高默认 128 可能不够用。9.2 Nginx 的 gzip 与缓存优化在 Nginx 主配置的 http 块中开启 gzipgzip on; gzip_comp_level 5; gzip_min_length 1024; gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xmlrss image/svgxml;gzip 可以显著减少文件传输体积。gzip_comp_level我设为 5这个级别在压缩率和 CPU 消耗之间比较均衡不要盲目调高。9.3 禁止 root 密码登录与 SSH 加固修改/etc/ssh/sshd_configPermitRootLogin prohibit-password PasswordAuthentication no然后重启 SSH 服务systemctl restart sshd这样设置后root 只能通过密钥登录同时所有账号都不能使用密码登录彻底杜绝暴力破解。这里要注意重启 SSH 前先测试一下密钥能否正常登录给自己留个后路否则一旦配置错误你就进不了服务器了。9.4 日志自动清理服务器日志会持续增长如果不做清理总有一天占满磁盘。我安装了 logrotate配置了 Nginx、PHP-FPM、MySQL 日志的轮转dnf install -y logrotate编辑/etc/logrotate.d/nginx按需调整保留周期/var/log/nginx/*.log { daily rotate 30 missingok compress notifempty sharedscripts postrotate /bin/kill -USR1 $(cat /run/nginx.pid 2/dev/null) 2/dev/null || true endscript }9.5 定期备份策略环境搭建好了只是开始务必要做好数据备份。最简单的方式是用 cron 定时任务每天凌晨把 MySQL 数据库备份到指定目录然后定期同步到异地0 3 * * * mysqldump -uapp_user -pYourPassword app_db /backup/app_db_$(date \%Y\%m\%d).sql生产环境建议至少保留 7 天的数据库备份重要的配置目录如/etc/nginx和/etc/php-fpm.d也建议一并备份。10. 我在实际操作中的几点体会整套 Alibaba Cloud Linux 3 服务器环境搭建下来个人最大的感受是这个系统确实是为云场景深度定制的软件源速度、内核稳定性、对 ECS 硬件的适配程度都让我很满意。如果你原来就是 CentOS 用户切换到 Alibaba Cloud Linux 3 的学习成本几乎为零DNF 的命令和习惯完全延续下来迁移过程比想象中平滑。最后再分享一个小技巧搭建完环境后建议把每一步执行过的命令、改动过的文件、设置过的参数都记录到笔记里。服务器环境出问题的时候这些记录就是最宝贵的排查依据。我这次迁移过程中就有好几次是靠翻安装记录才想起来某个配置文件是什么时候改的、改了什么这种环境文档化的习惯关键时刻真的能救命。
返回列表