Ubuntu下PHP开发环境搭建指南

      • 基于Ubuntu的PHP开发环境搭建
        • 基础设施
        • 依赖包安装
        • Nginx安装
        • PostgreSQL数据库安装
        • PHP安装
        • Redis安装步骤
        • SSDB安装步骤
        • Phalcon框架安装
        • Php添加Redis扩展
        • Php添加SSDB扩展
        • swoole安装
        • Nginx相关配置
        • 常见问题以及解决
        • 依赖包以及配置文件下载地址
        • 结语

基于Ubuntu的PHP开发环境搭建


1.基础设施

操作系统版本:Ubuntu 17.10
约定:所有的依赖库都放在~/src目录下,所有的项目放在~/project目录下,我的主目录"~"/home/yurisa


安装前准备 git,wget
安装方式

# -- install git
$: sudo apt-get install git

# -- install wget
$: sudo apt-get install wget

2.依赖包安装

  • 安装方式

    本地安装

    
    # --  package(依赖包名称)
    
    $: sudo dpkg -i package

    从源安装

    $: sudo apt-get install package
    
    # -- 提示,如果找不到可使用搜索功能然后下载安装相关的依赖包即可
    
    
    # -- 例如搜索"libpng"为名的包
    
    $: sudo apt-cache search libpng

    安装之前必须先安装gcc sudo apt-get install gcc g++,Ubuntu默认已经安装gcc7,使用gcc -v查看即可

需要安装的依赖包列表
imagemagick_6.9.7.4+dfsg-16ubuntu2_amd64.deb
iptraf_1.1.4-6_all.deb
libbison-dev_3.0.4.dfsg-1+b1_amd64.deb
libcurl3_7.55.1-1ubuntu2_amd64.deb
libcurl4-openssl-dev_7.55.1-1ubuntu2_amd64.deb
libedit-dev_3.1-20170329-1_amd64.deb
libevent-dev_2.1.8-stable-4_amd64.deb
libfreetype6_2.6.3-3.2_amd64.deb
libjpeg-dev_8c-2ubuntu8_amd64.deb
libmcrypt-dev_2.5.8-3.3_amd64.deb
libmhash-dev_0.9.9.9-7_amd64.deb
libmhash2_0.9.9.9-7_amd64.deb
libpng-dev_1.6.34-1_amd64.deb
libreadline-dev_7.0-3_amd64.deb
libxml2-dev_2.9.4+dfsg1-4ubuntu1_amd64.deb
re2c_1.0.1-1_amd64.deb

依赖包下载(本地安装下载地址在后文给出)

然后先安装上述依赖包


3.Nginx安装

安装前安装相应的依赖包

依赖包名称 版本号 用途
gcc 7.1 C/C++编译器
zlib 1.2.11 对Http包做gzip压缩
pcre 8.41 正则表达式库
openssl 1.0.2n 用于支持Https协议
nginx-stick nginx module

安装pcre

# -- 解压pcre-8.41.tar.gz
$: tar -zxf pcre-8.41.tar.gz

# -- 进入目录
$: cd pcre-8.41.tar.gz

# -- 安装
$: ./configure
$: make
$: sudo make install

安装zlib

# -- 解压
$: tar -zxf zlib-1.2.11.tar.gz

# -- 进入目录
$: cd zlib-1.2.11

# -- 安装
$: ./configure
$: make
$: sudo make install

安装openssl

# -- 解压
$: tar -zxf openssl-1.0.2n.tar.gz

# -- 进入目录
$: cd openssl-1.0.2n

# -- 安装
$: ./config --prefix=/usr/local --openssldir=/usr/local/ssl
$: make
$: sudo make install
$: ./config shared --prefix=/usr/local --openssldir=/usr/local/ssl
$: make clean
$: make && make

解压缩Nginx Module

# -- 解压("."表示当前目录)
$: unzip -o -d . nginx-goodies-nginx-stick-module-ng.zip

安装Nginx
我的主目录~/home/yurisa

# -- 解压
$: tar -zxf nginx-1.13.tar.gz

# -- 进入目录
$: cd nginx-1.13

