lnmp环境 (centos7+nginx+MySQL5.7.9+PHP7)

安装nginx

首先更新系统软件

1
# yum update

安装

  1. 安装nginx源

    1
    # yum localinstall http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
  2. 安装nginx

    1
    yum install nginx
  3. 启动nginx

    1
    2
    # service nginx start
    Redirecting to /bin/systemctl start nginx.service
  4. 访问http://你的ip/

配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
vim /etc/nginx/conf.d/service.conf

# api-doc.xxx.com
server {
listen 80; #默认监听 80 端口
server_name api-doc.xxx.com; #配置域名或者公网 ip
location / {
proxy_pass http://127.0.0.1:4000;
}
}

# api-doc.xxx.com
server {
listen 80;
server_name api-doc.xxx.com;

location / {
root /data/web/blackuser-api-doc/_book;
index index.html index.htm;
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}

location ~ /\.ht {
deny all;
}
}

# admin.xxx.com
server{
listen 80;
server_name admin.xxx.com;
root /data/web/xxx/backend/web; # 该项要修改为你准备存放相关网页的路径
location / {
index index.php index.html index.htm;
#如果请求既不是一个文件,也不是一个目录,则执行一下重写规则
if (!-e $request_filename)
{
#地址作为将参数rewrite到index.php上。
rewrite ^/(.*)$ /index.php/$1;
#若是子目录则使用下面这句,将subdir改成目录名称即可。
#rewrite ^/subdir/(.*)$ /subdir/index.php/$1;
}
#deny all;
}
#proxy the php scripts to php-fpm
location ~ \.php {
include fastcgi_params;
##pathinfo支持start
#定义变量 $path_info ,用于存放pathinfo信息
set $path_info "";
#定义变量 $real_script_name,用于存放真实地址
set $real_script_name $fastcgi_script_name;
#如果地址与引号内的正则表达式匹配
if ($fastcgi_script_name ~ "^(.+?\.php)(/.+)$") {
#将文件地址赋值给变量 $real_script_name
set $real_script_name $1;
#将文件地址后的参数赋值给变量 $path_info
set $path_info $2;
}
#配置fastcgi的一些参数
fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
fastcgi_param SCRIPT_NAME $real_script_name;
fastcgi_param PATH_INFO $path_info;
###pathinfo支持end
fastcgi_intercept_errors on;
fastcgi_pass 127.0.0.1:9000;
}

location ^~ /data/runtime {
return 404;
}

location ^~ /application {
return 404;
}

location ^~ /simplewind {
return 404;
}
}

安装MySQL5.7.*

安裝

  1. 安装mysql源

    1
    # yum localinstall  http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm
  2. 安装mysql

    1
    yum install mysql-community-server
  3. 安装mysql的开发包,以后会有用

    1
    yum install mysql-community-devel
  4. 启动mysql

    1
    service mysqld start
  5. 查看mysql启动状态

    1
    2
    3
    4
    # service mysqld status
    出现pid

    证明启动成功
  6. 获取mysql默认生成的密码

    1
    2
    # grep 'temporary password' /var/log/mysqld.log
    选中的就是密码。
  7. 换成自己的密码

    1
    2
    3
    4
    5
    6
    7
    # mysql -uroot -p
    mysql> set global validate_password_policy=0; # 默认是1,即MEDIUM,所以刚开始设置的密码必须符合长度,且必须含有数字,小写或大写字母,特殊字符。有时候,只是为了自己测试,不想密码设置得那么复杂,譬如说,我只想设置root的密码为123456。
    mysql> set global validate_password_length=1; # validate_password_number_count指定了密码中数据的长度,validate_password_special_char_count指定了密码中特殊字符的长度,validate_password_mixed_case_count指定了密码中大小字母的长度。这些参数,默认值均为1,所以validate_password_length最小值为4,如果你显性指定validate_password_length的值小于4,尽管不会报错,但validate_password_length的值将设为4。
    mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPasdfs4!';
    mysql> quit;

    # mysql -uroot -p

编译安装php7.0.1

