一、mysql源码编译安装
server1:
get mysql-boost-5.7.17.tar.gz
get cmake-2.8.12.2-4.el6.x86_64.rpm
tar zxf mysql-boost-5.7.17.tar.gz
yum install cmake-2.8.12.2-4.el6.x86_64.rpm -y
[root@server1 ~]# cd mysql-5.7.17/
安装依赖性
yum install gcc gcc-c++ ncurses-devel bison -y
可能出现的错误
具体看报错,不一定出现:rm -f CMakeCache.txt
开始编译
[root@server1 mysql-5.7.17]# 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 存储引擎
> -DDEFAULT_CHARSET=utf8 \ #使用 utf8 字符
> -DDEFAULT_COLLATION=utf8_general_ci \ #校验字符
> -DEXTRA_CHARSETS=all \ #安装所有扩展字符集
> -DWITH_BOOST=boost/boost_1_59_0/
make && make install
编辑配置文件
[root@server1 ~]# cd /usr/local/lnmp/mysql/
[root@server1 mysql]# rpm -qa|grep mysql
mysql-libs-5.1.71-1.el6.x86_64
[root@server1 mysql]# cd support-files/
[root@server1 support-files]# cp my-default.cnf /etc/my.cnf
cp: overwrite `/etc/my.cnf'? y
[root@server1 support-files]# 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 support-files]# file mysql.server
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
-rwxr-xr-x 1 root root 10916 Aug 5 11:21 /etc/init.d/mysqld
建立用户
cd ..
[root@server1 mysql]# groupadd -g 27 mysql
[root@server1 mysql]# useradd -u 27 -g 27 -M -d /usr/local/lnmp/mysql/data -s /sbin/nologin mysql
[root@server1 mysql]# id mysql
uid=27(mysql) gid=27(mysql) groups=27(mysql)
添加权限
[root@server1 mysql]# chown -R mysql.mysql .
[root@server1 ~]# vim .bash_profile
10 PATH=$PATH:$HOME/bin:/usr/local/lnmp/mysql/bin
[root@server1 ~]# source .bash_profile
数据库初始化
数据库初始化出现这种错误时:
2018-08-06T04:16:01.757570Z 0 [ERROR] --initialize specified but the data directory has files in it. Aborting.
2018-08-06T04:16:01.757589Z 0 [ERROR] Aborting
解决办法:
将data目录中的数据删除
[root@server1 mysql]# cd /usr/local/lnmp/mysql/data/
[root@server1 data]# ls
ib_buffer_pool ibdata1 ib_logfile0 ib_logfile1
[root@server1 data]# rm -fr *
更改目录权限
/etc/init.d/mysqld start
cd /usr/local/lnmp/mysql
chown root.root . -R
chown mysql data/ -R
mysql 安全设置
mysql_secure_installation
Enter password for user root: #将mysql初始化后的随机字符密码复制到这
New password:
Re-enter new password:
Press y|Y for Yes, any other key for No: n
Using existing password for root.
Change the password for root ? ((Press y|Y for Yes, any other key for No) : n
Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
登陆查看
mysql -p
mysql> show databases;
二、php源码安装
server1:
get php-5.6.35.tar.bz2
get re2c-0.13.5-1.el6.x86_64.rpm
get gd-devel-2.0.35-11.el6.x86_64.rpm
get libmcrypt-devel-2.5.8-9.el6.x86_64.rpm libmcrypt-2.5.8-9.el6.x86_64.rpm
解压包
tar jxf php-5.6.35.tar.bz2
解决依赖性
yum install -y libxml2-devel openssl-devel gmp-devel net-snmp-devel curl-devel
yum install -y gd-devel-2.0.35-11.el6.x86_64.rpm
yum install -y libmcrypt-devel-2.5.8-9.el6.x86_64.rpm libmcrypt-2.5.8-9.el6.x86_64.rpm
rpm -ivh re2c-0.13.5-1.el6.x86_64.rpm
开始编译
[root@server1 php-5.6.35]# ./configure --prefix=/usr/local/lnmp/php --with-config-file-path=/usr/local/lnmp/php/etc --with-mysql=mysqlnd --enable-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-mcrypt --with-mhash
[root@server1 php-5.6.35]# make && make install
[root@server1 php-5.6.35]# cd /usr/local/lnmp/php/etc
[root@server1 etc]# cp php-fpm.conf.default php-fpm.conf
[root@server1 ~]# cd php-5.6.35
[root@server1 php-5.6.35]# cp php.ini-production /usr/local/lnmp/php/etc/php.ini
[root@server1 ~]# cd /usr/local/lnmp/php/etc/
[root@server1 etc]# vim php.ini
将936行的注释取消,时间改为亚洲上海
933 [Date]
934 ; Defines the default timezone used by the date functions
935 ; http://php.net/date.timezone
936 date.timezone = Asia/Shanghai
[root@server1 etc]# vim php-fpm.conf
25行取消注释
25 pid = run/php-fpm.pid
建立用户
[root@server1 etc]# useradd -M -d /usr/local/lnmp/nginx -s /sbin/nologin nginx
[root@server1 etc]# id nginx
uid=500(nginx) gid=500(nginx) groups=500(nginx)
[root@server1 ~]# cd php-5.6.35/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
[root@server1 fpm]# /etc/init.d/php-fpm start
Starting php-fpm done
进程查看
ps ax
查看端口
netstat -antlp
tcp 0 0 127.0.0.1:9000 0.0.0.0:* LISTEN 4211/php-fpm
三、nginx源码编译
get nginx-1.10.1.tar.gz nginx-sticky-module-ng.tar.gz
tar zxf nginx-1.10.1.tar.gz
tar zxf nginx-sticky-module-ng.tar.gz
[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
178 # debug
179 #CFLAGS="$CFLAGS -g"
解决依赖性
yum install -y pcre-devel
开始编译
[root@server1 nginx-1.10.1]# ./configure --prefix=/usr/local/lnmp/nginx --with-http_ssl_module --with-http_stub_status_module --user=nginx --group=nginx
[root@server1 nginx-1.10.1]# make && make install
cd /usr/local/lnmp/nginx/conf
[root@server1 conf]# vim nginx.conf
13 worker_connections 65535;
45 index index.php index.html index.htm;
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 conf]# vim /etc/security/limits.conf
51 nginx - nofile 65536
[root@server1 ~]# vim .bash_profile
10 PATH=$PATH:$HOME/bin:/usr/local/lnmp/mysql/bin:/usr/local/lnmp/nginx/sbin
[root@server1 ~]# source .bash_profile
[root@server1 ~]# nginx -t
[root@server1 ~]# nginx
[root@server1 ~]# netstat -antlp
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 4828/nginx
检测
浏览器访问172.25.61.5,出现默认nginx页面
修改默认发布文件
[root@server1 ~]# cd /usr/local/lnmp/nginx/html/
[root@server1 html]# vim index.php
<?php
phpinfo()
?>
检测
浏览器访问172.25.61.5,出现php页面
四、搭建论坛
get Discuz_X3.2_SC_UTF8.zip
yum install unzip -y
unzip Discuz_X3.2_SC_UTF8.zip -d /usr/local/lnmp/nginx/html/
[root@server1 ~]# cd /usr/local/lnmp/nginx/html
[root@server1 html]# mv upload/ bbs
检测
浏览器访问输入172.25.61.5/bbs 访问论坛安装界面
安装论坛时出现以下情况时的解决办法:
1、当前状态全是X
解决方法:
[root@server1 ~]# cd /usr/local/lnmp/nginx/html/bbs/
[root@server1 bbs]# chmod 777 config/ data/ uc_server/ uc_client/ -R
2、数据库连接错误
No such file or directory
解决方法:
[root@server1 bbs]# cd /usr/local/lnmp/php/etc/
[root@server1 etc]# vim 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 etc]# /etc/init.d/php-fpm reload
Reload service php-fpm done
3、数据库连接错误
Permission denied
解决方法:
[root@server1 mysql]# cd /usr/local/lnmp/mysql/
[root@server1 mysql]# ll
drwxr-x--- 5 mysql root 4096 Aug 6 13:09 data
[root@server1 mysql]# chmod 755 data/
4、如果提示connection refused,那就是数据库没打开
解决方法:
[root@server1 install]# /etc/init.d/mysqld start
5、以管理员身份进入论坛后进入管理中心,
页面提示 Please delete install/index.php via FTP!
解决方法
[root@server1 data]# cd /usr/local/lnmp/nginx/html/bbs/install/
[root@server1 install]# rm -fr index.php
至此lnmp架构配置成功
五、添加memcache缓存
Memcache是一个高性能的分布式的内存对象缓存系统,通过在内存里维护一个统一的巨大的hash表,它能够用来存储各种格式的数据,包括图像、视频、文件以及数据库检索的结果等。简单的说就是将数据调用到内存中,然后从内存中读取,从而大大提高读取速度。
为什么会有memcache和memcached两种名称?其实Memcache是这个项目的名称,而memcached是它服务器端的主程序文件名。一个是项目名称,一个是主程序文件名。
memcache的安装
分为两个过程:memcache服务器端的安装和memcached客户端的安装。
所谓服务器端的安装就是在服务器(一般都是linux系统)上安装Memcache实现数据的存储。
所谓客户端的安装就是指php(或者其他程序,Memcache还有其他不错的api接口提供)去使用服务器端的Memcache提供的函数,需要php添加扩展。
tar zxf memcache-2.2.5.tgz
[root@server1 ~]# vim .bash_profile
10 PATH=$PATH:$HOME/bin:/usr/local/lnmp/mysql/bin:/usr/local/lnmp/nginx/sbin:/usr/local/lnmp/php/bin
[root@server1 ~]# source .bash_profile
创建一个预编译环境
[root@server1 ~]# cd memcache-2.2.5
[root@server1 memcache-2.2.5]# phpize
开始编译
./configure
make
make install
编译好后查看
[root@server1 html]# cd /usr/local/lnmp/php/lib/php/extensions/no-debug-non-zts-20131226/
ls
memcache.so opcache.a opcache.so
[root@server1 no-debug-non-zts-20131226]# php -m
[root@server1 no-debug-non-zts-20131226]# php -m |grep memcache ##
[root@server1 extensions]# cd /usr/local/lnmp/php/etc/
[root@server1 etc]# vim php.ini
873 extension=memcache.so #php扩展指向memcached的动态连接库文件
[root@server1 etc]# /etc/init.d/php-fpm reload
[root@server1 etc]# php -m |grep memcache
memcache
安装memcached服务器
yum install -y memcached
/etc/init.d/memcached start
netstat -antlp
tate PID/Program name
tcp 0 0 0.0.0.0:11211 0.0.0.0:* LISTEN 7465/memcached
tcp 0 0 0.0.0.0:80 0.0.0.0:* L
cd memcache-2.2.5
[root@server1 memcache-2.2.5]# cp memcache.php example.php /usr/local/lnmp/nginx/html/ #example.php是php开发的用来往memcache中添加数据的程序页
[root@server1 memcache-2.2.5]# rpm -q memcached
memcached-1.4.4-3.el6.x86_64
[root@server1 memcache-2.2.5]# netstat -antlp |grep :11211
tcp 0 0 0.0.0.0:11211 0.0.0.0:* LISTEN 10645/memcached
tcp 0 0 :::11211 :::* LISTEN 10645/memcached
[root@server1 memcache-2.2.5]# cd /usr/local/lnmp/nginx/html/
[root@server1 html]# vim memcache.php #查看memcache的缓存页面
23 define('ADMIN_PASSWORD','westos'); // Admin Password #登陆界面的密码
28 $MEMCACHE_SERVERS[] = 'localhost:11211'; // add more as an array #指定memcache服务器
29 #$MEMCACHE_SERVERS[] = 'mymemcache-server2:11211'; // add more as an array
浏览器访问
http://172.25.61.5/example.php
http://172.25.61.5/memcache.php
输入密码后
物理机:
此命令意思是开启10个并发连接访问http://172.25.61.5/index.php来处理1000个请求
ab -c 10 -n 1000 http://172.25.61.5/index.php
ab -c 10 -n 1000 http://172.25.61.5/example.php
六、openresty
OpenResty® 是一个基于 Nginx 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。
OpenResty® 通过汇聚各种设计精良的 Nginx 模块(主要由 OpenResty 团队自主开发),从而将 Nginx 有效地变成一个强大的通用 Web 应用平台。这样,Web 开发人员和系统工程师可以使用 Lua 脚本语言调动 Nginx 支持的各种 C 以及 Lua 模块,快速构造出足以胜任 10K 乃至 1000K 以上单机并发连接的高性能 Web 应用系统。
OpenResty® 的目标是让你的Web服务直接跑在 Nginx 服务内部,充分利用 Nginx 的非阻塞 I/O 模型,不仅仅对 HTTP 客户端请求,甚至于对远程后端诸如 MySQL、PostgreSQL、Memcached 以及 Redis 等都进行一致的高性能响应。
get openresty-1.13.6.1.tar.gz
tar zxf openresty-1.13.6.1.tar.gz
关掉原来的nginx
nginx -s stop
开始编译
cd openresty-1.13.6.1
[root@server1 openresty-1.13.6.1]# ./configure --prefix=/usr/local/lnmp/openresty --with-http_ssl_module --with-http_stub_status_module --user=nginx --group=nginx --with-threads --with-file-aio
gmake
gmake install
cd /usr/local/lnmp/openresty/nginx/conf/
[root@server5 conf]# vim nginx.conf
13 worker_connections 65535;
17 http {
18
19 upstream memcache {
20 server localhost:11211;
21 keepalive 512; #保持512个不立即关闭的连接用于提升性能
22 }
23
53
54 location /memc {
55 internal; #将/memc设为internal表示只接受内部访问,不接收外部http请求,这是为了安全考虑,当然如果需要通过http协议开放外部访问,可以去掉internal然后使用deny和allow指令控制权限
56 memc_connect_timeout 100ms;
57 memc_send_timeout 100ms;
58 memc_read_timeout 100ms;
59 set $memc_key $query_string; #$memc_key这个变量,它表示以什么作为key,这里我们直接使用Nginx内置的$query_string来作为key
60 set $memc_exptime 300; #$memc_exptime表示缓存失效时间,以秒记。
61 memc_pass memcache; #指向upstream模块
62 }
63
81 location ~ \.php$ { #所有请求都通过请求这个location来操作memcache,memc-nginx-module存取memcache是基于http method语义的,使用http的GET方法表示get、PUT方法表示set、DELETE方法表示delete。
82 set $key $uri$args; #用$uri和$args等Nginx内置变量设定缓存key规则
83 srcache_fetch GET /memc $key;
84 srcache_store PUT /memc $key; #srcache_fetch_skip和srcache_fetch_skip,这两个指令接受一个参数,当参数已定义且非0时,则进行相应操作,否则不进行。
85 root html;
86 fastcgi_pass 127.0.0.1:9000;
87 fastcgi_index index.php;
88 # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name ;
89 include fastcgi.conf;
90 }
91
[root@server1 conf]# /usr/local/lnmp/openresty/nginx/sbin/nginx -t
[root@server1 conf]# /usr/local/lnmp/openresty/nginx/sbin/nginx
[root@server1 conf]# cd ..
[root@server1 nginx]# cd html/
[root@server1 html]# cp /usr/local/lnmp/nginx/html/example.php .
[root@server1 html]# cp /usr/local/lnmp/nginx/html/index.php .
物理机检测
ab -c 10 -n 1000 http://172.25.61.5/index.php
ab -c 10 -n 1000 http://172.25.61.5/example.php