# -- 安装
$: ./configure \
> --sbin-path=/usr/local/nginx/nginx \
> --with-http_ssl_module \
> --with-pcre=/home/yurisa/src/pcre-8.41 \
> --with-zlib=/home/yurisa/src/zlib-1.2.11 \
> --with-openssl=/home/yurisa/src/openssl-1.0.21 \
> --add-module=/home/yurisa/src/nginx-sticky-moudle-ng

$: make
$: sudo make install

# -- 将nginx移动到sbin目录下
$: cp /usr/local/nginx/nginx /usr/local/sbin/

# -- 将nginx加入环境变量
$: sudo vim ~/.profile

# -- 在".profile"文件中添加
export PATH=/usr/local/sbin:$PATH

# -- 使用source命令生效
$: source ~/.profile

# -- 启动nginx
$: sudo nginx -c /usr/local/nginx/conf/nginx.conf

# -- 浏览器访问, 地址栏输入(127.0.0.1:80)

# -- 关闭nginx
$: sudo nginx -s stop

# -- 重启nginx
$: sudo nginx -s reload

关于nginx的配置在后文给出


4.PostgreSQL数据库安装

单独安装PostgreSQL之前必须安装的依赖库

依赖包名称
zlib
readline

开始安装

    $ :cd ~/src
    # -- 安装包会在后文给出,也可自行使用 wget下载,安装包位置统一放在"~/src"目录下
    $ :wget https://ftp.postgresql.org/pub/source/v9.3.5/postgresql-9.3.5.tar.gz
    $ :tar -zxf postgresql-9.3.5.tar.gz 
    $ :cd postgresql-9.3.5
    $ :./configure
    $ :make
    $ :sudo make install
    # -- 数据库的相关设置
    # -- 配置环境变量
    $ :vim ~/.profile
    # -- 在.profile文件中加入
    export PGDATA=/home/yurisa/postgresql/data
    export PATH=/usr/local/pgsql/bin:$PATH
    # -- PATH生效
    $ :source ~/.profile
    # -- 初始化数据库
    $ :initdb
    # -- 启动数据库
    $ :pg_ctl start
    # -- 创建数据库用户postgres
    $ :createuser postgres -s(创建最高权限用户,类似mysql的root)
    # -- 进入数据库客户端
    $ :psql -U postgres
    # -- 数据库常用命令(注意要加"\")
    $ :\l          #显示所有数据(L小写)
    $ :\c dataname #连接dataname数据库
    $ :\q          #退出客户端
    $ :\d          #所有当前库的所有表
    $ :\d tablename#查看tablename的表字段

5.PHP安装

安装之前必须先将依赖包安装完毕

开始安装

# -- 进入"src"安装目录
$: cd ~/src
# -- 解压php安装包
$: tar -zxf php-7.1.12.tar.gz
# -- 进入php目录
$: cd php-7.1.12
# -- 编译
$: ./configure \
> --with-pgsql \
> --with-pdo-pgsql \
> --with-openssl \
> --with-mcrypt \
> --enable-zip \
> --enable-mbstring \
> --enable-fpm \
> --enable-opcache \
> --with-curl \
> --with-readline \
> --enable-pcntl  \
> --enable-sysvmsg \
> --with-zlib \
> --with-gd \
> --with-jpeg-dir \
> --with-png-dir \
> --with-freetype-dir

# -- 安装
$: make
$: sudo make install

PHP相关配置

# -- 复制php.ini文件到"/usr/local/lib"目录下
$: sudo cp php.ini-production /usr/local/lib/php.ini

# -- 编辑php.ini文件
# -- 查找"timezone"修改
date.timezone = "Asia/Shanghai"
always_populate_raw_post_data = -1

# -- 查找max_execution_time修改执行时间
max_execution_time = 300

安装”fpm“(nginx通过fpm管理php).
下面需要修改的文件并不是所有的都能搜索到,如果搜索不到,直接在文件最底部加入即可

# -- 在源代码目录("~/src/php-7.1.12")目录执行
$: sudo cp sapi/fpm/php-fpm.conf /usr/local/etc/
$: sudo cp sapi/fpm/php-fpm /usr/local/bin/

# -- 修改fpm配置

$: sudo vim /usr/local/etc/php-fpm.conf

# -- 修改用户和所属组(通过命令"whoami"查看,"yurisa"是我自己的)
user = yurisa
group = yurisa

