ubuntu下安装PHP,MySql,Nginx过程

一、不采用源码安装

1、找到ubuntu软件源文件,调整为国内镜像,先更新ubuntu软件源

suncy@ubuntu:~$ cd /etc/apt

suncy@ubuntu:/etc/apt$ sudo cp sources.list sources.list.bak (备份默认软件源数据)

suncy@ubuntu:/etc/apt$ sudo vim sources.list (如果没有vim,使用vi)

将选择的国内镜像源内容替换掉,执行

sudo apt-get update

2、不采用源码安装php

sudo apt-get install php7.0 (此时使用Tab查看可安装的软件)




mvn pom 镜像配置_mvn pom 镜像配置


安装完之后

php -v 查看是否安装成功


mvn pom 镜像配置_搭建lnmp_02


配置php.ini

sudo vim /etc/php/7.0/fpm/php.ini

3、不采用源码安装nginx

sudo apt-get install nginx

nginx -v 查看是否安装成功

配置nginx的虚拟主机 sudo vim /etc/nginx/sites-available/default


server {
        listen       80;
        server_name  your_site_name.com;
        root /usr/share/nginx/html;
        index index.php index.html;

        location / {
                try_files $uri $uri/ =404;
        }

        error_page 404 /404.html;
        error_page 500 502 503 504 /50x.html;

        location = /50x.html {
                root /var/www/html;
        }

        location ~ .php$ {
                try_files $uri =404;
                fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
                fastcgi_index index.php;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include fastcgi_params;
        }
}


4、不采用源码安装MySql

sudo apt-get install mysql-server

sudo apt-get install mysql-client

sudo apt install libmysqlclient-dev

安装过程会提示输入数据库的登录名和密码,按提示输入即可

如果提示依赖不足,使用以下命令强制安装依赖

sudo apt-get install -f

5、php项目可能会需要php扩展

sudo apt-get install php-xxxxx (需要使用扩展,打出部分命令情况下使用Tab获取安装即可)

6、在远程连接ubuntu的情况下,需要安装openssh-server

sudo apt-get install openssh-server

如果发生需要软件降级的问题,安装的时候指定版本号,重新安装即可

sudo apt-get install openssh-client=1:6.6p1-2ubuntu1

7、开启服务命令

service nginx start

service mysql start

二、源码安装

1、php源码安装

从PHP: Downloads中下载需要的php版本

ubuntu命令行下载php的源码 需要使用wget -O php-7.2.10.tar.gz 加上从官网复制的链接

解压缩 tar -zxvf xxxxxx.tar.gz

cd 到解压缩的php目录下

执行 ./configure --prefix=/usr/local/php --enable-fpm

    --enable-mbstring --disable-pdo --with-curl

--disable-debug --disable-rpath

    --enable-inline-optimization --with-bz2 --with-zlib --enable-sockets

    --enable-sysvsem --enable-sysvshm

    --with-mhash --enable-zip --with-pcre-regex --with-mysqli

    --with-gd --with-jpeg-dir

可能会遇到依赖的错误,如果系统是centos系统

采用yum install 安装即可

如果遇到以下问题:


configure: error: Please reinstall the BZip2 distributio


yum install bzip2 bzip2-devel 解决


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


yum install libxml2-devel 解决

其他问题同理

之后进行make && make install 安装 php即安装在--prefix指定的目录下

将php加入到环境变量

(1)输入命令export PATH=$PATH:/usr/local/php/bin 对当前会话有效

(2)vi ~/.bash_profile 添加PATH=$PATH:/usr/local/php/bin 对当前用户有效

(3)vi /etc/profile 添加PATH=$PATH:/usr/local/php/bin 对所有用户生效

不生效的话 执行source /etc/profile 生效

使用php -v测试是否添加到环境变量

给php添加扩展

在php源码对应扩展目录下或者下载的扩展目录下,输入/usr/local/php/bin/phpize

可能提示如下错误


Configuring for:
PHP Api Version:         20041225
Zend Module Api No:      20060613
Zend Extension Api No:   220060519
Cannot find autoconf. Please check your autoconf installation and the
$PHP_AUTOCONF environment variable. Then, rerun this script.


centos系统使用

yum install m4
yum install autoconf解决

如果遇到

Make sure that you run '/app/php/bin/phpize' in the top level source directory of the module

解决方法

cp config0.m4 config.m4

然后 ./configure --with-php-config=/usr/local/php/bin/php-config

make && make install

需要修改php.ini文件

源码安装的php,默认的php.ini文件位置在/usr/local/php/lib下,但这个目录下可能不存在php.ini配置文件,复制源码中的php.ini-production 到对应目录下即可

