欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Ubuntu下PHP开发环境搭建指南

程序员文章站 2024-02-22 11:46:34
...

基于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脚本以供测试

<?php
    echo "+++++---<i love>---++++++";
?>

更改配置文件之后必须重启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测试脚本

<?php
    echo "+++++---<i love you>---++++++";
?>

将站点加入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.结语

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