LNMP网站架构

LNMP网站架构

LNMP架构概述

LNMP就是Linux+Nginx+MySQL+PHP,Linux作为服务器的操作系统,Nginx作为Web服务器、PHP作为解析动态脚本语言、MySQL即为数据库。

Linux作为服务器的操作系统。
Nginx作为WebServer服务器。
PHP 作为动态解析服务(php)。
MySQL作为后端存储数据库服务。

Nginx服务本身不能处理PHP的请求,那么当用户发起PHP动态请求, Nginx又是如何进行处理的。
用户-->http协议-->Nginx-->fastcgi协议-->php-fpm
注意: fatcginginx连接php-fpm之间的协议。

NginxFast-CGI详细工作流程如下:

1.用户发起的所有请求会先抵达LNMP架构中的Nginx
2.如果用户请求的是静态内容,则Nginx直接响应并处理。
3.如果用户请求的是动态内容,则通过fastcgi协议发送至php-fpm管理进程
4.php-fpm接收到请求后,会派生对应的warrap线程,来解析用户请求的动态内容。
5.如果涉及到查询数据库操作,则需要php先连接数据库,然后进行查询操作。(php-mysql)
6.最终由mysql-->php-fpm->fastcgi->nginx->user
``

安装LNMP架构

yum安装 nginx1.14 php7.1 mysql5.7

1.安装Nginx

#1.使用Nginx官方提供的rpm包
[[email protected] ~]# cat /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1

#2.执行yum安装
[[email protected] ~]# yum install nginx -y

#3.修改Nginx的运行身份
[[email protected] ~]# groupadd -g 666 www
[[email protected] ~]# useradd -u666 -g666 www
[[email protected] ~]# sed -i ‘/^user/c user www;‘ /etc/nginx/nginx.conf 

#4.启动并加入开机自启动
[[email protected] ~]# systemctl start nginx
[[email protected] ~]# systemctl enable nginx

2.使用第三方扩展epel源安装php7.1

#1.移除旧版php
[[email protected] ~]# yum remove php-mysql-5.4 php php-fpm php-common -y

#2.安装扩展源
[[email protected] nginx]# yum localinstall -y http://mirror.webtatic.com/yum/el7/webtatic-release.rpm

#3.安装php7.1版本
    [[email protected] ~]# 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

#4.替换php-fpm运行的用户和组身份
[[email protected] ~]# sed -i ‘/^user/c user = www‘ /etc/php-fpm.d/www.conf
[[email protected] ~]# sed -i ‘/^group/c group = www‘ /etc/php-fpm.d/www.conf

    #5.启动php-fpm管理进程, 并加入开机自启
    [[email protected] ~]# systemctl start php-fpm
    [[email protected] ~]# systemctl enable php-fpm

?
3.安装MySQL5.7版本数据库

# 下载MySQL官方扩展源
[[email protected] ~]# rpm -ivh http://repo.mysql.com/yum/mysql-5.7-community/el/7/x86_64/mysql57-community-release-el7-10.noarch.rpm

#2.安装mysql5.7, 文件过大可能会导致下载缓慢
[[email protected] ~]# yum install mysql-community-server -y

#3.启动数据库, 并加入开机自启动
[[email protected] ~]# systemctl start mysqld
[[email protected] ~]# systemctl enable mysqld

#4.由于mysql5.7默认配置了默认密码, 需要过滤temporary password关键字查看对应登陆数据库密码
[[email protected] ~]# grep ‘temporary password‘ /var/log/mysqld.log

#5.登陆mysql数据库[password中填写上一步过滤的密码]
[[email protected] ~]# mysql -uroot -p$(awk ‘/temporary password/{print $NF}‘ /var/log/mysqld.log)

#6.重新修改数据库密码
mysql> ALTER USER ‘root‘@‘localhost‘ IDENTIFIED BY ‘RSX123.com‘;

配置LNMP架构

1.验证Nginx是否能正常解析php动态请求

[[email protected] ~]# cat /etc/nginx/conf.d/php.conf
server {
server_name www.rsx.com;
listen 80;
root /code;
index index.php index.html;

location ~ \.php$ {
root /code;
fastcgi_pass   127.0.0.1:9000;
fastcgi_index  index.php;
fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
include        fastcgi_params;
}
}

2.创建info.php测试php是否正常解析

