VMware+CentOS+Apache+php+python+Django+gunicorn配置
目标: 在win7上安装vmware,并新建2个虚拟机,centos6.6/7.0,并在虚拟机里将python网站和php网站同时配置在一个apache上.1. 安装vmware,并新建2个虚拟机,分别使用CentOS6.6和CentOS7.0.安装完成后分别命名为centos6和centos7.注意: 虚拟机的网络连接都设置为桥接模式有些操作需要superuser权限,所以为了方便,先s
目标: 在win7上安装vmware,并新建2个虚拟机,centos6.6/7.0,并在虚拟机里将python网站和php网站同时配置在一个apache上.
1. 安装vmware,并新建2个虚拟机,分别使用CentOS6.6和CentOS7.0.安装完成后分别命名为centos6和centos7.
注意: 虚拟机的网络连接都设置为桥接模式
有些操作需要superuser权限,所以为了方便,先su获取权限.以下所有操作都有superuser权限.
配置虚拟机的网络,使得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就能连接网络了.
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或者其他工具连接使用.安装必要的开发工具集和php.使用命令:
yum groupinstall "Development tools"
yum install php php-devel
- 接下来就是安装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()并回车可以退出.
- 安装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
- 用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
- 用php做一个网站.我们做一个简单的php页面.
cd /home/qiu
mkdir php
cd php
vim 1.php
输入如下内容:
<!DOCTYPE html>
<html>
<body>
<?php
echo "My first PHP script!";
?>
</body>
</html>
- 安装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 # 列出所有端口
- 配置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>
- 配置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>
- 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 # 禁用防火墙
- 修改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的浏览器里访问这些域名实际上就是访问了虚拟机里的网站.
- 现在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
- 这就完成了.在WIN7浏览器里分别输入
php.test.com
gunicorn.test.com
php.test2.com
gunicorn.test2.com
就可以看到效果了.
更多推荐
所有评论(0)