本文中Linux
命令使用的大部分是绝对路径(若没有前面有相应的目录切换命令)安装时可以不考虑路径问题
- 腾讯云Centos7
- 2G内存
- 20G硬盘
源码存放目录:\usr\src\
软件安装目录:\usr\local\软件名称
这里需要说明的是源码存放源代码的位置,安装过程可以指定,软件运行时跑的是软件安装的代码
相应的最新的源码包可以在下列网址中找到
ngnix
http://nginx.org/download/
mysql
https://www.mysql.com/downloads/
php
http://php.net/downloads.php
cmake(MySQL编译工具)
https://cmake.org/download/
boost(MySQL编译工具)
http://nchc.dl.sourceforge.net/project/boost/boost/1.59.0/boost_1_59_0.tar.gz
编译工具及库文件(yum
安装)
yum install -y apr* autoconf automake bison bzip2 bzip2* cloog-ppl compat* cpp curl curl-devel fontconfig fontconfig-devel freetype freetype* freetype-devel gcc gcc-c++ gtk+-devel gd gettext gettext-devel glibc kernel kernel-headers keyutils keyutils-libs-devel krb5-devel libcom_err-devel libpng libpng-devel libjpeg* libsepol-devel libselinux-devel libstdc++-devel libtool* libgomp libxml2 libxml2-devel libXpm* libxml* libtiff libtiff* make mpfr ncurses* ntp openssl openssl-devel patch pcre-devel perl php-common php-gd policycoreutils telnet t1lib t1lib* nasm nasm* wget zlib-develyum install -y apr* autoconf automake bison bzip2 bzip2* cloog-ppl compat* cpp curl curl-devel fontconfig fontconfig-devel freetype freetype* freetype-devel gcc gcc-c++ gtk+-devel gd gettext gettext-devel glibc kernel kernel-headers keyutils keyutils-libs-devel krb5-devel libcom_err-devel libpng libpng-devel libjpeg* libsepol-devel libselinux-devel libstdc++-devel libtool* libgomp libxml2 libxml2-devel libXpm* libxml* libtiff libtiff* make mpfr ncurses* ntp openssl openssl-devel patch pcre-devel perl php-common php-gd policycoreutils telnet t1lib t1lib* nasm nasm* wget zlib-devel
MySQL编译安装
前提工作
Cmake编译安装
创建软件存放目录
mkdir -p /usr/local/cmake
编译安装
tar -xzvf cmake-3.8.0.tar.gz
cd cmake-3.8.0/
./configure --prefix=/usr/local/cmake
make && make install
echo 'export PATH=$PATH:/usr/local/cmake/bin' >> /etc/profile
source /etc/profile
Boost编译安装
tar xzvf boost_1_59_0.tar.gz
cd boost_1_59_0/
./bootstrap.sh
./b2 install
需要说明的是,这里Boost
的安装可以不指定目录(不进行相关目录的创建),一些配置参数可以通过./b2 --help
命令看到
这里说明一下,默认存放位置是/usr/local/
下;库文件存放在/usr/local/bin
;头文件存放到/usr/local/include
MySQL用户及权限的配置
创建MySQL用户和用户组
groupadd mysql
useradd -g mysql mysql -s /bin/false
创建软件存放目录
mkdir -p /usr/local/mysql
MySQL数据存放目录
mkdir -p /var/mysql/data
创建日志存放目录
mkdir -p /usr/local/mysql/log
对数据存放目录授予权限
chown -R mysql:mysql /var/mysql/
对日志目录授予权限
chown -R mysql:mysql /usr/local/mysql/log
开始真正的MySQL的编译安装
tar -zxvf mysql-boost-5.7.18.tar.gz
cd mysql-5.7.18
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
-DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DMYSQL_DATADIR=/var/mysql/data\
-DMYSQL_TCP_PORT=3306\
-DENABLE_DOWNLOADS=1
make && make install
Cmake相关参数说明
选项 | 含义 |
---|---|
DCMAKE_INSTALL_PREFIX | 安装目录 |
DMYSQL_UNIX_ADDR | sock文件路径 |
DDEFAULT_CHARSET | 默认字符集 |
DWITH_INNOBASE_STORAGE_ENGINE | 安装INNODB |
DWITH_ARCHIVE_STORAGE_ENGINE | 存储引擎可用值 |
DWITH_BLACKHOLE_STORAGE_ENGINE | 存储引擎可用值 |
DMYSQL_DATADIR | 设置MySQL数据存放目录 |
DMYSQL_TCP_PORT | MySQL监听端口 |
其中MyISAM,MERGE,MEMORYMERGE,CSV是默认编译生成的不需要明确指定
更多的参数含义可以参考MySQL官网文章
需要注意的是5.7版本的软件安装目录与之前版本不太一样,具体介绍
目录 | 目录内容 |
---|---|
bin | MySQL服务端,客户端可执行文件 |
docs | MySQL文档格式信息 |
include | 包含的头文件 |
lib | 库文件 |
man | MySQL手册信息 |
mysql-test | MySQL测试文件 |
share | 支持文件 |
support-files | MySQL启动脚本 |
MySQL服务开启与配置
创建MySQL配置文件
cd /usr/local/mysql
vim my.cnf
将如下配置项写入my.cnf中(这里需要说明的是MySQL 5.7.18
之后安装目录中就没有my.cnf)
[mysqld]
basedir=/usr/local/mysql
datadir=/var/mysql/data
port=3306
socket=/usr/local/mysql/tmp/mysql.sock
log-error=/usr/local/mysql/log/mysqld.log
tmpdir=/tmp
max_allowed_packet=32M
#bind-address=127.0.0.1
[client]
port=3306
socket=/usr/local/mysql/tmp/mysql.sock
default-character-set=UTF8
[manager]
port=3306
socket=/usr/local/mysql/tmp/mysql.sock
pid-file=/usr/local/mysql/tmp/manager.pid
default-mysqld-path=/usr/local/mysql/bin/mysqld.bin
开启MySQL和进行设置
cd /usr/local/mysql/bin
./mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/var/mysql/data
./mysql_ssl_rsa_setup --datadir=/var/mysql/data
./mysqld_safe --user=mysql &
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
/etc/init.d/mysqld start
需要注意的是在执行完./mysqld --initialize
命令后会分配一个默认的密码在日志文件中,查看密码
cat /usr/local/mysql/log/mysqld.log
详细选项参数说明可以使用如下命令
./mysqld --verbose --help
也可以查阅官网MySQL初始化文档
修改root密码
mysql -u root -p密码
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpass');
如果需要设置MySQL了可以远程连接,可以进行如下设置
mysql -uroot -p密码
GRANT ALL ON *.* TO 'root'@'%' IDENTIFIED BY '密码' WITH GRANT OPTION;
FLUSH PRIVILEGES;
这里值得注意的是配置远程登录首先需要注释掉配置文件中bind-address=ip
这句话,才可以通过设置表权限进行远程登录的控制
设置环境变量方便使用SQL
命令
echo 'export PATH = $PATH:/usr/local/mysql/bin'
安装MySQL时遇到的错误
错误一
make[2]: *** [unittest/gunit/CMakeFiles/merge_small_tests-t.dir/merge_small_tests.cc.o] Error 4
make[1]: *** [unittest/gunit/CMakeFiles/merge_small_tests-t.dir/all] Error 2
make: *** [all] Error 2
错误产生原因:swap
分区不够
解决办法:
[root@VM_6_37_centos ~]# dd if=/dev/zero of=/swapfile bs=1k count=2048000
[root@VM_6_37_centos ~]# mkswap /swapfile
[root@VM_6_37_centos ~]# swapon /swapfile[root@web_1 ~]# dd if=/dev/zero of=/swapfile bs=1k count=2048000
[root@VM_6_37_centos ~]# mkswap /swapfile
[root@VM_6_37_centos ~]# swapon /swapfile
错误二
Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
错误产生原因:没有启动MySQL
解决办法:开启MySQL
/usr/local/mysql/support-files/mysql.server start
错误三
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
错误产生原因:密码错误
解决办法:查看日志文件,找到初始密码进行登录(日志文件目录在配置文件制定)
cat /usr/local/mysql/log/mysqld.log
这里需要说明,安装启动MySQL遇到错误提示可能是相同的,我们可以根据自己的情况进行查明
Nginx编译安装前提工作
创建用户及用户组
groupadd www
useradd -g www www -s /bin/bash/false
编译安装Ngnix
cd /usr/src/
tar -zxvf nginx-1.12.0.tar.gz
cd nginx-1.12.0/
./configure --prefix=/usr/local/ngnix --user=www --group=www --with-http_stub_status_module --with_http_ssl_module --with-http_gzip_static_module --with-threads
make && make install
./configure
选项参数可以通过./configure --help
查看
可以查阅官网文档
创建网站根目录及Ngnix配置
创建网站根目录并修改用户权限
mkdir /var/www
chown www:www /var/www
进入配置文件目录cd /usr/local/ngnix/conf/
cd /usr/local/ngnix/conf/ngnix.conf
vim ngnix.conf
将网站的根目录修改为/var/www
vim /usr/local/ngnix/cong/ngnix.conf
#在http的server中修改localtion的root属性
http{
server{
localtion / {
root /var/www
}
}
}
更多的配置项可以参考官网文档
启动Ngnix
启动Ngnix
/usr/local/ngnix/sbin/ngnix
需要说明的是Ngnix
有相应的选项参数,可以通过ngnix -h
进行查看
Usage: nginx [-?hvVtTq] [-s signal] [-c filename] [-p prefix] [-g directives]
Options:
-?,-h : this help
-v : show version and exit
-V : show version and configure options then exit
-t : test configuration and exit
-T : test configuration, dump it and exit
-q : suppress non-error messages during configuration testing
-s signal : send signal to a master process: stop, quit, reopen, reload
-p prefix : set prefix path (default: /usr/local/ngnix/)
-c filename : set configuration file (default: conf/nginx.conf)
-g directives : set global directives out of configuration file
值得注意的是-s
选项的参数,有如下四种
名称 | 含义 |
---|---|
stop | 快速关掉ngnix进程 |
quit | 优雅关掉ngnix进程即等待其它请求结束后在关闭ngnix进程 |
reload | 重新加载配置文件 |
reopen | 重新打开日志文件 |
到此ngnix
安装结束
编译安装
cd /usr/src
tar -zxvf php-7.1.4.tar.gz
cd php-7.1.4
./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc --with-mysqli=/usr/local/mysql/bin/mysql_config --with-mysql-sock=/tmp/mysql.sock --with-pdo-mysql=/usr/local/mysql --with-iconv --enable-libxml --enable-xml --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --enable-opcache --enable-mbregex --enable-fpm --enable-mbstring --enable-ftp --enable-gd-native-ttf --with-openssl --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --without-pear --with-gettext --enable-session --with-mcrypt --with-curl --enable-ctype --enable-mysqlnd
make && make install
值得注意的是:./configure
后面的选项可以通过./configure --help
命令进行详细查看,需要注意的是php-fpm
模块时必须安装的
PHP相关配置
从编译后的源码包中复制配置文件到安装目录
cp /usr/src/php-7.1.4/php.ini-production /usr/local/php/etc/php.ini
编辑php-fpm
的配置文件
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf
vim /usr/local/php/etc/php-fpm.conf
#取消前面的分号
pid = run/php-fpm.pid
cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf
#改变用户组及用户
user = www
group = www
将php-fpm
启动脚本加/etc/init.d/
中并设置执行权限
cp /usr/src/php-7.1.4/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
chmod 755 /etc/init.d/php-fpm
启动php-fpm
/etc/init.d/php-fpm start
配置Ngnix支持PHP
编辑Ngnix
配置文件ngnix.conf
取消如下显示内容的注释
vim /usr/local/ngnix/conf/ngnix.conf
http{
server{
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
location ~ \.php$ {
root /var/www;#修改网站根目录
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;#注意这行需要修改
include fastcgi_params;
}
}
}
重启php-fpm及ngnix
/etc/init.d/php-fpm restart
/usr/local/ngnix/sbin/ngnix -s reload
到此安装完毕
安装测试在浏览器中输入相应的IP地址
参考文章及文档
MYSQL官方文档
NGNIX官方文档
PHP官方文档
LNMP平台搭建
其他
NINGX启动脚本
如果觉得每次到ngnix
的sbin
目录下进行服务器管理操作比较麻烦可以将如下的ngnix
启动脚本加到/etc/init.d/
目录下
脚本代码
#!/bin/sh
#
# nginx - this script starts and stops the nginx daemin
#
# chkconfig: - 85 15
# description: Nginx is an HTTP(S) server, HTTP(S) reverse \
# proxy and IMAP/POP3 proxy server
# processname: nginx
# config: /usr/local/nginx/conf/nginx.conf
# pidfile: /usr/local/nginx/logs/nginx.pid
# Source function library.
. /etc/rc.d/init.d/functions
# Source networking configuration.
. /etc/sysconfig/network
# Check that networking is up.
[ "$NETWORKING" = "no" ] && exit 0
nginx="/usr/local/nginx/sbin/nginx"
prog=$(basename $nginx)
NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf"
lockfile=/var/lock/subsys/nginx
start() {
[ -x $nginx ] || exit 5
[ -f $NGINX_CONF_FILE ] || exit 6
echo -n $"Starting $prog: "
daemon $nginx -c $NGINX_CONF_FILE
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval
}
stop() {
echo -n $"Stopping $prog: "
killproc $prog -QUIT
retval=$?
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
}
restart() {
configtest || return $?
stop
start
}
reload() {
configtest || return $?
echo -n $"Reloading $prog: "
killproc $nginx -HUP
RETVAL=$?
echo
}
force_reload() {
restart
}
configtest() {
$nginx -t -c $NGINX_CONF_FILE
}
rh_status() {
status $prog
}
rh_status_q() {
rh_status >/dev/null 2>&1
}
case "$1" in
start)
rh_status_q && exit 0
$1
;;
stop)
rh_status_q || exit 0
$1
;;
restart|configtest)
$1
;;
reload)
rh_status_q || exit 7
$1
;;
force-reload)
force_reload
;;
status)
rh_status
;;
condrestart|try-restart)
rh_status_q || exit 0
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
exit 2
esac
具体操作
vim /etc/init.d/ngnix
#将上述代码复制进去,之后进行权限设置
chmod 755 /etc/init.d/ngnix