[[email protected] ~]# cat /code/info.php
<?php
phpinfo();
?>

?
2.测试php是否能连接mysql数据库服务[无论是本地数据库还是远程数据库,测试方式一致]

[[email protected] ~]# cat /code/mysql.php
<?php
$servername = "localhost";
$username = "root";
$password = "RSX123.com";

// 创建连接
$conn = mysql_connect($servername, $username, $password);

// 检测连接
if (!$conn) {
die("Connection failed: " . mysql_connect_error());
}
echo "连接成功";
?>

检测LNMP架构

1.通过浏览器访问info.php文件, 如出现下图则表示nginx与php能正常工作

info.php

2.访问mysqli.php验证php-mysqli模块是否正常工作

mysql.php

?

部署博客系统Wordpress

1.配置Nginx虚拟主机站点,域名为blog.rsx.com

#1.nginx具体配置信息
[[email protected] ~]# cat /etc/nginx/conf.d/wordpress.conf
server {
listen 80;
server_name blog.rsx.com;
root /code/wordpress;
index index.php index.html;

location ~ \.php$ {
root /code/wordpress;
fastcgi_pass   127.0.0.1:9000;
fastcgi_index  index.php;
fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
include        fastcgi_params;
}
}

?
2.重启nginx服务

[[email protected] ~]# systemctl restart nginx

?
3.下载wordpress产品,部署wordress并授权

#1.获取wordpress代码
[[email protected] ~]# wget https://cn.wordpress.org/wordpress-4.9.4-zh_CN.tar.gz

#2.解压网站源码文件,拷贝至对应站点目录,并授权站点目录
[[email protected] ~]# tar xf wordpress-4.9.4-zh_CN.tar.gz
[[email protected] ~]# cp -r wordpress /code/
[[email protected] ~]# chown -R www.www /code/wordpress/

4.由于wordpress产品需要依赖数据库, 所以需要手动建立数据库

#1.登陆数据库
[[email protected] ~]# mysql -uroot -pRSX123.com

#2.创建wordpress数据库
MariaDB [(none)]> create database wordpress;
MariaDB [(none)]> exit

?
5.通过浏览器访问wordpress, 并部署该产品

blog.rsx.com/wp-admin

?

部署知乎系统Wecenter

1.配置Nginx虚拟主机站点,域名为zh.rsx.com

#1.nginx具体配置信息
[[email protected] ~]# cat /etc/nginx/conf.d/zh.conf
server {
    listen 80;
    server_name zh.rsx.com;
    root /code/zh;
    index index.php index.html;

        location ~ \.php$ {
        root /code/zh;
                fastcgi_pass   127.0.0.1:9000;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                include        fastcgi_params;
        }
}

#2.重启nginx服务

[[email protected] ~]# systemctl restart nginx

?
2.下载Wecenter产品,部署Wecenter并授权

[[email protected] ~]# wget http://ahdx.down.chinaz.com/201605/WeCenter_v3.2.1.zip
[[email protected] ~]# unzip WeCenter_v3.1.9.zip
[[email protected] ~]# mv UPLOAD/ /code/zh
[[email protected] ~]# chown -R www.www /code/zh/

3.由于wecenter产品需要依赖数据库, 所以需要手动建立数据库

#1.登陆数据库
[[email protected] ~]# mysql -uroot -pRSX123.com

#2.创建wordpress数据库
MariaDB [(none)]> create database zh;
MariaDB [(none)]> exit

3.通过浏览器访问网站

zh.rsx.com

部署网校系统Edusohu

1.配置Nginx虚拟主机站点,域名为edu.rsx.com

#1.nginx具体配置信息
[[email protected] ~]# cat /etc/nginx/conf.d/edu.conf
server {
    listen 80;
    server_name edu.rsx.com;
    root /code/edu;
    index index.php index.html;

        location ~ \.php$ {
        root /code/edu;
                fastcgi_pass   127.0.0.1:9000;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                include        fastcgi_params;
        }
}

#2.重启nginx服务

[[email protected] ~]# systemctl restart nginx

?
2.下载edusohu产品,部署edusohu并授权

//获取wordpress代码
[[email protected] ~]# cd /soft/src/
[[email protected] /soft/src]# wget http://download.edusoho.com/edusoho-8.2.17.tar.gz

