Cenos(6.6/7.1)下从源码安装Python+Django+uwsgi+nginx到写nginx的环境部署(一)
梳理下这几个的关系:
centos是redhat的社区版操作系统。
Python2.7.5是开发语言(centos6.5下自带的python是2.6.6版本,所以需要源码更新,而centos7.1下面自带的是2.7.5)
pip1.5.4是一个安装和管理 Python 包的工具 ,是easy_install的替代品,就像yum一样。用它可以安装指定版本的Django和mysql
Django是python下的web开发框架之一
Nginx是继Apache之后的高性能httpweb服务器,不再赘述。
WSGI是一种Web服务器网关接口。它是一个Web服务器(如nginx)与应用服务器(如uWSGI服务器)通信的一种规范。
MySQLdb是python提供给mysql的接口模块。
1.首先安装Centos7.1
网易的镜像下载地址:
http://mirrors.163.com/centos/7.1.1503/isos/x86_64/CentOS-7-x86_64-DVD-1503-01.iso
下载下来用UltraISO将镜像写入到U盘里面或者用虚拟机安装,过程不必赘述。
尽量不要装精简版:否则进去了之后要配yum源,甚至连ifconfig命令都没有
yum配置
http://www.centoscn.com/CentOS/config/2015/0214/4718.html
ifconfig命令安装:
http://www.centoscn.com/CentosBug/osbug/2014/0916/3750.html
2.安装python2.7.5(Centos7以上可以略过,因为本身就是2.7.5版本)
- [root@localhost ~]# wget http://www.python.org/ftp/python/2.7.5/Python-2.7.5.tar.bz2
[root@localhost ~]# tar -jxvf Python-2.7.5.tar.bz2
[root@localhost ~]# cd Python-2.7.5
[root@localhost Python-2.7.5]# ./configure --prefix=/usr/local/python2.7(指定目录)
[root@localhost Python-2.7.5]# make && make install
[root@localhost Python-2.7.5]# echo "PATH=/usr/local/python2.7/bin:$PATH" >> /etc/profile
[root@localhost Python-2.7.5]# source /etc/profile
[root@localhost Python-2.7.5]# python -V
Python 2.7.5
Python 2.7.5安装成功。
3.安装pip
- #wget "https://pypi.python.org/packages/source/p/pip/pip-1.5.4.tar.gz#md5=834b2904f92d46aaa333267fb1c922bb" --no-check-certificate
# tar -xzvf pip-1.5..tar.gz
# cd pip-1.5.
# python setup.py install
pip安装成功
4.利用pip安装DJango
- [root@localhost ~]# pip install Django==1.8.5
5.安装MySQLdb
- [root@localhost ~]# yum install MySQL-python.x86_64
6.安装必须的一些系统库
- yum install gcc-c++
yum insatll libxml2*
7.安装nginx
安装nginx之前需要安装PCRE库的安装
- #wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/
#tar –zxvf pcre-8.21.tar.gz
#cd pcre-8.21
#./configure- #make
- #make install
安装zlib库安装
- tar -zxvf zlib-1.2..tar.gz
- cd zlib-1.2.
- ./configure
- make
- makeinstall
安装openSSL库
- #wget http://www.openssl.org/source/
#tar –zxvf openssl-1.0.0.tar.gz
#cd openssl-1.0.0
#./configure#make- #make install
以上三个库确保安装好后 接下来安装nginx
- #wget http://nginx.org/download/nginx-1.4.2.tar.gz
- #tar xf nginx-1.4..tar.gz
- #cd nginx-1.4.
- #./configure --prefix=/usr/local/nginx --conf-path=/etc/nginx/nginx.conf --with-pcre=/usr/src/pcre-8.21 --with-zlib=/usr/src/zlib-1.2.
- #make
- #make install
- #/usr/local/tengine/sbin/nginx 或者声明到/etc/profile 中
将nginx的执行路径声明到全局变量里面来
vim /etc/profile 在export上面增加这一句
- PATH=$PATH:/usr/local/nginx/sbin //这一句
- export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL
重读一下配置文件或者新开一个shell就可以看到
- [root@localhost ~]# echo $PATH
- /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/local/nginx/sbin:/root/bin
然后nginx就可以直接执行nginx程序了
查看nginx80端口
- [root@localhost ~]# netstat -tnlp
- Active Internet connections (only servers)
- Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
- tcp 127.0.0.1: 0.0.0.0:* LISTEN /uwsgi
- tcp 0.0.0.0: 0.0.0.0:* LISTEN /nginx: master
- tcp 192.168.122.1: 0.0.0.0:* LISTEN /dnsmasq
- tcp 0.0.0.0: 0.0.0.0:* LISTEN /sshd
- tcp 127.0.0.1: 0.0.0.0:* LISTEN /master
- tcp6 ::: :::* LISTEN /sshd
- tcp6 ::: :::* LISTEN /master
表示已经启动成功 在浏览器输入本机IP即可访问nginxweb页面
index页面默认存放于cd /usr/local/nginx/html 里面的index.html
8.安装Django
上文已经安装过了,此处我们查看Django的版本
- [root@localhost ~]# python -c "import django; print(django.get_version())"
- 1.8.
Django框架已经安装成功,版本为1.8.5
创建一个Django项目
Django的项目 不像 php的项目,一般php的项目会将所有的代码放到服务器上(/wwwroot/xx.php)这样运行,但实际上这样的方法不太安全,也更容易被别人看到代码。
Django的项目代码可以放在任何目录下,如 /usr/local/xweb/
- [root@localhost ~]# cd /usr/local/xweb/
- [root@localhost xweb]# tree xweb/ d//jango-admin.py startproject xweb 创建一个名为 xweb 的项目
- xweb/
- ├── __init__.py
- ├── __init__.pyc
- ├── settings.py
- ├── settings.pyc
- ├── urls.py
- ├── urls.pyc
- ├── wsgi.py
- ├── wsgi.pyc
- └── xweb.ini
- directories, files
外层的 xweb只是一个包含项目的 名称, 可以将该目录名修改
内层的 xweb 目录里面 有一个空的__init__.py ,这是python的写法,告诉python这是一个将被引用的包
manage.py 是项目管理的主要方法
# xweb/manage.py help 可以看到好多方法
下面是 django官网关于django-admin.py & manage.py 的命令方法介绍:
- https://docs.djangoproject.com/en/1.6/ref/django-admin/
运行一个Django项目
简单的运行方式为:
- #python manage.py runserver
Validating models... - errors found
- July , - ::
- Django version 1.6., using settings 'dj.settings'
- Starting development server at http://127.0.0.1:8000/
- Quit the server with CONTROL-C.
- #python manage.py runserver
如果你想将端口号修改,或者ip修改,可以执行:
- # python manage.py runserver / 0.0.0.0:
访问上述地址,就会看到 Welcome to Django 页面了。
这只是使用Django自带的webserver,下面我们要通过uwsgi将nginx与django组合到一起。
9.安装uwsgi
通过uwsgi将Nginx与Django组合一起
官方文档:
- http://uwsgi-docs.readthedocs.org/en/latest/WSGIquickstart.html#installing-uwsgi-with-python-support
先安装uwsgi
- # yum install python-devel
- # pip install uwsgi
- total build time: seconds
- *** uWSGI is ready, launch it with /usr/bin/uwsgi ***
- Successfully installed uwsgi
- Cleaning up...
- total build time: seconds
# 小小的试验一下
# uwsgi --help // 一堆命令参数,还是看文档吧
# 配置nginx
在nginx.conf 的server里面添加如下
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|js|css)$ {
root /opt/xspeeder/xweb;
}
location / {
root /opt/xspeeder/xweb/xapp/templates/login;
index login.html;
uwsgi_pass 127.0.0.1:9000;
include uwsgi_params;
}
# uwsgi 调用参数
# 根据官网的说明:
# 假设你的django项目目录在/usr/local/xweb下
- uwsgi --socket 127.0.0.1: --chdir /usr/local/xweb/ --wsgi-file xweb/wsgi.py --master --processes --threads
# ok! 再次访问nginx配置的页面,发现是不是看到了django的欢迎界面!
# 再次验证了一点,python的项目不需要放在 wwwroot类似的目录中,可以放在任意目录下!
# 每次这么写是不是很麻烦~uwsgi提供用配置文件的方式执行:
# 创建一个 xweb.ini(放在和__init__.py同一路径下)
[uwsgi]
socket = 127.0.0.1:9000
pidfile=/run/uwsgi.pid
chdir = /xspeeder/xweb/
wsgi-file = xweb/wsgi.py
master = true
processes = 2
threads = 2
- uwsgi添加系统服务启动项
[Unit]
Description=uwsgi
After=network.target syslog.target xsdaemon.service
[Service]
Type=forking
PIDFile=/run/uwsgi.pid
ExecStart=/usr/bin/uwsgi /xspeeder/xweb/xweb/xweb.ini
ExecStop=/usr/bin/kill -9 `cat /run/uwsgi.pid`
PrivateTmp=true
[Install]
WantedBy=multi-user.target
参考:
- http://www.cnblogs.com/zhouej/archive/2012/03/25/2379646.html
- # uwsgi xweb.ini
此时再使用此命令可溶氧实现上面冗长命令的的功能。
全路径uwsgi /usr/local/xweb/xweb/xweb.ini 然后将这句命令写到/etc/rc.d/rc.local里面进行开机启动执行(注意:centos7rc.local已经不再是6系列的开机启动最后一个脚本了,为了兼容,如果想使用rc.local就必须给他加上x权限。)
# 到此,你的django就可以通过uwsgi在nginx下运行了!
- web客户端 <---> uWSGI <---> Django
正常情况下我们不会让浏览器直接和uWSGI直接对话。那是web服务器的工作,它就像一个中间人.
10.编写cenos7下面的nginx服务脚本
在/usr/lib/systemd/system下创建nginx.service文件内容如下
- [Unit]
- Description=nginx
- Documentation=http://nginx.org/en/docs/
- After=network.target remote-fs.target nss-lookup.target
- [Service]
- Type=forking
- PIDFile=/usr/local/nginx/logs/nginx.pid
- ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /etc/nginx/nginx.conf
- ExecStart=/usr/local/nginx/sbin/nginx -c /etc/nginx/nginx.conf
- ExecReload=/usr/bin/kill -s HUP $MAINPID
- ExecStop=/usr/bin/kill -s QUIT $MAINPID
- PrivateTmp=true
- [Install]
- WantedBy=multi-user.target
关于这个service文件的具体内容,我会另外详细学习和理解。
- 启动服务
- $ sudo systemctl start nginx.service
- #重启
- $ sudo systemctl restart nginx.service
- #重载
- $ sudo systemctl reload nginx.service
- #停止
- $ sudo systemctl stop nginx.service
[root@localhost ~]# systemctl status nginx.service
nginx.service - nginx
Loaded: loaded (/usr/lib/systemd/system/nginx.service; enabled)
Active: active (running) since 一 2015-11-16 14:47:40 CST; 1h 42min ago
Docs: http://nginx.org/en/docs/
Process: 1324 ExecStart=/usr/local/nginx/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
Process: 907 ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
Main PID: 1330 (nginx)
CGroup: /system.slice/nginx.service
├─1330 nginx: master process /usr/local/nginx/sbin/nginx -c /etc/nginx/nginx.conf
└─1332 nginx: worker process
11月 16 14:47:39 localhost.localdomain nginx[907]: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
11月 16 14:47:39 localhost.localdomain nginx[907]: nginx: configuration file /etc/nginx/nginx.conf test is successful
11月 16 14:47:40 localhost.localdomain systemd[1]: Failed to read PID from file /usr/local/nginx/logs/nginx.pid: Invalid...ument
11月 16 14:47:40 localhost.localdomain systemd[1]: Started nginx.
Hint: Some lines were ellipsized, use -l to show in full.
至此,项目已经可以通过nginx开机自启动了。
附:systemd的有关在:
- http://www.cnblogs.com/sysk/p/4969368.html
Cenos(6.6/7.1)下从源码安装Python+Django+uwsgi+nginx到写nginx的环境部署(一)的更多相关文章
- centos7 nginx配置httpsCenos(6.6/7.1)下从源码安装Python+Django+uwsgi+nginx环境部署(二)
1.yum安装nginx 下载对应当前系统版本的nginx包(package) # wget http://nginx.org/packages/centos/7/noarch/RPMS/ngin ...
- Linux基础--------监控系统、进程管理、软件包管理-------free、dd、kill、 rpm、yum、源码安装python
作业一:1) 开启Linux系统前添加一块大小为15G的SCSI硬盘 2) 开启系统,右击桌面,打开终端 3) 为新加的硬盘分区,一个主分区大小为5G,剩余空间给扩展分区,在扩展分区上划分1个逻辑分区 ...
- 06 swap命令,进程管理,rmp命令与yum命令,源码安装python
作业一: 1)开启Linux系统前添加一块大小为15G的SCSI硬盘 2)开启系统,右击桌面,打开终端 3)为新加的硬盘分区,一个主分区大小为5G,剩余空间给扩展分区,在扩展分区上划分1个逻辑分区,大 ...
- RHEL6从源码安装python及其他软件包
RHEL6从源码安装python及其他软件包 ## install ssl $ sudo yum install openssl-devel or: $ sudo apt-get install li ...
- RedHat7下PostGIS源码安装
本文介绍在RedHat7环境下安装使用PostGIS的流程. 1. PostgreSQL 1.1 yum安装PostgreSQL 这个比较简单,直接使用yum安装即可. $ sudo yum inst ...
- debian下如何源码安装tmux
一.源码安装ncurses库 1.1 获取源码 wget https://invisible-island.net/datafiles/release/ncurses.tar.gz tar xvf n ...
- 源码安装python +NGINX 的坎坷路 +uwsgi安装 部署django 的CRM项目
一.Nginx安装(基于ubuntu17.10 版本) 首先我们是基于源码安装,主要有如下步骤 1.安装依赖包 1.安装gcc g++的依赖库 sudo apt-get install build-e ...
- Linux(CentOS或RadHat)下MySQL源码安装
安装环境: CentOS6.3 64位 软件: Mysql-5.6 所需包: gcc/g++ :MySQL 5.6开始,需要使用g++进行编译.cmake :MySQL 5.5开始,使用cmake进 ...
- centos6下从源码安装setuptools和pip
1. 下载setuptools及pip的源码包 setuptools与pip都是python的模块 setuptools源码包: https://pypi.python.org/pypi/setupt ...
随机推荐
- HttpClientUtils.java
package com.vcredit.ddcash.batch.util; import java.io.BufferedReader;import java.io.ByteArrayOutputS ...
- 树莓派文档翻译 - 使用 - GPIO: 树莓派A和B
https://www.raspberrypi.org/documentation/usage/gpio/README.md 2016/6/25 GPIO: 树莓派A和B ##介绍GPIO和在树莓派上 ...
- Codeforces Round #376 (Div. 2) C D F
在十五楼做的cf..一会一断...比赛的时候做出了ABCF 就没有时间了 之后没看题解写出了D..E是个神奇的博弈(递推或者dp?)看了题解也没有理解..先写了CDF.. C 有n个袜子 每个袜子都有 ...
- windows查看端口命令
netstat -ano 查看所有端口 netstat -ano|findstr "1935" 查看1935端口占用PID tasklist|findstr "PID”
- C++和C代码互相调用是不可避免的
C++ 编译器能够兼容C语言发编译方式 C++编译器会优先使用C++ 编译的方式 extern 关键字能强制让C++编译器进行C方式的编译 external “C” { //do C-style co ...
- jfinal路由简单解析
在jfinal中,通过JFinalFilter对所有的类进行过滤. 以下是路由的调用关系(我在调用关系旁边做了标记,会贴出具体的代码和解释): -1- Config: Routes -2- Inter ...
- 【Android测试】【第十八节】Espresso——环境搭建
◆版权声明:本文出自胖喵~的博客,转载必须注明出处. 转载请注明出处:http://www.cnblogs.com/by-dream/p/5604642.html 前言 首先还是老规矩,看看官方文档吧 ...
- 回归测试---junit
回归测试是指修改了旧代码后,重新进行测试以确认修改没有引入新的错误或导致其他代码产生错误. JUnit是一个Java语言的单元测试框架. http://blog.csdn.net/andycpp/ar ...
- dom4j微信接口开发
新建一个web项目,我用的是eclipse和tomcat7.0 ,外网环境用的nat123 先建立一个实体bean:TextMessage /** * xml基本对象 * @author xiaohu ...
- MongoDB安装并设置为windows服务以使其开机自启
在MongoDB的官方下载windows平台的压缩zip文件,地址:https://www.mongodb.org/dr/fastdl.mongodb.org/win32/mongodb-win32- ...