LNMP搭建

一、搭建环境

  • 搭建系统版本

     cat /etc/redhat-release 
     CentOS release 6.8 (Final)
    

二、安装nginx

2.1安装依赖包

  • 安装yum源

    wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
    	yum clean all
    	yum makecache
    
  • 安装PCRE库

    yum install pcre pcre-devel -y
    查看安装:
     #rpm -qa pcre pcre-devel
     pcre-7.8-7.el6.x86_64
     pcre-devel-7.8-7.el6.x86_64
    
  • 安装openssl库
    ssl加密模块需要openssl 库支持

    yum install openssl-devel -y
    查看一下:
    #rpm -qa openssl-devel openssl
    openssl-1.0.1e-57.el6.x86_64
    openssl-devel-1.0.1e-57.el6.x86_64
    
  • 安装gcc
    因为需要make编译源码,需要安装gcc,gcc-c++,glibc(glibc是GNU发布的libc库,即c运行库)

    yum install -y gcc glibc gcc-c++
    查看:
    # rpm -qa gcc glibc gcc-c++              
        glibc-2.12-1.209.el6_9.2.x86_64
        glibc-2.12-1.209.el6_9.2.i686
        gcc-4.4.7-18.el6_9.2.x86_64
        gcc-c++-4.4.7-18.el6_9.2.x86_64
    

2.2开始安装nginx

这里选择编译安装nginx

  mkdir -p  /home/tools
  cd /home/tools/
  wget  http://nginx.org/download/nginx-1.10.3.tar.gz #下载源码
  tar -xvz -f nginx-1.10.3.tar.gz #解压缩
  groupadd www #添加用户组
  useradd -s /sbin/nologin -M www -g www   #添加虚拟用户www来管理nginx,并让      它属于www用户组
查看:
  id www
  uid=500(www) gid=500(www) groups=500(www)
  cd nginx-1.10.3
  ./configure --prefix=/home/application/nginx-1.10.1 --user=www  --group=www  --with-http_ssl_module  --with-http_stub_status_module 
   make && make install
   ln -s /home/application/nginx-1.10.1/ /home/application/nginx 

启动nginx

  /home/application/nginx/sbin/nginx -t  #检查语法
   /home/application/nginx/sbin/nginx  #启动nginx
   查看:
   lsof -i:80
   COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
   nginx   31362 root    6u  IPv4  40342      0t0  TCP *:http (LISTEN)
   nginx   31363  www    6u  IPv4  40342      0t0  TCP *:http (LISTEN)
   curl 127.0.0.1 #检查是否启动成功

三、安装mysql

这里选择编译安装:版本为mysql-5.5.62
安装相关软件包
编译安装中需要注意的是 5.5之前的编译方式是:./configure make && make install 而5.5之后则使用:cmake。安装cmake可以yum安装也可以编译安装。

   yum -y install cmake
   yum install -y ncurses-devel libaio-devel  #安装相关软件包

创建用户mysql管理MySQL

  groupadd mysql
  useradd mysql -s /sbin/nologin -M -g mysql
  查看:
  # id mysql
  uid=501(mysql) gid=501(mysql) groups=501(mysql)

安装MYSQL

 cd /home/tools/
 tar -xzv -f mysql-5.5.62.tar.gz 
 cd mysql-5.5.62
  cmake  -DCMAKE_INSTALL_PREFIX=/home/application/mysql-5.5.62 \
 -DMYSQL_DATADIR=/home/application/mysql-5.5.62/data    -   DMYSQL_UNIX_ADDR=/tmp/mysql.sock   -DDEFAULT_CHARSET=utf8   -DDEFAULT_COLLATION=utf8_general_ci  -DWITH_EXTRA_CHARSETS=all  -DWITH_INNOBASE_STORAGE_ENGINE=1  -DWITH_INNOBASE_STORAGE_ENGINE=1    -DWITH_BLACKHOLE_STORAGE_ENGINE=1     -DWITH_BLACKHOLE_STORAGE_ENGINE=1   -DWITH_ZLIB=bundled   -DWITH_ZLIB=bundled   -DENABLED_LOCAL_INFILE=1     -DWITH_EMBEDDED_SERVER=1   -DENABLE_DOWNLOADS=1    -DWITH_DEBUG=0
 make && make install 
 ln -s /home/application/mysql-5.5.62/ /home/application/mysql #创建软连接去版本号
  cp /home/application/mysql/support-files/my-small.cnf  /etc/my.cnf  #复制配置文件
  初始化及配置数据库:
   /home/application/mysql/scripts/mysql_install_db  --basedir=/home/application/mysql/ --datadir=/home/application/mysql/data --user=mysq  #--basedir指定安装目录,datadir指定数据存放目录  --user 指定用户
   设置mysql目录权限:
   chown -R mysql.mysql /home/application/mysql
 chmod -R 1777 /tmp/

