一、Mysql 源码安装
1、下载、解压、编译mysql
下载安装包:mysql-boost-5.7.11.tar.gz (boost模块自带)
[root@server1 ~]# tar zxf mysql-boost-5.7.11.tar.gz
[root@server1 ~]# yum install -y cmake-2.8.12.2-4.el6.x86_64.rpm
[root@server1 ~]# cd mysql-5.7.11/
[root@server1 mysql-5.7.11]# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/lnmp/mysql -DMYSQL_DATADIR=/usr/local/lnmp/mysql/data -DMYSQL_UNIX_ADDR=/usr/local/lnmp/mysql/data/mysql.sock -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DEXTRA_CHARSETS=all
注意:
1.cmake版本必须2.8以上,系统rpm包自带为2.6版本,因此需要自行下载2.8以上版本的cmake.
2.cmake参数:
-DCMAKE_INSTALL_PREFIX=/usr/local/lnmp/mysql ##指定目录
-DMYSQL_DATADIR=/usr/local/lnmp/mysql/data ##指定数据库路径
-DMYSQL_UNIX_ADDR=/usr/local/lnmp/mysql/data/mysql.sock ##Unix socket 存放路径
-DWITH_MYISAM_STORAGE_ENGINE=1 ##安装 myisam 存储引擎
-DWITH_INNOBASE_STORAGE_ENGINE=1 ##安装 innodb 存储引擎
-DWITH_PARTITION_STORAGE_ENGINE=1 ##安装数据库分区
-DDEFAULT_CHARSET=utf8 ##使用 utf8 字符
-DDEFAULT_COLLATION=utf8_general_ci ##校验字符
-DEXTRA_CHARSETS=all ##安装所有扩展字符集
-DWITH_BOOST=boost/boost_1_59_0/ ##指定 boost 路径
2、解决依赖性
[root@server1 mysql-5.7.11]# yum install -y gcc gcc-c++
[root@server1 mysql-5.7.11]# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/lnmp/mysql -DMYSQL_DATADIR=/usr/local/lnmp/mysql/data -DMYSQL_UNIX_ADDR=/usr/local/lnmp/mysql/data/mysql.sock -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DEXTRA_CHARSETS=all -DWITH_BOOST=boost/boost_1_59_0/ ##指定 boost 路径
[root@server1 mysql-5.7.11]# rm -f CMakeCache.txt ##清空Cmake,否则 cmake 时会读取错误文件
[root@server1 mysql-5.7.11]# yum install -y ncurses-devel
[root@server1 mysql-5.7.11]# rm -f CMakeCache.txt
[root@server1 mysql-5.7.11]# yum install -y bison
[root@server1 mysql-5.7.11]# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/lnmp/mysql -DMYSQL_DATADIR=/usr/local/lnmp/mysql/data -DMYSQL_UNIX_ADDR=/usr/local/lnmp/mysql/data/mysql.sock -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DEXTRA_CHARSETS=all -DWITH_BOOST=boost/boost_1_59_0/
示图:成功解决依赖性
3、编译并安装
[root@server1 mysql-5.7.11]# make
[root@server1 mysql-5.7.11]# make install
4、mysql配置
<1>创建mysql的可执行脚本
[root@server1 ~]# cd /usr/local/lnmp/mysql/support-files/
[root@server1 support-files]# ls
magic my-default.cnf mysqld_multi.server mysql-log-rotate mysql.server
[root@server1 support-files]# file mysql.server ##shell脚本文本可执行文件
mysql.server: POSIX shell script text executable
[root@server1 support-files]# cp mysql.server /etc/init.d/mysqld
[root@server1 support-files]# ll /etc/init.d/mysqld ##脚本是否有可执行权限+x
-rwxr-xr-x 1 root root 11005 Oct 23 14:30 /etc/init.d/mysqld
[root@server1 ~]# cd /etc/
[root@server1 etc]# mv my.cnf my.cnf.back ##将原配置文件备份
[root@server1 etc]# cd /usr/local/lnmp/mysql/support-files/
[root@server1 support-files]# cp my-default.cnf /etc/my.cnf
<2>新建mysql用户,指定uid、gid和家目录
[root@server1 ~]# cd /usr/local/lnmp/mysql/
[root@server1 mysql]# groupadd -g 27 mysql
[root@server1 mysql]# useradd -u 27 -g 27 -d /usr/local/lnmp/mysql/data -M -s /sbin/nologin mysql
[root@server1 mysql]# grep mysql /etc/passwd
mysql:x:27:27::/usr/local/lnmp/mysql/data:/sbin/nologin
[root@server1 mysql]# id mysql
uid=27(mysql) gid=27(mysql) groups=27(mysql)
[root@server1 mysql]# chown mysql.mysql . -R ##当前目录第归
<3>修改环境变量
[root@server1 mysql]# vim ~/.bash_profile
10 PATH=$PATH:$HOME/bin:/usr/local/lnmp/mysql/bin
[root@server1 mysql]# source ~/.bash_profile
<4>编辑配置文件
[root@server1 ~]# vim /etc/my.cnf
18 basedir = /usr/local/lnmp/mysql
19 datadir = /usr/local/lnmp/mysql/data
20 port = 3306
21 # server_id = .....
22 socket = /usr/local/lnmp/mysql/data/mysql.sock
[root@server1 ~]# mysqld --initialize --user=mysql ##初始化临时密码
[root@server1 mysql]# chown root . -R
[root@server1 mysql]# chown mysql data/ -R ##保证 mysql 用户对 data 目录有绝对权限
[root@server1 mysql]# /etc/init.d/mysqld start
[root@server1 mysql]# mysql_secure_installation ##安全初始化,初始密码为临时密码
示图:初始化临时密码
mysql初始化命令:
mysql_install_db ##旧版本初始化命令
mysqld --initialize --user=mysql ##新版本初始化命令
初始化报错:
以上报错原因:
mysql在进行初始化的时后,会检测数据目录是否存在,
如过不存在,mysql会创建它,
如果存在,而且这个目录里有数据,mysql会报错,并且终止初始化:
解决方法:删除data目录,重新初始化
[root@server1 ~]# cd /usr/local/lnmp/mysql/
[root@server1 mysql]# rm -fr data/
[root@server1 mysql]# mysqld --initialize --user=mysql
5、登陆测试
二、Php 源码安装
1、下载、解压php安装包
[root@server1 ~]# tar jxf php-5.6.35.tar.bz2
2、编译、安装
[root@server1 php-5.6.35]# ./configure --prefix=/usr/local/lnmp/php --with-config-file-path=/usr/local/lnmp/php/etc --enable-mysqlnd --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-openssl --with-snmp --with-gd --with-zlib --with-curl --with-libxml-dir --with-png-dir --with-jpeg-dir --with-freetype-dir --with-pear --with-gettext --with-gmp --enable-inline-optimization --enable-soap --enable-ftp --enable-sockets --enable-mbstring --enable-fpm --with-fpm-user=nginx --with-fpm-group=nginx --with-mcrypt --with-mhash
[root@server1 php-5.6.35]# make && make install
解决依赖性安装包:
libxml2-devel
openssl-devel
curl-devel
libjpeg-turbo-devel
libpng-devel
freetype-devel
gmp-devel
net-snmp-devel
libmcrypt-2.5.8-9.el6.x86_64.rpm ##源端下载
libmcrypt-devel-2.5.8-9.el6.x86_64.rpm ##源端下载
3、配置php
[root@server1 php-5.6.35]# cp php.ini-production /usr/local/lnmp/php/etc/php.ini
[root@server1 php-5.6.35]# cd /usr/local/lnmp/php/etc/
[root@server1 etc]# ls
pear.conf php-fpm.conf.default php.ini
[root@server1 etc]# cp php-fpm.conf.default php-fpm.conf
[root@server1 etc]# ls
pear.conf php-fpm.conf php-fpm.conf.default php.ini
[root@server1 etc]# vim php-fpm.conf
25 pid = run/php-fpm.pid ##打开pid
[root@server1 etc]# vim php.ini
936 date.timezone =Asia/Shanghai ##设定时区
4、设置php启动脚本
[root@server1 php-5.6.35]# cd sapi/fpm/
[root@server1 fpm]# file init.d.php-fpm
init.d.php-fpm: POSIX shell script text executable ##可执行脚本
[root@server1 fpm]# cp init.d.php-fpm /etc/init.d/php-fpm
[root@server1 fpm]# chmod +x /etc/init.d/php-fpm ##添加可执行权限
5、添加nginx用户,启动服务
[root@server1 ~]# useradd -u 800 -M -d /usr/local/lnmp/nginx nginx
[root@server1 ~]# /etc/init.d/php-fpm start
示图:php端口9000
三、Nginx 源码编译
1、下载、解压nginx及其sticky模块
[root@server1 ~]# tar zxf nginx-1.10.1.tar.gz
[root@server1 ~]# tar zxf nginx-sticky-module-ng.tar.gz
2、编译、安装
[root@server1 ~]# cd nginx-1.10.1
[root@server1 nginx-1.10.1]# vim src/core/nginx.h ##隐藏版本号
14 #define NGINX_VER "nginx/"
[root@server1 nginx-1.10.1]# vim auto/cc/gcc ##注释debug
178 # debug
179 #CFLAGS="$CFLAGS -g"
[root@server1 nginx-1.10.1]# ./configure --prefix=/usr/local/lnmp/nginx --with-http_ssl_module --with-http_stub_status_module --with-threads --with-file-aio --add-module=/root/nginx-sticky-module-ng
[root@server1 nginx-1.10.1]# make && make install
解决依赖性
[root@server1 nginx-1.10.1]# yum install -y pcre-devel
3、配置nginx
[root@server1 nginx]# vim /usr/local/lnmp/nginx/conf/nginx.conf
65 location ~ \.php$ {
66 root html;
67 fastcgi_pass 127.0.0.1:9000;
68 fastcgi_index index.php;
69 # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
70 include fastcgi.conf;
71 }
[root@server1 ~]# ln -s /usr/local/lnmp/nginx/sbin/nginx /sbin/
[root@server1 ~]# nginx -t ##检测配置文件
[root@server1 ~]# nginx ##开启nginx
nginx的测试页
[root@server1 ~]# cd /usr/local/lnmp/nginx/html/
[root@server1 html]# vim index.php
<?php
phpinfo()
?>
测试:
[root@server1 html]# vim /usr/local/lnmp/nginx/conf/nginx.conf
43 location / {
44 root html;
45 index index.php index.html index.htm; ##设定优先访问index.php
46 }
[root@server1 html]# nginx -s reload
测试:访问172.25.51.1,自动优先访问index.php页面
四、搭建论坛,LNMP架构
1、在 /usr/local/lnmp/nginx/html 目录下载Discuz_X3.2_SC_UTF8.zip并解压
[root@server1 html]# pwd
/usr/local/lnmp/nginx/html
[root@server1 html]# unzip Discuz_X3.2_SC_UTF8.zip
2、访问网页、搭建论坛
[root@server1 html]# mv upload/ bbs ##解压后的upload重命名为bbs
<1>访问172.25.51.1/bbs,开始搭建论坛
<2>开始安装,系统排错
错误一:bbs下权限不够
[root@server1 bbs]# chmod 777 uc_server/ config/ data/ uc_client/ -R ##设定权限777
刷新页面
注意:数据库密码必须同前一致
错误二:目录不存在
[root@server1 bbs]# vim /usr/local/lnmp/php/etc/php.ini
1013 pdo_mysql.default_socket= /usr/local/lnmp/mysql/data/mysql.sock
1162 mysql.default_socket = /usr/local/lnmp/mysql/data/mysql.sock
1221 mysqli.default_socket = /usr/local/lnmp/mysql/data/mysql.sock
[root@server1 bbs]# /etc/init.d/php-fpm reload
[root@server1 bbs]# chmod 755 /usr/local/lnmp/mysql/data/
<3>论坛搭建成功
<4>登陆论坛,用户admin,密码admin
注意:避免重复安装,删除/usr/local/lnmp/nginx/html/bbs/install/index.php
[root@server1 bbs]# rm -fr /usr/local/lnmp/nginx/html/bbs/install/index.php
五、Php -memcache缓存
1、下载、解压memcached
[root@server1 ~]# tar zxf memcache-2.2.5.tgz
2、添加环境变量
[root@server1 ~]# vim ~/.bash_profile
[root@server1 ~]# source ~/.bash_profile
[root@server1 ~]# cd memcache-2.2.5
[root@server1 memcache-2.2.5]# phpize
Configuring for:
PHP Api Version: 20131106
Zend Module Api No: 20131226
Zend Extension Api No: 220131226
3、编译、安装
[root@server1 memcache-2.2.5]# ./configure
[root@server1 memcache-2.2.5]# make && make install
4、添加memcache到php扩展
[root@server1 ~]# vim /usr/local/lnmp/php/etc/php.ini
874 extension=memcache.so
[root@server1 ~]# /etc/init.d/php-fpm reload
示图:查看php扩展
5、安装memcached并查看其端口
[root@server1 memcache-2.2.5]# yum install -y memcached
[root@server1 memcache-2.2.5]# /etc/init.d/memcached start
示图:查看memcached端口
6、设置memcache.php
[root@server1 memcache-2.2.5]# cp memcache.php /usr/local/lnmp/nginx/html/
[root@server1 memcache-2.2.5]# cd /usr/local/lnmp/nginx/html/
[root@server1 html]# vim memcache.php ##用户名:memcache,密码:redhat
7、访问172.25.51.1/memcache.php
(用户名:memcache,密码:redhat)
8、物理机高并发测试
[root@server1 memcache-2.2.5]# cp example.php /usr/local/lnmp/nginx/html/
[root@foundation51 ~]# ab -c 10 -n 1000 http://172.25.51.1/example.php
This is ApacheBench, Version 2.3 <$Revision: 1430300 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 172.25.51.1 (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests
Server Software: nginx/
Server Hostname: 172.25.51.1
Server Port: 80
Document Path: /example.php
Document Length: 123 bytes
Concurrency Level: 10
Time taken for tests: 0.890 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Total transferred: 280000 bytes
HTML transferred: 123000 bytes
Requests per second: 1123.04 [#/sec] (mean)
Time per request: 8.904 [ms] (mean)
Time per request: 0.890 [ms] (mean, across all concurrent requests)
Transfer rate: 307.08 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.1 0 1
Processing: 2 9 0.9 9 14
Waiting: 1 9 0.9 9 14
Total: 2 9 0.9 9 14
Percentage of the requests served within a certain time (ms)
50% 9
66% 9
75% 9
80% 9
90% 10
95% 10
98% 11
99% 11
100% 14 (longest request)
[root@foundation51 ~]# ab -c 10 -n 1000 http://172.25.51.1/memcache.php
This is ApacheBench, Version 2.3 <$Revision: 1430300 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking 172.25.51.1 (be patient)
Completed 100 requests
Completed 200 requests
Completed 300 requests
Completed 400 requests
Completed 500 requests
Completed 600 requests
Completed 700 requests
Completed 800 requests
Completed 900 requests
Completed 1000 requests
Finished 1000 requests
Server Software: nginx/
Server Hostname: 172.25.51.1
Server Port: 80
Document Path: /memcache.php
Document Length: 101 bytes
Concurrency Level: 10
Time taken for tests: 1.860 seconds
Complete requests: 1000
Failed requests: 0
Write errors: 0
Non-2xx responses: 1000
Total transferred: 316000 bytes
HTML transferred: 101000 bytes
Requests per second: 537.56 [#/sec] (mean)
Time per request: 18.603 [ms] (mean)
Time per request: 1.860 [ms] (mean, across all concurrent requests)
Transfer rate: 165.89 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 0 0 0.1 0 2
Processing: 2 18 3.1 19 29
Waiting: 2 18 3.1 18 29
Total: 2 19 3.1 19 29
Percentage of the requests served within a certain time (ms)
50% 19
66% 20
75% 20
80% 21
90% 22
95% 23
98% 25
99% 26
100% 29 (longest request)
六、Nginx 虚拟主机和 https 加密
1、配置虚拟主机
[root@server1 ~]# vim /usr/local/lnmp/nginx/conf/nginx.conf
117 server {
118 listen 80;
119 server_name www.test.org;
120
121 location / {
122 root /www1;
123 index index.html;
124 }
125 }
126
127 server {
128 listen 80;
129 server_name www.hello.org;
130
131 location / {
132 root /www2;
133 index index.html;
134 }
135 }
2、配置默认发布目录,默认发布文件
[root@server1 ~]# mkdir /www1
[root@server1 ~]# mkdir /www2
[root@server1 ~]# vim /www1/index.html
www.test.org
[root@server1 ~]# vim /www2/index.html
www.hello.org
3、调试,重新加载 nginx
[root@server1 ~]# nginx -t
nginx: the configuration file /usr/local/lnmp/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/lnmp/nginx/conf/nginx.conf test is successful
[root@server1 ~]# nginx -s reload
4、物理主机测试
[root@foundation51 ~]# vim /etc/hosts
172.25.51.1 server1 www.hello.org www.test.org
5、配置 https 加密
[root@server1 ~]# vim /usr/local/lnmp/nginx/conf/nginx.conf
98 server {
99 listen 443 ssl;
100 server_name www.test.org;
101
102 ssl_certificate cert.pem;
103 ssl_certificate_key cert.pem;
104
105 ssl_session_cache shared:SSL:1m;
106 ssl_session_timeout 5m;
107
108 ssl_ciphers HIGH:!aNULL:!MD5;
109 ssl_prefer_server_ciphers on;
110
111 location / {
112 root /www1;
113 index index.html index.htm;
114 }
115 }
生成cert.pem (key)文件
[root@server1 ~]# cd /etc/pki/tls/certs/
[root@server1 certs]# make cert.pem
[root@server1 certs]# mv cert.pem /usr/local/lnmp/nginx/conf/
[root@server1 certs]# nginx -t
[root@server1 certs]# nginx -s reload