计算机网络/计算机科学与应用/系统/运维/开发

Linux_Nginx_MySQL_PHP架构搭建

Linux  Nginx  MySQL  PHP 部署


Nginx安装

# which nginx 搜索nginx


1、安装形式选择

yum

rpm

源代码安装


2、安装nginx依赖包及环境检查

yum install pcre  pcre-devel openssl openssl-devel


3、下载nignx源代码包  taobao nginx,nginx 官网源码

wget  http://nginx.org/download/nginx-1.16.0.tar.gz


4、解压

tar  -zxvf  nginx-1.16.0.tar.gz
cd nginx-1.16.0


5、创建普通的nginx用户,运行nginx进程,降低nginx系统权限

useradd  nginx -u 1111 -s /sbin/nologin -M


6、编译nginx服务

./configure  --user=nginx --group=nginx --prefix=/usr/local/nginx --with-http-stub_status_module --with-http_ssl_module


编译并安装

make  && make  install


7、最好给nginx配置一个软链接,这是生产环境常用的操作,便于运维,开发,调试一起使用,也便于nginx升级

ln -s /mytools/nginx16   /mytools/nginx


8、配置nginx环境变量

echo $PATH


添加nginx 的bin目录到PATH中,且写入到环境变量中,开机就能够自动读取了 /etc/profile

PATH="$PATH:/mytools/nginx/sbin"

wq 保存退出




MySQL 搭建

1、安装方式

yum  rpm

源代码编译安装


2、创建普通mysql用户,降低程序运行权限

useradd -s /sbin/nologin  mysql


查看mysql信息

[root@VM-4-2-centos extra]# grep "mysql" /etc/passwd

mysql:x:1009:1010::/home/mysql:/bin/bash


3、下载mysql二进制代码包,注意提前下载好wget工具

yum install get -y


wget http://mirrors.163.com/mysql/Downloads/MySQL-5.7/mysql5.7.26-linux-glibc2.12-x86_64.tar.gz


二进制方式安装方式

1.解压缩二进制代码

# tar -zxvf mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz


2.配置软链接,快捷访问mysql

[root@VM-4-2-centos mysql-5.7.37-linux-glibc2.12-x86_64]# ln -s /root/mysql-5.7.37-linux-glibc2.12-x86_64  /root/mysql


3. 安全性的准备工作,卸载可能centos7存在的mariadb相关的依赖关系

rpm -e --nodeps mariadb-libs


4. 准备启动mysql的配置文件,[mysqld]是区,段的含义,以下的参数,对其生效  

[mysqld]  这是代表对服务端生效的参数


vim /etc/my.cnf


[mysqld]

basedir=/root/mysql

datadir=/root/mysql/data

socket=/tmp/mysql.sock

server_id=1

port=3306

log_error=/root/mysql/data/mysql_err.log


[mysql]

socket=/tmp/mysql.sock


初始化mysql服务端

1.先卸载系统自带的mariadb的依赖

rpm -e --nodeps mariadb-libs


2.检查mysql的所需的依赖环境

yum install libaio-devel -y


3. 创建mysql 数据库文件夹,用于初始化数据 且进行权限控制

mkdir -p /root/mysql/data

chown -R mysql.mysql  /root/mysql/  # 修改mysql所有内容,更改属主,属组为mysql用户


4.初始化mysql数据库

/root/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/root/mysql/ --datadir=/root/mysql/data/


或者

/root/mysql/bin/mysqld --initialize-insecure



配置MySQL客户端

1、编写mysql启动的脚本 定义一个mysqld.service

[root@VM-4-2-centos system]# pwd

/etc/systemd/system

[root@VM-4-2-centos system]# touch  /etc/systemd/system/mysqld.service


vim mysqld.service


[Unit]

Description=MySQL Server 5.7.27

Documentation=

After=network-online.target remote-fs.target nss-lookup.target

Wants=network-online.target


[Service]

User=mysql

Group=mysql

ExecStart=/root/mysql/bin/mysqld --defaults-file=/etc/my.cnf

LimitNOFILE=5000


[Install]

WantedBy=multi-user.target


启动mysqld服务端

systemctl  start mysqld.service


启动后检查数据库状态

systemctl status mysqld


检查进程

ps -ef|grep mysqld


检查端口

netstat -tunlp | grep 3306


登录mysql数据库