启动mysql

/home/application/mysql/bin/mysqld_safe &  

设置环境变量

 echo 'PATH=/home/application/mysql/bin/:$PATH' >>/etc/profile
 source /etc/profile 
 mysql        #这样就可以直接登陆了

设置开机启动

cp /home/application/mysql/support-files/mysql.server /etc/init.d/mysqld
 chmod u+x /etc/init.d/mysqld
  chkconfig --add mysqld
  chkconfig  mysqld on

设置及更改密码

 mysqladmin  -u root password "123456"  #刚开始安装完mysql是没有密码的,这里设置登录密码为123456
 mysql -u root -p123456 #用密码登录mysql
 mysqladmin -uroot -p123456 password "mysql" #更改密码,将原密码123456改为mysql

三、安装php

一般php与nginx安装在一台服务器。用户的请求到达nginx服务器,nginx再把请求传递给php,php去请求后端mysql库。(nginx不支持对外程序的直接调用或者解析,所有的对外程序必须通过FastCGI接口调用)。
nginx后面有php-fpm服务,这个php-fpm服务作为独立的服务存在,可以监听ip:port 也可以监听socket,真正处理php脚本的工作是由php-fpm来完成的,而nginx仅仅是把用户的请求发给php-fpm,然后再把php-fpm的处理结果发给用户

具体过程如下图。
在这里插入图片描述
安装php所需要的库:

 yum install -y zlib-devel libxml2-devel libjpeg-devel libiconv-devel
 yum install -y freetype-devel libpng-devel gd-devel curl-devel libxslt-devel libmcrypt-devel mhash mhash-devel mcrypt

下载php源码

 cd /home/tools/
 tar -xf php-5.6.35.tar.bz2 
 cd php-5.6.35
 开始安装:
 ./configure  --prefix=/home/application/php-5.6.35 \
 --with-mysql=/home/application/mysql  --with-libxml-dir \
 --with-gd --with-jpeg-dir --with-png-dir  --with-freetype-dir --with-iconv-dir \
 --with-zlib-dir --with-mcrypt --enable-soap --enable-gd-native-ttf \
 --enable-ftp --enable-mbstring --enable-exif  --with-pear --with-curl --with-openssl --disable-rpath --enable-xml --enable-safe-mode --enable-bcmath \
 --enable-fpm --enable-sockets --enable-zip --enable-short-tags \
 --enable-zend-multibyte  --enable-static --with-xsl --with-fpm-user=nginx \
 --with-fpm-group=nginx 

出现错误:
configure: error: Don’t know how to define struct flock on this system, set --enable-opcache=no
解决办法:

ln -s /home/application/mysql/lib/libmysqlclient.so.18 /usr/lib64/
 touch ext/phar/phar.phar

出现警告:
configure: WARNING: unrecognized options: --enable-safe-mode, --enable-zend-multibyte
这是因为之前 php-5.3.x 编译时加了 --enable-safe-mode --enable-discard-path --enable-fastcgi --enable-force-cgi-redirect选项,但是这个选项没必要,且会带来许多的麻烦,详解可以 google 一下,php-5.5.x 已经去掉了该选项,编译时可以 #./configure --help | grep “safe-mode” 查看一下,没有信息输出,表示已经不支持!
编译:

 make && make install
 
  出现如下信息表示安装成功:

 /home/tools/php-5.6.35/build/shtool install -c ext/phar/phar.phar /home/application/php-5.6.35/bin
 ln -s -f phar.phar /home/application/php-5.6.35/bin/phar
 Installing PDO headers:           /home/application/php-5.6.35/include/php/ext/pdo/

做一个软连接:

 ln -s  /home/application/php-5.6.35/ /home/application/php
 复制配置文件
 ls /home/tools/php-5.6.35/php.ini*
/home/tools/php-5.6.35/php.ini-development  #测试环境
/home/tools/php-5.6.35/php.ini-production   #生产环境
这里复制生产环境的配置(php解析配置文件):
 cp /home/tools/php-5.6.35/php.ini-production /home/application/php/lib/php.ini
 #复制到php安装目录lib下并命名为php.ini
 php进程的配置文件(php-fpm.conf):
 #cd /home/application/php/etc/
 #ll
 total 28
 -rw-r--r-- 1 root root  1387 Jul 25 06:26 pear.conf