//解压软件网站源码文件, 并授权站点目录,不然会导致无法安装
[[email protected] /soft/src]# tar xf edusoho-8.2.17.tar.gz
[[email protected] /soft/src]# cp -r edusoho /code/edu
[[email protected] ~]# chown -R www.www /code/edu/
[[email protected] ~]# chmod -R  777  /code/edu/{app,web}

//由于edusohu会自动创建数据库, 所以无需创建数据库

3.通过浏览器访问网站

edu.rsx.com

迁移数据至独立服务器

1.安装好MySQL数据库
#1.下载MySQL官方扩展源

    [[email protected] ~]# rpm -ivh http://repo.mysql.com/yum/mysql-5.7-community/el/7/x86_64/mysql57-community-release-el7-10.noarch.rpm

#2.安装mysql5.7, 文件过大可能会导致下载缓慢

    [[email protected] ~]# yum install mysql-community-server -y

#3.启动数据库, 并加入开机自启动

    [[email protected] ~]# systemctl start mysqld
    [[email protected] ~]# systemctl enable mysqld

#4.由于mysql5.7默认配置了默认密码, 需要过滤temporary password关键字查看对应登陆数据库密码

    [[email protected] ~]# grep ‘temporary password‘ /var/log/mysqld.log

#5.登陆mysql数据库[password中填写上一步过滤的密码]

    [[email protected] ~]# mysql -uroot -p$(awk ‘/temporary password/{print $NF}‘ /var/log/mysqld.log)

#6.重新修改数据库密码

    mysql> ALTER USER ‘root‘@‘localhost‘ IDENTIFIED BY ‘RSX123.com‘;

2.备份原数据库中的数据

#1.指定导出对应的数据库文件。(RSX123.com是数据库密码)

[[email protected] ~]# mysqldump -uroot -p‘RSX123.com‘ --all-databases --single-transaction > `date +%F%H`-mysql-all.sql

#2.拷贝原数据库备份文件至新的服务器

[[email protected] zh]# scp 2018-09-2109-mysql-all.sql  [email protected]:~

#3.将数据导入进新的数据库环境中

[[email protected] ~]# mysql -uroot -pRSX123.com <2018-09-2109-mysql-all.sql

#4.验证是否导入成功

[[email protected] ~]# mysql -uroot -pRSX123.com
#5.登录数据库后,查看当前有多少个库

mysql> show databases;

#6.使用客户端测试连接远端的mysql

[[email protected] ~]# mysql -h172.16.1.51 -uroot -pRSX123.com
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1130 (HY000): Host ‘172.16.1.7‘ is not allowed to connect to this MySQL server
#7.新的数据库,配置允许远程用户连接

        #授权所有权限   grant all privileges
        #授权所有库所有表 *.*
        #将授权赋予给哪个用户,这个用户只能通过哪个网段过来(%所有) ‘all‘@‘%‘
        #授权该用户登录的密码 identified by

mysql> grant all privileges on *.* to ‘all‘@‘%‘ identified by ‘RSX123.com‘;

#8.再次使用客户端测试连接远端的mysql

[[email protected] ~]# mysql -h172.16.1.51 -uall -pRSX123.com

#如果其他机器想测试能否连接数据库,可以先安装mysql的客户端软件
[[email protected] ~]# yum install mariadb -y
[[email protected] ~]# mysql -h172.16.1.51 -uall -pRSX123.com
#9.停止web本地的数据库,刷新网页看看是否down机

[[email protected] ~]# systemctl stop mysqld
[[email protected] ~]# systemctl disable mysqld
#10.修改Wordpress产品代码连接数据库的配置文件

[[email protected] ~]# vim /code/wordpress/wp-config.php
#数据库名称
define(‘DB_NAME‘, ‘wordpress‘);
#数据库用户
define(‘DB_USER‘, ‘all‘);
#数据库密码
define(‘DB_PASSWORD‘, ‘RSX123.com‘);
#数据库地址
define(‘DB_HOST‘, ‘172.16.1.51‘);

#11.修改wecenter产品代码连接数据库的配置文件
[[email protected] zh]#  grep -iR "RSX123.com"|grep -v cache
system/config/database.php:  ‘password‘ => ‘RSX123.com‘,
[[email protected] zh]# vim /code/zh/system/config/database.php
‘host‘ => ‘172.16.1.51‘,
‘username‘ => ‘all‘,
‘password‘ => ‘RSX123.com‘,
‘dbname‘ => ‘zh‘,