如果电脑装过其他数据库,可以使用yum卸载,不会影响到安装的二进制mysql数据库

yum remove mysql -y


退出会话 重新登录

配置安装的二进制mysql PATH环境变量


/root/mysql/bin  这是安装的二进制mysql命令目录

echo $PATH

vim /etc/profile

PATH="$PATH:/root/mysql/bin:/usr/local/nginx/sbin"


保存退出之后,重新登录

exit


which mysql


登录mysql 使用mysql

mysql -u root -p



创建数据库

create  database chaoge;


查看数据库

show  databases;


修改数据库密码

mysqladmin -u root password 'chaoge666' # 使用mysqladmin命令,修改root密码



二进制方式安装MySQL5.7 方式二:

# 下载Mysql5.7二进制包

wget  mysql-5.7.31-linux-glibc2.12-x86_64.tar.gz


# 解压二进制

tar -zxvf mysql-5.7.31-linux-glibc2.12-x86_64.tar.gz


# 将mysql包移动并改名为mysql

mv mysql-5.7.31-linux-glibc2.12-x86_64.tar.gz   /usr/local/mysql


# 创建无登录用户

useradd -s /sbin/nologin mysql


# 赋予mysql目录权限

chown -R mysql.mysql /usr/local/mysql


# 配置全局变量

vim /etc/profile


# 在文件最先添加

export PATH=/usr/local/mysql/bin:$PATH


# 退出并重载文件

source /etc/profile


# 验证是否添加完成

mysql -V


# 创建mysql数据目录

mkdir -p /data/mysql/data


# 赋予mysql目录权限

chown -R mysql.mysql /data


初始化mysql数据库

pwd

/data/mysql/data


mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql/data

初始化时会生成mysql密码


vim /etc/my.cnf


[mysqld]

user=mysql

basedir=/usr/local/mysql

datadir=/data/mysql/data

socket=/tmp/mysql.sock

server_id=6

port=3306


[mysql]

socket=/tmp/mysql.sock


启动mysql

1、系统自带方式

cd /usr/local/mysql/support-files


[root@VM-4-2-centos support-files]# ll

total 24

-rw-r--r-- 1 mysql mysql   773 Nov 30  2021 magic

-rwxr-xr-x 1 mysql mysql  1061 Nov 30  2021 mysqld_multi.server

-rwxr-xr-x 1 mysql mysql   894 Nov 30  2021 mysql-log-rotate

-rwxr-xr-x 1 mysql mysql 10576 Nov 30  2021 mysql.server


启动mysql

./mysql.server start


查看mysql端口

ps -ef|grep 3306


登录

mysql -u root -p

tUdScGH=L0r<


修改mysql登录密码

alter user root@'localhost' identified by 'root';


flush privileges;


Centos7启动

vim /etc/systemd/system/mysqld.service

[Unit]

Description=MySQL Server

Documentation=man:mysqld(8)

Documentation=https://dev.mysql.com/doc/refman/en/using-systemd.html

After=network.target

After=syslog.target

[Install]

WantedBy=multi-user.target

[Service]

User=mysql

Group=mysql

ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf

LimitNOFILE = 5000




查看mysql状态

[root@VM-4-2-centos support-files]# systemctl start mysqld

[root@VM-4-2-centos support-files]# 

[root@VM-4-2-centos support-files]# 

[root@VM-4-2-centos support-files]# systemctl status mysqld

● mysqld.service - LSB: start and stop MySQL

   Loaded: loaded (/etc/rc.d/init.d/mysqld; bad; vendor preset: disabled)

   Active: active (exited) since Mon 2022-08-01 16:39:40 CST; 2s ago

     Docs: man:systemd-sysv-generator(8)

  Process: 7793 ExecStart=/etc/rc.d/init.d/mysqld start (code=exited, status=0/SUCCESS)


Aug 01 16:39:40 VM-4-2-centos systemd[1]: Starting LSB: start and stop MySQL...

Aug 01 16:39:40 VM-4-2-centos mysqld[7793]: Starting MySQL SUCCESS!

Aug 01 16:39:40 VM-4-2-centos systemd[1]: Started LSB: start and stop MySQL.

Aug 01 16:39:40 VM-4-2-centos mysqld[7793]: 2022-08-01T08:39:40.995627Z mysqld_safe A mys...ts