-rw-r--r-- 1 root root 23152 Jul 25 06:25 php-fpm.conf.default
 #cp php-fpm.conf.default  php-fpm.conf
  #ls
pear.conf  php-fpm.conf  php-fpm.conf.default
 启动php(php-fpm):
 /home/application/php/sbin/php-fpm 
 报错
 ERROR: [pool www] cannot get uid for user 'nginx'
 ERROR: FPM initialization failed
 解决:
 groupadd nginx
 useradd -s /sbin/nologin nginx -g nginx
 #id nginx #查看
 uid=502(nginx) gid=502(nginx) groups=502(nginx)
  /home/application/php/sbin/php-fpm #再次启动
  查看:
  ps -ef |grep php-fpm
  root      76358      1  0 07:04 ?        00:00:00 php-fpm: master process (/home/application/php-5.6.35/etc/php-fpm.conf)
  nginx     76359  76358  0 07:04 ?        00:00:00 php-fpm: pool www                 
  nginx     76360  76358  0 07:04 ?        00:00:00 php-fpm: pool www                 
  root      76362   1865  0 07:06 pts/0    00:00:00 grep php-fpm

四、LNMP整合配置

调整nginx.conf配置文件

#vim nginx.conf
worker_processes  1;
error_log logs/error.log error;
events {
worker_connections  1024;
}
http {
include       mime.types;
default_type  application/octet-stream;
sendfile        on;
keepalive_timeout  65;
log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                 '$status $body_bytes_sent "$http_referer" '
                  '"$http_user_agent" "$http_x_forwarded_for"';
#nginx vhosts config
include extra/www.conf;
include extra/bbs.conf;
include extra/blog.conf;
include extra/status.conf;
 }
  mkdir -p /home/application/nginx/conf/extra
 touch /home/application/nginx/conf/extra/{blog.conf,bbs.conf,www.conf,status.conf}
 vim blog.conf
 server {
    listen       80;
    server_name  blog.ceishi.com;
    root   html/blog;      #放在最外面
    location ~ .*\.(php|php5)?$ {     
    fastcgi_pass  127.0.0.1:9000; #请求抛给php
    fastcgi_index index.php;
    include fastcgi.conf;
    }
    location / {
    #   root   html/blog;
        index  index.php index.html index.htm;
    }
    access_log logs/access_blog.log main;

}
cd /home/application/nginx/html/
 mkdir -p {www,bbs,blog} 
 echo "blog.ceshi.com" > ./blog/index.html
 cd /home/application/nginx/html/blog

测试php:

 vim /home/application/nginx/html/blog/phpinfo.php 
<?php
 phpinfo();
 ?>

访问:
浏览器打开http://blog.ceishi.com/phpinfo.php
在这里插入图片描述
下载blog:

  cd /home/application/nginx/html/blog/
  wget chown -R nginx.nginx blog/wordpress-4.9.4-zh_CN.tar.gz
  cd wordpress
  授权nginx服务的nginx用户对WordPress有读写权限
  chown -R nginx.nginx blog/
# ll
 total 188
 -rw-r--r--  1 nginx nginx   418 Sep 25  2013 index.php
 -rw-r--r--  1 nginx nginx 19935 Jan  7  2018 license.txt
-rw-r--r--  1 nginx nginx  7001 Feb  8  2018 readme.html
-rw-r--r--  1 nginx nginx  5434 Sep 23  2017 wp-activate.php
drwxr-xr-x  9 nginx nginx  4096 Feb  8  2018 wp-admin
-rw-r--r--  1 nginx nginx   364 Dec 19  2015 wp-blog-header.php
-rw-r--r--  1 nginx nginx  1627 Aug 29  2016 wp-comments-post.php
-rw-r--r--  1 nginx nginx  2930 Feb  8  2018 wp-config-sample.php
 drwxr-xr-x  5 nginx nginx  4096 Feb  8  2018 wp-content
-rw-r--r--  1 nginx nginx  3669 Aug 20  2017 wp-cron.php
drwxr-xr-x 18 nginx nginx 12288 Feb  8  2018 wp-includes
-rw-r--r--  1 nginx nginx  2422 Nov 21  2016 wp-links-opml.php
-rw-r--r--  1 nginx nginx  3306 Aug 22  2017 wp-load.php
-rw-r--r--  1 nginx nginx 36583 Oct 13  2017 wp-login.php
-rw-r--r--  1 nginx nginx  8048 Jan 11  2017 wp-mail.php
-rw-r--r--  1 nginx nginx 16246 Oct  4  2017 wp-settings.php
-rw-r--r--  1 nginx nginx 30071 Oct 19  2017 wp-signup.php
 -rw-r--r--  1 nginx nginx  4620 Oct 24  2017 wp-trackback.php
 -rw-r--r--  1 nginx nginx  3065 Sep  1  2016 xmlrpc.php
