博文参考 https://blog.csdn.net/faith306/article/details/78541974#1%E5%89%8D%E8%A8%80
https://blog.csdn.net/z13615480737/article/details/78906598
1. 前言:
centos7.4
php7.1.11+nginx1.15.2+mysql5.7
编译安装比较复杂,但是可以自定义安装路径,可以自定义安装配置库
2. 准备工作
2.1 创建文件夹
本文中所有文件放在/usr目录下,进入usr目录中 mkdir lnmp // php+nginx+mysql安装目录 mkdir lnmp/php // php安装目录 mkdir lnmp/nginx // nginx 安装目录 mkdir lnmp/mysql // mysql安装目录 mkdir lnmp/logs // 日志目录
mkdir origindatas // 安装包存放目录
mkdir lnmp/package // package目录用来存放安装过程中需要用到的编译后的库文件
2.2 安装make
yum -y install gcc automake autoconf libtool make
2.3 安装g++
yum install gcc gcc-c++ glibc
3. 安装Nginx
3.1 下载并解压pcre
在/usr/origindatas目录下执行
wget https://sourceforge.net/projects/pcre/files/pcre/8.41/pcre-8.41.tar.gz tar -zxvf pcre-8.41.tar.gz
3.2 下载并解压zlib
在/usr/origindatas目录下执行
wget https://sourceforge.net/projects/libpng/files/zlib/1.2.11/zlib-1.2.11.tar.gz tar –zxvf zlib-1.2.11.tar.gz
3.3 下载并解压openssl
// 同上
wget https://www.openssl.org/source/openssl-1.1.0b.tar.gz tar –zxvf openssl-1.1.0b.tar.gz
3.4 为nginx添加用户组
// nginx的进程需要以某一个用户的权限进行运行,为了服务器安全,一般指定一个普通用户作为nginx的运行角色,这里创建一个www用户作为nginx工作进程的用户,后续安装的PHP也以www用户做为工作进程用户
groupadd -r www useradd -r -g www www
3.5 下载并安装nginx
// 网站 http://nginx.org/
// 在/usr/origindatas目录下执行
wget http://nginx.org/download/nginx-1.12.2.tar.gz tar –zxvf nginx-1.12.2.tar.gz
完成了以上下载解压操作,接下来编译安装
// 进入解压后的nginx文件中,执行以下操作
./configure --prefix=/usr/lnmp/nginx/nginx-1.12.2 --sbin-path=/usr/lnmp/nginx/nginx-1.12.2/sbin/nginx --conf-path=/usr/lnmp/nginx/nginx-1.12.2/nginx.conf --pid-path=/usr/lnmp/nginx/nginx-1.12.2/nginx.pid --user=www --group=www --with-http_ssl_module --with-http_flv_module --with-http_mp4_module --with-http_stub_status_module --with-select_module --with-poll_module --error-log-path=/usr/lnmp/logs/nginx/error.log --http-log-path=/usr/lnmp/logs/nginx/access.log --with-pcre=/usr/origindatas/pcre-8.41 --with-zlib=/usr/origindatas/zlib-1.2.11 --with-openssl=/usr/origindatas/openssl-1.1.0b
// ./configure执行完成后执行
make
make install // 安装成功后便可在/usr/lnmp/nginx目录下看见nginx
关于./configure内容
--prefix=/usr/lnmp/nginx/nginx-1.15.2 // --prefix nginx安装在哪个路径下
--sbin-path=/usr/lnmp/nginx/nginx-1.15.2/sbin/nginx // 可执行文件存放路径
--conf-path=/usr/lnmp/nginx/nginx-1.15.2/nginx.conf // nginx的主配置文件存放路径
--pid-path=/usr/lnmp/nginx/nginx-1.15.2/nginx.pid // nginx.pid文件的存放路径,将存储的主进程的进程号
--user=www // 表示nginx工作进程的用户
--group=www //表示nginx工作进程的用户组
--with-http_ssl_module // 表示使用https协议模块。默认情况下,该模块没有被构建。建立并运行此模块的OpenSSL库是必需的
--with-http_flv_module
--with-http_mp4_module
--with-http_stub_status_module
--with-select_module // 表示启用或禁用构建一个模块来允许服务器使用select()方法
--with-poll_module // 表示启用或禁用构建一个模块来允许服务器使用poll()方法
--error-log-path=/usr/lnmp/logs/nginx/error.log // 表示nginx的主错误、警告、和诊断文件存放路径
--http-log-path=/usr/lnmp/logs/nginx/access.log // 表示nginx的主请求的HTTP服务器的日志文件的存放路径
--with-pcre=/usr/origindatas/pcre-8.41 // 表示pcre的源码路径,因为解压后的pcre存放目录
--with-zlib=/usr/origindatas/zlib-1.2.11 // 表示zlib的源码路径,这里因为解压后的zlib存放目录
--with-openssl=/usr/origindatas/openssl-1.1.0b // 表示openssl库的源码路径
3.6 配置nginx配置文件
打开配置文件
vi /usr/lnmp/nginx/nginx-1.12.2/nginx.conf
修改成如下
#user nobody; worker_processes 1; error_log /usr/lnmp/logs/nginx/error.log; // 错误日志路径 #error_log logs/error.log notice; #error_log logs/error.log info; pid /usr/lnmp/logs/nginx/nginx.pid; // pid文件路径 events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; #log_format main '$remote_addr - $remote_user [$time_local] "$request" ' # '$status $body_bytes_sent "$http_referer" ' # '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; gzip on; include /usr/lnmp/nginx/nginx-1.12.2/conf/vhosts/*.conf; // 引入配置了域名信息的文件注意路径 }
添加配置文件最后一行引入的域名文件
server { listen 80; server_name www.itryfirst.top; root /usr/webapps; index index.php index.html index.htm; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { expires 30d; } location ~ .*\.(js|css)?$ { expires 1h; }
#使其可以解析php文件
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
} }
完成后启动nginx
/usr/lnmp/nginx/nginx-1.12.2/sbin/nginx
如果启动报错如下
nginxnginx: [emerg] unknown directive " " in /usr/lnmp/nginx/nginx-1.15.2/conf/vhosts/try.conf:22
将这段代码删除,再从编辑器中复制进来,在保存重启即可!
查看nginx进程是否启动成功
ps aux | grep nginx
3.7 加入系统环境变量
vi /etc/profile
// 最后一行加入
export PATH=$PATH:/usr/lnmp/nginx/nginx-1.12.2/sbin
保存修改后,使用source命令重新加载配置文件
source /etc/profile
查看系统环境变量
echo $PATH
3.8 加入系统服务
执行命令打开文件
vim /etc/init.d/nginx
添加如下内容
#!/bin/bash # chkconfig: - 85 15 PATH=/usr/lnmp/nginx/nginx-1.12.2 // nginx安装路径 DESC="nginx daemon" NAME=nginx DAEMON=$PATH/sbin/$NAME CONFIGFILE=$PATH/$NAME.conf PIDFILE=$PATH/logs/$NAME.pid SCRIPTNAME=/etc/init.d/$NAME set -e [ -x "$DAEMON" ] || exit 0 do_start() { $DAEMON -c $CONFIGFILE || echo -n "nginx already running" } do_stop() { $DAEMON -s stop || echo -n "nginx not running" } do_reload() { $DAEMON -s reload || echo -n "nginx can't reload" } case "$1" in start) echo -n "Starting $DESC: $NAME" do_start echo "." ;; stop) echo -n "Stopping $DESC: $NAME" do_stop echo "." ;; reload|graceful) echo -n "Reloading $DESC configuration..." do_reload echo "." ;; restart) echo -n "Restarting $DESC: $NAME" do_stop do_start echo "." ;; *) echo "Usage: $SCRIPTNAME {start|stop|reload|restart}" > & 2 exit 3 ;; esac exit 0
保存完成后,赋予权限
chmod +x /etc/init.d/nginx
启动nginx
service nginx start
3.9 设置nginx开机自启
chkconfig --add nginx
chkconfig nginx on
4. 安装PHP
4.1 通过yum安装php需要的常用库
yum -y install libmcrypt-devel mhash-devel libxslt-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel libidn libidn-devel openssl openssl-devel
4.2 下载并安装php
// 网站 http://www.php.net/downloads.php
// 进入/usr/origindatas目录下执行
wget http://cn2.php.net/distributions/php-7.1.11.tar.gz tar –zxvf php-7.1.11.tar.gz
完成了下载和解压,接下来进行安装操作
// 进入加压的目录下,执行语句,注意修改前两个参数的路径
./configure --prefix=/usr/lnmp/php/php-7.1.11 --with-config-file-path=/usr/lnmp/php/php-7.1.11/etc --enable-fpm --with-mcrypt --enable-mbstring --enable-pdo --with-curl --disable-debug --disable-rpath --enable-inline-optimization --with-bz2 --with-zlib --enable-sockets --enable-sysvsem --enable-sysvshm --enable-pcntl --enable-mbregex --with-mhash --enable-zip --with-pcre-regex --with-mysqli --with-gd --with-jpeg-dir --with-freetype-dir --enable-calendar
// 继续执行
make
make install
4.3 修改配置文件
将官方提供的配置模板拷贝到配置参数(上面configure中第二个路径)中所指定的目录中
// php.ini文件根据自己的需要进行修改
cp /usr/origindatas/php-7.1.11/php.ini-production /usr/lnmp/php/php-7.1.11/etc/php.ini
4.4 设置php-fpm配置文件
// 依次执行下面语句
cd /usr/lnmp/php/php-7.1.11/etc cp php-fpm.conf.default php-fpm.conf cd /usr/lnmp/php/php-7.1.11/etc/php-fpm.d cp www.conf.default www.conf
修改php-fpm.conf文件(如果下面启动失败,就不要这个)
user = www group = www listen = 127.0.0.1:9000 pm.max_children = 100 pm.start_servers = 20 pm.min_spare_servers = 5 pm.max_spare_servers = 35
启动php-fpm
/usr/lnmp/php/php-7.1.11/sbin/php-fpm
查看是否启动成功
ps aux | grep php-fpm
4.5 加入系统环境变量
vi /etc/profile
// 最后一行加入
export PATH=$PATH:/usr/lnmp/php/php-7.1.11/bin // 注意此处路径修改
// 保存退出执行
source /etc/profile // 重新加载配置文件
4.6 加入系统服务
// 使用vi命令在/etc/init.d/目录下创建一个php-fpm文件
vi /etc/init.d/php-fpm
内容如下(注意路径修改)
#!/bin/bash # php-fpm startup script for the php-fpm # php-fpm version:7.1.11 # chkconfig: - 85 15 # description: php-fpm # processname: php-fpm # pidfile: /usr/lnmp/php/php-7.1.11/var/run/php-fpm.pid # config: /usr/lnmp/php/php-7.1.11/etc/php-fpm.conf php_command=/usr/lnmp/php/php-7.1.11/sbin/php-fom php_config=/usr/lnmp/php/php-7.1.11/etc/php-fpm.conf php_pid=/usr/lnmp/php/php-7.1.11/var/run/php-fpm.pid RETVAL=0 prog="php-fpm" #start function php_fpm_start() { /usr/lnmp/php/php-7.1.11/sbin/php-fpm } start(){ if [ -e $php_pid ] then echo "php-fpm already start..." exit 1 fi php_fpm_start } stop(){ if [ -e $php_pid ] then parent_pid=`cat $php_pid` all_pid=`ps -ef | grep php-fpm | awk '{if('$parent_pid' == $3){print $2}}'` for pid in $all_pid do kill $pid done kill $parent_pid fi exit 1 } restart(){ stop start } # See how we were called. case "$1" in start) start ;; stop) stop ;; restart) stop start ;; status) status $prog RETVAL=$? ;; *) echo $"Usage: $prog {start|stop|restart|status}" exit 1 esac exit $RETVAL
设置开机自启
chkconfig --add php-fpm
chkconfig php-fpm on
此时php还未安装openssl扩展,安装方法:https://www.cnblogs.com/cyclzdblog/p/9424686.html
5. mysql安装配置(使用yum安装)
官网教程:https://dev.mysql.com/doc/mysql-yum-repo-quick-guide/en/
5.1 安装mysql的repo源
进入/usr/origindatas目录下依次执行下面代码
wget http://repo.mysql.com/mysql57-community-release-el7-8.noarch.rpm
rpm -ivh mysql57-community-release-el7-8.noarch.rpm
yum -y install mysql-server
这样装环境变量配置都不用你管,装上直接启动就行。安装路径是默认的。
安装完成后
默认配置文件路径:
配置文件:/etc/my.cnf
日志文件:/var/log/mysqld.log
服务启动脚本:/usr/lib/systemd/system/mysqld.service
socket文件:/var/run/mysqld/mysqld.pid
5.2 配置my.cnf文件
vi /etc/my.cnf // 打开文件将下面内容复制进去,无需修改
[mysqld] # # Remove leading # and set to the amount of RAM for the most important data # cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%. # innodb_buffer_pool_size = 128M # # Remove leading # to turn on a very important data integrity option: logging # changes to the binary log between backups. # log_bin # # Remove leading # to set options mainly useful for reporting servers. # The server defaults are faster for transactions and fast SELECTs. # Adjust sizes as needed, experiment to find the optimal values. # join_buffer_size = 128M # sort_buffer_size = 2M # read_rnd_buffer_size = 2M datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock server_id = 1 expire_logs_days = 3 # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid
配置完成后启动mysql
service mysqld restart
5.3 连接mysql,修改初始密码等
安装完成后会生成一个复杂的初始密码,获取方式
grep "password" /var/log/mysqld.log
使用获取的密码连接mysql即可成功
修改密码
alter user 'root'@'localhost' identified by '123456';
如果报错如下
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
先执行
// 设置安全级别
set global validate_password_policy=0;
// 设置密码长度
set global validate_password_length=6;
然后在执行上面的修改密码的语句即可成功
最后刷新权限
flush privileges;
5.4 如果发现找不到密码,解决如下
vi /etc/my.cnf
打开文件最末尾加上下面语句,保存退出
skip-grant-tables // 取消密码登陆
重新启动mysql后就可以连接上,记住不需要加-p
use mysql update user set password=password("123456") where user="root"; // mysql 5.7的数据库没有了password字段 用的是authentication_string字段 update mysql.user set authentication_string=password('123456') where user='root' ; flush privileges;
修改密码之后将配置文件改回来即可
5.4 开启mysql远程连接访问权限
mysql -u root -p //输入密码进入mysql控制台 mysql>use mysql; mysql>update user set host = '%' where user = 'root'; //这个命令执行错误时可略过 mysql>flush privileges; mysql>select host, user from user; //检查‘%’ 是否插入到数据库中 mysql>quit