Hint: Some lines were ellipsized, use -l to show in full.




启动方式2:

/usr/local/mysql/bin/mysqld_safe --defaults-file=/home/mysql/my.cnf



PHP安装

fastcgi

cgi通用网关接口,用于http服务器 nginx 和其他应用服务器通信的一个工具


PHP部署

1、先检查好mysql和nginx的启动状态

ps -ef|grep nginx

ps -ef|grep mysql


2、来安装php必须有的依赖环境

yum install gcc gcc-c++  make  zlib-devel libxml2-devel libjpeg-devel libjpeg-turbo-devel libiconv-devel freetype-devel libpng-devel gd-devel libcurl-devel libxslt-devel libxslt-devel -y



3、缺少一个libiconv-devel软件包

wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.15.tar.gz


4、解压缩安装该软件包 编译三部曲

tar -zxvf libiconv-1.15.tar.gz

./configure --prefix=/root/libiconv

make && make install


5、检查上诉安装命令是否结束

echo $?   如果是0 表示安装结束


6、编译安装php程序


yum -y install libxml2 libxml2-devel openssl openssl-devel bzip2 bzip2-devel libcurl libcurl-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel gmp gmp-devel libmcrypt libmcrypt-devel readline readline-devel libxslt libxslt-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel ncurses curl gdbm-devel db4-devel libXpm-devel libX11-devel gd-devel gmp-devel expat-devel xmlrpc-c xmlrpc-c-devel libicu-devel libmcrypt-devel libmemcached-devel libzip gcc-c++


下载php源代码

wget http://mirrors.sohu.com/php/php-7.3.5.tar.gz


解压缩

tar -zxvf php-7.3.5.tar.gz


ls


cd php-7.3.5


./configure --prefix=/usr/local/php --enable-ftp --enable-zip --enable-fpm --with-pdo-mysql --with-jpeg-dir --with-png-dir --with-gd --with-curl --enable-mbstring --enable-bcmath --enable-sockets


复杂编译参数

./configure --prefix=/usr/local/php --exec-prefix=/usr/local/php --bindir=/usr/local/php/bin --sbindir=/usr/local/php/sbin --includedir=/usr/local/php/include --libdir=/usr/local/php/lib/php --mandir=/usr/local/php/php/man --with-config-file-path=/usr/local/php/etc --with-mysql-sock=/tmp/mysql.sock --with-mhash --with-openssl --with-mysqli=shared,mysqlnd --with-pdo-mysql=shared,mysqlnd --with-gd --with-iconv --with-zlib --enable-zip --enable-inline-optimization --disable-debug --disable-rpath --enable-shared --enable-xml --enable-bcmath --enable-shmop --enable-sysvsem --enable-mbregex --enable-mbstring --enable-ftp --enable-gd-native-ttf --enable-pcntl --enable-sockets --with-xmlrpc --enable-soap --without-pear --with-gettext --enable-session --with-curl --with-jpeg-dir --with-freetype-dir --enable-opcache --enable-fpm --with-fpm-user=nginx --with-fpm-group=nginx --without-gdbm --enable-fast-install


如果出现如下错误:

configure: error: Please reinstall the libzip distribution


#解决:

wget https://nih.at/libzip/libzip-1.2.0.tar.gz

tar -zxvf libzip-1.2.0.tar.gz

cd libzip-1.2.0

./configure

make && make install


如果出现如下错误:

php7.3 configure: error: off_t undefined; check your library configuration

# 添加搜索路径到配置文件

echo '/usr/local/lib64

/usr/local/lib

/usr/lib

/usr/lib64'>>/etc/ld.so.conf

# 更新配置

ldconfig -v


然后在继续安装php

make && make install


参考:

https://blog.csdn.net/wqww_1/article/details/112259519


php 配置文件

默认的php配置文件模板,在解压php源码的目录下

[root@VM-4-2-centos php-7.3.5]# ls php.ini*

php.ini-development  php.ini-production

[root@VM-4-2-centos php-7.3.5]# pwd

/root/php-7.3.5


# 比较一下php生产配置文件,和开发模式配置文件的区别

# vimdiff php.ini-development  php.ini-production


2.拷贝该配置文件,放入到php安装目录下

[root@VM-4-2-centos php-7.3.5]# cp php.ini-development /usr/local/php/lib/php.ini



FASTCGI配置文件

