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查看可安装的软件)
安装完之后
php -v 查看是否安装成功
配置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