当前位置: 首页 > news >正文

银河麒麟V10内网部署PHP实战:从镜像挂载到服务启动

1. 银河麒麟V10内网部署PHP环境前的准备工作

第一次在银河麒麟V10上部署PHP环境时,我踩了不少坑。特别是内网环境下,没有外网连接,所有操作都要依赖本地镜像源,这让整个过程变得更具挑战性。不过经过几次实践后,我总结出了一套稳定可靠的部署流程,现在分享给大家。

首先要明确的是,银河麒麟V10是基于Linux的操作系统,它有两种CPU架构版本:x86和ARM。在开始之前,你必须确认服务器的CPU架构,下载对应版本的官方镜像文件。这个步骤非常重要,因为不同架构的软件包是不兼容的。我曾经因为用错了镜像版本,导致后续安装过程出现各种奇怪的依赖问题,浪费了大半天时间。

在内网环境中,官方镜像将成为你唯一的软件源。这里要特别强调:千万不要使用非官方的软件源!即使某些依赖包在官方源中找不到,也不要随意从第三方下载。我见过太多因为使用非官方源导致系统崩溃的案例了。如果确实缺少某些关键依赖,建议直接联系麒麟的技术支持获取帮助。

2. 挂载镜像并配置本地软件源

2.1 镜像挂载操作

拿到正确的ISO镜像文件后,我们需要将它挂载到系统中。这个过程和CentOS类似,但有些细节需要注意。首先创建一个挂载点目录:

mkdir -p /mnt/kylin-iso

然后使用mount命令挂载镜像文件。假设你的镜像文件放在/mnt/iso/kylin-v10.iso,执行:

mount -t iso9660 /mnt/iso/kylin-v10.iso /mnt/kylin-iso

挂载成功后,你可以通过df -h命令检查是否挂载成功。如果看到/mnt/kylin-iso的挂载信息,说明操作成功了。

2.2 配置本地yum源

接下来,我们需要将这个挂载的镜像配置为系统的软件源。编辑或创建yum源配置文件:

vi /etc/yum.repos.d/kylin-local.repo

添加以下内容:

[kylin-local] name=Kylin Local Repository baseurl=file:///mnt/kylin-iso enabled=1 gpgcheck=0

保存后,清除yum缓存并重建:

yum clean all yum makecache

这个步骤很关键,我遇到过因为缓存问题导致yum找不到软件包的情况。如果一切正常,你现在应该可以使用yum命令从本地镜像安装软件了。

3. 安装PHP编译依赖环境

3.1 基础依赖安装

PHP编译需要大量的开发库支持。在内网环境下,我们需要一次性安装所有必要的依赖,避免反复操作。执行以下命令:

yum install -y gcc gcc-c++ make automake \ libxml2 libxml2-devel openssl openssl-devel \ libcurl libcurl-devel libpng libpng-devel \ freetype freetype-devel libxslt libxslt-devel \ bzip2 bzip2-devel libjpeg-turbo-devel \ sqlite-devel oniguruma-devel

这个命令会安装PHP编译所需的所有基础开发库。在实际操作中,我发现银河麒麟V10的官方源可能缺少某些包,这时需要联系技术支持获取对应的RPM包。我曾经因为缺少oniguruma-devel这个包,导致mbstring扩展无法编译,耽误了不少时间。

3.2 其他可选依赖

根据你的具体需求,可能还需要安装一些额外的依赖。例如,如果你计划使用MySQL数据库,还需要安装:

yum install -y mysql-devel

对于PostgreSQL支持:

yum install -y postgresql-devel

这些依赖最好在编译PHP前就安装好,因为PHP的configure脚本会根据系统已安装的库来决定哪些扩展可以被编译。

4. 编译安装PHP

4.1 准备PHP源码

在内网环境下,你需要提前从PHP官网下载好源码包,然后上传到服务器。建议使用PHP 7.2或更高版本,因为它们有更好的安全性和性能。将源码包放到/usr/local/src目录下:

cp php-7.4.33.tar.gz /usr/local/src/ cd /usr/local/src tar -zxvf php-7.4.33.tar.gz cd php-7.4.33

解压后进入源码目录,我们就可以开始配置编译选项了。

4.2 配置编译选项

PHP的编译配置非常灵活,你可以根据需要启用或禁用各种功能。下面是一个比较全面的配置示例:

