PHP进阶-CentOS7部署LNMP服务架构的项目

在开发和部署Web应用时,LNMP(Linux、Nginx、MySQL、PHP)的组合是非常常见的。这篇博客将介绍如何通过一个简单的脚本,在CentOS 7上部署LNMP,并将PHP项目自动部署到服务器上。这不仅可以节省大量的时间,还能确保环境配置的一致性。这个一键部署的脚本不仅简化了部署过程,还能确保配置的正确性和一致性。使用这样的部署方法,可以极大地节省时间和精力,特别是对于频繁需要部署新环境的开发团队而言,效率提升显著。


一、架构简述

1. LNMP简介

LNMP是一种流行的Web服务架构,其中:

  • Linux是操作系统,用于托管Web服务器。
  • Nginx是一款高性能的HTTP和反向代理服务器,用于处理HTTP请求。
  • MySQL是一个关系型数据库管理系统,用于存储和管理应用数据。
  • PHP是一种服务器端脚本语言,用于生成动态Web内容。

2. 常见的PHP项目部署结构

在实际项目中,PHP项目通常会与nginx和MySQL搭配使用,形成一个完整的Web应用架构。以下是一些常见的部署结构:

  • LAMP(Linux、Apache、MySQL、PHP):使用Apache作为Web服务器,适合需要.htaccess支持的项目。
  • LNMP(Linux、Nginx、MySQL、PHP):使用Nginx作为Web服务器,适合高并发和静态文件较多的项目。
  • LEMP(Linux、Nginx、MariaDB、PHP):使用MariaDB替代MySQL,适合需要更高性能和更多功能的数据库需求。

以下是这些结构的比较:

架构Web服务器数据库适用场景
LAMPApacheMySQL需要.htaccess支持的项目
LNMPNginxMySQL高并发和静态文件较多的项目
LEMPNginxMariaDB需要更高性能和更多功能的项目

二、部署步骤

1. 移除现有的项目

首先,我们需要清理现有的项目目录,删除/var/www/html目录下的所有文件。这通常是Web项目的默认目录,清理这个目录可以避免旧项目文件的干扰。

sudo rm -rf /var/www/html

2. 安装并配置Nginx和PHP-FPM

安装Nginx和PHP-FPM。这两个软件是运行PHP应用的核心组件。

安装Nginx:Nginx是一款高性能的HTTP和反向代理服务器。我们将使用yum包管理器来安装Nginx。

yum install -y nginx

安装EPEL和yum-utils:EPEL(Extra Packages for Enterprise Linux)提供了高质量的附加软件包,yum-utils包含了yum-config-manager等实用工具。

yum install -y epel-release yum-utils

安装Remi仓库和PHP:Remi仓库提供最新版本的PHP。启用remi-php74仓库并安装PHP 7.4及其常用模块,如php-fpm、php-mysql、php-gd等。

yum install -y https://rpms.remirepo.net/enterprise/remi-release-7.rpm
yum-config-manager --enable remi-php74
yum install -y php php-common php-cli php-fpm php-mysql php-gd php-xml php-mbstring php-json php-soap php-xmlrpc

配置PHP-FPM:修改PHP-FPM的配置文件,使其监听127.0.0.1的9000端口,这样Nginx可以通过这个端口与PHP-FPM通信。

sudo sed -i 's#listen = /run/php-fpm/www.sock#listen = 127.0.0.1:9000#' /etc/php-fpm.d/www.conf

启动并设置Nginx和PHP-FPM为开机自启:确保Nginx和PHP-FPM在服务器重启后自动启动。

systemctl start nginx
systemctl enable nginx
systemctl start php-fpm
systemctl enable php-fpm

3. 克隆PHP项目代码

这里使用到的也是我创作的开源项目,感兴趣的朋友可以去GItee上查看,CSDN资源也已上传,欢迎下载。
项目地址:https://gitee.com/damon_liu_code/WeeklyReport

在这里插入图片描述

下面,我们来发布这个项目到我们自己的服务器上。

安装git:git是一个分布式版本控制系统,我们将使用git从代码库克隆PHP项目。

sudo yum install -y git

创建项目目录并克隆代码:在/var/www/html目录下创建项目目录,并使用git克隆项目代码。