#12.修改edusogho产品代码连接数据库的配置文件

[[email protected] edu]#  grep -iR "RSX123.com"|grep -v cache
app/config/parameters.yml:    database_password: ‘RSX123.com‘

[[email protected] edu]# vim /code/edu/app/config/parameters.yml
parameters:
database_driver: pdo_mysql
database_host: 172.16.1.51
database_port: 3306
database_name: edu
database_user: all
database_password: ‘RSX123.com‘

#必须清理缓存
[[email protected] edu]# rm -rf /code/edu/app/cache/*

迁移图片至独立服务器

1.准备一台新的服务器安装NFS

[[email protected] ~]# groupadd -g666 www
[[email protected] ~]# useradd -u666 -g666 www
[[email protected] ~]# yum install nfs-utils -y

[[email protected] ~]# cat /etc/exports
/data/blog 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
/data/edu 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)
/data/zh 172.16.1.0/24(rw,sync,all_squash,anonuid=666,anongid=666)

创建对应的共享目录,并授权为www

[[email protected] ~]# mkdir /data/{blog,zh,edu} -p
[[email protected] ~]# chown -R www.www /data/

重启NFS

[[email protected] ~]# systemctl restart nfs-server

2.WEB客户端验证NFS是否安装成功

[[email protected] ~]# yum install nfs-utils -y
[[email protected] ~]# showmount -e 172.16.1.31
Export list for 172.16.1.31:
/data/zh   172.16.1.0/24
/data/edu  172.16.1.0/24
/data/blog 172.16.1.0/24

==============================================================
3.获取Wordpress产品的附件和图片存放的位置
    浏览器->右键->检查->Network->选择按钮->点击一下图片

4.备份web服务器上的Wordpress图片和附件

[[email protected] ~]# cd /code/wordpress/
[[email protected] wordpress]# cp -rp wp-content/ wp-content_back

5.客户端执行挂载操作【Wordpress】

[[email protected] ~]# mount -t nfs 172.16.1.31:/data/blog /code/wordpress/wp-content

6.恢复原web上存储的(图片、附件、语言、主题)

[[email protected] wordpress]# cp -rp wp-content_back/*  wp-content/
==============================================================
1.获取Edu产品的附件和图片存放的位置

    浏览器->右键->检查->Network->选择按钮->点击一下图片

2.备份edu产品的视频和图片

视频:/code/edu/app/data/udisk/
图片:/code/edu/web/files/

3.备份原有的视频和图片

[[email protected] edu]# cp -rp  web/files/ web/files_bak
[[email protected] edu]# cp -rp app/data/ app/data_bak

4.执行挂载操作【我仅挂载视频,其他自行解决】

[[email protected] edu]# mount -t nfs 172.16.1.31:/data/edu /oldboy_code4/edu/app/data

5.恢复数据至NFS存储

[[email protected] edu]# \cp -rp app/data_bak/* app/data/

原文地址:http://blog.51cto.com/13528471/2281786

时间: 2024-10-30 03:19:05

LNMP网站架构的相关文章

网站架构化

转载网站架构之架构演化 网站从构建之初的很少有人问津,用户数量较少,并发量较低,到之后的拥有千万上亿用户,数万量级的高并发,之间经历了怎样的过程,小型网站架构是怎样逐步演化的,本文简单探讨下这方面的内容,主要参考<大型网站架构设计>,这本书知识点总结的还是比较全面的. 1. 初始阶段 网站开始是没有太多访问量的,只需一台服务器就绰绰有余了,应用程序,数据库,静态资源等全部都在一台服务器上,一般使用LAMP/LNMP(Linux+Apache/Nginx+MySQL+PHP/Python等)就可

[转]网站架构之架构演化

网站从构建之初的很少有人问津,用户数量较少,并发量较低,到之后的拥有千万上亿用户,数万量级的高并发,之间经历了怎样的过程,小型网站架构是怎样逐步演化的,本文简单探讨下这方面的内容,主要参考<大型网站架构设计>,这本书知识点总结的还是比较全面的. 来源:http://www.cnblogs.com/pflee/p/4507579.html 1. 初始阶段 网站开始是没有太多访问量的,只需一台服务器就绰绰有余了,应用程序,数据库,静态资源等全部都在一台服务器上,一般使用LAMP/LNMP(Linu

