@[TOC](第二十六章 实现LAMP架构php)
[root@centos7 ~]# yum install httpd php php-mysql mariadb-server php-mbstring -y
[root@centos7 ~]# systemctl restart httpd
[root@centos7 ~]# cd /var/www/html/
[root@centos7 html]# vim index.php
<?php
echo date ("Y/m/d H:i:s");
phpinfo();
?>
浏览器测试
php代码格式
#格式1
[root@centos7 html]# cat test1.php
<?php
echo "<h1>Hello world!</h1>"
?>
#格式2
[root@centos7 html]# cat test2.php
<h1>
<?php echo "Hello world." ?>
</h1>
使用PDO(PHP Data Object)扩展连接数据库
[root@centos7 html]# systemctl start mariadb
- 测试代码1
[root@centos7 html]# vim pdo1.php
<?php
$dsn='mysql:host=localhost;dbname=test';
$username='root';
$passwd='';
$dbh=new PDO($dsn,$username,$passwd);
var_dump($dbh);
?>
- 测试代码2
[root@centos7 html]# cat pdo2.php
<?php
try {
$user='root'; <--以root身份连接
$pass=''; <--密码
$dbh = new PDO('mysql:host=localhost;dbname=mysql',$user,$pass);
foreach($dbh->query('SELECT user,host from user') as $row) {
print_r($row);
}
$dbh = null;
}catch (PDOException $e) {
print "Error!:" . $e->getMessage() . "<br/>";
die();
}
?>
实验一:基于LAMP应用phpmyadmin
安装包
[root@centos7 ~]# yum install httpd php php-mysql mariadb-server php-mbstring -y
[root@centos7 ~]# systemctl start httpd
[root@centos7 ~]# systemctl start mariadb
#安全策略加固、密码:'123.com'
[root@centos7 ~]# mysql_secure_installation
[root@centos7 html]# cd /data/
#上传文件
[root@centos7 data]# ls
phpMyAdmin-4.4.15.10-all-languages.tar.xz
[root@centos7 data]# tar xvf phpMyAdmin-4.4.15.10-all-languages.tar.xz
[root@centos7 data]# cd phpMyAdmin-4.4.15.10-all-languages/
[root@centos7 phpMyAdmin-4.4.15.10-all-languages]# cp config.sample.inc.php config.inc.php
[root@centos7 phpMyAdmin-4.4.15.10-all-languages]# vim config.inc.php
...
*/
$cfg['blowfish_secret'] = '123.com'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */ <--
/*
...
[root@centos7 phpMyAdmin-4.4.15.10-all-languages]# mkdir /var/www/html/phpmyadmin
[root@centos7 phpMyAdmin-4.4.15.10-all-languages]# mv * /var/www/html/phpmyadmin/
[root@centos7 phpMyAdmin-4.4.15.10-all-languages]# cd /var/www/html/phpmyadmin/
实验二:搭建wordpress个人博客
| IP | 信息 |
|---|---|
| 37.7 | apache+php |
| 37.18 | mariadb |
前提
7主机[root@7 ~]# yum install php php-mysql httpd mariadb -y
[root@7 ~]# systemctl start httpd
18主机
[root@18 ~]# yum install mariadb-server -y
[root@18 ~]# systemctl start mariadb
[root@18 ~]# mysql
#创建wpdb数据库
MariaDB [(none)]> create database wpdb;
Query OK, 1 row affected (0.00 sec)
#授权
MariaDB [(none)]> grant all on wpdb.* to wpuser@'192.168.37.%' identified by 'centos';
Query OK, 0 rows affected (0.00 sec)
#刷新权限
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)
[root@7 ~]# cd /data/
[root@7 data]# ls
wordpress-5.0.4-zh_CN.tar.gz
[root@7 data]# tar xvf wordpress-5.0.4-zh_CN.tar.gz
[root@7 data]# cd wordpress/
方法1
[root@7 wordpress]# cp wp-config-sample.php wp-config.php
[root@7 wordpress]# vim wp-config.php
...
// ** MySQL 设置 - 具体信息来自您正在使用的主机 ** //
/** WordPress数据库的名称 */
define('DB_NAME', 'wpdb'); <--
/** MySQL数据库用户名 */
define('DB_USER', 'wpuser'); <--
/** MySQL数据库密码 */
define('DB_PASSWORD', 'centos'); <--
/** MySQL主机 */
define('DB_HOST', '192.168.37.18'); <--
/** 创建数据表时默认的文字编码 */
define('DB_CHARSET', 'utf8mb4'); <--
...
[root@7 wordpress]# mv /data/wordpress /var/www/html/
[root@7 wordpress]# systemctl restart httpd
方法2
7主机
[root@7 wordpress]# mv /data/wordpress /var/www/html/
[root@7 wordpress]# cd /var/www/html/
#权限
[root@7 html]# setfacl -m u:apache:rwx wordpress/
[root@7 html]# systemctl restart httpd
7主机
#建完网站后、删除权限
[root@7 html]# setfacl -Rb wordpress/
实验三:搭建discuzid
跳转位置
| IP | 信息 |
|---|---|
| 37.7 | apache+php |
| 37.18 | mariadb |
前提
7主机[root@7 ~]# yum install php php-mysql mariadb httpd -y
[root@7 ~]# systemctl start httpd
18主机
[root@18 ~]# yum install mariadb-server -y
[root@18 ~]# systemctl start mariadb
[root@18 ~]# mysql
MariaDB [(none)]> create database ultrax;
MariaDB [(none)]> grant all on ultrax.* to forum@'192.168.37.%' identified by 'centos';
搭建过程
[root@7 data]# cd /data/
[root@7 data]# ls
Discuz_X3.3_SC_UTF8.zip
[root@7 data]# unzip Discuz_X3.3_SC_UTF8.zip
[root@7 data]# mv upload/ /var/www/html/forum
[root@7 data]# cd /var/www/html
[root@7 html]# setfacl -Rm u:apache:rwx forum/
[root@7 html]# systemctl restart httpd
浏览器打开http://192.168.37.7/forum/--全新安装 Discuz! X (含 UCenter Server)
实验四:实现WEB管理的PowerDNS
| IP | 信息 |
|---|---|
| 37.7 | apache+php |
| 37.18 | mariadb |
前提
7主机安装包:EPEL源
[root@7 ~]# yum install -y pdns pdns-backend-mysql
18主机
[root@18 ~]# yum install mariadb-server -y
[root@18 ~]# systemctl start mariadb
[root@18 ~]# mysql
#准备mariadb中的数据库,表和用户
MariaDB [(none)]> create database powerdns;
MariaDB [(none)]> grant all on powerdns.* to 'powerdns'@'192.168.37.%' identified by 'centos';
MariaDB [(none)]> use powerdns;
创建powerdns数据库中的表,参看下面文档实现
https://doc.powerdns.com/md/authoritative/backend-generic-mysql/
内容如下:粘贴到18主机中
CREATE TABLE domains (
id INT AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
master VARCHAR(128) DEFAULT NULL,
last_check INT DEFAULT NULL,
type VARCHAR(6) NOT NULL,
notified_serial INT DEFAULT NULL,
account VARCHAR(40) DEFAULT NULL,
PRIMARY KEY (id)
) Engine=InnoDB;
CREATE UNIQUE INDEX name_index ON domains(name);
CREATE TABLE records (
id BIGINT AUTO_INCREMENT,
domain_id INT DEFAULT NULL,
name VARCHAR(255) DEFAULT NULL,
type VARCHAR(10) DEFAULT NULL,
content VARCHAR(64000) DEFAULT NULL,
ttl INT DEFAULT NULL,
prio INT DEFAULT NULL,
change_date INT DEFAULT NULL,
disabled TINYINT(1) DEFAULT 0,
ordername VARCHAR(255) BINARY DEFAULT NULL,
auth TINYINT(1) DEFAULT 1,
PRIMARY KEY (id)
) Engine=InnoDB;
CREATE INDEX nametype_index ON records(name,type);
CREATE INDEX domain_id ON records(domain_id);
CREATE INDEX recordorder ON records (domain_id, ordername);
CREATE TABLE supermasters (
ip VARCHAR(64) NOT NULL,
nameserver VARCHAR(255) NOT NULL,
account VARCHAR(40) NOT NULL,
PRIMARY KEY (ip, nameserver)
) Engine=InnoDB;
CREATE TABLE comments (
id INT AUTO_INCREMENT,
domain_id INT NOT NULL,
name VARCHAR(255) NOT NULL,
type VARCHAR(10) NOT NULL,
modified_at INT NOT NULL,
account VARCHAR(40) NOT NULL,
comment VARCHAR(64000) NOT NULL,
PRIMARY KEY (id)
) Engine=InnoDB;
CREATE INDEX comments_domain_id_idx ON comments (domain_id);
CREATE INDEX comments_name_type_idx ON comments (name, type);
CREATE INDEX comments_order_idx ON comments (domain_id, modified_at);
CREATE TABLE domainmetadata (
id INT AUTO_INCREMENT,
domain_id INT NOT NULL,
kind VARCHAR(32),
content TEXT,
PRIMARY KEY (id)
) Engine=InnoDB;
CREATE INDEX domainmetadata_idx ON domainmetadata (domain_id, kind);
CREATE TABLE cryptokeys (
id INT AUTO_INCREMENT,
domain_id INT NOT NULL,
flags INT NOT NULL,
active BOOL,
content TEXT,
PRIMARY KEY(id)
) Engine=InnoDB;
CREATE INDEX domainidindex ON cryptokeys(domain_id);
CREATE TABLE tsigkeys (
id INT AUTO_INCREMENT,
name VARCHAR(255),
algorithm VARCHAR(50),
secret VARCHAR(255),
PRIMARY KEY (id)
) Engine=InnoDB;
CREATE UNIQUE INDEX namealgoindex ON tsigkeys(name, algorithm);
7主机
#配置PowerDNS使用mariadb作为后台数据存储
[root@7 ~]# vim /etc/pdns/pdns.conf #查找到包含launch= 的行,修改并添加下面的内容
...
launch=gmysql
gmysql-host=192.168.37.18
gmysql-port=3306
gmysql-dbname=powerdns
gmysql-user=powerdns
gmysql-password=centos
...
注意
dnsmasq服务可能会占用53端口,导致服务启动失败
[root@7 ~]# ss -ntlp | grep 53
LISTEN 0 5 192.168.122.1:53 *:* users:(("dnsmasq",pid=12042,fd=6))
[root@7 ~]# kill -9 12042
将pdns服务:启动并设为开机启动
[root@7 ~]# systemctl start pdns
[root@7 ~]# systemctl enable pdns
安装httpd和php相关包
[root@7 ~]# yum -y install httpd php php-devel php-gd php-mcrypt php-imap phldap php-mysql php-odbc php-pear php-xml php-xmlrpc php-mbstring phmcrypt php-mhash gettextpp
将httpd服务:启动并设为开机启动
[root@7 ~]# systemctl start httpd
[root@7 ~]# systemctl enable httpd
下载poweradmin程序,并解压缩到相应目录
[root@7 html]# cd /var/www/html/
[root@7 html]# wget http://downloads.sourceforge.net/project/poweradmin/poweradmin-2.1.7.tgz
[root@7 html]# tar xvf poweradmin-2.1.7.tgz
[root@7 html]# mv poweradmin-2.1.7 /var/www/html/poweradmin
[root@7 html]# systemctl restart httpd
提供先前配置的数据库详情,同时为Poweradmin设置管理员密码
18主机
按照下面页面说明,在数据库中创建用户并授权
MariaDB [(none)]> GRANT SELECT, INSERT, UPDATE, DELETE
-> ON powerdns.*
-> TO 'poweradmin'@'192.168.37.%'
-> IDENTIFIED BY 'centos';
7主机
按下面页面说明,创建config.in.php文件内容
vim /var/www/html/poweradmin/inc/config.inc.php
[root@7 html]# vim /var/www/html/poweradmin/inc/config.inc.php
<?php
$db_host = '192.168.37.18';
$db_user = 'poweradmin';
$db_pass = 'centos';
$db_name = 'powerdns';
$db_type = 'mysql';
$db_layer = 'PDO';
$session_key = 'GEFpfG6P*bXkK&@R1)3BjNoc4dEPrw_TIZhfmEccr~5dkd';
$iface_lang = 'en_EN';
$dns_hostmaster = 'powerdnsserver';
$dns_ns1 = '192.168.37.7';
$dns_ns2 = '';
安装完毕后,删除install目录
[root@7 html]# rm -rf /var/www/html/poweradmin/install/
登陆http://powerdns服务器IP/poweradmin/
登陆成功
源码编译xcache实现加速
| IP | 信息 |
|---|---|
| 37.7 | apache+php |
| 37.18 | mariadb |
[root@7 ~]# yum install -y php-devel gcc
[root@7 ~]# cd /data/
[root@7 data]# ls
xcache-3.2.0.tar.gz
[root@7 data]# cd xcache-3.2.0/
[root@7 xcache-3.2.0]# phpize --clean && phpize
[root@7 xcache-3.2.0]# ./configure --enable-xcache
[root@7 xcache-3.2.0]# make && make install
[root@7 xcache-3.2.0]# systemctl restart httpd
实验五:基于UDS模式的php-fpm的LAMP
前提
| IP | 信息 |
|---|---|
| 37.7 | apache+php |
| 37.18 | mariadb |
| 37.6 | 客户端 |
步骤
提示可看情况忽略
1. 需要关闭之前的httpd服务 systemctl stop httpd
2. 拷贝文件 cp /usr/lib/systemd/system/httpd.service /usr/lib/systemd/system/httpd24.service
[root@7 ~]# vim /usr/lib/systemd/system/httpd24.service
...
[Service]
Type=forking <--
#EnvironmentFile=/etc/sysconfig/httpd <--
#ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND <--
ExecStart=/app/httpd24/bin/httpd $OPTIONS -k start <--
ExecReload=/app/httpd24/bin/httpd $OPTIONS -k graceful <--
...
[root@7 ~]# vim /app/http24/conf/httpd.conf
...
User apache
Group apache
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>
AddType application/x-httpd-php .php
AddType application/x-httpd-php-source .phps
ProxyRequests Off
#基于UDS模式php-fpm的LAMP
ProxyPassMatch "^/(.*\.php(/.*)?)$" "unix:/var/run/php5-fpm.sock|fcgi://localhost/app/httpd24/htdocs/"
#基于端口httpd支持php-fpm的配置
#ProxyPassMatch "^/.*\.php(/.*)?$" "fcgi://localhost:9000/app/httpd24/htdocs"
...
3. 卸载 yum remove php -y
[root@7 ~]# yum install php-fpm php-mysql -y
[root@7 ~]# vim /etc/php-fpm.d/www.conf
...
;listen = 127.0.0.1:9000
listen = /var/run/php5-fpm.sock
listen.owner = apache
listen.group = apache
listen.mode = 0666
#进程数最大500
pm.max_children = 500
#进程数初始30
pm.start_servers = 30
#最小空闲进程
pm.min_spare_servers = 20
#最大空闲进程
pm.max_spare_servers = 60
#最大请求数
pm.max_requests = 500
#状态
pm.status_path = /status
ping.path = /ping
ping.response = pong
...
[root@7 ~]# systemctl daemon-reload
[root@7 ~]# systemctl restart httpd24 php-fpm
测试:
#把discuz网站文件、复制到此目录
[root@7 ~]# cp -r /var/www/html/forum/ /app/httpd24/htdocs/
#进入所在目录、设置权限
[root@7 ~]# cd /app/httpd24/htdocs/
[root@7 htdocs]# setfacl -Rm u:apache:rwx forum/
压力测试
[root@centos6 ~]$ ab -c100 -n1000 http://192.168.37.7/forum
实验六:编译安装LAMP,实现多虚拟主机,一个虚拟主机blog、一个虚拟主机 forum
前提
| 主机 | 环境 |
|---|---|
| 37.7 | apache+php-fpm |
| 37.18 | mariadb |
所需软件:
mariadb主机
#查看用户mysql是否已存在
[root@mariadb ~]# getent passwd mysql
#如果不存在直接创建mysql用户
[root@mariadb ~]# useradd -r -s /sbin/nologin mysql -d /data/mysql
#创建目录
[root@mariadb ~]# mkdir /data/mysql -pv
#设置权限
[root@mariadb ~]# chown mysql.mysql /data/mysql/
[root@mariadb data]# cd /data/
#上传文件
[root@mariadb data]# ls
mariadb-10.2.25-linux-x86_64.tar.gz mysql
#解压缩到/usr/local/
[root@mariadb data]# tar zxf mariadb-10.2.25-linux-x86_64.tar.gz -C /usr/local/
[root@mariadb data]# cd /usr/local/
#创建软链接
[root@mariadb local]# ln -s mariadb-10.2.25-linux-x86_64/ mysql
[root@mariadb local]# chown -R root.root mysql/
[root@mariadb local]# cd mysql/
#设置变量
[root@mariadb mysql]# echo 'PATH=/usr/local/mysql/bin:$PATH' > /etc/profile.d/mysql.sh
#使变量生效
[root@mariadb mysql]# . /etc/profile.d/mysql.sh
#初始化脚本
[root@mariadb mysql]# scripts/mysql_install_db --datadir=/data/mysql --user=mysql
#拷贝配置文件、并且备份
[root@mariadb mysql]# cp support-files/my-huge.cnf /etc/my.cnf -b
#配置数据库文件
[root@mariadb mysql]# vim /etc/my.cnf
...
[mysqld]
datadir=/data/mysql <--添加此行、数据库所在位置
...
#启动脚本
[root@mariadb mysql]# cp support-files/mysql.server /etc/init.d/mysqld
#显示所有运行级系统服务的运行状态信息
[root@mariadb mysql]# chkconfig --list
#增加一项新的服务 mysqld
[root@mariadb mysql]# chkconfig --add mysqld
#启动服务、如果不能启动查看3306端口是否被占用
[root@mariadb mysql]# service mysqld start
#查看是否有mysqld的3306端口
[root@mariadb mysql]# ss -ntlp|grep 3306
[root@mariadb mysql]# mysql
#创建wordpress库
MariaDB [(none)]> create database wordpress;
#创建discuz库
MariaDB [(none)]> create database discuz;
#创建wordpress用户 库名 用户名 网段 密码
MariaDB [(none)]> grant all on wordpress.* to wordpress@'192.168.37.%' identified by 'magedu';
MariaDB [(none)]> grant all on discuz.* to discuz@'192.168.37.%' identified by 'magedu';
apache+php-fpm主机
[root@apachephp-fpm ~]# cd /data/
#上传文件
[root@apachephp-fpm data]# ls
apr-1.7.0.tar.bz2 Discuz_X3.3_SC_UTF8.zip php-7.3.7.tar.xz
apr-util-1.6.1.tar.bz2 httpd-2.4.39.tar.bz2 wordpress-5.2.2.tar.gz
#解压缩bz2结尾的文件
[root@apachephp-fpm data]# for p in *.bz2 ;do tar xvf $p;done
#创建apache账号
[root@apachephp-fpm data]# useradd -r -s /sbin/nologin apache
#安装httpd依赖包
[root@apachephp-fpm data]# yum install gcc pcre-devel openssl-devel expat-devel -y
#编译安装httpd
[root@apachephp-fpm data]# cd httpd-2.4.39/
[root@apachephp-fpm httpd-2.4.39]# ./configure --prefix=/app/httpd24 --enable-so --enable-ssl --enable-cgi --enable-rewrite --with-zlib --with-pcre --with-included-apr --enable-modules=most --enable-mpms-shared=all --with-mpm=prefork
[root@apachephp-fpm httpd-2.4.39]# make -j 4 && make install
#环境变量
[root@apachephp-fpm httpd-2.4.39]# echo 'PATH=/app/httpd24/bin:$PATH' > /etc/profile.d/httpd24.sh
#使变量生效
[root@apachephp-fpm httpd-2.4.39]# . /etc/profile.d/httpd24.sh
[root@apachephp-fpm httpd-2.4.39]# cd /app/httpd24/
#启动服务、如果起不来'systemctl status httpd'查看是否被占用、'systemctl stop httpd'关闭服务即可
[root@apachephp-fpm httpd24]# apachectl start
#修改httpd配置文件
[root@apachephp-fpm httpd24]# vim conf/httpd.conf
...
User apache
Group apache
<IfModule dir_module>
DirectoryIndex index.php index.html
</IfModule>
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
AddType application/x-httpd-php .php <--以下信息、添加到文件最后
AddType application/x-httpd-php-source .phps
ProxyRequests Off
<virtualhost *:80> <--虚拟主机
servername blog.magedu.com
documentroot /data/wordpress <--路径
<directory /data/wordpress> <--针对此目录
require all granted <--授权
</directory>
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/data/wordpress/$1
</virtualhost>
<virtualhost *:80>
servername forum.magedu.com
documentroot /data/discuz
<directory /data/discuz>
require all granted
</directory>
ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/data/discuz/$1
</virtualhost>
...
[root@apachephp-fpm httpd24]# cd /data/
#安装php依赖包(epel)
[root@apachephp-fpm data]# yum install libxml2-devel bzip2-devel libmcrypt-devel -y
#解压缩
[root@apachephp-fpm data]# tar xvf php-7.3.7.tar.xz
#编译安装php
[root@apachephp-fpm data]# cd php-7.3.7/
[root@apachephp-fpm php-7.3.7]# ./configure --prefix=/app/php --enable-mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-openssl --with-freetype-dir --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --enable-mbstring --enable-xml --enable-sockets --enable-fpm --enable-maintainer-zts --disable-fileinfo
#安装
[root@apachephp-fpm php-7.3.7]# make -j 4 && make install
#拷贝php配置文件
[root@apachephp-fpm php-7.3.7]# cp php.ini-production /etc/php.ini
#拷贝php启动脚本文件
[root@apachephp-fpm php-7.3.7]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
#添加执行权限
[root@apachephp-fpm php-7.3.7]# chmod +x /etc/init.d/php-pfm
[root@apachephp-fpm php-7.3.7]# cp /app/php/etc/php-fpm.conf.default /app/php/etc/php-fpm.conf
[root@apachephp-fpm php-7.3.7]# cd /app/php/etc/
[root@apachephp-fpm etc]# cp php-fpm.conf.default php-fpm.conf
[root@apachephp-fpm etc]# cp php-fpm.d/www.conf.default php-fpm.d/www.conf
[root@apachephp-fpm etc]# vim php-fpm.d/www.conf
...
user = apache
group = apache
...
#启动php-fpm服务
[root@apachephp-fpm etc]# service php-fpm start
#查看php-fpm端口
[root@apachephp-fpm etc]# ss -ntlp|grep php-fpm
LISTEN 0 128 127.0.0.1:9000 *:* users:(("php-fpm",pid=44143,fd=5),("php-fpm",pid=44142,fd=5),("php-fpm",pid=44141,fd=7))
[root@apachephp-fpm etc]# cd /data/
#解压缩wordpress
[root@apachephp-fpm data]# tar xvf wordpress-5.2.2.tar.gz -C /data/
#解压缩Discuz
[root@apachephp-fpm data]# unzip Discuz_X3.3_SC_UTF8.zip
[root@apachephp-fpm data]# mkdir -pv /data/discuz
#移动到discuz目录
[root@apachephp-fpm data]# mv upload/* discuz/
#给两个目录添加权限
[root@apachephp-fpm data]# setfacl -Rm u:apache:rwx /data/{wordpress,discuz}
#重启httpd服务
[root@apachephp-fpm data]# apachectl stop
[root@apachephp-fpm data]# apachectl start
测试:
Windows测试配置