mkdir -p /var/www/html
sudo git clone https://gitee.com/damon_liu_code/WeeklyReport.git /var/www/html

设置权限:确保Nginx用户对项目目录有正确的权限。

chown -R nginx:nginx /var/www/html/WeeklyReport
chmod -R 755 /var/www/html/WeeklyReport

4. 创建Nginx配置文件

创建并编辑Nginx配置文件:配置Nginx处理PHP请求。设置根目录、索引文件、PHP文件处理方式等。

cat > /etc/nginx/nginx.conf << EOF
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;events {worker_connections 1024;
}http {log_format main '\$remote_addr - \$remote_user [\$time_local] "\$request" \$status \$body_bytes_sent "\$http_referer" "\$http_user_agent" "\$http_x_forwarded_for"';access_log  /var/log/nginx/access.log  main;sendfile            on;tcp_nopush          on;tcp_nodelay         on;keepalive_timeout   65;types_hash_max_size 4096;include             /etc/nginx/mime.types;default_type        application/octet-stream;server {listen       80;listen       [::]:80;server_name  _;index index.php index.html index.htm;root         /var/www/html/WeeklyReport/public;location ~ \.php\$ {fastcgi_pass 127.0.0.1:9000;fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;include fastcgi_params;}location / {if (!-e \$request_filename){rewrite  ^(.*)\$  /index.php?s=\$1  last;break;}}location ~ ^/(\.user.ini|\.htaccess|\.git|\.env|\.svn|\.project|LICENSE|README.md) {return 404;}location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)\$ {expires      30d;error_log /dev/null;access_log /dev/null;}location ~ .*\.(js|css)?\$ {expires      12h;error_log /dev/null;access_log /dev/null;}}
}
EOF

5. 安装并配置MySQL

导入MySQL GPG密钥和安装MySQL仓库:确保系统信任MySQL的安装包,并从官方仓库安装MySQL。

sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
sudo yum install -y https://repo.mysql.com/mysql57-community-release-el7.rpm

安装MySQL:使用yum包管理器安装MySQL社区服务器。

sudo yum install -y mysql-community-server

启动并设置MySQL为开机自启:确保MySQL在服务器重启后自动启动。

sudo systemctl start mysqld
sudo systemctl enable mysqld

获取MySQL初始临时密码:MySQL安装后会生成一个初始临时密码,我们需要获取这个密码以便进行后续配置。

TEMP_PASS=$(sudo grep 'temporary password' /var/log/mysqld.log | awk '{print $NF}')

修改root用户密码:使用初始密码登录MySQL并修改root用户的密码,设置为简单易记的密码(如:root)。

mysql -u root -p"$TEMP_PASS" --connect-expired-password <<EOF
SET GLOBAL validate_password_policy=LOW;
SET GLOBAL validate_password_length=4;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';
EOF

6. 导入SQL文件到数据库

创建数据库:在MySQL中创建项目所需的数据库。

mysql -u root -proot <<EOF
CREATE DATABASE IF NOT EXISTS weekly_report CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;
EOF

导入SQL文件:将项目的SQL文件导入到新创建的数据库中,完成数据库初始化。

mysql -u root -proot weekly_report < /var/www/html/WeeklyReport/weekly_report.sql

7. 重启Nginx服务

重启Nginx服务,使新配置生效,并确保Nginx可以正确处理和转发请求。

systemctl restart nginx

8. 配置防火墙

开放80端口:为了确保外部能够访问到我们的Nginx服务,需要开放80端口。使用firewall-cmd来配置防火墙,允许HTTP访问。

firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --reload

9. 获取服务器公网IP地址

使用curl命令获取服务器的公网IP地址,并打印出来,方便通过该IP直接访问部署好的PHP项目。

IP=$(curl ifconfig.me)
echo "你的服务器公网IP地址是: $IP"

我们测试访问:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

项目部署成功!


三、部署总结

1. 步骤总结

部署过程中涉及到的每个步骤都有其特定的作用:

  • 清理现有的项目和软件,确保新部署不受旧环境的影响。
  • 安装和配置Nginx、PHP和MySQL,建立起Web服务器和数据库的基础环境。
  • 克隆项目代码并设置权限,使得Web服务器可以访问和执行项目代码。
  • 创建Nginx配置文件,定义Web服务器的行为,包括请求处理和静态资源缓存。
  • 初始化和配置MySQL数据库,导入项目所需的数据库结构和初始数据。
  • 配置防火墙,确保服务器对外部HTTP请求的访问。

