前言:
需要准备的安装包以及下载地址(只是一个大概地址,版本和下载方式需要自行选择):
Apache http://httpd.apache.org/ httpd主程序包(http server)
MySQL https://dev.mysql.com/downloads/mysql/ mysql主程序包
PHP https://php.net/downloads.php php主程序包
apr和apr-util http://apr.apache.org/ apr和apr-util都是httpd的依赖包
pcre http://pcre.org/ httpd的依赖包
boost https://www.boost.org/users/download/ mysql5.7版本必须的依赖包
其中apr和apr-util是对后端服务软件进行优化的。apr-util只是在apr的基础上提供了更多的数据结构和操作系统封装接口而已。而pcre全称Perl Compatible Regular Expressions,是使用C语言编写的正则表达式函数库,被广泛运用到许多开源软件中。
注意:Apache2.4.7及以上版本需要apr1.5.0或以上版本。
(1).准备安装环境
安装编译工具和开发包(依赖包)
[root@youxi1 ~]# yum -y install make gcc gcc-c++ openssl openssl-devel expat-devel
上传下载好的源代码包。我使用的是如下版本:apr-1.6.3.tar.gz、apr-util-1.6.3.tar.gz、boost_1_59_0.tar.gz、httpd-2.4.57.tar.gz、mysql-5.7.43.tar.gz、pcre-8.0.30.tar.gz、php-8.0.30.tar.gz。
(2).编译安装apr和apr-util
编译安装apr
[root@localhost apr-1.6.3]# cd
[root@localhost ~]# tar zxf apr-1.6.3.tar.gz -C /usr/local/src/ //解压地址是约定俗成的,并不是必须解压到这个位置
[root@localhost apr-1.6.3]# cd /usr/local/src/apr-1.6.3/
[root@localhost apr-1.6.3]# ./configure --prefix=/usr/local/apr //指定程序存放路径,不存在时会自动创建
[root@localhost apr-1.6.3]# make && make install
[root@localhost apr-1.6.3]# echo $? //如果返回0则正确安装
0
注意:如果没有指定 --prefix,那么可执行文件默认放在 /usr /local/bin,库文件默认放在 /usr/local/lib,配置文件默认放在 /usr/local/etc,其它的资源文件放在 /usr /local/share。
回到上传压缩包的地址,编译安装apr-util
[root@localhost apr-1.6.3]# cd
[root@localhost ~]# tar zxf apr-util-1.6.3.tar.gz -C /usr/local/src/
[root@localhost ~]# cd /usr/local/src/apr-util-1.6.3/
[root@localhost apr-util-1.6.3]# ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/bin/apr-1-config
[root@localhost apr-util-1.6.3]# make && make install
[root@localhost apr-util-1.6.3]# echo $?
0
注意:apr-util需要指定apr中的一个配置文件bin/apr-1-config。
(3).编译安装pcre
回到上传压缩包的地址,编译安装pcre
[root@localhost apr-util-1.6.3]#cd
[root@localhost ~]# tar zxf pcre2-10.42.tar.gz -C /usr/local/src/
[root@localhost ~]# cd /usr/local/src/pcre2-10.42/
[root@localhost pcre2-10.42]# ./configure --prefix=/usr/local/pcre
[root@localhost pcre2-10.42]# !make //调用最近一次make开头的命令
[root@localhost pcre2-10.42]# echo $?
0
(4).编译安装Apache
a.回到上传压缩包的地址,编译安装Apache
a.回到上传压缩包的地址,编译安装Apache
[root@localhost pcre2-10.42]# cd
[root@localhost ~]# tar zxf httpd-2.4.37.tar.gz -C /usr/local/src/
[root@localhost ~]# cd /usr/local/src/httpd-2.4.37/
[root@localhost httpd-2.4.57]# ./configure --prefix=/usr/local/apache --enable-so --enable-rewrite --enable-ssl --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util --with-pcre=/usr/local/pcre --enable-modules=most --enable-mpms-shared=all --with-mpm=event
[root@localhost httpd-2.4.57]# make && make install
[root@localhost httpd-2.4.57]# echo $?
0
参数说明:
--prefix=/usr/local/apache 安装路径
--enable-so 支持动态加载模块
--enable-rewrite 支持网站地址重写
--enable-ssl 支持ssl加密
--with-apr=/usr/local/apr 指定apr路径
--with-apr-util=/usr/local/apr-util 指定apr-util路径
--with-pcre=/usr/local/pcre 指定pcre路径
--enable-modules=most 选择要编译的模块
--enable-mpms-shared=all 支持当前平台上的动态加载的所有MPM,并将它们构建为DSO模块。
--with-mpm=event 选择默认的MPM
注意:此时的配置文件是/usr/local/apache/conf/httpd.conf,默认网站根目录是/usr/local/apache/htdocs/。
说明:MPM,中文多处理模块,可以构建为动态加载的DSO或与服务器静态链接。
b.启动apache
[root@localhost httpd-2.4.57]# /usr/local/apache/bin/apachectl start
//启动时Apache产生警告
//AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using localhost.localdomain. Set the 'ServerName' directive globally to suppress this message
//解决办法:
将 apache 的配置文件httpd.conf中的 ServerName 改成可用域名或如下配置,大概在/usr/local/apache/conf文件199行
ServerName localhost:80
[root@localhost httpd-2.4.57]# ps aux | grep httpd //使用进程查看命令确认Apache是否启动,是否产生进程
[root@localhost httpd-2.4.57]# netstat -tlun | grep :80 //使用网络进程查看命令确认Apache是否启动,是否开启了80监听端口
c.浏览器输入访问 http://服务器ip,若显示“It works”即表明Apache正常工作
linuxc测试:
[root@localhost conf]# curl 192.168.71.137
<html><body><h1>It works!</h1></body></html>
(5).编译安装mysql
1)卸载系统自带的mysql和mariadb,还有boost(这是Mysql5.7版本以后必须的)
[root@localhost httpd-2.4.57]# yum -y remove mysql* mariadb* boost-*
2)安装依赖包
[root@localhost httpd-2.4.57]# yum install -y cmake make gcc gcc-c++ bison ncurses ncurses-devel
3)添加系统用户mysql
[root@localhost httpd-2.4.57]# useradd -M -s /sbin/nologin -r mysql //-M不创建主目录,-s /sbin/nologin不允许登录,-r创建系统用户
网上好多都是先groupadd mysql,然后再useradd -M -s /bin/false -r -g mysql mysql,一开始没找到原因,后来发现原来官网是这么写的。
扩展:/bin/false是最严格的禁止登录。而/sbin/nologin只是不允许系统登录,但是可以使用ftp等其他服务登录。mysql官网使用的就是/bin/false。
4)回到上传压缩包的地址,编译安装mysql
[root@localhost httpd-2.4.57]# cd
[root@localhost ~]# tar zxf boost_1_59_0.tar.gz -C /usr/local/src/ //解压boost
[root@localhost ~]# tar zxf mysql-5.7.43.tar.gz -C /usr/local/src/ //解压mysql
[root@localhost ~]# mkdir -p /var/lib/mysql/data //准备安装目录/var/lib/mysql和数据目录/var/lib/mysql/data
[root@localhost ~]# chown -R mysql.mysql /var/lib/mysql/ //更改目录所属主和所属组
[root@localhost ~]# cd /usr/local/src/mysql-5.7.43/
[root@localhost mysql-5.7.43]# cmake -DCMAKE_INSTALL_PREFIX=/var/lib/mysql \
-DMYSQL_DATADIR=/var/lib/mysql/data \
-DSYSCONFDIR=/etc \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock \
-DMYSQL_TCP_PORT=3306 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DDOWNLOAD_BOOST=1 \
-DWITH_BOOST=/usr/local/src/boost_1_59_0
[root@localhost mysql-5.7.43]# make -j 4 && make install //-j [CPU核心数]多线程编译
[root@localhost mysql-5.7.43]# echo $?
0
参数说明:
DCMAKE_INSTALL_PREFIX:指定MySQL程序的安装目录,默认/usr/local/mysql
DMYSQL_DATADIR:指定MySQL程序的数据目录
DSYSCONFDIR:初始化参数文件目录
DWITH_xxx_STORAGE_ENGINE:指定静态编译到mysql的存储引擎,MyISAM,MERGE,MEMBER以及CSV四种引擎默认即被编译至服务器,不需要特别指定。
DWITH_READLINE:使用readline功能
DMYSQL_UNIX_ADDR:socket文件路径,默认/tmp/mysql.sock
DMYSQL_TCP_PORT:服务端口号,默认3306
DENABLED_LOCAL_INFILE:指定是否允许本地执行LOAD DATA INFILE,默认OFF
DEFAULT_CHARSET:指定服务器默认字符集,默认latin1
DEFAULT_COLLATION:指定服务器默认的校对规则,默认latin1_general_ci
DWITH_BOOST:指定boost的地址
DWITHOUT_xxx_STORAGE_ENGINE:指定不编译的存储引擎
DWITH_COMMENT:指定编译备注信息
5)创建并编辑一个配置文件my.cnf:
[root@localhost mysql-5.7.43]# cat /etc/my.cnf
[mysqld]
basedir=/var/lib/mysql
datadir=/var/lib/mysql/data
port=3306
socket=/var/lib/mysql/mysql.sock
character-set-server=utf8
log-error=/var/log/mysqld.log
pid-file=/tmp/mysqld.pid
explicit_defaults_for_timestamp=true
[mysql]
socket=/var/lib/mysql/mysql.sock
[client]
socket=/var/lib/mysql/mysql.sock
6)配置环境变量,并刷新
[root@localhost mysql-5.7.43]# vim /etc/profile.d/mysql.sh
export PATH=/var/lib/mysql/bin:$PATH
[root@localhost mysql-5.7.43]# . /etc/profile.d/mysql.sh //两种刷新方式,也可以source /etc/profile.d/mysql.sh
7)生成启动脚本。
[root@localhost mysql-5.7.43]# cp /var/lib/mysql/support-files/mysql.server /etc/init.d/mysqld
[root@localhost mysql-5.7.43]# chmod +x /etc/init.d/mysqld
8)安装完mysql还需要修改安装目录的所属主和所属组
[root@localhost mysql-5.7.43]# chown -R mysql:mysql /var/lib/mysql
9)接着就是初始化数据库,并启动mysql
[root@localhost mysql-5.7.43]# /var/lib/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/var/lib/mysql --datadir=/var/lib/mysql/data
[root@localhost mysql-5.7.43]# /etc/init.d/mysqld start
//报错了,提示没有这个文件 /var/log/mysqld.log 的访问权限,需要新创建mysqld.log文件,并授权
2023-08-24T07:36:15.697849Z 0 [ERROR] Could not open file '/var/log/mysqld.log' for error logging: Permission denied
[root@localhost mysql-5.7.43]# touch /var/log/mysqld.log
[root@localhost mysql-5.7.43]# chown -R mysql:mysql /var/log/mysqld.log
[root@localhost mysql-5.7.43]# /etc/init.d/mysqld start //重新启动
Starting MySQL. SUCCESS!
10)此时的mysql是没有密码直接可以登录的,使用mysql_secure_installation安全设置初始化
[root@localhost mysql-5.7.43]# mysql_secure_installation
Set root password? [Y/n] - 为root用户设置密码
Remove anonymous users? [Y/n] - 删除匿名账号
Disallow root login remotely? [Y/n] - 取消root用户远程登录
Remove test database and access to it? [Y/n] - 删除test库和对test库的访问权限
Reload privilege tables now? [Y/n] - 刷新授权表使修改生效
11)用root用户的身份进入数据库,输入自己设置的密码 admin123
[root@localhost mysql-5.7.43]# mysql -uroot -padmin123456
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.7.43 Source distribution
Copyright (c) 2000, 2023, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
(6).编译安装php
1)安装依赖包,需要epel源
[root@localhost mysql-5.7.43]# yum -y install php-mcrypt \
libmcrypt libmcrypt-devel autoconf freetype gd libmcrypt \
libpng libpng-devel libjpeg libxml2 libxml2-devel zlib curl \
curl-devel re2c php-pear sqlite-devel
2)回到上传压缩包的地址,编译安装php
[root@localhost mysql-5.7.19]# cd
[root@localhost ~]# tar zxf php-8.0.30.tar.gz -C /usr/local/src/
[root@localhost ~]# cd /usr/local/src/php-8.0.30/
[root@localhost php-8.0.30]# ./configure --prefix=/usr/local/php/ \
--with-apxs2=/usr/local/apache/bin/apxs \
--enable-mbstring \
--with-curl \
--with-gd \
--enable-fpm \
--enable-mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-config-file-path=/usr/local/php/etc/ \
--with-mysqli=mysqlnd \
--with-mysql-sock=/var/lib/mysql/mysql.sock \
--enable-maintainer-zts
//编译时报oniguruma错,需要下载相关软件包,网址:https://pkgs.org/download/oniguruma5php、https://pkgs.org/download/oniguruma5php-devel
[root@localhost php-8.0.30]# yum -y install https://rpms.remirepo.net/enterprise/7/remi/x86_64/oniguruma5php-6.9.8-1.el7.remi.x86_64.rpm
[root@localhost php-8.0.30]# yum -y install https://rpms.remirepo.net/enterprise/7/remi/x86_64/oniguruma5php-devel-6.9.8-1.el7.remi.x86_64.rpm
再次编译
[root@localhost php-8.0.30]# ./configure --prefix=/usr/local/php/ \
--with-apxs2=/usr/local/apache/bin/apxs \
--enable-mbstring \
--with-curl \
--with-gd \
--enable-fpm \
--enable-mysqlnd \
--with-pdo-mysql=mysqlnd \
--with-config-file-path=/usr/local/php/etc/ \
--with-mysqli=mysqlnd \
--with-mysql-sock=/var/lib/mysql/mysql.sock \
--enable-maintainer-zts
[root@localhost php-8.0.30]# make -j 4 && make install
[root@localhost php-8.0.30]# echo $?
0
编译时报oniguruma错,需要下载相关软件包,如果软件包链接失效,可以通过Oniguruma5php和Oniguruma5php-devel获取对应的Binary Package。
参数说明:
--with-apxs2 将php编译为Apache的一个模块进行使用
--enable-mbstring 多字节字符串的支持
--with-curl 支持cURL
--with-gd 支持gd库
--enable-fpm 支持构建fpm
--enable-mysqlnd 启用mysqlnd
--with-pdo-mysql 支持pdo:MySQL支持
--with-config-file-path 设置配置文件路径
--with-mysqli 支持MySQLi
--with-mysql-sock 关联mysql的socket文件
--enable-maintainer-zts 如果Apache是event模型,那需要指定zts
3)生成配置文件
[root@localhost php-8.0.30]# cp php.ini-production /usr/local/php/etc/php.ini
4)修改Apache的配置文件,使其支持php,并重启Apache
[root@localhost php-8.0.30]# vim /usr/local/apache/conf/httpd.conf
AddType application/x-httpd-php .php //大概在393行
AddType application/x-httpd-php-source .phps
[root@localhost php-8.0.30]# systemctl restart apache.service
5)测试
创建测试界面
[root@localhost php-8.0.30]# vim /usr/local/apache/htdocs/index.php
<?php
phpinfo();
?>
访问成功!