1、检查fastcgi的默认配置文件

[root@VM-4-2-centos php-7.3.5]# cd /usr/local/php/etc/

[root@VM-4-2-centos etc]# ls

pear.conf  php-fpm.conf.default  php-fpm.d

[root@VM-4-2-centos etc]# 

[root@VM-4-2-centos etc]# pwd

/usr/local/php/etc



2、拷贝模板配置文件

[root@VM-4-2-centos etc]# cp php-fpm.conf.default php-fpm.conf



[root@VM-4-2-centos etc]# cd php-fpm.d/

[root@VM-4-2-centos php-fpm.d]# ls

www.conf.default

[root@VM-4-2-centos php-fpm.d]# cp www.conf.default www.conf

[root@VM-4-2-centos php-fpm.d]# pwd

/usr/local/php/etc/php-fpm.d

[root@VM-4-2-centos php-fpm.d]# 



启动PHP服务,指定以fastcgi形式

用绝对路径命令,启动php进程

[root@VM-4-2-centos php]# cd sbin/

[root@VM-4-2-centos sbin]# ls

php-fpm

[root@VM-4-2-centos sbin]# pwd

/usr/local/php/sbin


[root@VM-4-2-centos sbin]# /usr/local/php/sbin/php-fpm 


启动php后,检查端口和进程信息

[root@VM-4-2-centos sbin]# netstat -tunlp |grep php

tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      3585/php-fpm: maste 

[root@VM-4-2-centos sbin]# netstat -tunlp |grep php

tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      3585/php-fpm: maste 

[root@VM-4-2-centos sbin]# ps -ef|grep php

root      3585     1  0 10:21 ?        00:00:00 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)

nobody    3586  3585  0 10:21 ?        00:00:00 php-fpm: pool www

nobody    3587  3585  0 10:21 ?        00:00:00 php-fpm: pool www

root      3773   614  0 10:22 pts/2    00:00:00 grep --color=auto php


1.修改nginx支持php代码

# vim /usr/local/nginx/conf/nginx.conf


在文件末尾处增加

     include extra/my_php.conf;

}


2.手动创建extra目录,以及my_php.conf文件

server {

   listen  80;

   server_name _;

   location / {

      root  html;

      index  index.html;

   }


   # 添加有关php程序的解析

   # 判断当请求url结尾是以php,php5的时候,就进入如下的location代码

   location ~ .*\.(php|php5)?$ {

     root html/myphp;

      fastcgi_pass 127.0.0.1:9000;

      fastcgi_index  index.php;

      include fastcgi.conf;

   }

}


3.检查nginx语法 以及重启nginx

[root@VM-4-2-centos conf]# nginx -s reload


[root@VM-4-2-centos conf]# nginx -t

nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok

nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful


4. 创建phP的首页脚本文件

[root@VM-4-2-centos extra]# mkdir -p /usr/local/nginx/html/myphp

[root@VM-4-2-centos extra]# echo "<?php echo phpinfo(); ?>" > /usr/local/nginx/html/myphp/index.php

nginx -s reload


5. 测试lnmp的结合关系

访问 http://42.192.180.238/index.php

当访问到phpinfo 内容  表示lnmp环境搭建完毕,nginx就可以转发请求给php了


测试php访问mysql

mysql> create database chaoge;

Query OK, 1 row affected (0.00 sec)


mysql> use chaoge;

Database changed

mysql> create table mytable(

    -> id int(11) primary key auto_increment,

    -> name varchar(20)

    -> );

Query OK, 0 rows affected (0.06 sec)


mysql> insert into mytable(name) values ('zhangsan');

Query OK, 1 row affected (0.01 sec)


mysql> insert into mytable(name) values ('lisi');

Query OK, 1 row affected (0.01 sec)



编写php的脚本 test_mysql.php




<?php


$conn= mysqli_connect('localhost','root','root');

if (!$conn) {

    die("Connection failed: " . mysqli_connect_error());

}

echo "连接成功";


$sql = "select * from mytable";

mysqli_select_db($conn,'chaoge');

$res = mysqli_query($conn,$sql);

while($row = mysqli_fetch_array($res,MYSQLI_ASSOC)){

     echo "{$row['id']}";

     echo "{$row['name']}";

}

mysqli_close($conn);


?>

只有惜缘,才有缘分;只有惜友,才有友谊。

评论

^