安装

  1. 下载php7源码包

    1
    # cd /root & wget -O php7.tar.gz http://cn2.php.net/get/php-7.1.2.tar.gz/from/this/mirror
  2. 解压源码包

    1
    # tar -xvf php7.tar.gz
  3. 进入目录

    1
    # cd php-7.0.1
  4. 安装php依赖包 

    1
    # yum install libxml2 libxml2-devel openssl openssl-devel bzip2 bzip2-devel libcurl libcurl-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel gmp gmp-devel libmcrypt libmcrypt-devel readline readline-devel libxslt libxslt-devel
  5. 编译配置,这里如果上一步的某些依赖包没有安装好,就会遇到很多configure error,我们一一解决,安装上相关软件开发包就可以

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    # ./configure \
    --prefix=/usr/local/php \
    --with-config-file-path=/etc \
    --enable-fpm \
    --with-fpm-user=www \
    --with-fpm-group=www \
    --enable-inline-optimization \
    --disable-debug \
    --disable-rpath \
    --enable-shared \
    --enable-soap \
    --with-libxml-dir \
    --with-xmlrpc \
    --with-openssl \
    --with-mcrypt \
    --with-mhash \
    --with-pcre-regex \
    --with-sqlite3 \
    --with-zlib \
    --enable-bcmath \
    --with-iconv \
    --with-bz2 \
    --enable-calendar \
    --with-curl \
    --with-cdb \
    --enable-dom \
    --enable-exif \
    --enable-fileinfo \
    --enable-filter \
    --with-pcre-dir \
    --enable-ftp \
    --with-gd \
    --with-openssl-dir \
    --with-jpeg-dir \
    --with-png-dir \
    --with-zlib-dir \
    --with-freetype-dir \
    --enable-gd-native-ttf \
    --enable-gd-jis-conv \
    --with-gettext \
    --with-gmp \
    --with-mhash \
    --enable-json \
    --enable-mbstring \
    --enable-mbregex \
    --enable-mbregex-backtrack \
    --with-libmbfl \
    --with-onig \
    --enable-pdo \
    --with-mysqli=mysqlnd \
    --with-pdo-mysql=mysqlnd \
    --with-zlib-dir \
    --with-pdo-sqlite \
    --with-readline \
    --enable-session \
    --enable-shmop \
    --enable-simplexml \
    --enable-sockets \
    --enable-sysvmsg \
    --enable-sysvsem \
    --enable-sysvshm \
    --enable-wddx \
    --with-libxml-dir \
    --with-xsl \
    --enable-zip \
    --enable-mysqlnd-compression-support \
    --with-pear \
    --enable-opcache
  6. 编译与安装

    1
    # make && make install
  7. 添加 PHP 命令到环境变量

    1
    2
    3
    4
    5
    6
    7
    8
    9
    # vim /etc/profile

    在末尾加入

    PATH=$PATH:/usr/local/php/bin
    export PATH

    要使改动立即生效执行
    # source /etc/profile
  8. 查看环境变量

    1
    2
    # echo $PATH
    # php -v

配置

  1. 配置php-fpm

    1
    2
    3
    4
    5
    6
    # cp php.ini-production /etc/php.ini
    # cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf

    # cp /usr/local/php/etc/php-fpm.d/www.conf.default /usr/local/php/etc/php-fpm.d/www.conf
    # cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
    # chmod +x /etc/init.d/php-fpm
  2. 启动php-fpm

    1
    # /etc/init.d/php-fpm start

异常处理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
configure error:

1.configure: error: xml2-config not found. Please check your libxml2 installation.

解决:

# yum install libxml2 libxml2-devel</span>


2.configure: error: Cannot find OpenSSL's <evp.h>

解决:

# yum install openssl openssl-devel</span>


3.configure: error: Please reinstall the BZip2 distribution

解决:

# yum install bzip2 bzip2-devel</span>


4.configure: error: Please reinstall the libcurl distribution - easy.h should be in <curl-dir>/include/curl/

解决:

# yum install libcurl libcurl-devel</span>


5.If configure fails try --with-webp-dir=<DIR> configure: error: jpeglib.h not found.



解决:

# yum install libjpeg libjpeg-devel</span>

6.If configure fails try --with-webp-dir=<DIR>

checking for jpeg_read_header in -ljpeg... yes

configure: error: png.h not found.

解决:

# yum install libpng libpng-devel</span>


7.If configure fails try --with-webp-dir=<DIR>

checking for jpeg_read_header in -ljpeg... yes

checking for png_write_image in -lpng... yes

If configure fails try --with-xpm-dir=<DIR>