./configure --prefix=/usr/local/php7.4 \ --with-config-file-path=/usr/local/php7.4/etc \ --enable-fpm \ --with-fpm-user=www \ --with-fpm-group=www \ --with-mysqli=mysqlnd \ --with-pdo-mysql=mysqlnd \ --with-iconv \ --with-freetype \ --with-jpeg \ --with-png \ --with-zlib \ --with-libxml \ --enable-xml \ --enable-bcmath \ --enable-shmop \ --enable-sysvsem \ --enable-mbregex \ --enable-mbstring \ --enable-ftp \ --with-gd \ --with-openssl \ --with-mhash \ --enable-pcntl \ --enable-sockets \ --with-curl \ --enable-zip \ --enable-soap \ --with-gettext \ --enable-opcache \ --enable-intl

这个配置启用了大多数常用的PHP扩展。如果你不需要某些功能,可以去掉对应的选项。配置过程可能会持续几分钟,期间会检查系统环境和依赖关系。如果出现任何错误,通常是因为缺少某个开发库,需要根据错误提示安装对应的-devel包。

4.3 编译和安装

配置成功后,就可以开始编译了。这个过程可能会比较耗时,取决于服务器的性能:

make -j4 make install

-j4参数表示使用4个线程并行编译,可以加快速度。根据你的CPU核心数调整这个数字。编译完成后,PHP会被安装到/usr/local/php7.4目录下。

5. 配置PHP和php-fpm

5.1 基础配置

安装完成后,我们需要复制配置文件到正确的位置:

cp php.ini-production /usr/local/php7.4/etc/php.ini cp /usr/local/php7.4/etc/php-fpm.conf.default /usr/local/php7.4/etc/php-fpm.conf cp /usr/local/php7.4/etc/php-fpm.d/www.conf.default /usr/local/php7.4/etc/php-fpm.d/www.conf

然后编辑php.ini文件,根据需要进行调整。常见的修改包括:

  • 设置时区:date.timezone = Asia/Shanghai
  • 调整内存限制:memory_limit = 128M
  • 调整上传文件大小限制:upload_max_filesize = 20M

5.2 php-fpm配置

php-fpm的配置主要在www.conf文件中。需要确保以下设置正确:

user = www group = www listen = 127.0.0.1:9000 pm = dynamic pm.max_children = 50 pm.start_servers = 5 pm.min_spare_servers = 2 pm.max_spare_servers = 8

这些值需要根据你的服务器配置和应用需求进行调整。特别是pm.max_children,它决定了php-fpm能同时处理的最大请求数。

5.3 创建运行用户

PHP-FPM需要以特定用户身份运行。我们之前配置中使用的是www用户,现在需要创建它:

groupadd www useradd -g www www

这个用户应该有足够的权限访问你的网站文件,但又不应该有过高的系统权限,这是安全性的重要考虑。

6. 启动服务和验证安装

6.1 启动php-fpm服务

现在可以启动php-fpm服务了:

/usr/local/php7.4/sbin/php-fpm

为了确保php-fpm能在系统启动时自动运行,我们可以创建一个systemd服务文件:

vi /usr/lib/systemd/system/php-fpm.service

添加以下内容:

[Unit] Description=The PHP FastCGI Process Manager After=syslog.target network.target [Service] Type=simple PIDFile=/usr/local/php7.4/var/run/php-fpm.pid ExecStart=/usr/local/php7.4/sbin/php-fpm --nodaemonize --fpm-config /usr/local/php7.4/etc/php-fpm.conf ExecReload=/bin/kill -USR2 $MAINPID [Install] WantedBy=multi-user.target

然后启用并启动服务:

systemctl enable php-fpm systemctl start php-fpm

6.2 验证安装

创建一个测试PHP文件来验证安装是否成功:

echo "<?php phpinfo(); ?>" > /var/www/html/info.php

��后通过浏览器访问这个文件,或者使用命令行:

curl http://localhost/info.php

如果看到PHP的配置信息页面,说明安装成功了。记得在生产环境中删除这个测试文件,因为它会暴露服务器的配置信息。

7. 常见问题排查

在实际部署过程中,可能会遇到各种问题。这里分享几个我遇到过的典型问题及解决方法。

7.1 依赖缺失问题

最常见的问题是编译时提示缺少某个库。例如,如果看到"libxml2 not found"错误,说明需要安装libxml2-devel包。在内网环境下,你需要确保所有依赖包都来自官方镜像源。如果确实缺少某个关键包,可以尝试以下步骤:

  1. 在挂载的镜像中搜索是否有对应的RPM包
  2. 联系麒麟技术支持获取官方提供的额外软件包
  3. 绝对不要从非官方源下载安装包