# -- 查找"clear_env"修改
clear_env=no
# -- 查找"request_terminate_timeout"修改
request_terminate_timeout=300
# -- 打开PHP错误日志,查找"catch_workers_output",修改
catch_worker_output=yes

在”/usr/local/sbin”文件夹下新建一个名为”fpm”的文件,通过”fpm”管理php-fpm

# --  新建fpm
$: touch fpm

将以下脚本拷贝至”fpm”文件中

#!/bin/bash
    USER=`whoami`

    PHP_CGI=/usr/local/sbin/php-fpm
    PHP_CGI_NAME=`basename $PHP_CGI`
    RETVAL=0

    start() {
          echo -n "Starting PHP FPM: "
          $PHP_CGI
          RETVAL=$?
          echo "$PHP_CGI_NAME."
    }
    stop() {
          echo -n "Stopping PHP FPM: "
          killall -QUIT  -u $USER php-fpm
          RETVAL=$?
          echo "$PHP_CGI_NAME."
    }

    case "$1" in
        start)
          start
      ;;
        stop)
          stop
      ;;
        restart)
          stop
          start
      ;;
        *)
          echo "Usage: fpm {start|stop|restart}"
          exit 1
      ;;
    esac
    exit $RETVA
# -- 更改权限
$: chmod 777 fpm
# -- 确保fpm在环境变量中,测试
$: php -v
# -- 如果没有结果则需要将其加入环境变量,同"nginx"一样

# -- 启动fpm
$: sudo fpm start
# -- 重启
$: sudo fpm restart
# -- 关闭
$: sudo fpm stop

环境变量更改必须重启fpm方可生效,配置文件会在后文给出


安装包后文的链接中已经给出,可自行下载,也可使用wget/git下载,安装包放置src目录下面

6.Redis安装步骤

    $ :cd ~/src
    $ :wget http://download.redis.io/releases/redis-3.0.2.tar.gz
    $ :tar -zxf redis-3.0.2.tar.gz
    $ :cd redis-3.0.2
    $ :make
    $ :sudo make install
    # --redis配置
    $ :cd ~
    $ :mkdir redis
    # --把~/src/redis-3.0.2/redis.conf复制到~/redis/
    $ :cp ~/src/redis-3.0.2/redis.conf ~/redis/
    # --修改redis.conf,修改daemonize yes
    # --后台启动redis
    $ :redis-server redis.conf &
    # --启动redis client
    $ :redis-cli -p 6379

7.SSDB安装步骤

    $ :cd ~/src
    $ :wget --no-check-certificate https://github.com/ideawu/ssdb/archive/master.zip
    $ :unzip master
    $ :cd ssdb-master
    $ :make clean
    $ :make
    # --ssdb默认的安装路径在(/usr/local/ssdb)
    $ :sudo make install
    # --配置环境变量
    $ :vim ~/.bash_profile
    # --将ssdb加入环境变量
    export PATH=/usr/local/ssdb:$PATH
    # --环境变量生效
    $ :source ~/.profile

    # --ssdb启动配置
    $ :cd ~
    $ :mkdir ssdb
    # --复制ssdb.conf到~/ssdb/目录
    $ :cp ~/src/ssdb-master ~/ssdb
    # --在~/ssdb目录下创建var文件夹
    $ :mkdir ~/ssdb/var

    # --ssdb基础命令(需要在ssdb.conf所在的目录执行)
    # --start ssdb-server
    $ :ssdb-server -d ssdb.conf
    # --start ssdb-client
    $ :ssdb-cli -p 8888
    # --stop ssdb-server
    $ :ssdb-server ssdb.conf -s stop

8.Phalcon框架安装

    $ :cd ~/src
    $ :wget https://github.com/phalcon/cphalcon/archive/v3.1.2.tar.gz -O cphalcon-3.1.2.tar.gz
    $ :tar -zxvf cphalcon-3.1.2.tar.gz
    $ :cd cphalcon-3.1.2/build
    $ :sudo ./install

    # --php添加phalcon框架
    $ :vim /usr/local/lib/php.ini
    # --添加
    extension=phalcon.so