2. 教程源码

下面是全部代码(可以直接一键部署):

#!/bin/bash# 移除现有的项目
sudo rm -rf /var/www/html# 移除现有的Apache
yum remove httpd -y# 安装Nginx和PHP-FPM
yum install -y nginx
yum install -y epel-release yum-utils
yum install -y https://rpms.remirepo.net/enterprise/remi-release-7.rpm
yum-config-manager --enable remi-php74
yum install -y php php-common php-cli php-fpm php-mysql php-gd php-xml php-mbstring php-json php-soap php-xmlrpc
sudo sed -i 's#listen = /run/php-fpm/www.sock#listen = 127.0.0.1:9000#' /etc/php-fpm.d/www.conf# 启动并启用Nginx和PHP-FPM
systemctl start nginx
systemctl enable nginx
systemctl start php-fpm
systemctl enable php-fpm# 创建PHP项目的目录并克隆代码库
sudo yum install -y git
mkdir -p /var/www/html
sudo git clone https://gitee.com/damon_liu_code/WeeklyReport.git /var/www/html
chown -R nginx:nginx /var/www/html/WeeklyReport
chmod -R 755 /var/www/html/WeeklyReport# 创建Nginx配置文件
cat > /etc/nginx/nginx.conf << EOF
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;events {worker_connections 1024;
}http {log_format main '\$remote_addr - \$remote_user [\$time_local] "\$request" \$status \$body_bytes_sent "\$http_referer" "\$http_user_agent" "\$http_x_forwarded_for"';access_log  /var/log/nginx/access.log  main;sendfile            on;tcp_nopush          on;tcp_nodelay         on;keepalive_timeout   65;types_hash_max_size 4096;include             /etc/nginx/mime.types;default_type        application/octet-stream;server {listen       80;listen       [::]:80;server_name  _;index index.php index.html index.htm;root         /var/www/html/WeeklyReport/public;location ~ \.php\$ {fastcgi_pass 127.0.0.1:9000;fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;include fastcgi_params;}location / {if (!-e \$request_filename){rewrite  ^(.*)\$  /index.php?s=\$1  last;break;}}location ~ ^/(\.user.ini|\.htaccess|\.git|\.env|\.svn|\.project|LICENSE|README.md) {return 404;}location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)\$ {expires      30d;error_log /dev/null;access_log /dev/null;}location ~ .*\.(js|css)?\$ {expires      12h;error_log /dev/null;access_log /dev/null;}}
}
EOF# 删除原有MySQL
sudo yum remove mysql57-community-release-el7 -y# 安装并配置MySQL
sudo rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
sudo yum install -y https://repo.mysql.com/mysql57-community-release-el7.rpm
sudo yum install -y mysql-community-server
sudo systemctl start mysqld
sudo systemctl enable mysqld# 获取MySQL初始临时密码
TEMP_PASS=$(sudo grep 'temporary password' /var/log/mysqld.log | awk '{print $NF}')# 使用初始密码登录并修改root用户密码
mysql -u root -p"$TEMP_PASS" --connect-expired-password <<EOF
SET GLOBAL validate_password_policy=LOW;
SET GLOBAL validate_password_length=4;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';
EOF# 导入SQL文件到数据库
mysql -u root -proot <<EOF
CREATE DATABASE IF NOT EXISTS weekly_report CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;
EOFmysql -u root -proot weekly_report < /var/www/html/WeeklyReport/weekly_report.sql# 重启Nginx服务
systemctl restart nginx# 确保防火墙设置允许80端口访问
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --reload# 获取服务器公网IP地址
IP=$(curl ifconfig.me)
echo "你的服务器公网IP地址是: $IP"echo "脚本执行完毕,请通过该IP访问你的PHP项目。"

通过这个脚本,我们可以轻松地在CentOS 7服务器上部署Nginx、PHP和MySQL,并自动配置和部署一个PHP项目。这个一键部署的脚本不仅简化了部署过程,还能确保配置的正确性和一致性。使用这样的部署方法,可以极大地节省时间和精力,特别是对于频繁需要部署新环境的开发团队而言,效率提升显著。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/387420.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Wi-Fi、WLAN、Bluetooth、zigbee、蜂窝网络、4g5g、MQTT