上面的意思是nginx服务的nginx用户对WordPress所有文件都有可执行权限不安全,解决办法是把.php文件授权收回。
find /home/application/nginx/html/blog/wordpress/ -type f -name "*.php"|xargs chown -R root.root
find /home/application/nginx/html/blog/wordpress/ -type f |xargs chmod 644  #文件644
 find /home/application/nginx/html/blog/wordpress/ -type d |xargs chmod 755 #目录755
 ll
 total 188
 -rw-r--r--  1 root  root    418 Sep 25  2013 index.php
-rw-r--r--  1 nginx nginx 19935 Jan  7  2018 license.txt
 -rw-r--r--  1 nginx nginx  7001 Feb  8  2018 readme.html
 -rw-r--r--  1 root  root   5434 Sep 23  2017 wp-activate.php
drwxr-xr-x  9 nginx nginx  4096 Feb  8  2018 wp-admin
-rw-r--r--  1 root  root    364 Dec 19  2015 wp-blog-header.php
-rw-r--r--  1 root  root   1627 Aug 29  2016 wp-comments-post.php
-rw-r--r--  1 root  root   2930 Feb  8  2018 wp-config-sample.php
drwxr-xr-x  5 nginx nginx  4096 Feb  8  2018 wp-content
-rw-r--r--  1 root  root   3669 Aug 20  2017 wp-cron.php
drwxr-xr-x 18 nginx nginx 12288 Feb  8  2018 wp-includes
-rw-r--r--  1 root  root   2422 Nov 21  2016 wp-links-opml.php
-rw-r--r--  1 root  root   3306 Aug 22  2017 wp-load.php
-rw-r--r--  1 root  root  36583 Oct 13  2017 wp-login.php
-rw-r--r--  1 root  root   8048 Jan 11  2017 wp-mail.php
-rw-r--r--  1 root  root  16246 Oct  4  2017 wp-settings.php
 -rw-r--r--  1 root  root  30071 Oct 19  2017 wp-signup.php
 -rw-r--r--  1 root  root   4620 Oct 24  2017 wp-trackback.php
 -rw-r--r--  1 root  root   3065 Sep  1  2016 xmlrpc.php

总结:最好的授权方法

chown -R root.root /home/application/nginx/html/blog/wordpress/
 find /home/application/nginx/html/blog/wordpress/ -type f|xargs chmod 644
 find /home/application/nginx/html/blog/wordpress/ -type d|xargs chmod 755
 mkdir /home/application/nginx/html/blog/wordpress/wp-content/uploads #创建上传目录
 chown -R nginx.nginx /home/application/nginx/html/blog/wordpress/wp-content/uploads/ #授予nginx权限

访问wordpress:
浏览器输入http://blog.ceishi.com/wordpress/wp-admin/setup-config.php
出现:
在这里插入图片描述
登录mysql :
创建wordpress用户管理wordpress库。

  mysql -uroot -p123456
 mysql> create database wordpress;
Query OK, 1 row affected (0.01 sec)
mysql> show databases like 'wordpress';
 +----------------------+
 | Database (wordpress) |
 +----------------------+
 | wordpress            |
 +----------------------+
 mysql> grant all on wordpress.* to wordpress@'localhost' identified by '123456';
 #创建wordpress用户并授权其管理wordpress库
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;

让blog程序连接数据库:

vim  /home/application/nginx/html/blog/phpinfo.php 
<?php
$link_id=mysql_connect('localhost','wordpress','123456') or mysql_error();
if($link_id){
             echo "mysql successful by ceishi";
 }else{
             echo mysql_error();
}
?>

测试数据库连接:
浏览器输入http://blog.ceishi.com/test_mysql.php
出现mysql successful by ceishi则成功
wordpress连接mysql数据库设置
在这里插入图片描述
这里出现因为没有权限创建不了wp-config.php文件。

在这里插入图片描述
复制wp-config.php。

cd /home/application/nginx/html/blog/wordpress
rz -y
mv wp-config.php.txt wp-config.php

在数据库中查看wordpress库,这时是空的

 mysql> use wordpress;
 Database changed
  mysql> show tables;
  Empty set (0.00 sec)

然后继续,这是在wordpress库中创建表。
在这里插入图片描述
这时就把你在浏览器上填创建成wordpress库中的表了。

 mysql> show tables;
+-----------------------+
| Tables_in_wordpress   |
 +-----------------------+
| ls_commentmeta        |
| ls_comments           |
| ls_links              |
| ls_options            |
| ls_postmeta           |
| ls_posts              |
| ls_term_relationships |
| ls_term_taxonomy      |
| ls_termmeta           |
| ls_terms              |
| ls_usermeta           |
| ls_users              |
 +-----------------------+
12 rows in set (0.00 sec)

这时安装完成
在这里插入图片描述
这是上传一个照片就会存放在 /uploads/下,因为这个目录对nginx来说可写。

ll /home/application/nginx/html/blog/wordpress/wp-content/uploads/2019/07/
total 40
 -rw-r--r-- 1 nginx nginx  2789 Jul 25 11:54 inotify安装步骤-100x100.jpg
-rw-r--r-- 1 nginx nginx  4402 Jul 25 11:54 inotify安装步骤-150x150.jpg
-rw-r--r-- 1 nginx nginx  6009 Jul 25 11:54 inotify安装步骤-300x73.jpg
-rw-r--r-- 1 nginx nginx 19946 Jul 25 11:54 inotify安装步骤.jpg

五、nginx地址重新

nginx地址重写是通过在nginx.conf配置文件server标签中使用rewrite规则来实现的。
rewrite语法:
rewrite 旧的地址 新地址 [选项]
rewrite 放在server标签里location外。
例如:

 rewrite ^/(.*)   http://www.ceishi.com/$1;
 #意思是只要访问根目录下的内容就跳转到www.ceishi.com下的内容,其中$1
 #表示前面括号里的内容,括号就是复制的意思

例如:访问www.com就跳转到www.ceishi.com

 cat  /home/application/nginx/conf/extra/www.conf    
 server {
    listen       80;
    server_name  www.com;
   rewrite ^/(.*) http://www.ceishi.com/$1 permanent ;  #permanent代表永久跳转

}

server {
    listen       80;
    server_name  www.ceishi.com;
    location / {
        root   html/www;
        index  index.html index.htm;
    }
    access_log logs/access_www.log main;
}

rewrite flag说明:
在这里插入图片描述
301跳转结果

  # curl -I www.com
  HTTP/1.1 301 Moved Permanently  #301标志
  Server: nginx/1.10.3
 Content-Type: text/html
 Content-Length: 185
 Connection: keep-alive
Location: http://www.ceishi.com/

例如:实现访问http://bbs.ceishi.com/bbs/index.html跳转到http://www.ceishi.com。其中http://www.ceishi.com要有内容。
配置如下:

vim bbs.conf 
 server {
    listen       80;
    server_name  bbs.ceishi.com;
    location / {
        root   html/bbs;
        index  index.html index.htm;
    }
   rewrite ^(.*) http://www.ceishi.com break;#跳到www.ceishi.com下
      access_log  logs/access_bbs.log main;
  }
 # curl bbs.ceishi.com   #验证
<html>
<head><title>302 Found</title></head>
curl -L bbs.ceishi.com
www.ceishi.com

六,使用php连接mysql

使用php连接mysql
在php编译安装时的参数如下
‘./configure’ ‘–prefix=/usr/local/php’ ‘–with-apxs2=/usr/local/httpd/bin/apxs’ ‘–with-config-file-path=/usr/local/php/etc/’ ‘–with-mysql=/usr/local/mysql’ ‘–with-xmlrpc’ ‘–with-openssl’ ‘–with-zlib’ ‘–with-freetype-dir’ ‘–with-gd’ ‘–with-pdo-mysql’ ‘–enable-soap’ ‘–enable-mbstring=all’ ‘–enable-sockets’ ‘–with-mysqli=/usr/local/mysql/bin/mysql_config
其中–with-mysqli一定要写上,不然不能使用mysqli连接数据库
例如

<?php
$dbhost = 'localhost';  // mysql服务器主机地址
$dbuser = 'root';            // mysql用户名
$dbpass = '123456';          // mysql用户名密码
$conn = mysqli_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
  die('连接错误: ' . mysqli_error($conn));
}
echo '连接成功<br />';
$sql = 'CREATE DATABASE RUNOOB';
$retval = mysqli_query($conn,$sql );
if(! $retval )
{
    die('创建数据库失败: ' . mysqli_error($conn));
}
echo "数据库 RUNOOB 创建成功\n";
mysqli_close($conn);
?>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值