当前位置:   article > 正文

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

php 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
  • 1

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

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

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

yum install -y nginx
  • 1

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

yum install -y epel-release yum-utils
  • 1

安装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
  • 1
  • 2
  • 3

配置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
  • 1

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

systemctl start nginx
systemctl enable nginx
systemctl start php-fpm
systemctl enable php-fpm
  • 1
  • 2
  • 3
  • 4

3. 克隆PHP项目代码

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

在这里插入图片描述

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

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

sudo yum install -y git
  • 1

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

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

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

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

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63

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
  • 1
  • 2

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

sudo yum install -y mysql-community-server
  • 1

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

sudo systemctl start mysqld
sudo systemctl enable mysqld
  • 1
  • 2

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

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

修改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
  • 1
  • 2
  • 3
  • 4
  • 5

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
  • 1
  • 2
  • 3
  • 4
  • 5

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

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

7. 重启Nginx服务

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

systemctl restart nginx
  • 1

8. 配置防火墙

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

firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --reload
  • 1
  • 2

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

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

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

我们测试访问:

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

项目部署成功!


三、部署总结

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;
EOF

mysql -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项目。"

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/990652
推荐阅读
相关标签
  

闽ICP备14008679号