手记

源码编译安装LAMP(详细说明)

文章说明

本文中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服务开启与配置

创建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安装结束

PHP7.1.4的编译安装

编译安装

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启动脚本

如果觉得每次到ngnixsbin目录下进行服务器管理操作比较麻烦可以将如下的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
5人推荐
随时随地看视频
慕课网APP