为什么打开手机的WiFi连接&#xff0c;显示的是WLAN&#xff1f; 分清Wi-Fi、WLAN、Bluetooth、zigbee、蜂窝网络、4g5g、MQTT这些概念. 一、WLAN、WIFI、WAPI WLAN是利用无线通信技术在局部区域内构建的网络&#xff0c;家庭/办公室里的网络就是一个WLAN&#xff0c;WLAN是一…

【城市数据集】世界城市数据库和访问门户工具WUDAPT

世界城市数据库和访问门户工具WUDAPT WUDAPTLCZ分类具体步骤参考 在 城市气候研究中&#xff0c;用于描述城市特征的数据集一般采用基于类别的传统方法&#xff0c;将城市地区分为数量有限的类型&#xff0c;从而导致精确度下降。越来越多的新数据集以亚米微尺分辨率描述城市的…

SolidEdge二次开发(C#)-环境配置

文章目录 1、前言2、环境配置2.1 安装Solidworks20242.2 安装VS20222.3 查看Com组件2.3.1 在VS2022中创建一个wpf工程项目2.3.2 添加com组件 1、前言 SolidEdge是Siemens PLM Software公司旗下的三维CAD软件&#xff0c;采用Siemens PLM Software公司自己拥有专利的Parasolid作…

JAVA零基础学习3(Scanner类,字符串,StringBuilder,StringJoinder,ArrayList成员方法)

JAVA零基础学习&#xff13; Scanner类输入示例代码代码解释完整代码1. 读取字符串2. 读取整数3. 读取浮点数4. 读取布尔值5. 读取单个单词6. 读取长整型数7. 读取短整型数8. 读取字节数注意事项总结 API 字符串解释示例解释解决方法示例&#xff1a;使用 StringBuilder String…

Java代码基础算法练习-求一个3×3矩阵对角线元素之和-2024.07.27

任务描述&#xff1a; 求一个33矩阵对角线元素之和&#xff0c;包括主对角线、副对角线元素和 &#xff08;提示&#xff1a;主对角线&#xff1a; ij,副对角线&#xff1a;ij2&#xff09;。 解决思路&#xff1a; 定义 3*3 的二维数组&#xff0c;再输入9个数字&#xff0c…

【面向就业的Linux基础】从入门到熟练,探索Linux的秘密(十四)-租云服务器及配环境、docker基本命令

主要介绍了租云服务器和docker配置、基本命令&#xff01;&#xff01;&#xff01; 文章目录 前言 一、云平台 二、租云服务器及安装docker 1.阿里云 2.安装docker 三、docker命令 将当前用户添加到docker用户组 镜像&#xff08;images&#xff09; 容器(container) 四、实战…

linux编写shell脚本字段部署redis6.x版本,docker使用shell脚本一键自动部署redis

1.先创建部署脚本 touch redis.sh2.粘贴部署脚本内容到redis.sh echo "在线安装redis开始...." docker pull redis:6.2.1 sudo mkdir -p /home/admin/redis/{data,conf} sudo touch /home/admin/redis/conf/redis.conf echo " #注释掉这部分&#xff0c;这是限…

一文总结代理:代理模式、代理服务器

概述 代理在计算机编程领域&#xff0c;是一个很通用的概念&#xff0c;包括&#xff1a;代理设计模式&#xff0c;代理服务器等。 代理类持有具体实现类的实例&#xff0c;将在代理类上的操作转化为实例上方法的调用。为某个对象提供一个代理&#xff0c;以控制对这个对象的…

基于FPGA的数字信号处理(20)--半加器和全减器

1、前言 既然有半加器和全加器&#xff0c;那自然也有半减器和全减器了。尽管在电路中减法的实现基本都是 补码 加法 的形式&#xff0c;但是正所谓技多不压身&#xff0c;了解一下半减器和全减器还是有一定作用的&#xff0c;至少能扩宽知识面嘛。 2、半减器 最简单的减法器叫…

RESNET

ResNet 文章目录 ResNet主要内容开发背景解决两个问题&#xff1a;1. 梯度消失和梯度爆炸2. 退化问题: 解决方法1. BN&#xff08;Batch Normalization&#xff09;层2. 残差块 Pytorch实现BasicBlockBottleNeckResNet 主要内容 开发背景 残差神经网络(ResNet)是由微软研究院…

LLM大模型:十大人工智能大模型技术介绍

十大人工智能大模型技术的简介&#xff1a; 深度学习模型 深度学习是人工智能领域中一种重要的机器学习技术&#xff0c;通过构建深度神经网络来模拟人脑的认知过程。深度学习模型能够自动提取数据的特征&#xff0c;并在海量数据中进行学习和优化&#xff0c;从而在语音识别…

搭建规范化的vue2项目

项目包含的库 Vue2VuexRouterEslintPrettier 环境 vue&#xff1a;2.6.14 eslint&#xff1a;7.32.0 prettier&#xff1a;2.4.1 eslint-plugin-prettier&#xff1a;4.0.0 eslint-plugin-vue&#xff1a;8.0.3 vue/cli&#xff1a;5.0.8 步骤 全局安装cli工具 npm in…

CAE仿真软件怎样下载和安装?

CAE仿真软件是一类专业工程软件&#xff0c;通过数值计算和仿真技术&#xff0c;帮助工程师和设计师在计算机上模拟和分析各种工程问题&#xff0c;如结构强度、热传导、流体力学等&#xff0c;从而优化产品设计、减少试验成本&#xff0c;提高产品性能和质量。HyperWorks是常见…

快手文生图模型-Kolors快速上手

Kolors是什么 可图(Kolors)&#xff1a;用于真实感文本到图像合成的扩散模型的有效训练 可图&#xff0c;是快手开源的一个文生图模型&#xff0c;架构上使用了chatglm&#xff0c;比普通的sd模型在中文理解上要强大很多&#xff0c;以往sd模型的提示词理解能力往往只有两种 …

二进制部署k8s集群之cni网络插件flannel和calico工作原理

3、部署 CNI 网络组件 在 master01 节点上操作 上传flannel-v0.21.5.zip并解压 unzip flannel-v0.21.5.zipscp flannel*.tar 192.168.80.20:/opt/k8s/ scp flannel*.tar 192.168.80.30:/opt/k8s/ node两个节点操作 cd /opt/k8s/ docker load -i flannel.tar docker load -i …

nginx代理设置时能获取到源IP地址的方法

nginx通过http_x_forwarded_for限制来访IP示例_ngnix 根据header的x-forwarded-for限制接入-CSDN博客 名称ip客户端地址10.0.23.90nginx服务器地址110.0.202.48:18888&#xff0c;代理到10.0.204.82:8888nginx服务器地址210.0.204.82:8888&#xff0c;代理到10.0.204.82:8887后…

自写ApiTools工具,功能参考Postman和ApiPost

近日在使用ApiPost的时候&#xff0c;发现新版本8和7不兼容&#xff0c;也就是说8不支持离线操作&#xff0c;而7可以。 我想说&#xff0c;我就是因为不想登录使用才从Postman换到ApiPost的。 众所周知&#xff0c;postman时国外软件&#xff0c;登录经常性抽风&#xff0c;…

leetcode 1555 银行账号概要(postgresql)

需求 用户表&#xff1a; Users --------------------- | Column Name | Type | --------------------- | user_id | int | | user_name | varchar | | credit | int | --------------------- user_id 是这个表的主键。 表中的每一列包含每一个用户当前的额度信息。 交易表&…

使用 Elastic Observability 中的 OpenTelemetry 进行基础设施监控

作者&#xff1a;来自 Elastic ISHLEEN KAUR 将 OpenTelemetry 与 Elastic Observability 相结合&#xff0c;形成应用程序和基础设施监控解决方案。 在 Elastic&#xff0c;我们最近决定全面采用 OpenTelemetry 作为首要的数据收集框架。作为一名可观察性工程师&#xff0c;我…

分享5款ai头像工具,助你轻松实现社交新形象

如今&#xff0c;无论是社交媒体上的个人形象塑造&#xff0c;还是虚拟世界中的角色扮演&#xff0c;一个独特而吸引人的AI头像都能成为你个性化的代表。 例如&#xff0c;ai头像男古风通常代表着一种对传统文化的尊重和热爱&#xff1b;而现代简约头像可能代表着一种追求简洁…