VMware+CentOS+Apache+php+python+Django+gunicorn配置

Posted 黑猫-警长

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VMware+CentOS+Apache+php+python+Django+gunicorn配置相关的知识,希望对你有一定的参考价值。

    目标: 在win7上安装vmware,并新建2个虚拟机,centos6.6/7.0,并在虚拟机里将python网站和php网站同时配置在一个apache上.
    1. 安装vmware,并新建2个虚拟机,分别使用CentOS6.6CentOS7.0.安装完成后分别命名为centos6和centos7.

    注意: 虚拟机的网络连接都设置为桥接模式

    1. 有些操作需要superuser权限,所以为了方便,先su获取权限.以下所有操作都有superuser权限.

    2. 配置虚拟机的网络,使得win7和centos能够连通,且centos能直接访问互联网.centos6不需要特别设置就可以了.如果centos7无法联网,按照下列方法解决:
      首先在终端输入ifconfig,找到网卡名称,我的是eno1677736.
      然后修改网卡的配置vim /etc/sysconfig/network-scripts/ifcfg-eno16777736

    HWADDR=00:0C:29:2D:A6:8F
    TYPE=Ethernet
    BOOTPROTO=dhcp
    DEFROUTE=yes
    PEERDNS=yes
    PEERROUTES=yes
    IPV4_FAILURE_FATAL=no
    IPV6INIT=yes
    IPV6_AUTOCONF=yes
    IPV6_DEFROUTE=yes
    IPV6_PEERDNS=yes
    IPV6_PEERROUTES=yes
    IPV6_FAILURE_FATAL=no
    NAME=eno16777736
    UUID=eff0f28b-5583-431e-9748-308bbc3241fe
    ONBOOT=no

    最后一行的ONBOOT=no改为ONBOOT=yes
    然后重启网络

    systemctl restart network
    systemctl restart NetworkManger

    这样centos7就能连接网络了.

    1. centos其他设置.
      为了方便,我不是直接在虚拟机里操作(鼠标切进去切出来很麻烦,我没有安装vmware tools,使用sftp传输文件),而是使用xshell和ssh连接到虚拟机,所以centos可以把GUI界面关掉,只是用命令行界面,节省系统资源.
      centos6: vim /etc/inittab
      id:5:initdefault 中的5改为3
      centos7: 使用命令 systemctl set-default multi-user.target
      然后重启centos,就默认进入文字界面了,然后使用xshell或secureCRT或者其他工具连接使用.

    2. 安装必要的开发工具集和php.使用命令:

    yum groupinstall "Development tools"
    yum install php php-devel
    1. 接下来就是安装python.这个步骤比较复杂.python官网有有提供windows下的python安装包.linux下只能通过源码编译.linux发行版的软件仓库有一些编译和打包好的安装包.但是版本较低,而且使用这些安装包安装会覆盖linux自带的python.会造成很多问题.
      大部分linux发行版都自带python(版本较低),一些linux命令,例如yum,rpm,apt-get都依赖于python.如果直接用软件仓库里的安装包,会将原有的python覆盖,造成一些系统命令失效.所以这里采用源码编译安装.首先下载python2.7.11.
      在编译之前,要先安装一些依赖包:
    yum install zlib-devel
    yum install bzip2-devel
    yum install openssl-devel
    yum install ncurses-devel
    yum install sqlite-devel

    先建立一个目录存放python lib,之后会用到mkdir /usr/local/python/lib
    然后就是解压源码包,编译:

    ./configure --enable-shared --prefix=/usr/local/python LDFLAGS="-Wl,-rpath /usr/local/python/lib"
    make && make install

    然后为新安装的python建立一个新的软连接(千万不要覆盖旧的python,新起个名字),我这里用python2711
    ln -s /usr/local/python/bin/python /usr/bin/python2711
    然后验证一下,安装是否成功,在终端分别输入python和python2711,会进入python的交互式界面,可以看到python版本,如果python指向旧的版本,python2711指向新的版本就对了,输入exit()并回车可以退出.

    1. 安装python第三方库.由于linux自带python,而且yum等命令使用的是自带的python,所以通过yum命令安装的python-pip, supervisor, gunicorn等库是安装在了旧的python里.所以不能使用yum安装python库(supervisor无所谓用哪个python).使用如下方法:
      python2711安装setuptools和pip,然后使用pip安装python库
      首先到pypi.com下载setuptools和pip源码包,先安装setuptools,再安装pip.python从源码安装第三方库的方法如下:解压源码包,进入目录,执行python setup.py install
      安装完pip后,在python安装目录的bin目录里会有一个pip命令,我们可以为pip专门建立一个软连接方便使用,为了和系统自带的python区分开来,用pip2711来命名:ln -s /usr/local/python/bin/pip /usr/bin/pip2711
      然后就是使用pip安装python第三方库:
    pip2711 install django==1.8.4
    pip2711 install gunicorn==18
    1. 用django做一个网站.在/home/qiu目录(你自己的目录)下新建一个目录workspace,在workspace里执行
      /usr/local/python/bin/django-admin startproject p1这样就使用p1建立了一个叫做p1的工程,p1目录结构如下:
    p1
    -- db.sqlite3
    -- manage.py
    -- p1
        -- __init__.py
        -- url.py
        -- settings.py
        -- wsgi.py
    
    1. 用php做一个网站.我们做一个简单的php页面.
    cd /home/qiu
    mkdir php
    cd php
    vim 1.php

    输入如下内容:

    <!DOCTYPE html>
    <html>
        <body>
            <?php
                echo "My first PHP script!";
            ?>
        </body>
    </html>
    1. 安装apache.执行以下命令:
    yum install httpd  # centos6自带httpd,不用安装
    yum install httpd-devel  # centos6/7都需要安装

    需要注意的是,centos6自带apache2.2,centos通过yum安装的apache是2.4版本,有些配置会有区别,后面会讲到.
    下面是几个有用的命令:

    rpm -qa | grep httpd  # 查看apache版本
    httpd -l  # 查看apache安装的c扩展
    httpd -M  # 查看apache加载的模块
    lsof -i tcp:80  # 查看80端口占用情况
    netstat -ntlp  # 列出所有端口
    1. 配置centos6上的apache:将ServerName 设置为 localhost:80,其他设置按需修改(例如ServerAdmin邮箱),然后在底部加入:
    # 配置php访问
    <VirtualHost *:80>
        # 管理员邮箱
        ServerAdmin steve@mieasy.com 
        # php文件存放的位置                           
        DocumentRoot "/home/qiu/php"                      
        # 域名
        ServerName php.test.com                               
        # 错误日志存放位置
        ErrorLog "logs/ce.err"
        CustomLog "logs/ce.access" common
         # 静态文件目录
        <Directory "/your/path/php">
            Options FollowSymLinks
            AllowOverride All
            Order deny,allow
            Allow from all
        </Directory>
    </VirtualHost>
    # 配置反向代理,python用这个配置
    <VirtualHost *:80>
        ServerAdmin xiaoqiu206@163.com
        ServerName gunicorn.test.com
        ProxyRequests Off
        <Proxy *>
            Order deny,allow
            Allow from all
        </Proxy>
            # 以/static/开头的url不转发,apache自己处理(img,css,js静态文件)
        ProxyPass /static/ !
            # 将请求转发到8888端口
        ProxyPass / http://127.0.0.1:8888/
        ProxyPassReverse / http://127.0.0.1:8888/
            # 配置静态文件目录和可访问权限
        Alias /static/  /usr/local/python/lib/python2.7/site-packages/django/contrib/admin/static/ 
        <Directory "/static/">
            Order allow,deny
            Options Indexes
            Allow from all
            IndexOptions FancyIndexing
        </Directory>
    </VirtualHost>
    1. 配置centos7下的apache配置,在配置文件底部加入
    NAMEVirtualHost *:80
    # php的配置
    <VirtualHost *:80>
        DocumentRoot /home/qiu/php
        ServerName php.test2.com
    </VirtualHost>
    # apache的反向代理,python用
    <VirtualHost *:80>
        ServerName gunicorn.test2.com
        ProxyRequests Off
        <Proxy *>
            Order deny,allow
            Allow from all
        </Proxy>
        ProxyPass / http://127.0.0.1:8888/
        ProxyPassReverse / http://127.0.0.1:8888/
    </VirtualHost>
    1. centos默认开启防火墙和SELinux,先暂时关闭,不然网站部署后无法访问.并修改存放php和python程序的目录的权限为可读.下面是一些命令供参考:
    chmod 777 /home/qiu/workspace/p1
    chmod 777 /home/qiu/php
    /usr/sbin/sestatus -v | grep SEL  # 查看SELinux状态,如果SELinuxstatus参数为enable则为开启状态
    setenforce 0  # 关闭SELinux
    # centos6 使用如下命令:
    service stop iptables  # 停止防火墙
    chkconfig iptables off  # 禁用防火墙
    # centos7 使用如下命令:
    systemctl stop firewalld.service  # 停止防火墙
    systemctl disable firewalld.service  # 禁用防火墙
    1. 修改win7上的HOSTS文件.我的配置如下:
    192.168.248.61 php.test.com
    192.168.248.61 gunicorn.test.com
    192.168.248.55 php.test2.com
    192.168.248.55 gunicorn.test2.com

    根据自己的虚拟机的IP配置,这样的话,在WIN7的浏览器里访问这些域名实际上就是访问了虚拟机里的网站.

    1. 现在php网站已经可以访问了,apache也做了反向代理,将一部分请求转发到了8888端口,只需要用gunicorn启动python程序,监听8888端口就行了.cd到/home/qiu/workspace/p1目录下,执行:
      /usr/bin/python/bin/gunicorn p1.wsgi:application -b 127.0.0.1:8888
      其中wsgi指的是p1/p1/wsgi.py文件.这种启动方式默认使用gunicorn自带的sync服务器,性能较差,可以使用其他的服务器,例如gevent,eventlet或meinheld.需要通过pip安装:
    pip2711 install greenlet  # 这3个组件都依赖于greenlet,所以要先安装
    pip2711 install gevent
    pip2711 install eventlet
    pip2711 install meinheld

    如果要使用meinheld,可以这样写:
    /usr/bin/python/bin/gunicorn -k egg:meinheld#gunicorn_worker p1.wsgi:application -b 127.0.0.1:8888
    如果要使用gevent或者eventlet,这样写:
    /usr/bin/python/bin/gunicorn -k gevent p1.wsgi:application -b 127.0.0.1:8888
    /usr/bin/python/bin/gunicorn -k eventlet p1.wsgi:application -b 127.0.0.1:8888

    1. 这就完成了.在WIN7浏览器里分别输入
    php.test.com
    gunicorn.test.com
    php.test2.com
    gunicorn.test2.com

    就可以看到效果了.

    以上是关于VMware+CentOS+Apache+php+python+Django+gunicorn配置的主要内容,如果未能解决你的问题,请参考以下文章

    如何搭建lamp(CentOS7+Apache+MySQL+PHP)环境

    LAMP 建立 Wordpress 站点 Linux Apache MariaDB PHP

    Linux CentOS7 VMware LAMP架构Apache用户认证域名跳转Apache访问日志

    虚拟机的centos上安装wordpress

    Linux centos7 VMware Apache访问日志不记录静态文件访问日志切割静态元素过期时间

    CentOS下安装Apache步骤详解