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

输入如下内容:


<html>
    <body>
        
            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访问

    # 管理员邮箱
    ServerAdmin [email protected] 
    # php文件存放的位置                           
    DocumentRoot "/home/qiu/php"                      
    # 域名
    ServerName php.test.com                               
    # 错误日志存放位置
    ErrorLog "logs/ce.err"
    CustomLog "logs/ce.access" common
     # 静态文件目录
    
        Options FollowSymLinks
        AllowOverride All
        Order deny,allow
        Allow from all
    

# 配置反向代理,python用这个配置

    ServerAdmin [email protected]
    ServerName gunicorn.test.com
    ProxyRequests Off
    
        Order deny,allow
        Allow from all
    
        # 以/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/ 
    
        Order allow,deny
        Options Indexes
        Allow from all
        IndexOptions FancyIndexing
    
  1. 配置centos7下的apache配置,在配置文件底部加入
NAMEVirtualHost *:80
# php的配置

    DocumentRoot /home/qiu/php
    ServerName php.test2.com

# apache的反向代理,python用

    ServerName gunicorn.test2.com
    ProxyRequests Off
    
        Order deny,allow
        Allow from all
    
    ProxyPass / http://127.0.0.1:8888/
    ProxyPassReverse / http://127.0.0.1:8888/
  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

就可以看到效果了.

你可能感兴趣的:(linux)