然后添加extension=xxxxxxx 即可

源码安装有php-fpm的话需要修改的地方

在php安装目录下找到etc目录 复制php-fpm.conf.default 为php-fpm.conf.

进入etc目录下的php-fpm.d目录 复制www.conf.default 为 www.conf

设置php.ini, 打开php配置文件找到cgi.fix_pathinfo配置项,这一项默认被注释并且值为1,根据官方文档的说明,这里为了当文件不存在时,阻止Nginx将请求发送到后端的PHP-FPM模块,从而避免恶意脚本注入的攻击,所以此项应该去掉注释并设置为0

2、nginx源码安装

从nignx官网nginx: download中下载需要的版本

gz文件解压缩 tar -zxvf xxxx.tar.gz

cd 到nginx目录下

 ./configure --prefix=/opt/demo/nginx --with-http_stub_status_module --with-http_ssl_module

如果遇到以下错误:


the HTTP rewrite module requires the PCRE library.


执行 yum install pcre-devel


SSL modules require the OpenSSL library


执行 yum install openssl-devel

然后继续执行

make && make install

如果出现


make[1]: Leaving directory `/usr/local/nginx


有提示,但是nginx已经创建好

使用 /usr/local/nginx/sbin/nginx -t 测试显示

nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

安装成功

nginx加入到环境变量的方法同上

export PATH=$PATH:/app/nginx/sbin

默认情况下 nginx没有设置用户,如果目录没有权限的话,会返回403错误

可以添加用户 和 组 groupadd nginx

useradd -s /sbin/nologin -g nginx nginx

然后在nginx.conf配置文件中设置 user nginx,并且将目录权限设置为755

在配置nginx和php-fpm的时候,如果php-fpm启动不了,报9000端口占用时候,可以设置监听文件

fastcgi_pass unix:/var/run/php-fpm.sock;

然后在php-fpm配置文件的www.conf中的listen

listen = /var/run/php-fpm.sock

源码安装的nginx和php-fpm设置开机自启

vim /etc/rc.local

/usr/local/php/sbin/php-fpm

/usr/loca/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

3、nginx、php源码安装设置开机自启

在源码安装完php之后,修改一下php-fpm的配置文件


pid = run/php-fpm.pid 进程文件位置
error_log = log/php-fpm.log 记录错误位置
daemonize = yes 守护进程运行模式
user = www 运行用户名
group = www 运行用户组
listen = 127.0.0.1:9000 CGI 监听端口和 IP
pm = static 进程管理器运行模式
pm.max_children = 32 开启子进程数量
pm.max_requests = 500 子进程重启阈值
slowlog = log/slow.log 慢查询日志
request_slowlog_timeout = 5 慢查询阈值
request_terminate_timeout = 30 请求超时阈值


pm 有两中情况 分别是static 和 dynamic 根据情况设置

然后在/etc/init.d目录下 新建php-fpm文件,加入如下代码,一些配置根据实际情况设置


#!/bin/bash
# php-fpm startup script for the php-fpm 
# php-fpm version:5.5.0-alpha6
# chkconfig: - 85 15
# description: php-fpm is very good
# processname: php-fpm
# pidfile: /var/run/php-fpm.pid
# config: /usr/local/php/etc/php-fpm.conf
  
php_command=/usr/local/php/sbin/php-fpm
php_config=/usr/local/php/etc/php-fpm.conf
php_pid=/usr/local/php/var/run/php-fpm.pid
RETVAL=0
prog="php-fpm"
  
#start function
php_fpm_start() {
    /usr/local/php/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


nginx自启配置 在/etc/init.d目录下新建 nginx文件


#!/bin/bash
#
# Startup script for Nginx - this script starts and stops the nginx daemon
#
# 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"
  
[ -f /etc/sysconfig/nginx ] && . /etc/sysconfig/nginx
  
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
    sleep 1
    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


然后,修改文件权限,并使用chkconfig 加入自启动


chmod +x /etc/init.d/php-fpm
chkconfig php-fpm on
chkconfig --list

chmod +x /etc/init.d/nginx
chkconfig nginx on
chkconfig --list


完成后使用以下命令,管理 service命令其实是去/etc/init.d目录下,去执行相关程序


service php-fpm start
service php-fpm stop
service php-fpm restart
service php-fpm reload

或者
/etc/init.d/php-fpm start
/etc/init.d/php-fpm stop
/etc/init.d/php-fpm restart
/etc/init.d/php-fpm reload



service nginx start
service nginx stop
service nginx restart
service nginx reload

或者
/etc/init.d/nginx start
/etc/init.d/nginx stop
/etc/init.d/nginx restart
/etc/init.d/nginx reload