A. 软件环境
Linux ubuntu 16.04 LTS
,下载地址Nginx nginx-1.12.0
,下载地址PHP php-7.1.4
,下载地址MySQL mysql-5.7.18
,下载地址
在运行所有命令之前,请执行 apt-get update
由于采用源码包编译安装,所以需要一个 c
编译器,如果提示为找到 c
编译器,那么请执行 sudo apt-get install gcc
命令安装 c compiler
。但是你可能会碰到仍然找不到 c compiler cc
的情况,请执行:apt-get install build-essential
编译安装所需要的软件包,需要 make
依赖:
sudo apt-get install make
nginx
依赖的环境包:Pcre pcre-8.40
,下载地址(有可能出现安装了也仍然提示未找到,apt-get install libpcre3-dev
,详情请看)Pcre2 pcre2-10.23
,下载地址zLib zlib-1.2.11
,下载地址
php
依赖的环境包:libssl-dev
,安装方法:apt-get install libssl-dev
libxml2-dev
,安装方法:apt-get install libxml2-dev
libcurl4-gnutls-dev
,安装方法:sudo apt-get install libcurl4-gnutls-dev
libzip-dev
安装方法:apt install libzip-dev
php gd
库需要的依赖:
-
libpng-dev
(apt-get install libpng-dev
) -
libjpeg-dev
(apt-get install libjpeg-dev
) -
libxpm-dev
(apt-get install libxpm-dev
) - freetype-官网下载,无需如此麻烦
apt-get install libfreetype6-dev
另外,如果缺少什么 .h
这类的头文件,请根据错误提示,例如 apt-get install libfreetype*
或 *freetype*
这样安装解决!
系统升级到 ubuntu 17.07
php 升级到 php-7.1.8
这个时候会报错:libcurl 问题
find /usr -iname '*curl*'
// 创建一个软连接(系统升级导致 curl 默认路径改了,php 找不到了.....)
ln -s /usr/include/x86-linux-...../curl /usr/include/curl
php 编译安装扩展 phpize 命令
依赖的依赖包m4
,安装方法:apt-get install m4
autoconf
,安装方法:apt-get install autoconf
mysql
依赖的包:libaio1
,安装方法:apt-get install libaio1
如果出现 libpcre.so.1
找不到的错误,请手动链接:sudo ln -s /usr/local/lib/libpcre.so.1 /lib/libpcre.so.1
B. 安装Linux系统
C. 安装环境所需的依赖包
D. 安装 Nginx
sudo tar -zxvf nginx-1.12.0.tar.gz
cd nginx-1.12.0
sudo ./configure
# 这个目录要自己事先创建好
--prefix=/usr/local/WebEnvironment/Nginx/Web-1.12.0/Nginx-1.12.0
# 支持 tcp/udp 负载均衡
--with-stream
sudo make
sudo make install
设置 nginx.conf 文件
// 修改运行用户
user root;
// 修改日志文件路径
error_log logs/error.log;
http {
// 加大上传文件大小限制
client_max_body_size 2048M;
// 加大 nginx 等待 php cgi响应的时间
fastcgi_read_timeout 3600s;
// 新增自定义配置文件路径(免得在默认配置文件中新增数据)
include 'vhost/*.conf';
}
然后在 vhost
目录下,创建 www.conf
配置文件:
server {
server_name test.com;
listen 80;
index index.html;
root /myself/web/test;
location / {
autoindex on;
}
}
E. 测试 Nginx
cd /usr/local/WebEnvironment/Nginx/Web-1.12.0/Nginx-1.12.0/conf
sudo gedit nginx.conf # 修改配置文件,添加 域名(具体看 windows 下 nginx.conf 配置文件)
sudo gedit /etc/hosts # 修改 hosts 文件,添加相应域名
cd ../sbin
sudo ./nginx # 即可!不要 sudo start ./nginx ,他会提示报错的。
浏览器打开域名查看结果。
F. 安装PHP-7.1.4
tar -zxvf php-7.1.4.tar.gz
cd php-7.1.4
sudo ./configure
// php 主体文件所在目录
--prefix=/usr/local/WebEnv/php-7.1.4
// 默认配置文件在 ./lib 目录下
// 注意这里是目录!!
// 请不要使用这个编译选项,php 安装完成后,请使用 php --ini
// 查看配置文件路径,然后修改。即推荐使用默认路径
// --with-config-file-path=/usr/local/webEnv/php-7.1.4
--with-mysqli=mysqlnd
--with-pdo-mysql=mysqlnd
--with-openssl
--with-tsrm-pthreads
--with-curl
--with-gd
// 注意以下四个选项,需要提前安装相关依赖!
// 最后 freetype 这个选项,请使用 find / -iname 'freetype*' 来查找具体位置
// 以下注释掉的 php 编译选项不再需要,php 会自动查找
// --with-png-dir=/usr/lib
// --with-jpeg-dir=/usr/lib
// --with-xmp-dir=/usr/lib
// --with-freetype-dir=/usr/local/include/freetype2
--enable-mbstring
--enable-ftp
--enable-pcntl
--enable-sysvmsg
--enable-sysvsem
--enable-sysvshm
--enable-zip
--enable-sockets
--enable-mysqlnd
--enable-bcmath
--enable-maintainer-zts
--enable-fpm
sudo make
sudo make install
修改 php.ini
需要复制 php
压缩包解压后的 php.ini-production
到 /usr/local/WebEnvironment/PHP-7.2.0/lib/php.ini
// 增加上传文件大小
post_max_size = 2048M
// 单个上传文件的最大大小
upload_max_filesize = 10M
// 单次最大上传文件数量
max_file_uploads = 200
// 设置扩展路径
extension_dir = "/usr/local/WebEnvironment/PHP-7.2.0/extensions"
// 添加自定义扩展
extension = redis.so
// php 事件扩展
extension = ev.so
extension = gd.so
// 设置时区
date.timezone = PRC
// 设置 php 最大占用内存
memory_limit = 512M
// 打开错误提示
display_errors = On
基本 ok。
G. 安装 MySQL-5.7.18
以下方式非源码编译安装,无法指定安装目录!如果需要指定安装目录,请查看 mysql-8.x 源码编译安装
tar -zxvf mysql-5.7.18.tar.gz
mv mysql-5.7.18 /usr/local/mysql
cd /usr/local
// 它本身没有 data 目录,需要自行创建(更高版本已经有 data 目录,无需重复创建)
sudo mkdir -m 755 data
cd bin
// 初始化 Data 目录内容
sudo ./mysqld --initialize-insecure
// 启动,必须以 root 身份启动
sudo ./mysqld --user=root
----------- 另行启动一个 terminal ---------------------------------
// 设置密码
sudo ./mysqladmin -u root password 123456
// 登录测试
mysql -u root -p
// 配置文件(自己创建 my.cnf,默认文件名,配置文件路径:etc 目录下,可以是 /etc,也可以是 /usr/local/mysql/etc)
sudo mkdir - m 755 /usr/local/mysql/etc
// 编辑配置文件
sudo gedit /usr/local/mysql/etc/my.cnf
// 配置文件内容(设置编码)
[mysql]
default-character-set=utf8
[mysqld]
character-set-server=utf8
H. nginx 添加虚拟主机
nginx.conf
中设置的 include vhost/*
路径
cd conf/vhost
sudo vim vhost.conf
// 添加如下内容,保存
server {
server_name test.com;
root /var/Website/Test;
index index.php index.html;
charset utf-8;
location / {
// 这边配置成单一入口访问(例如你用的PHP框架是 Laravel 就要求要单一路口)
// 这边的含义是:
// $uri 如果是一个文件,直接返回
// $uri/ 如果是一个目录,直接返回
// 最后一个参数表示重定向!
// 否则返回 /index.php?$query_string;
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php(.*) {
// php 处理程序监听的 tcp 端口
fastcgi_pass 127.0.0.1:9000;
// 确定脚本名称
# fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
// 传递请求参数
# fastcgi_param QUERY_STRING $query_string;
// 必须要包含 fastcgi_params 预定义参数
include fastcgi_params;
}
}
server {
server_name pma.com;
root /var/Website/TestOther;
index index.html;
charset utf-8;
location / {
}
# 静态资源处理
# 例如:http://test.com/test.jpg
# 他会从 /data 目录下获取,而不是从 /var/Website/TestOther 目录下获取
# 注意匹配顺序,正则优先,然后 前缀
location ~ \.(gif|jpg|png)$ {
root /data;
}
}
I. php-fpm 解释
参考文章
cgi、fastcgi、php-cgi、php-fpm 之间的联系和区别
配置文件路径:
// php-fpm 配置文件
etc/php-fpm.conf.default
// 进程池配置文件路径
etc/php-fpm.d/www.conf.default
// php.ini 配置文件(要从解压出来的压缩包根目录下拷贝重命名)
etc/php.ini
注意了,php-fpm.conf
配置文件是 php-fpm
程序的配置文件,www.conf
是 php-fpm.conf
配置文件的一部分(扩展),只是 php
将其独立出来了。他们是一个整体,这边修改的是 www.conf
:
user = root # 这边可以新创建用户,也可以直接使用 root 用户(省事,我就 root 用户了)
group = root # 同上
listen = 127.0.0.1:9000 # 只能有一个 listen(我被坑的最惨的部分!以为可以 listen 多个!实际上不能!)
J. 设置软连接
sudo ln -s /path/to/php/sbin/php-fpm /bin/php-fpm
sudo ln -s /path/to/nginx/sbin/nginx /bin/nginx
sudo ln -s /path/to/mysql/bin/mysqld /bin/mysqld
K. 启动测试
Nginx
// windows 下启动
start nginx
// linux 下启动
sudo nginx # 启动
sudo nginx -s reload # 重新启动(重载配置文件)
sudo nginx -s stop # 快速停止
sudo nignx -s quite # 优雅停止
sudo nginx -s reopen # 重新打开日志文件(要在 nginx 启动的状态下执行才有效)
PHP
:
// 指定配置文件启动
// -c 指定 php 运行时配置文件
// -y 指定 php-fpm 运行时配置文件
// -R 可选,运行 root 身份运行 php-fpm
sudo php-fpm -c php.ini -y php-fpm.conf -R
// 通常的启动方式应该如下:
sudo php-fpm -R
mysql
sudo mysqld --user=root