说明
写本文的初衷是,在部署LAMP时,遇到各种问题。
看了很多博客,帖子,有些讲的不够通透,有些写的细节都是错的。
基于此,记录一下部署时踩过的坑。
make说明
configure xxxx //生成makefile文件
make //生成 .o 可执行文件
make install //安装
make clean //删除有make生成的 .o 文件
make distclean //删除有configure生成的makefile文件
以下流程若 make 或 make install 出错,则需要使用 make clean
安装包
apache官网软件列表:https://www.apache.org/dist/
apr链接:https://www.apache.org/dist/apr/apr-1.7.0.tar.gz
apr-util链接:https://www.apache.org/dist/apr/apr-util-1.6.1.tar.gz
pcre链接:https://sourceforge.net/projects/pcre/files/pcre/8.43/pcre-8.43.tar.gz/download
apache链接:http://mirror.bit.edu.cn/apache//httpd/httpd-2.4.41.tar.gz
php版本:https://www.php.net/distributions/php-7.2.26.tar.gz
mysql版本:https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz
一:安装apr
./configure --prefix=/usr/local/apr
make && make install
报错:rm: cannot remove ‘libtoolT’: No such file or directory
解决:在configure中找到RM=‘
R
M
′
修
改
为
R
M
=
′
RM'修改为RM='
RM′修改为RM=′RM -f’
vim configure
设置行号 se nu
搜索文本(命令行下) /RM=’$RM’ 大概是31279
跳行 /31279
如上修改,结束
二:安装apr-util
./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr
make && make install
报错:xml/apr_xml.c:35:19: fatal error: expat.h: No such file or directory
解决:yum install expat-devel
三:安装pcre
./configure --prefix=/usr/local/pcre
make && make install
报错:configure: error: Invalid C++ compiler or C++ compiler flags
解决:yum -y install gcc-c++
四:安装httpd
./configure --prefix=/usr/local/httpd --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-pcre=/usr/local/pcre
make && make install
1.将脚本控制文件拷贝到/etc/init.d/下并命名为httpd,一般我们可以通过/etc/init.d/httpd restart/start/stop来控制httpd服务的重启等
# 复制目录后其文件属性会发生变化想要使得复制之后的目录和原目录完全一样包括文件权限,使用 cp -a
cp -a /usr/local/httpd/bin/apachectl /etc/init.d/httpd
2.修改apache主配置文件/usr/local/httpd/conf/httpd.conf
将ServerName 处的域名替换成自己的主机域名
# 原来的ServerName是被注释的,取消注释(去掉前面的#)
ServerName www.juzheng.top:80
3.开启服务
/etc/init.d/httpd start
五:安装mysql
1.先卸载centos自带的mariadb
rpm -qa | grep mariadb
yum remove mariadb-libs-5.5.56-2.el7.x86_64 # 同时,配置文件在/etc/my.cnf 也已经删除
rpm -qa | grep mariadb
2.新建mysql用户组和mysql用户
# 因mysql程序需要用mysql账户运行,所以新建mysql用户组和mysql用户
groupadd mysql
# 新建mysql用户,创建用户时指定-r,指创建系统用户。系统用户是用来派生服务的,本身就不需要登录。功能主要就是设定某
# 个程序的运行权限,避免去使用root登录。系统用户id范围1-499,很容易识别。在有些书里面成为派生用户/派生用户组。
# -r 指创建系统用户
# -s /bin/false是最严格的禁止login选项,一切服务都不能用
useradd -r -g mysql -s /bin/false mysql
3.解压文件到/usr/local/mysql
4.在mysql目录中创建data文件夹,并给data目录赋予755权限(也可以增加写权限)
cd /usr/local/mysql
mkdir data
chmod a+w data //或者 chmod 755 data
5.修改mysql目录及子目录(文件)文件所有者和用户组
chown -R mysql:mysql /usr/local/mysql # chmod -R 所有者:组,-R 递归修改
6.初始化展开mysql
cd /usr/local/mysql/bin
./mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
产生错误:
error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
# 检查系统是否安装libaio库
rpm -qa|grep libaio
# 用yum安装libaio-devel.x86_64
yum install libaio-devel.x86_64
7.添加mysql主配置文件
注:
pid-file 和 log-error 是中划线。
pid-file和log-error属于[mysqld]。有些博客此处设置有误,将其放在了[mysqld_safe]下。若将其放置在[mysqld_safe]下则设置无效,虽然mysql也能启动服务,但是pid-file和log-error文件是在data中的文件名就变成了:iZbp17ytqh359vcnlft30yZ.err 和 iZbp17ytqh359vcnlft30yZ.pid 。
可使用ps -aux | grep mysql 查看
vim /etc/my.cnf
[client]
port=3306
socket=/usr/local/mysql/mysql.sock
[mysqld]
port=3306
socket=/usr/local/mysql/mysql.sock
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
pid-file=/usr/local/mysql/data/mysqld.pid
log-error=/usr/local/mysql/data/mysqld.err
#设置此项登录mysql不需要密码,为了安全:仅限初次安装数据库时使用
skip-grant-tables
8.将启动文件添加到/etc/init.d中,并启动服务
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
service mysqld start
9.登入数据库修改root用户密码
cd /usr/local/mysql/bin
./mysql -urooot -p
update mysql.user set authentication_string=password('123456') where user='root';
flush privileges;
exit;
10.将/etc/my.cnf文件的skip-grant-tables关闭(在前面用#号注释)
vim /etc/my.cnf
#skip-grant-tables
六:安装php
yum安装所需的扩展
yum install \
libxml2-devel \
openssl-devel \
curl-devel \
1.新建www用户组和www用户
groupadd www
useradd -g www -s /bin/false www
2.编译安装php
注:此处选择php-fpm安装模式,这种模式性能是最好的。(还可以安装成apache模块,需要制定 --with-apxs2)
./configure \
--prefix=/usr/local/php \
--with-config-file-path=/usr/local/php/etc/ \
--enable-fpm \
--with-fpm-user=www \
--with-fpm-group=www \
--enable-mbstring \
--with-openssl \
--with-curl \
--with-iconv \
--with-mysqli=mysqlnd \
--with-pdo-mysql=mysqlnd
make && make install
3.定义php.ini,php-fpm,www.conf配置文件,放置php-fpm文件
# 将解压目录下的php.ini-production文件复制到安装目录的etc目录下。php.ini-development为开发环境配置文件,php.ini-production为生产环境配置文件。(生产环境的报错部分比较严谨,开发环境会将错误显示的呈现出来)
cp php.ini-development /usr/local/php/etc/php.ini
# 设置php-fpm配置文件
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
# 设置www.conf设置文件
cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf
# 将开启php-fpm的文件放到 /etc/init.d 目录下
cp /usr/local/php/sbin/php-fpm /etc/init.d/php-fpm
修改httpd的配置文件
# 取消下面两行的注释
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
# 修改主页文件
<IfModule dir_module>
DirectoryIndex index.php index.html
</IfModule>
# php跳转。在 <IfModule mime_module> 中添加
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .php5
# 创建虚拟主机配置
<VirtualHost *:80>
ServerName blog.ysu.com
DocumentRoot "/usr/local/httpd24/htdocs"
<Directory "/usr/local/httpd24/htdocs">
Options None
AllowOverride None
Require all granted
</Directory>
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/usr/local/httpd24/htdocs/$1
</VirtualHost>
4.开启php-fpm服务
./usr/local/php7.2/sbin/php-fpm
第一种:(一般是没有生成php-fpm.pid文件时使用)
php 5.3.3 以后的php-fpm 不再支持 php-fpm 以前具有的 /Data/apps/php7/sbin/php-fpm(start|stop|reload)等命令,所以不要再看这种老掉牙的命令了,需要使用信号控制:
master进程可以理解以下信号
INT, TERM 立刻终止
QUIT 平滑终止
USR1 重新打开日志文件
USR2 平滑重载所有worker进程并重新载入配置和二进制模块
# 查看php-fpm的进程号
ps aux|grep php-fpm
root 42891 0.0 0.1 182796 1220 ? Ss 4月18 0:19 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)
www 42892 0.0 0.6 183000 6516 ? S 4月18 0:07 php-fpm: pool www
www 42893 0.0 0.6 183000 6508 ? S 4月18 0:17 php-fpm: pool www
# 重启php-fpm
kill -USR2 42891
第二种:(已生成php-fpm.pid文件时使用)
上面master进程可以看到,matster使用的是/usr/local/php/etc/php-fpm.conf这个配置文件,cat /usr/local/php/etc/php-fpm.conf 发现:
[global]
; Pid file
; Note: the default prefix is /usr/local/php/var
; Default Value: none
;pid = run/php-fpm.pid
id文件路径应该位于/usr/local/php/var/run/php-fpm.pid,由于注释掉,所以没有生成,我们把注释去除,再kill -USR2 42891 重启php-fpm,便会生成pid文件,下次就可以使用以下命令重启,关闭php-fpm了:
php-fpm 关闭:
kill -INT 'cat /usr/local/php/var/run/php-fpm.pid'
php-fpm 重启:
kill -USR2 'cat /usr/local/php/var/run/php-fpm.pid'
5.测试LAMP
<?php
$mysqli=new mysqli("127.0.0.1","root","123456");
if(mysqli_connect_errno()){
echo "连接失败";
}
echo "恭喜,连接成功";
$mysqli->close();
?>
结余:
LAMP环境编译安装,是会出现很多错误。需要多次尝试。若对编译时的参数有疑问,请利用./configure --help >> xxx_configure.txt 仔细阅读其中的选项参数。