1.1 什么是LNMP
LNMP是指一组通常一起使用来运行动态网站或者服务器的自由软件名称首字母缩写。
L指Linux,N指Nginx,M一般指MySQL,也可以指MariaDB,P一般指PHP,也可以指Perl或Python
1.2 LNMP架构是如何工作
1.3 LNMP架构详细工作流程
最终mysql》》php》》php-fpm》》fastcgi》》nginx》》http》》user
1 | 2 | 3 |
---|---|---|
nginx | php | mysql / mariadb |
安装nginx
[root@nginx ~]# yum remove php-mysql-5.4 php php-fpm php-common
[root@nginx ~]# cat /etc/yum.repos.d/php.repo
[webtatic-php]
name = php Repository
baseurl = http://us-east.repo.webtatic.com/yum/el7/x86_64/
gpgcheck = 0
[root@nginx ~]# yum -y install php71w php71w-cli php71w-common php71w-devel php71w-embedded php71w-gd php71w-mcrypt php71w-mbstring php71w-pdo php71w-xml php71w-fpm php71w-mysqlnd php71w-opcache php71w-pecl-memcached php71w-pecl-redis php71w-pecl-mongodb
安装php-fpm
[root@web01 php]# systemctl enable php-fpm
[root@web01 php]# systemctl start php-fpm
安装mariadb
[root@web01 php]# yum install mariadb mariadb-server -y
[root@web01 php]# systemctl start mariadb
[root@web01 php]# systemctl enable mariadb
php和nginx是相互独立的的进程
php于nginx的通讯,我们称为fastcgi运行方式。
sysetmctl start php-fpm
cat /etc/nginx/conf.d/php.oldxu.com.conf
server {
listen 80;
server_name php.oldxu.com;
root /code;
#当用户请求php.oldxu.com --> php.oldxu.com/index.php
location / {
index index.php;
}
#将请求转给php-fpm程序,同时携带我们需要被解析的文件路径
SCRIPT_FILENAME = /code/index.php
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
* 编写php代码
[root@web01 php]# rm -rf /code && mkdir /code
[root@web01 php]# cat /code/index.php
<?php
phpinfo();
?>
(测试php是否 能正常连接我们的mysql)
mariadb要启动
[root@web01 php]# systemctl start mariadb
[root@web01 php]# systemctl enable mariadb
mysql要配置对应的用户和密码
[root@web01 php]#mysqladmin password xxxxxx
#给mysql的root用户设定的密码
[root@web01 php]# mysql -uroot -pxxxxxx
#验证 密码
编写php连接 mysql的代码,(之后访问测试)
[root@web01 php]#cat /code/mysql.php
//设定变量
$servername = "localhost";
$username = "root";
$password = "xxxxxx";
// 创建连接
$conn = mysqli_connect($servername, $username, $password);
// 检测连接
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}
echo "php连接MySQL数据库成功";
?>
准备wordpress的代码
[root@web01 ~]# rm -rf /code && mkdir /code
[root@web01 ~]# tar xf wordpress-5.2.3-zh_CN.tar.gz -C /code/
[root@web01 ~]# ll /code/
drwxr-xr-x 5 oldman oldman 4096 9月 5 2019 wordpress
修改权限
将 nginx php 的用户 身份 统一修改 为 www
[root@web01 ~]# groupadd -g 666 www
[root@web01 ~]# useradd -u666 -g666 www
修改nginx运行身份
[root@web01 ~]# sed -i '/^user/c user www;' /etc/nginx/nginx.conf
修改php-fpm的运行身份
[root@web01 ~]# sed -i '/^user/c user = www' /etc/php-fpm.d/www.conf
[root@web01 ~]# sed -i '/^group/c group = www' /etc/php-fpm.d/www.conf
重启nginx和php
[root@web01 ~]# systemctl restart nginx php-fpm
chown -R www.www /code/wordpress/
mysql -uroot -pxxxxxx
MariaDB [(none)]>
MariaDB [(none)]> create database wordpress; #创建一个 wordpress的 库
MariaDB [(none)]> show databases; #查看所有的库
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
| wordpress | <----可以看到添加wordpress成功
+--------------------+
5 rows in set (0.00 sec)
cat /etc/nginx/conf.d/blog.oldxu.com.conf
server {
listen 80;
server_name blog.oldxu.com;
root /code/wordpress;
client_max_body_size 100m;
location / {
index index.php;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
[root@web01 ~]# nginx -t
[root@web01 ~]# systemctl restart nginx
PS : 当nginx匹配Server没有匹配到你当前配置的虚拟主机时
会随机返回一个/etc/nginx/conf.d/xxxx.com.conf配置的网站给用户
1.下载并解压代码,并授权属主和属组
[root@web01 ~]# mkdir -p /code/zh
[root@web01 ~]# unzip WeCenter_3-5-0.zip -d /code/zh/
[root@web01 ~]# chown -R www.www /code/zh/
(其他同wordpress)
2.创建对应的数据库
[root@web01 ~]# mysql -uroot -poldxu.com #连接本地数据库
MariaDB [(none)]>
MariaDB [(none)]> create database zh; #创建一个zh的库
3.编写Nginx配置文件
[root@web01 ~]# cat /etc/nginx/conf.d/zh.oldxu.com.conf
server {
listen 80;
server_name zh.oldxu.com;
root /code/zh;
location / {
index index.php;
}
#解析php
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
}
4.重启nginx
[root@web01 ~]# systemctl restart nginx
5.配置域名解析
windows: C:\Windows\System32\drivers\etc\hosts
macos: /etc/hosts
6.测试访问,然后检查是否有异常
find / -name php.ini
/etc/php.ini 可以修改文件上传限制配置
service php-fpm restart
PS: 开源:他会一个安装向导,让你下一步下一步操作。
公司:代码拷贝到指定的位置,然后一访问域名就能打开了,没有安装向导页面。
5.1 为什么要拆分数据库?
单台服务器运行LNMP架构会导致网站访问缓慢(一般只有个人服务器才会这么做)
当系统内存吃满时,很容易导致系统出现oom机制
-------->>mysql会有被kill掉的风险,所以要独立部署
5.2 拆分的实际演示
主机名称 应用环境 | 外网地址 | 内网地址 |
---|---|---|
web01 nginx+php | 10.0.0.7 | 172.16.1.7 |
db01 mysql | 10.0.0.51 | 172.16.1.51 |
备份10.0.0.7 上的数据库,然后将备份的数据,推送到10.0.0.51
备份数据库
[root@web01 ~]# mysqldump -uroot -pxxxxxx -A > /opt/data.sql
(-A = --all-databases )
推送到10.0.0.51上
[root@web01 ~]# scp /opt/data.sql [email protected]:~
在10.0.0.51 上恢复 10.0.0.7 推送过来的数据
安装相同版本的mysql数据库
[root@db01 ~]# yum install mariadb mariadb-server -y
启动mysql数据库
[root@db01 ~]# systemctl start mariadb
[root@db01 ~]# systemctl enable mariadb
执行恢复命令 #输入重定向
[root@db01 ~]# mysql < ~/data.sql
[root@db01 ~]# systemctl restart mariadb
#所有的配置生效了
[root@db01 ~]# mysql -uroot -pxxxxxx
#测试是否能正常登录
在10.0.0.51上,创建一个允许远程连接数据库的用户 ( root仅允许本地连接 )
登陆mysql
[root@db01 ~]# mysql -uroot -pxxxxxx
创建远程能连接的用户,以及密码。并进行授权
MariaDB [(none)]> grant all privileges on *.* to 'all'@'%' identified by 'xxxxxx';
验证远程用户是否可用(10.0.0.7,测试一下)
如果 通过远程方式没有问题,说明配置ok
[root@web01 ~]# mysql -h 172.16.1.51 -uall -pxxxxxx
MariaDB [(none)]>
关闭10.0.0.7 上的 mysql服务器
[root@web01 ~]# systemctl stop mariadb
[root@web01 ~]# systemctl disable mariadb
将10.0.0.7上应用程序连接的数据库地址指向 172.16.1.51 ( 应用割接 )
wordpress如何配置:
ll /code/wordpress ----->>>>找到 wp-config.php 文件并配置他们!
[root@web01 ~]# vim /code/wordpress/wp-config.php
/** WordPress数据库的名称 */
define( 'DB_NAME', 'wordpress' );
/** MySQL数据库用户名 */
define( 'DB_USER', 'all' );
/** MySQL数据库密码 */
define( 'DB_PASSWORD', 'xxxxxx' );
/** MySQL主机 */
define( 'DB_HOST', '172.16.1.51' );
wecenter如何配置:
[root@web01 ~]# find /code/zh/ -type f | xargs grep -R "oldxu.com"
如何找不到mysql相关配置,可以通过find命令过滤代码中包含oldxu.com的密码文件
[root@web01 ~]# cat /code/zh/system/config/database.php
<?php
$config['charset'] = 'utf8mb4';
$config['prefix'] = 'aws_';
$config['driver'] = 'MySQLi';
$config['master'] = array (
'charset' => 'utf8mb4',
'host' => '172.16.1.51',
'username' => 'all',
'password' => 'xxxxxx',
'dbname' => 'zh',
);
$config['slave'] = false;