9.Php添加Redis扩展

    $ :cd ~/src
    $ :git clone https://github.com/phpredis/phpredis.git
    $ :cd phpredis/
    $ :phpize  # --检查php环境
    $ :./configure
    $ :make
    $ :sudo make isntall

    # --添加
    $ :vim /usr/local/lib/php.ini
    extension = redis.so

10.Php添加SSDB扩展


    $ :cd ~/src
    $ :git clone https://github.com/jonnywang/phpssdb.git
    # --切换分支
    $ :git checkout php7
    $ :phpize
    $ :./configure
    $ :make
    $ :sudo make install


    # --添加
    $ :vim /usr/local/lib/php.ini
    extension = ssdb.so

    # --重启fpm
    $ :fpm restart

11.swoole安装

# -- 编译安装

$: cd swoole
$: phpize
$: ./configure
$: make 
$: sudo make install

# -- 添加
$ :vim /usr/local/lib/php.ini
extension = swoole.so

12.Nginx相关配置

为方便多个站点的管理,统一将站点文件放在”vhost”目录下。

在/usr/local/nginx/conf目录下新建vhost文件夹

# -- 新建vhost文件夹
$: cd /usr/local/nginx/conf
$: mkdir vhost

更改nginx.conf里面的文件内容为(其它多余的配置放入站点文件)

#user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.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 vhost/*.conf;
}

新建一个站点文件”hello.com.conf”
访问路径自己建立对应的文件夹结构即可

server {
    listen      80;         # 端口
    server_name hello.com;  # 站点名称
    index   index.html index.htm index.php;
    set $root_path '/home/yurisa/projects/Hello_Php/';  # 访问路径
    root $root_path;
    try_files $uri $uri @rewrite;

    client_max_body_size 50m;

    location @rewrite {
       rewrite ^/(.*)$ /index.php?_url=/$1;
    }

     location ~ \.php {
                fastcgi_pass 127.0.0.1:9000; #fpm
        #fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
                fastcgi_index index.php;

                include fastcgi_params;
                fastcgi_split_path_info       ^(.+\.php)(/.+)$;
                fastcgi_param PATH_INFO       $fastcgi_path_info;
                fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        }

        location ~* ^/(css|img|js|flv|swf|download)/(.+)$ {
             root $root_path;
         }

        location ~ /\.ht {
                deny all;
        }

}

将站点加入host文件以访问

$: sudo vim /etc/hosts
# -- 加入以下内容
127.0.0.1 hello.com

测试配置是否成功

# -- 根据访问路径(/home/yurisa/projects/Hello_Php/),在访问路径下面新建"Test"目录

$: mkdir Test
# -- 在Test目录下新建测试文件"index.php"
$: touch index.php

在”index.php”文件中加入一段php脚本以供测试


    echo "+++++------++++++";
?>

更改配置文件之后必须重启nginx方可生效

在浏览器中访问

hello.com/Test/index.php

当新开一个项目需要配置新的站点的时候,假设新的站点取名”world.com”
文件必须以”.conf”结尾

# -- 1.复制一份之前的"hello.com"
$: cp hello.com.conf world.com.conf

# -- 更改文件配置中的站点名称以及站点访问位置

server_name world.com;  # 站点名称
set $root_path '/home/yurisa/projects/World_Php/';  # 访问路径

# -- 建立对应的访问路径目录结构

# -- 在"World_Php"目录下新建"test.php"测试文件

$: touch test.php

在“test.php”文件中加入php测试脚本


    echo "+++++------++++++";
?>

将站点加入host文件以访问

$: sudo vim /etc/hosts
# -- 加入以下内容
127.0.0.1 world.com

配置文件更改,重启nginx

$: sudo nginx -s reload

在浏览器中访问

world.com/test.php

13.常见问题以及解决

1.nginx启动失败(如果配置文件没问多半是权限问题)

# -- 查看nginx错误信息
$: cd /usr/local/nginx/logs
$: tail -f error.log

fpm启动失败,注意启动权限以及fpm启动可能会访问的目录的权限
如果使用sudo fpm start启动失败请留意报错信息

查看php已安装的扩展

$: php -m

查看php.ini的位置

$: php -i | grep php.ini

14.依赖包以及配置文件下载地址

由于上传文件受到限制,所以分了两个压缩包

php_conf_1
php_conf_2

15.结语

如有不足请及时指正,谢谢~.

你可能感兴趣的:(项目管理)