configure: error: freetype-config not found.

解决:

# yum install freetype freetype-devel</span>
8.configure: error: Unable to locate gmp.h

解决:

# yum install gmp gmp-devel</span>
9.configure: error: mcrypt.h not found. Please reinstall libmcrypt.

解决:

# yum install libmcrypt libmcrypt-devel

10.configure: error: Please reinstall readline - I cannot find readline.h

解决:

# yum install readline readline-devel</span>
11.configure: error: xslt-config not found. Please reinstall the libxslt >= 1.1.0 distribution

解决:

# yum install libxslt libxslt-devel</span>

修改服务运行用户

修改nginx的运行角色

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
cd /etc/nginx
sudo vi nginx.conf
# 头部是这样
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

# 修改为
user test;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

#重启nginx
sudo service nginx restart

修改php的运行角色

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
cd /etc/php/7.0/fpm/pool.d/
sudo vi www.conf
# 找到
user = www-data
group = www-data

# 改为
user = test
group = test

cd /run/php/
ls -al
# 这个目录下面有两个文件
# php7.0-fpm.pid和php7.0-fpm.sock
# 修改这两个文件的权限
sudo chown test:test php7.0-fpm.pid
sudo chown test:test php7.0-fpm.sock

# 重启php-fpm
sudo service php7-fpm restart

test用户是杜撰出来的根据自己的当前用户修改

重启服务

1
2
service nginx restart
service php-fpm restart

配置服务开启启动

开机自启动nginx,php-fpm(其他服务类似)
centos 7以上是用Systemd进行系统初始化的,Systemd 是 Linux 系统中最新的初始化系统(init),它主要的设计目标是克服 sysvinit 固有的缺点,提高系统的启动速度。
Systemd服务文件以.service结尾,比如现在要建立nginx为开机启动,如果用yum install命令安装的,yum命令会自动创建nginx.service文件,直接用命令systemcel enable nginx.service设置开机启动即可。

1
systemcel enable nginx.service

源码安装的手动建立nginx.service服务文件
在系统服务目录里创建nginx.service文件
vi /lib/systemd/system/nginx.service

写入以下内容(路径改成自己的)

1
2
3
4
5
6
7
8
9
10
11
[Unit]
Description=nginx
After=network.target
[Service]
Type=forking
ExecStart=/www/lnmp/nginx/sbin/nginx -c /www/lnmp/nginx/conf/nginx.conf
ExecReload=/www/lnmp/nginx/sbin/nginx -s reload
ExecStop=/www/lnmp/nginx/sbin/nginx -s quit
PrivateTmp=true
[Install]
WantedBy=multi-user.target

在系统服务目录里创建php-fpm.service文件
vi /lib/systemd/system/php-fpm.service

写入以下内容(路径改成自己的)

1
2
3
4
5
6
7
8
9
[Unit]
Description=php-fpm
After=network.target
[Service]
Type=forking
ExecStart=/www/lnmp/php/sbin/php-fpm
PrivateTmp=true
[Install]
WantedBy=multi-user.target

Description:描述服务
After:描述服务类别
[Service]服务运行参数的设置
Type=forking是后台运行的形式
ExecStart为服务的具体运行命令
ExecReload为重启命令
ExecStop为停止命令
PrivateTmp=True表示给服务分配独立的临时空间
注意:[Service]的启动、重启、停止命令全部要求使用绝对路径
[Install]运行级别下服务安装的相关设置,可设置为多用户,即系统运行级别为3
测试并加入开机自启
先关闭nginx,php-fpm
使用以下命令开启
systemctl start nginx.service #如果服务是开启状态,使用此命令会启动失败。
systemctl start php-fpm.service

开启成功,将服务加入开机自启

1
2
systemctl enable nginx.service                #注意后面不能跟空格
systemctl enable php-fpm.service

重启服务器,查看是否启动

1
2
3
shutdown -r now        #重启

systemctl list-units --type=service #查看运行的服务

其他命令

1
2
3
4
5
6
systemctl start nginx.service              #启动nginx服务
systemctl enable nginx.service #设置开机自启动
systemctl disable nginx.service #停止开机自启动
systemctl status nginx.service #查看服务当前状态
systemctl restart nginx.service  #重新启动服务
systemctl list-units --type=service #查看所有已启动的服务