7.2 php-fpm启动失败

如果php-fpm启动失败,首先检查错误日志:

tail -f /usr/local/php7.4/var/log/php-fpm.log

常见的问题包括:

  • 配置文件语法错误
  • 指定的运行用户不存在
  • 端口被占用
  • 权限问题

7.3 性能调优

PHP-FPM的性能调优是一个持续的过程。你可以通过以下方式监控和优化:

  • 调整pm.max_children等进程管理参数
  • 启用opcache加速
  • 定期检查慢日志(slowlog)找出性能瓶颈

8. 安全加固建议

内网环境虽然相对安全,但仍然需要采取适当的安全措施。

8.1 文件权限设置

确保网站文件和PHP运行权限正确:

  • 网站目录所有者应该是实际的用户,而不是www用户
  • 目录权限通常设置为755
  • 文件权限通常设置为644
  • 上传目录不应该有执行权限

8.2 PHP安全配置

在php.ini中,有几个关键的安全设置:

  • disable_functions = exec,passthru,shell_exec,system
  • expose_php = Off
  • allow_url_fopen = Off
  • display_errors = Off (生产环境)
  • log_errors = On

8.3 定期更新

即使在内网环境中,也应该定期检查是否有安全更新。可以通过以下方式:

  • 定期获取官方的安全更新镜像
  • 关注PHP和银河麒麟的安全公告
  • 制定定期更新计划

在内网环境中部署PHP服务确实比有外网连接的环境更具挑战性,但只要按照正确的步骤操作,使用官方提供的资源,完全可以搭建出稳定可靠的PHP运行环境。最重要的是保持耐心,遇到问题时仔细检查每个步骤,确保所有操作都符合内网安全规范。

http://www.jsqmd.com/news/1086712/

相关文章:

  • 基于HarmonyOS 7.0 跨端开发的卫星实时跟踪页面实战
  • QPolygon:从基础构造到图形布尔运算的实战指南
  • 抖音无水印批量下载器:3分钟学会下载高清视频的完整教程
  • 5步让2007-2017年旧款Mac焕发新生:OpenCore Legacy Patcher完整升级指南
  • UI自动化测试面试核心考点与实战框架设计全解析
  • 量子计算高阶算子分裂技术解析与应用
  • 瑞萨RA8D2 DTC寄存器配置详解:从寻址到高级优化实战
  • 揭秘ComfyUI-MimicMotionWrapper:让静态图像舞动起来的AI魔法
  • 近期量化工具别求全能,先按学习阶段换重点
  • Video2X:C/C++重构带来的视频超分辨率革命与3大核心技术突破
  • PlayCover:如何让iOS游戏在Mac上获得原生键鼠体验?
  • Cursor Free VIP:三步终极破解方案,永久免费解锁AI编程助手Pro功能
  • 如何将Windows电脑变身为专业AirPlay接收器:airplay2-win完整使用指南
  • 量子纠错新突破:Kerr-cat与transmon混合架构解析
  • Radeon GPU驱动初始化与DRM框架深度解析
  • 3步入门ROS机器人仿真:wpr_simulation虚拟环境测试指南
  • Video2X 6.0.0:开源视频超分辨率与帧插值的终极解决方案
  • SBOM安全事件响应实战:当软件物料清单成为攻击面时的应急指南
  • SQL Server 2019 Developer版安装与核心组件配置全攻略
  • 终极指南:30+个Illustrator脚本如何彻底改变你的设计工作流
  • 智慧职教全自动刷课脚本:3分钟告别手动刷课烦恼
  • ONVIF系列四:从零构建一个轻量级ONVIF客户端
  • Notepad--跨平台文本编辑器:打造你的专属高效编码工坊
  • 应对多协议通信调试复杂性的COMTool深度应用方案
  • Blender 3MF插件终极教程:3D打印工作流完整解决方案
  • 【AI加速器】巧用huggingface_hub与镜像站,打造稳定高效的大模型下载管道(附实战代码)
  • 【开放集识别OSR】从闭集到开集:一个强大分类器是否足以应对未知世界?
  • VSCode Remote-SSH连接服务器报错:Resolver error: Error: The VS Code Server failed to start 的深度排查与修复指南
  • MCA Selector终极指南:5步轻松管理Minecraft世界区块,彻底解决游戏卡顿问题
  • 软考与事业编职称挂钩真相(2024人社部新规深度拆解)