网站架构之架构演化

网站从构建之初的很少有人问津,用户数量较少,并发量较低,到之后的拥有千万上亿用户,数万量级的高并发,之间经历了怎样的过程,小型网站架构是怎样逐步演化的,本文简单探讨下这方面的内容,主要参考<大型网站架构设计>,这本书知识点总结的还是比较全面的. 1. 初始阶段 网站开始是没有太多访问量的,只需一台服务器就绰绰有余了,应用程序,数据库,静态资源等全部都在一台服务器上,一般使用LAMP/LNMP(Linux+Apache/Nginx+MySQL+PHP/Python等)就可以实现自己的网站了,具体

企业网站架构之Nginx+tomcat+memcached集群

nginx+tomcat+memcached应用 系统环境:RHEL6.4  x64   iptables -F   and selinux is disabled 主机角色:node1 :192.168.0.24 :lnmp环境 tomcat memcached node2 :192.168.0.99 : tomcat memcached 软件下载:在lnmp环境上测试tomcat,使用nginx简单发布jsp jdk-6u32-linux-x64.bin apache-tomcat-7.0.

大型网站架构演变

1.简介 大型网站架构的演进最开始都是由小及大慢慢演变过来的,任何一个好的架构都不是设计出来了,是经过业务发展迭代而来的,这个观点我是赞同的.对于网站架构技术非常有兴趣,一直持续关注学习架构技术,本次想通过大型网站技术发展历程,剖析大型网站技术架构模式,深入分析大型互联网架构设计.这篇文章我们只关注架构的演变历程.通过电商业务为例,该系统的功能有用户模块[用户注册和管理].商品模块[商品展示和管理].交易模块[创建交易和管理].通过图例分析一个最初从单台LAMP怎么发展到庞大的分布架构体系. 线

细说五层网站架构

目前网站架构一般分为网页缓存层.负载均衡层.Web层和数据库层.文件服务器层.我们可以依次用这五层对网站架构进行讨论,为了增强说服力,我将用如下三个并发较大的生产环境来说明. q   电子商务网站(并发最大峰值2900,日PV500万左右) q   电子广告网站(并发最大峰值1500,日PV150万左右) q   大型CDN门户广告网站(并发最大峰值5000,日PV5000万左右) 1.网页缓存层 首先说网页缓存层,比如CDN租凭,其效果比公司自己部署Squid/Varnish要好,它们专业.价

java架构师、高性能、高并发、高可用、高可扩展、性能优化、集群、电商网站架构

15套java架构师.集群.高可用.高可扩展.高性能.高并发.性能优化.Spring boot.Redis.ActiveMQ.Nginx.Mycat.Netty.Jvm大型分布式项目实战视频教程 视频课程内容包含: 高级Java架构师包含:Spring boot.Spring  cloud.Dubbo.Redis.ActiveMQ.Nginx.Mycat.Spring.MongoDB.ZeroMQ.Git.Nosql.Jvm.Mecached.Netty.Nio.Mina.性能调优.高并发.to

网站架构设计

从大型网站技术架构_核心原理与案例分析   李智慧   一书中领悟到的东西.我们的技术只有基础牢固了才能创新,本书中作者讲述了网站架构的发展历程.其中从最简单的  LAMP架构到应用与数据分离,然后是使用缓存提高客户体验度.再到分层,数据库的读取分离,集群,分布式部署等.处理网站高并发的问题肯定会牵扯到高并发,现在web的开发都是支持多线程的,但是多线程造成的数据类型不一致的bug也是常见的问题.在此作者提过使用线程安全的无状态对象.比如 单例模式的对象都是无状态的.每次请求都是创建新对象.有r

大型网站架构系列:电商网站架构案例(3)

本文章是电商网站架构案例的第三篇,主要介绍数据库集群,读写分离,分库分表,服务化,消息队列的使用,以及本电商案例的架构总结. 6.5数据库集群(读写分离,分库分表) 大型网站需要存储海量的数据,为达到海量数据存储,高可用,高性能一般采用冗余的方式进行系统设计.一般有两种方式读写分离和分库分表. 读写分离:一般解决读比例远大于写比例的场景,可采用一主一备,一主多备或多主多备方式. 本案例在业务拆分的基础上,结合分库分表和读写分离.如下图: (1)       业务拆分后:每个子系统需要单独的库: