• Linux就是环境所在的操作系统;
  • Nginx则是一个「高性能的HTTP和反向代理服务器」,官网地址:http://nginx.org/
  • MySQL则是一个方便地对数据进行增删改查的数据库管理系统,官网地址:http://www.mysql.com/
  • PHP则是用来处理具体请求的脚本语言,官网地址:http://www.php.net/

运用这4件工具,最简单直接的一个用途就是搭建一个网站,例如现在我的个人网站就是在「LNMP」上面跑的

其实在Nginx开始受到关注之前,「LAMP」是搭建网站比较流行的选择,即LinuxApacheMySQLPHP

这里我们使用的不是LNMP的一键安装包,而是难度稍微高「一点」的逐个安装,这样做或许能让你对这个环境的细节有更好的理解,而且对各部分的定制程度可以达到最高。

  1. 要安装什么程序?——PHP,NGINX,MYSQL;
  2. 安装的这个程序,在编译时需要哪些扩展或者哪些库?(例如PHP安装OpenSSL,NGINX安装openssl);
  3. 下载这些扩展和库,下载完压缩包后解压缩得到这些库的代码,或者进一步地编译这些库并安装到一个指定的路径下;
  4. 编译程序,将需要的库、扩展添加到编译选项中,指定程序的安装路径;
  5. 安装完成,测试。

因此下面的内容就是上面这5步的循环。那么,开始吧。

在开始前,先安装一些通常来说应该已经有的组件,不过以防没有可以检查并安装一下。对于使用CentOS的用户在root权限下输入命令:

yum -y install gcc automake autoconf libtool make gcc-c++ glibc

安装PHP

为了开启PHP的一些功能(例如对png格式的支持等),首先需要安装一些库,CentOS命令如下:

yum -y install libmcrypt-devel mhash-devel libxslt-devel \
libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel \
zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel \
ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel \
krb5 krb5-devel libidn libidn-devel openssl openssl-devel

#错误:

yum [Errno 256] No more mirrors to try 解决方法
  • 输入下面的命令即可解决问题:
  • yum clean all

库已经安装好了,要注意的是在编译PHP时可能会说缺少其中的几个库,到时候请各位在百度(或者谷歌)搜一下这个库的官网,使用wget下载然后解压然后安装到你指定的一个目录,最后在编译PHP时指定这个库安装后的路径即可。为了方便演示,接下来碰到这个问题时,我默认使用以下的几个路径:

所有下载的压缩包放在「/home/download/」这个文件夹下;

所有的压缩包解压后的路径也是「/home/download/」,即如果压缩包名字是「openssl-1.0.1e.tar.gz」,那么解压后「/home/download/」下会有一个名字为「openssl-1.0.1e」的文件夹;

所有的库安装路径都是「/home/reetsee/environment/lib/」,指定安装路径的方法下面会有。

要注意的是:如果你也使用「/home/xxx/…」 这样的格式,最好保证这个「xxx」不是用户名,或者说「/home/xxx」不是用户目录。比较好的做法是你在/home下创建一个目录并使用这个目 录,例如在/home下使用mkdir xxx。具体原因会在Nginx的安装部分会提到403 Forbidden的时候讲解。

现在可以开始尝试安装PHP了,首先我下载了PHP 5.4.29,不下载最新版的原因是我担心它和某些库会有兼容性问题(但我没有查证过这种问题是否存在)。在命令行下我先把当前目录切换到「/home/download/」,然后输入下面的命令进行下载:

wget http://cn2.php.net/get/php-5.4.29.tar.gz/from/this/mirror

下载后执行解压操作,并切换到PHP的代码目录:

tar zxvf mirror
cd php-5.4.29

执行以下命令对PHP的安装进行设置:

./configure --prefix=/home/reetsee/environment/php  --enable-fpm --with-mcrypt \
--enable-mbstring --disable-pdo --with-curl --disable-debug --disable-rpath \
--enable-inline-optimization --with-bz2 --with-zlib --enable-sockets \
--enable-sysvsem --enable-sysvshm --enable-pcntl --enable-mbregex \
--with-mhash --enable-zip --with-pcre-regex --with-mysql --with-mysqli \
--with-gd --with-jpeg-dir --with-openssl

对上面的命令作一下简单的说明:

    从总体来看就是设置安装的PHP需要或不需要哪些功能,安装目录是什么, 需要哪些库

    –prefix=/home/reetsee/environment/php :把PHP安装在「/home/reetsee/environment/php」目录下

    –enable-fpm :为了让Nginx和PHP能够互相「交谈」,需要一个叫做FastCGI的工具,因此PHP需要使用PHP-FPM来管理FastCGI。

    –with-openssl :安装OpenSSL库

    其它的「–with-xxx」即需要xxx库,「–enable-yyy」即开启yyy的支持,「–disable-zzz」即禁用zzz。

在这一步,Ubuntu或者CentOS的用户十有八九会出现类似 「configure: error: mcrypt.h not found. Please reinstall libmcrypt.」的问题,这是因为缺少了mcrypt这个库(对于Ubuntu用户缺少的可能是其它库),那么接下来就把它下载并安装。

下载并安装缺失的库——以mcrypt为例:

在搜索引擎得知mcrypt的官网,进入源码下载的页面,复制「libmcrypt-2.5.7.tar.gz」的下载地址,切换到目录「/home/reetsee/download/」执行下载并安装的操作:

wget ftp://mcrypt.hellug.gr/pub/crypto/mcrypt/libmcrypt/libmcrypt-2.5.7.tar.gz
tar zxvf libmcrypt-2.5.7.tar.gz
cd libmcrypt-2.5.7
./configure --prefix=/home/reetsee/environment/lib/mcrypt
make && make install

这样就把mcrypt安装到「/home/reetsee/environment/lib/mcrypt」下了

在PHP的源码目录进行「./configure …」时,将原本的「–with-mcrypt」更改为「–with-mcrypt=/home/reetsee/environment/lib/mcrypt」,粗体部分就是你安装mcrypt的目录

———— mcrypt安装结束 ————

回到PHP源码的目录重新configure,这次输入的命令要将mcrypt的安装路径添加进去,具体命令变为:

./configure --prefix=/home/reetsee/environment/php  --enable-fpm --with-mcrypt=/home/reetsee/environment/lib/mcrypt \
--enable-mbstring --disable-pdo --with-curl --disable-debug --disable-rpath \
--enable-inline-optimization --with-bz2 --with-zlib --enable-sockets \
--enable-sysvsem --enable-sysvshm --enable-pcntl --enable-mbregex \
--with-mhash --enable-zip --with-pcre-regex --with-mysql --with-mysqli \
--with-gd --with-jpeg-dir --with-openssl

最后配置成功会出现「Thank you for using PHP.」

+--------------------------------------------------------------------+
| License: |
| This software is subject to the PHP License, available in this |
| distribution in the file LICENSE. By continuing this installation |
| process, you are bound by the terms of this license agreement. |
| If you do not agree with the terms of this license, you must abort |
| the installation process at this point. |
+--------------------------------------------------------------------+ Thank you for using PHP. config.status: creating php5.spec
config.status: creating main/build-defs.h
config.status: creating scripts/phpize
config.status: creating scripts/man1/phpize.1
config.status: creating scripts/php-config
config.status: creating scripts/man1/php-config.1
config.status: creating sapi/cli/php.1
config.status: creating sapi/fpm/php-fpm.conf
config.status: creating sapi/fpm/init.d.php-fpm
config.status: creating sapi/fpm/php-fpm.service
config.status: creating sapi/fpm/php-fpm.8
config.status: creating sapi/fpm/status.html
config.status: creating sapi/cgi/php-cgi.1
config.status: creating ext/phar/phar.1
config.status: creating ext/phar/phar.phar.1
config.status: creating main/php_config.h
config.status: executing default commands

如果你是用Ubuntu,会遇到很多编译依赖问题,例如上面的mcrypt的缺失,可以参考这篇博客:http://www.cnblogs.com/alexqdh/archive/2012/11/20/2776017.html

配置完就输入以下命令进行安装:

make && make install

安装需要一段时间,可以喝杯茶~

安装完后还有一点收尾工作,首先是配置php-fpm,首先是切换到php的安装目录下的etc文件夹:

cd /home/reetsee/environment/php/etc/

然后执行下面的命令:

cp php-fpm.conf.default php-fpm.conf

再对php-fpm.conf的内容进行修改,将「user = nobody」,「group = nobody」分别改为「user = www-data」,「group = www-data」,即如下图所示:

保存后需要保证名为「www-data」的用户以及组存在,因此在命令行执行下列语句:

groupadd www-data
useradd -g www-data www-data

这样PHP的安装配置工作就大体完成了

不放心的可以编写一个简单的php脚本来测试一下有没有输出:

<?php
/** /home/reetsee/tmp/phpinfo.php **/
echo phpinfo();
?>

然后执行:

/home/reetsee/environment/php/bin/php phpinfo.php

如果看到PHP有关的信息,起码说明PHP本身的安装成功了。

但是还有一些手尾要做:

  1. 创建php.ini文件,这个文件是对php一些运行选项进行配置的文件,非常重要,以后肯定会用到。官方文档在这里:http://www.php.net/manual/zh/ini.php。方法是将PHP源码目录下的「php.ini-production」文件复制到PHP安装目录下的「lib/」文件夹,并且重命名为「php.ini」。在我的机器上,输入命令「cp   /home/download/php-5.4.29/php.ini-production   /home/reetsee/environment/php/lib/php.ini」即可完成。
  2. 设置php-fpm.pid的路径,这个文件记录了php-fpm的进程id,以后你要重启php-fpm时可以通过命令(假设你在PHP的安装目录下)「kill -USR2 `cat var/run/php-fpm.pid`」。注意那两个引号是反引号「`」,不是单引号或者双引号。具体的做法是编辑PHP安装目录下的「etc/php-fpm.conf」文件,找到「pid = 」这一行,将前面的分号「;」去掉。如下图所示:
[global]
; Pid file
; Note: the default prefix is /home/reetsee/environment/php/var
; Default Value: none
;pid = run/php-fpm.pid

编辑后:

[global]
; Pid file
; Note: the default prefix is /home/reetsee/environment/php/var
; Default Value: none
pid = run/php-fpm.pid

至此就大功告成了。在下面安装完Nginx后,会启动php-fpm,到时候在PHP安装目录下就能看到 「var/run/php-fpm.pid」文件了。

安装Nginx

安装Nginx前也有一些库需要下载,分别是pcre,zlib以及openssl 。这里要说明的是下载这3个库的压缩包后,对其进行解压缩即可,无需安装。openssl要下载是因为Nginx在安装时需要的是openssl的源码(与PHP的安装不同)。

下载并解压pcre:

  • http://download.csdn.net/download/cyuyan112233/7422611
  • tar zxvf pcre-8.34.tar.gz

下载并解压zlib:

wget http://zlib.net/zlib-1.2.8.tar.gz
tar zxvf zlib-1.2.8.tar.gz

下载并解压openssl:

wget http://www.openssl.org/source/openssl-1.0.1g.tar.gz
tar zxvf openssl-1.0.1g.tar.gz

好了,必要的库已经下载好,现在就正式开始下载Nginx并安装。首先下载Nginx并解压缩:

wget http://nginx.org/download/nginx-1.4.2.tar.gz
tar zxvf nginx-1.4.2.tar.gz

切换到Nginx的源码目录 「/home/reetsee/download/nginx-1.4.2」进行安装前的配置,根据你pcre、zlib、openssl所在的源码目录以及Nginx的最终安装路径,输入配置命令,我的配置命令如下:

 ./configure --prefix=/home/reetsee/environment/nginx \
--with-http_ssl_module \
--with-pcre=/home/download/pcre-8.34 \
--with-zlib=/home/download/zlib-1.2.8 \
--with-openssl=/home/download/openssl-1.0.1g

这里附上一个配置说明列表(参考自http://www.nginx.cn/install):

 –prefix=path 定义一个目录,存放服务器上的文件 ,也就是nginx的安装目录。默认使用 /usr/local/nginx。
–sbin-path=path 设置nginx的可执行文件的路径,默认为 prefix/sbin/nginx.
–conf-path=path 设置在nginx.conf配置文件的路径。nginx允许使用不同的配置文件启动,通过命令行中的-c选项。默认为prefix/conf/nginx.conf.
–pid-path=path 设置nginx.pid文件,将存储的主进程的进程号。安装完成后,可以随时改变的文件名 , 在nginx.conf配置文件中使用 PID指令。默认情况下,文件名 为prefix/logs/nginx.pid.
–error-log-path=path 设置主错误,警告,和诊断文件的名称。安装完成后,可以随时改变的文件名 ,在nginx.conf配置文件中 使用 的error_log指令。默认情况下,文件名 为prefix/logs/error.log.
–http-log-path=path 设置主请求的HTTP服务器的日志文件的名称。安装完成后,可以随时改变的文件名 ,在nginx.conf配置文件中 使用 的access_log指令。默认情况下,文件名 为prefix/logs/access.log.
–user=name 设置nginx工作进程的用户。安装完成后,可以随时更改的名称在nginx.conf配置文件中 使用的 user指令。默认的用户名是nobody。
–group=name 设置nginx工作进程的用户组。安装完成后,可以随时更改的名称在nginx.conf配置文件中 使用的 user指令。默认的为非特权用户。
–with-select_module –without-select_module 启用或禁用构建一个模块来允许服务器使用select()方法。该模块将自动建立,如果平台不支持的kqueue,epoll,rtsig或/dev/poll。
–with-poll_module –without-poll_module 启用或禁用构建一个模块来允许服务器使用poll()方法。该模块将自动建立,如果平台不支持的kqueue,epoll,rtsig或/dev/poll。
–without-http_gzip_module — 不编译压缩的HTTP服务器的响应模块。编译并运行此模块需要zlib库。
–without-http_rewrite_module 不编译重写模块。编译并运行此模块需要PCRE库支持。
–without-http_proxy_module — 不编译http_proxy模块。
–with-http_ssl_module — 使用https协议模块。默认情况下,该模块没有被构建。建立并运行此模块的OpenSSL库是必需的。
–with-pcre=path — 设置PCRE库的源码路径。PCRE库的源码(版本4.4 – 8.30)需要从PCRE网站下载并解压。其余的工作是Nginx的./ configure和make来完成。正则表达式使用在location指令和 ngx_http_rewrite_module 模块中。
–with-pcre-jit —编译PCRE包含“just-in-time compilation”(1.1.12中, pcre_jit指令)。
–with-zlib=path —设置的zlib库的源码路径。要下载从 zlib(版本1.1.3 – 1.2.5)的并解压。其余的工作是Nginx的./ configure和make完成。ngx_http_gzip_module模块需要使用zlib 。
–with-cc-opt=parameters — 设置额外的参数将被添加到CFLAGS变量。例如,当你在FreeBSD上使用PCRE库时需要使用:–with-cc-opt=”-I /usr/local/include。.如需要需要增加 select()支持的文件数量:–with-cc-opt=”-D FD_SETSIZE=2048″.
–with-ld-opt=parameters —设置附加的参数,将用于在链接期间。例如,当在FreeBSD下使用该系统的PCRE库,应指定:–with-ld-opt=”-L /usr/local/lib”.

配置说明列表

执行configure成功后进行安装:

make && make install

要验证Nginx是否安装成功了,可以切换到Nginx的安装目录(我的是「/home/reetsee/environment/nginx」),然后启动Nginx:

./sbin/nginx

然后你在浏览器中访问你的机器的IP地址(有公网IP的可以访问公网IP,没有的可以打开CentOS的浏览器然后访问「127.0.0.1」),是不是就看到很漂亮的「Welcome to nginx!」了?如果你访问时出现「403 Forbidden」,那么极其有可能你的nginx下的html所在的绝对路径中的某些文件夹的权限没有r或者x,你是否将Nginx安装到你的个人文件夹下了?例如你的用户名叫「abc」,然后你安装到了「/home/abc」下的子目录中?如果是的话,那就是权限不够了,因为Nginx的worker进程默认用户为「nobody」。

解决方法有3个:

  1. 一个是把Nginx安装到其它目录,可以查看到效果(安装到其它目录后,记得先把原本运行的Nginx给kill掉);
  2. 第二个是将没有权限的目录加上rx权限;
  3. 第三个是在nginx安装目录下编辑「conf/nginx.conf」,将「#user  nobody」改为「user  root」
  • 但是极其不建议使用第2种以及第3种方法,因为这样会有安全风险,如果你正在使用虚拟机测试或者仅仅是试用一下机器验证一下效果,那么就可以使用上面任何3种方法。
  • 下面就让Nginx通过PHP的FastCGI处理请求,首先到nginx的安装目录下,修改「conf/nginx.conf」文件,找到如下内容:
 # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#location ~ \.php$ {
# root html;
# fastcgi_pass 127.0.0.1:9000;
# fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
# include fastcgi_params;
#}

将第3~第7个「#」去掉,就是取消注释,同时将「/scripts$fastcgi_script_name」改为「$document_root$fastcgi_script_name」,即变为下面这样:

 # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}

使用vim的列操作可以很快去掉它们。

在nginx的安装目录下,新增一个PHP文件「html/index.php」,文件内容如下:

<?php
echo phpinfo();
?>

接下来就启动php-fpm以及重启nginx:

/home/reetsee/environment/php/sbin/php-fpm                 #启动php-fpm
/home/reetsee/environment/nginx/sbin/nginx -s reload #重启nginx

然后打开浏览器,访问一下「机器ip/index.php」,例如「127.0.0.1/index.php」,如果你看到PHP的输出信息了~恭喜就成功啦~那么Nginx的安装完成了。效果图如下:

图中的蓝色框内如果出现了php.ini,就证明加载php.ini配置文件成功了。

如果你失败了欢迎留言。

另外是关于nginx.conf中的「127.0.0.1:9000」,这个其实是php-fpm的监听端口,是可以在php-fpm.conf中设置的。没有特殊需要使用默认即可。

安装MySQL

现在到最麻烦的一步了——安装MySQL。

说它麻烦是第一个是因为自从Orcale把MySQL收过来后到它的官网上下载一个MySQL就费力了不少,要找很久才能找到想要的下载连接,而且现在你上官网,不翻墙很有可能找不到下载连接! 我就是这样被坑了很久,我以为是官网网页出BUG了,当选择MySQL的版本时,对应的下载列表并没有更新,后来查看了一些网页的源码发现网页中使用了部 分来自Google域名下的js,而最近Google在中国被全面封杀,开了GoAgent重新连接才把列表正常刷出来了(说句题外话最近GoAgent 也有点不好使了)。

第二个是因为MySQL安装后要设置的东西蛮多的,当时我也摸索了比较久。强烈建议大家也摸索一下MySQL的安装以及初始配置,在官方文档中有非常详细的介绍。我选择MySQL5.5就是因为官网明确了这个版本是肯定在CentOS 6.x运行的

 #!/bin/bash

 echo_red(){
echo -e "\033[31m [ $1 ] \033[0m"
}
yum install yum-utils
yum-complete-transaction --cleanup-only
package-cleanup --dupes
package-cleanup --problems
yum -y update MYSQL_DIR=/usr/local/mysql
MYSQL_SRC=/usr/local/src
DATA_DIR=/data/mysql #check development tools requried by mysql
#echo -e "\033[31m [ Checking for gcc...... ] \033[0m"
echo_red "Checking for gcc......"
#rpm -qa|grep gcc-[0-9] || yum install gcc && echo -e "\033[32m GCC installed \033[0m"
rpm -qa|grep gcc-[0-9] || yum install gcc && echo_red "Gcc install"
#echo -e "\033[31m [ Checking for gcc-c++......] \033[0m"
echo_read "Checking for gcc-c++......"
#rpm -qa|grep gcc-c++ || yum install gcc-c++ && echo -e "\033[32m GCC-C++ installed \033[0m"
rpm -qa|grep gcc-c++ || yum install gcc-c++ && echo_red "GCC-C++ installed" #echo -e "\033[31m [ Checking for bison...... ] \033[0m"
echo_red "Checking for bison..."
#rpm -qa|greo bison || yum install bison && echo -e "\033[32m BISON installed \033[0m"
rpm -qa|greo bison || yum install bison && echo_red "BISON installed" #echo -e "\033[31m [ Checking for ncurses...... ] \033[0m"
echo_red "Chking for ncurses..."
#rpm -qa|grep ncurses || yum install ncurses && echo -e "\033[32m NCURSES installed \033[0m"
rpm -qa|grep ncurses || yum install ncurses && echo_red "NCURSES installed" #echo -e "\033[31m [ Checking for ncurses-devel...... ] \033[0m"
read_red "Checking for ncurses-devel..."
#rpm -qa|grep ncurses-devel || yum install ncurses-devel && echo -e "\033[32m NCURSES-DEVEL installed \033[0m"
rpm -qa|grep ncurses-devel || yum install ncurses-devel && echo_red "NCURSES-DEVEL installed" #echo -e "\033[31m [ Checking for wget...... ] \033[0m"
echo_red "Checking for wget..."
#rpm -qa|grep wget||yum -y install wget && echo -e "\033[32m wget installed \033[0m"
rpm -qa|grep wget||yum -y install wget && echo_red "wget installed" # check if already installed mysql, if exists ,remove it
rpm -qa|grep mysql
if [ $? -eq 0 ];then
yum remove mysql mysql-server -y
echo ""
#echo "\033[32m Mysql already removed \033[0m"
echo_red "Mysql already removed..."
echo ""
else
#echo "\033[32m Mysql does not exist \033[0m"
echo_red "Mysql does not exist"
fi
#check user mysql exists or not
id mysql > /dev/null 2>&1
if [ $? -eq 0 ];then
echo ""
#echo -e "\033[31m User mysql exists,now remove it;and add a new acount \033[0m"
echo_red "User mysql exists,now remove it;and add a new acount"
/usr/sbin/userdel -r mysql
/usr/sbin/groupadd -g 3306 mysql
/usr/sbin/useradd -u 3306 -g mysql -M -s /sbin/nologin mysql
#echo -e "\033[32m User mysql created \033[0m"
echo_red "User mysql created"
else
echo ""
#echo -e "\033[31m User mysql does not exists ,now we will create it \033[0m"
echo_red "User mysql dose not exists,now we will create it"
/usr/sbin/groupadd -g 3306 mysql
/usr/sbin/useradd -u 3306 -g mysql -M -s /sbin/nologin mysql
#echo -e "\033[32m User mysql created \033[0m"
echo_red "User mysql created"
fi #yum remove mysql 2>/mnt/error.log
#yum install gcc* gcc-c++ ncurses-devel* bison wget #Download and install cmake for mysql 5.5 or newer distribution
cd $MYSQL_SRC
#echo -e "\003[32m Beginning download...... \033[0m"
echo_red "Beginning download..."
wget http://www.cmake.org/files/v2.8/cmake-2.8.5.tar.gz
#echo -e "\033[31m Download Ended \033[0m"
echo_red "Download Ended"
echo ""
#echo -e "\033[32m Beginning uncompress and install......\033[0m"
echo_red "Beginning uncompress and install..."
tar -xzvf cmake-2.8.5.tar.gz
cd cmake-2.8.5
./configure
make && make install
#echo -e "\033[31m Install Ended \033[0m"
echo_red "Install Ended" #Download and install mysql tarball
cd $MYSQL_SRC
#echo -e "\033[32m Beginning download...... \033[0m"
echo_red "Beginning download..."
wget http://dev.mysql.com/Downloads/MySQL-5.5/mysql-5.5.27.tar.gz
#echo -e "\033[31m DownloadE Ended \033[0m"
echo_red "Download Ended"
echo ""
#echo -e "\033[32m Beginning uncompress and install...... \033[0m"
echo_red "Beginning uncompress and install..."
tar -zxf mysql-5.5.27.tar.gz
cd mysql-5.5.27
cmake -DCMAKE_INSTALL_PREFIX=$MYSQL_DIR -DMYSQL_DATADIR=$DATA_DIR/data -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWTIH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DENABLED_LOCAL_INFILE=1 -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DEXTRA_CHARSETS=all -DMYSQL_TCP_PORT=3306
make && make install
#echo -e "\033[31m Install Ended \033[0m"
echo_red "Install Ended" # now configure you installation
mkdir -p $DATA_DIR/data
mkdir -p $DATA_DIR/log
chown -R mysql:mysql $DATA_DIR
chmod -R 755 $DATA_DIR # use my-medium.cnf as my.cnf
cp support-files/my-medium.cnf /etc/my.cnf #initialized database
$MYSQL_DIR/scripts/mysql_install_db --user=mysql --basedir=$MYSQL_DIR --datadir=$DATA_DIR/data # use mysql.server as mysqld
cp support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld # set mysql as system service and start when system boot
/sbin/chkconfig --add mysqld
/sbin/chkconfig mysqld on # create soft links
cd /usr/local/bin
ln -s /usr/local/mysql/bin/mysql mysql &&
ln -s /usr/local/mysql/bin/mysqldump mysqldump &&
ln -s /usr/local/mysql/bin/mysqladmin mysqladmin #echo "Start the mysql service"
echo_red "Start the mysql service"
service mysqld start #echo -e "\033[31m You have installed mysql successfull "
echo_red "You have installed mysql successfull"
#echo -e "\033[32m END END END END \033[0M"
echo_red "END..........................................................................................................."

Mysql安装脚本

最后就是给MySQL数据库里的「root」账号一个密码:

./bin/mysqladmin -u root password '123abc'

里面的「123abc」替换成你自己想要设置的密码即可。要注意的是这个MySQL的root不是指操作系统的root,而是指这个数据库管理系统的root,以后我们就可以使用这个账号对数据库进行添加用户、赋予权限等操作,所以一定要设置一个密码。

至此,繁琐的MySQL安装就所剩无几了!Congratulations

最后还有几件事要做:

  1. 使用「root」账户进入MySQL管理系统中;
  2. 在MySQL内创建一个叫做「hello」的账号,为它设置密码;
  3. 在MySQL内建立一个名为「hello_db」的数据库,然后让「hello」账号拥有对「hello_db」数据库的完全操作权限;
  4. 退出MySQL管理系统,使用「hello」账户进入MySQL管理系统中;
  5. 在「hello_db」数据库中创建一张名为「hello_table」的表,在里面插入一条数据;
  6. 编写一个简单的PHP文件,通过浏览器的访问将上面一步中插入的数据显示在网页上。

当我们完成最后的这几件事,就真正宣告LNMP搭建成功,所有东西都能串起来了!

MySQL与用户创建、权限赋予的相关操作,请参见官方文档的账户管理部分。下面主要使用的MySQL指令是「CREATE USER」以及「GRANT」。

使用「root」账户进入MySQL管理系统中:

./bin/mysql -u root -p

在MySQL内创建一个叫做「hello」的账号,为它设置密码:

在mysql中输入以下语句:

CREATE USER 'hello'@'localhost' IDENTIFIED BY '';

在使用MySQL语句时,有个好习惯是对于命令的保留字使用全大写的形式,这样语句会更好的易读性。上面的「123456」是密码,替换成你自己的密码即可。

在上面的「@localhost」是有经过一些考虑,目前对于我们来说,我们的MySQL和PHP部署的机器是一样的,因此PHP通过 localhost就可以访问数据库。因此我们希望只有本地的连接可以访问数据库,来自其它IP或者域名的连接不能访问数据库,这样做的好处是即便你的密 码泄露了,入侵者也无法直接通过网络来操作数据库,除非你的机器登陆密码被入侵者知道了,他才能够直接登陆到你的机器,然后通过localhost访问数 据库。

如果你将「@localhost」替换成「@127.0.0.1」,那么只有IP为127.0.0.1的连接才能够访问数据库。如果你不想对连接进行过滤,所有连接都能够访问到数据库,那么你上网查资料应该替换成什么吧,我不会告诉你的:)

在MySQL内建立一个名为「hello_db」的数据库,然后让「hello」账号拥有对「hello_db」数据库的完全操作权限:

首先是创建数据库「hello_db」:

CREATE DATABASE hello_db;

然后是让「hello」账号拥有对「hello_db」数据库的完全操作权限:

GRANT ALL ON hello_db.* TO 'hello'@'localhost';

上面的「ALL」即所有权限,「hello_db.*」即权限是针对hello_db下的所有表,「‘hello’@‘localhost’」即来自localhost的名为「hello」的用户。

退出MySQL管理系统,使用「hello」账户进入MySQL管理系统中:

先退出:

exit;

然后以「hello」账号进入MySQL:

./bin/mysql -u hello -p

输入密码后即可。

在「hello_db」数据库中创建一张名为「hello_table」的表,在里面插入一条数据:

使用「hello_db」数据库:

USE hello_db;

建一张名为「hello_table」的表(下面普通的换行不会执行语句,MySQL在换行时检测到分号「;」才会执行语句):

CREATE TABLE `hello_table`(
`id` INT(10) PRIMARY KEY NOT NULL AUTO_INCREMENT,
`content` VARCHAR(256) DEFAULT 'Hello LNMP!'
);

注意!上面对于表名如「hello_table」,列名如「id」和「content」,它们使用的引号是反引号「`」,不是单引号

这样一张表就建立好了,通过命令「SHOW TABLES」就可以看到。然后就是往里面插入一条数据:

INSERT INTO `hello_table` (`id`, `content`) VALUES(1, 'Hello World! Hello LNMP!');

出现 「Query OK, 1 row affected」就证明成功了!

编写一个简单的PHP文件,通过浏览器的访问将上面一步中插入的数据显示在网页上:

切换到Nginx安装目录下的「html」文件夹:

cd /home/reetsee/environment/nginx/html/
新建一个名为「lnmp.php」的文件,内容如下:
 <?php
$con = mysqli_connect('localhost:3306', 'hello', '', 'hello_db'); //检查连接是否出错
if (mysqli_connect_errno($con)) {
echo 'Failed to connect to MySQL: ' . mysqli_connect_error() . "\n";
die("Connect to database failed.\n");
} //执行读取数据的语句
$query = 'SELECT `id`, `content` FROM `hello_table` WHERE `id`=1;';
$result = mysqli_query($con, $query);
$row = mysqli_fetch_array($result, MYSQLI_ASSOC); //输出结果
echo $row['content']; //关闭连接
mysqli_close($con);
?>

里面的用户名、密码等替换成自己的。没用过PHP的同学要留意PHP中双引号和单引号的含义是不同的。注意上面在初始化连接时的端口号「3306」不能少呀。

保存后将这个文件的权限设置为755,即执行命令「chmod 755 lnmp.php」。

接下来就打开浏览器,访问一下「127.0.0.1/lnmp.php」,是不是就看到了万众期待的「Hello World! Hello LNMP!」?效果如下:

安装Nginx的过程中,nginx.conf中有一行fastcgi_pass,里面指定通过TCP/IP协议进行通信的,如果你的Nginx与PHP 是部署在同一台机器(即非分布式部署,就像这篇博文所说的那样部署),可以使用Unix域套接字进行通信,据说性能会有一点点提高。

把LNMP环境搭建起来后,可玩性就很强了,例如在上面放一个WordPress(安装快到没朋友),或者在上面搭建其它你喜欢的应用和服务

从零搭建LNMP环境的更多相关文章

  1. CentOS6.6搭建LNMP环境

    CentOS6.6搭建LNMP环境 1.设置yum源,本地安装依赖包 1 yum -y install gcc gcc-c++ automake autoconf libtool make 2.下载依 ...

  2. Yum搭建LNMP环境(动、静、库分离)(week4_day5)--技术流ken

    前言 本篇博客使用yum来搭建lnmp环境,将采用动态,静态以及数据库分开安装的方式即nginx,php,mysql.会被分开安装在不同的服务器之上,搭建出来一套lnmp环境,并部署wordpress ...

  3. [Linux] deepin15.8搭建LNMP环境

    LAMP和LNMP LAMP==Linux+Apache+Mysql+PHP LNMP==Linux+Nginx+Mysql+PHP 安装nginx sudo apt install nginx 安装 ...

  4. CentOS 7 源码搭建LNMP环境

    搭建 LNMP 环境 源码包版本 :  CentOS Linux  7 nginx-1.15.1.tar.gz  mysql-boost-5.7.21.tar.gz  php-7.2.7.tar.gz ...

  5. Vmware搭建LNMP环境(Centos7+Nginx+Mysql+PHP7.1.8)

    参考:1.Linux学习之CentOS(一)----在VMware虚拟机中安装CentOS 7(图文教程) 2.Centos7搭建LNMP环境 3.MySQL5.7修改默认root密码 4.CentO ...

  6. ubuntu通过apt-get方式搭建lnmp环境以及php扩展安装

    v 一直是在用的lnmp的集成安装包搭建lnmp环境,因为工作需要需要安装ldap扩展,在网上怎么都找不到源码安装包,只能卸载掉原来的lnmp环境,用ubuntu的php5-ldap扩展, 在安装中遇 ...

  7. Mac下docker搭建lnmp环境 + redis + elasticsearch

    之前在windows下一直使用vagrant做开发, 团队里面也是各种开发环境,几个人也没有统一环境,各种上线都是人肉,偶尔还会有因为开发.测试.生产环境由于软件版本或者配置不一致产生的问题, 今年准 ...

  8. WIN10 vagrant和virtualbox虚拟机和一键搭建lnmp环境配置thinkphp虚拟主机

    版本:win10系统 virtualbox:5.1.26 vagrant :1.9.7 centos 7.0 xshell/git 首先下载好对应版本的软件 配置vagrant和virtualbox ...

  9. docker搭建lnmp环境(问题,资料,命令)

    入门参考 http://www.runoob.com/docker/docker-install-nginx.html 十大常用命令玩转docker 1. #从官网拉取镜像 docker pull & ...

随机推荐

  1. Sublime Text3安装SublimeREPL插件以及快捷键设置

    SublimeREPL是Sublime Text的一个插件,它除了可以使你在ST中运行解释器(REPL),还有对Python语言的特别支持,包括在本地/远程(远程仅在linux/osx平台可用)vir ...

  2. java 显示视频时间--玩的

    1.显示视频时间 package view.time; import it.sauronsoftware.jave.Encoder; import it.sauronsoftware.jave.Mul ...

  3. 高质量程序设计指南C/C++语言——内存管理

    • free()和delete只是把指针所指的内容给释放掉,并没有把指针本身删掉.指针被free()或delete以后其地址仍然不变(不等于NULL),只是该地址对应的内存是垃圾——p成了野指针.如果 ...

  4. MVC-07 案例1

    >>>>>ContosoUniversity网站 ------------------------------------------- 一.并发冲突 1. 为什么会并发 ...

  5. 菜农群课笔记之ICP与ISP----20110412(整理版)

    耗时一上午时间对HOT大叔昨晚的群课内容进行温故并整理,现将其上传,若想看直播可到下面链接处下载:http://bbs.21ic.com/icview-229746-1-1.html        成 ...

  6. Android学习资料PDF免费大放送,每日更新!有需要的亲看这里

    说明:以前有资料分享的时候,都叫大家留下自己的QQ邮箱,这样被很多的程序猿们认为我是专门来钓你们的QQ邮箱的.为此给大家带来的顾虑,深表抱歉.从现在开始,以后的分享资料我都会放在自己的百度网盘中,提供 ...

  7. python小游戏实现代码

    早上逛CSDN首页就见到这么一篇教程.看了一下很有意思,就马上动手实现了一下.看看效果吧: 完整代码: # -*- coding: utf-8 -*- # 1 - Import library imp ...

  8. Java基础之编程语法(一)

    1.基本格式 所有Java代码都应该在一个class中. Java是严格区分大小写的. Java是一种自由格式的语言.Java代码分为结构定义语句和功能执行语句,功能执行语句最后必须以分号结束. 2. ...

  9. Debian(Linux)系统目录简单说明

    bin:基础命令执行档 boot:引导装置器的静态链接文件 dev:设备档 etc:主机特定的系统配置 lib:基本共享库及基本内核模块 mnt:用于临时挂载一个文件系统 proc:系统信息的虚拟目录 ...

  10. 5.对象创建型模式-原型PROTOTYPE

    原型:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 原型实现:1.用于创建对象的具体类必须实现clone()操作,用于对象克隆自己以生成新的对象.下面通过原型来实现一个抽象工厂Ma ...