本文阐述的是一个在CentOS上面怎么去快速搭建一个PHP的生产环境,原创文章,希望给正走在开发路上的Coder一些经验和分享。
首先要了解什么是CentOS?
PHP的一般生产环境都在以Linux为内核的系统上面,虽然不代表不能用Windows内核的服务器,但是Linux的确有他的优势所在。CentOS就是Linux的发行版本之一,另外一个广为人知的就是Ubuntu,这里我们先以CentOS为例子讲解。
通过SSH协议进入到自己的CentOS服务器上面
ssh是一个安全协议,通常利用它来完成服务器和开发者PC的交互,这里我们不做相信的概述。开发者一般要注意mac的开发环境和windows开发环境是有所不同的,如果你用的是windows,那恭喜你,在次之前,你还要多准备一些工作,我们这里以开发者为Mac开发环境为准来进行讲述。
下面是一个简单的命令行代码:
ssh user@192.168.1.10
利用yum工具来帮你安装你所需要的所有东西
yum的简介我这里引用百度百科,这是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。
1. 升级yum
sudo yum update
2. yum安装 epel安装源
sudo yum install epel-release
3. yum安装 gcc
sudo yum install gcc
安装Nginx
1. 安装Nginx(-y代表自动选择合适的版本)
sudo yum install nginx -y
2. 启动并且生效Nginx
sudo systemctl start nginx.servicesudo
sudo systemctl enable nginx.service
安装Mariadb
Mariadb是Mysql的一个分支。这里有人可能要问了,为什么不安装Mysql呢?自从甲骨文公司收购了Mysql之后,Mysql就一直存在闭源的风险,这之后在CentOS7上面,直接导致Mysql不能直接通过yum来进行安装了(CentOS6之前都可以安装)。所以如果你想要使用Mysql,你需要去Mysql的官网利用curl或者wget命令,把安装包下载下来执行安装。这里我们以Mariadb为例。
1. 先修改一些yum的配置文件,使得yum能安装最新版本的Mariadb
sudo vi /etc/yum.repos.d/MariaDB10.repo
2. 写入如下内容
[mariadb]name = MariaDB
3. 然后安装
sudo yum install MariaDB-server MariaDB-client -y
4. 启动并生效
sudo systemctl start mariadb.service
sudo systemctl enable mariadb
5. 通过mysql_secure初始化安装mariadb或者mysql
sudo mysql_secure_installation
Enter current password for root (enter for none): Just press the Enter button
6. 进入mariadb设置子用户和数据库
sudo mysql -u root -p
7. 建立一个demo数据库,这一部其实可以略过,大家做个参考即可
CREATE DATABASE db_mytest;
CREATE USER '用户名' IDENTIFIED BY '密码';
GRANT ALL PRIVILEGES ON db_mytest.* to '用户名';
exit;
安装php、php-fpm及其php附属组件
sudo yum install php70w php70w-fpm php70w-common php70w-mysql php70w-opcache php70w-pear php70w-gd php70w-devel php70w-mbstring php70w-mcrypt php70w-cli php70w-pdo php70w-xml php70w-bcmath php70w-pecl-imagick php70w-soap -y
这条命令其实包含了PHP和PHP一些核心的扩展,你自己可以看情况来选择安装,下面我们启动并生效php。(其实是PHP的进程管理器,php-fpm)
sudo systemctl start php-fpm
sudo systemctl enable php-fpm.service
配置PHP.ini
1. 打开php.ini,并且根据自身需要配置文件
sudo vi /etc/php.ini
2. 修改一个php可能的漏洞
找到
;cgi.fix_pathinfo=1
改为
cgi.fix_pathinfo=0
3. 下面的举例参数自行配置
upload_max_filesize = 200M
max_file_uploads = 20
post_max_size = 200M
4. 打开php-fpm的配置文件www.conf,并且根据自身需要配置文件
sudo vi /etc/php-fpm.d/www.conf
找到
user = apache
group = apache
改为
user = nginx
group = nginx
5. 改nginx与fastcgi之间的链接方式,默认是tcp,我们改成速度更快的unix domain socket方式
找到
listen = 127.0.0.1:9000
;listen.owner = nobody
;listen.group = nobody
;listen.mode = 0660
改为
listen = /var/run/php5-fpm.sock
listen.owner = nginx
listen.group = nginx
listen.mode = 0660
6. 根据自身硬件和需求,可以pm更改为dynamic或者static
找到
pm = dynamic
根据自己的需求来更改配置
pm = static
pm.max_children = 10
7. 最后千万别忘了重新一个php-fpm
sudo systemctl restart php-fpm
配置Nginx
先查看自己的cpu核心数,如果你自己知道,可以跳过这一步
grep ^processor /proc/cpuinfo | wc -l
查看系统的用户组,看看是否有nginx,如果你自己知道,可以跳过这一步
cut -d : -f 1 /etc/passwd
配置nginx.conf文件
sudo vi /etc/nginx/nginx.conf
下面我列举了一个DEMO,实际情况看自己的需求
user nginx; # 定义Nginx运行的用户和用户组
worker_processes 2; # nginx进程数,建议设置为等于CPU总核心数
error_log /var/log/nginx/error.log info;
pid /run/nginx.pid;
worker_rlimit_nofile 65535;
events {
use epoll;
worker_connections 65535;
}
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 /var/log/nginx/access.log main;
server_names_hash_bucket_size 128;
client_header_buffer_size 32k;
large_client_header_buffers 4 32k;
client_max_body_size 300m;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 60;
server_tokens off;
# FastCGI相关参数是为了改善网站的性能:减少资源占用,提高访问速度。下面参数看字面意思都能理解。
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
# gzip模块设置
gzip on;
gzip_min_length 1k;
gzip_buffers 4 16k;
gzip_http_version 1.1;
gzip_comp_level 2;
gzip_types text/plain application/x-javascript text/css application/xml;
gzip_vary on;
# 包含其他配置文件
include /etc/nginx/conf.d/*.conf;
server {
listen 80 default;
return 500;
}
}
创建统一的Fast-cgi配置文件
1. 创建的Fast-cgi配置文件(fast-cgi通用配置文件)
sudo vi /etc/nginx/fcgi.conf
2. 写入如下内容,并且保存文件
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx/$nginx_version;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
# PHP only, required if PHP was built with --enable-force-cgi-redirect
fastcgi_param REDIRECT_STATUS 200;
配置Nginx service block
1. 创建domain.conf文件,默认在/etc/nginx/conf.d目录下
cd /etc/nginx/conf.d
sudo vi test.com.conf
2. 下面是一个代码案例,只做一些参考即可
server {
listen 80;
server_name example.com www.example.com;
root /var/www/example/public;
index index.php index.html index.htm;
charset utf-8;
error_page 401 /401.html;
error_page 403 /403.html;
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
location / {
try_files $uri $uri/ /index.php?$query_string; #laravel 加入此配置
}
location = /robots.txt { allow all; access_log off; log_not_found off; }
location = /favicon.ico { allow all; access_log off; log_not_found off; }
location ~ \.php$ {
root /var/www/example/public;
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fcgi.conf;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
}
以上就是搭建PHP环境的全部教程,在这个过程当中你可能会遇到各种各样的问题,如果有需要帮助的下面留言。
原创不易,有错误的地方欢迎大家指正。