【查了很多资料并尝试,刚配置好的生产环境,记录下,免得忘了。】

python/Django在开发时使用命令如下来运行测试:

python manage.py runserver 0.0.0.0:8000

但在真正部署运行时不能这么用,得配合Nginx+uwsgi来部署(这两个做什么用网络上资料很多)。
为了省去中间繁琐的不必要的配置步骤,采用如下集成包:

  1. Anaconda3-4.4.0 for
    Linux,Python的运行环境,包含了很多常用的库,下载地址:https://repo.continuum.io/archive/Anaconda3-4.4.0-Linux-x86_64.sh

  2. PHPStudy for Linux,支持Apache/Nginx/Tengine/Lighttpd,
    支持PHP5.2/5.3/5.4/5.5切换 ,同时包含了MysqL数据库,下载地址:http://lamp.phpstudy.net/,这里已经包含了安装教程

将以上安装程序上传到服务器的指定目录(或使用wget下载)
一、安装Python
所申请的阿里云服务器Centos7.2默认安装了python2.7的版本,但我们开发用的是python 3.6的,所以需要再安装。
直接运行安装包:

./Anaconda3-4.4.0-Linux-x86_64.sh

PS:如果出现权限不足的提示,则使用chmod +x 添加可执行权限
等待安装结束即可。
按自己开发所需的模块执行安装:

pip install django
pip install pyMysqL
......

二、安装Nginx

wget -c http://lamp.PHPstudy.net/PHPstudy-all.bin 
chmod +x PHPstudy.bin    #添加可执行权限的设置
./PHPstudy.bin     #运行安装


按提示选择所需的版本(我用的是Nginx+PHP5.5),执行安装、编译过程,等。。。用时23分钟:

可通过以下命令管理:

服务进程管理:PHPstudy (start|stop|restart|uninstall) #默认做为系统服务随开机启动
站点主机管理:PHPstudy (add|del|list)
ftpd用户管理:PHPstudy ftp (add|del|list)

这个步骤就完成了Nginx+PHP+MysqL的安装

三、配置uwsgi模块

前提:确保运行python manage.py runserver 0.0.0.0:8000能正常访问,即表示站点程序没有问题
本步骤重点参考并感谢如下博文:
http://blog.csdn.net/oushaoabc/article/details/51942355
http://www.linuxidc.com/Linux/2017-03/141806.htm

主要时间都是花在这边的配置,它主要是监听python/django的运行端口并与Nginx交互。
配置过程整理如下:

1、安装uwsgi
执行命令:

pip install uwsgi

2、在站点程序的根目录下(即与manage.py文件同级目录)

  • 创建runapp.py的uwsgi运行文件,代码如下:
#coding:utf-8
import os
from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE","sitename.settings")  # 这里是你自己的项目名
application = get_wsgi_application()

主要作用是通过uwsgi来加载django程序

  • 创建runapp.ini的uwsgi配置文件,内容如下:

    [uwsgi]
    http = 127.0.0.1:7070 #监听IP和端口
    chdir = /www/sitename #项目根目录
    module = runapp #uwsgi文件,注意不用把后缀.py加上去
    processes = 4 #开启4个进程(按需更改)
    threads = 2 #每个进程开启4个线程
    enable-threads = True #支持线程启动
    daemonize = /var/log/uwsgi.log #后台启动,并把日志记录到指定文件
    buffer-size = 21573

  • 在/etc下建uwsgi7070.ini

[uwsgi]
socket = 127.0.0.1:7070
master = true         #主进程
vhost = true          #多站模式
no-stie = true        #多站模式时不设置入口模块和文件
workers = 2           #子进程数
reload-mercy = 10     
vacuum = true         #退出、重启时清理文件
max-requests = 1000   
limit-as = 512
buffer-sizi = 30000
#pid文件,用于下面的脚本启动、停止该进程
pidfile = /var/run/uwsgi7070.pid
daemonize = /var/log/uwsgi/uwsgi7070.log

运行命令

uwsgi  /etc/uwsgi7070.ini

会出现如下提示:

[uWsgi] getting INI configuration from /etc/uwsgi7070.ini

Tips:这个步骤之前不懂,认为是要在浏览器中访问7070端口,但却浏览不到,以为是配错了,搞得配了好多次,多花了时间。

再用命令查看指定端口是否有线程启动:

lsof -i:7070

Tips:
可以查看/var/log/uwsgi/uwsgi7070.log日志文件中的内容判断配置及运行是否正常;
如果提示找不到lsof命令,则运行安装命令:yum install lsof -y

  • 将uwsgi配置为开机启动
    这个步骤建议做。其目的,是免得服务启重时都要手动执行 uwsgi /etc/uwsgi7070.ini 这个过程
    在/ect/init.d/目录下新建uwsgi7070文件,内容如下(可以参考init.d目录下其他启动文件的写法):
#! /bin/sh
# chkconfig: 2345 55 25
# Description: Startup script for uwsgi webserver on Debian. Place in /etc/init.d and
# run 'update-rc.d -f uwsgi defaults',or use the appropriate command on your
# distro. For CentOS/Redhat run: 'chkconfig --add uwsgi'

### BEGIN INIT INFO
# Provides: uwsgi
# required-Start: $all
# required-Stop: $all
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts the uwsgi web server
# Description: starts uwsgi using start-stop-daemon
### END INIT INFO


PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/anaconda3/bin
DESC="uwsgi deamo"
NAME=uwsgi7070
DAEMON=/root/anaconda3/bin/uwsgi
CONfigFILE=/etc/$NAME.ini

PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME

set -e
[ -x "$DAEMON" ] || exit 0

do_start() {
    $DAEMON $CONfigFILE || echo -n "uwsgi already running"
}

do_stop() {
    $DAEMON --stop $PIDFILE || echo -n "uwsgi not running"
    rm -f $PIDFILE
    echo "$DAEMON STOPED."
}

do_reload() {
    $DAEMON --reload $PIDFILE || echo -n "uwsgi can't reload"
}

do_status() {
    ps aux|grep $DAEMON
}

case "$1" in
 status)
    echo -en "Status $NAME: \n"
    do_status
 ;;
 start)
    echo -en "Starting $NAME: \n"
    do_start
 ;;
 stop)
    echo -en "Stopping $NAME: \n"
    do_stop
 ;;
 reload|graceful)
    echo -en "Reloading $NAME: \n"
    do_reload
 ;;
 *)
    echo "Usage: $SCRIPTNAME {start|stop|reload}" >&2
    exit 3
 ;;
esac
exit 0
uwsgi7070

然后执行命令:

chkconfig --add uwsgi7070 #添加服务
chkconfig uwsgi7070 on  #设置开机启动

Tips:
运行如下命令测试脚本是否可行:

./etc/init.d/uwsgi7070  start

这个地方碰到个错误,提示:

-bash: ./uwsgi7070: /bin/sh^M: bad interpreter: No such file or directory

查下了资料,是因为:sh脚本在windows系统下写的,不同系统的编码格式引起的。
解决方法:

vi test.sh
#在vi的命令状态下执行下列指令:
  :set ff
#看到如下信息 
 fileformat=dos 
#修改文件格式命令
 :set ff=unix
 :wq (存盘退出)

四、配置Nginx的站点服务
最后一步配置项:
打开 /PHPstudy/server/Nginx/conf/vhosts/PHPstudy.conf 文件,添加自己的站点配置:

server {
        listen       80;
        server_name  test.com; #你自己的域名或IP
        #配置资源文件,指定静态文件的位置,不然项目中css、js文件找不到,网站就没样式,也执行不了js脚本等
        location /static/ {
            alias  /web/sitesname/static/;
            allow   all;
        }
        #重定向到uwsgi的配置
        location / {            
            include  uwsgi_params;  #使用uwsgi模式
            uwsgi_pass  127.0.0.1:7070;  #映射到前面定义的7070端口
            uwsgi_param UWsgi_SCRIPT runapp;  #前面定义的py模块名
            uwsgi_param UWsgi_CHDIR /web/sitesname/; #站点目录 
            index  index.html index.htm;   
        }
    }

最后执行 PHPstudy restart或是reboot下看站点能否正常访问。

Centos7.2下nginx+uwsgi+python/Django搭建生产环境的更多相关文章

  1. cocoapods – 命令/ bin / sh失败,退出代码23

    适用于所有豆荚,无需豆荚但仍然是同样的错误.有任何想法吗?

  2. 当Xcode 4.6打开故事板时,ios – Xcode 5崩溃

    我从2个月前开始使用Xcode4.6的项目,现在我想发送给我的应用程序一切都可以,但是当我尝试在iOS7上运行应用程序时,我看到一些错误;所以我已经下载了新的Xcode5以查看错误在哪里,但是发生了什么事情是当我尝试打开与IBXcode崩溃的故事板.我试图在互联网上看到如何解决这个问题,但我没有找到任何关于这一点.此外,当我尝试使用iOS7在设备上运行应用程序时,Xcode给我的错误是:解决方法问

  3. Xcode 8.2,Swift编译器错误:错误:意外的输入文件

    从Xcode8.1更新到8.2后,我在项目中面临Swift编译器错误.我使用最新的Swift版本和Carthage进行依赖管理.它与Xcode8.1完美搭配,现在我已经尝试了几个小时来修复它,方法是清理DerivedData和Simulator数据,在Xcode中清理并删除Build文件夹,但似乎没有任何帮助.我只安装了一个Xcode版本.我得到以下编译错误:它所指的文件夹如下所示:它实际上在那里,所以我不知道发生了什么……如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举

  4. Swift教程01-使用switfc终端命令编译运行swift程序

    应公司的要求,要我研究swift语言,然后给大家进行swift技术培训,买了4,5本swift相关的书籍就开始研究了.今天来介绍一下,swift相关的终端的命令.1.首先我们在桌面上建一个swift文件夹用来存放.swift源文件,打开终端输入cd加空格拖拽文件夹到终端(使用命令ls,cd目录也是等效)3.使用vi命令创建一个HelloWorld.swift源文件进入swift文件夹后,然后使用如

  5. Swift设计模式之命令模式

    转自Swift设计模式原文Design-Patterns-In-Swift

  6. Ceph部署二RGW搭建

    背景CephRGW简介CephRGW基于librados,是为应用提供RESTful类型的对象存储接口。环境规划如上篇文章《Ceph部署(一)集群搭建》所述:4台服务器:1台作为Monitor,1台作为OSDRGW,还有两台作为OSD。部署CephRGW进入上文所述的my-cluster目录。该脚本会连接RGW,创建一个bucket并列出所有的bucket。正常的输出应该为:小结通过ceph-deploy命令,已经大大地简化了对Ceph集群和RGW的安装和配置。但如果想挑战下自己,或者想让自己了解更多,试

  7. EFColorPicker - 一个纯 Swift 的轻量级 iOS 颜色选择器

    EFColorPicker是一个纯Swift的轻量级iOS颜色选择器,受MSColorPicker启发。或执行以下命令:环境iOS8.0+Xcode9.0+Swift4.0+安装EFColorPicker可以通过CocoaPods进行获取。只需要在你的Podfile中添加如下代码就能实现引入:备注EFColorPicker的第一个版本从MSColorPicker转换而来,在此对MSColorPicker的作者sgl0v表示感谢!作者EyreFree,eyrefree@eyrefree.org协议EFQRC

  8. 使用LLDB调试Swift

    LLDB是个很好的选择。接下来我会探讨一些工作中常用到的一些LLDB调试技巧。LLDB拥有大量有用的调试工具。LLDB的bugreport命令可以生成一份详细的app当前状态的报告。这些命令有针对C++,Objective-C,Swift和RenderScript的。使用LLDB的这些命令可以让调试变得更自动化。process用于控制要调试的进程,可把LLDB依附到特定target或从target上解绑。processstatus用于打印当前进程及断点处的相关信息:使用如下命令可继续执行:这等同于Xcod

  9. android – 来自adb的’grep’命令的问题

    当我用adb写的时候:我得到错误输出:但如果我将它拆分为两个操作符:它工作正常.如果唯一的方法是将它拆分为两个–首先进入adbshell,然后运行Inquire,有一种方法可以从c#中执行此操作吗?

  10. phonegap运行android – create命令失败,退出代码8 – linux

    我做了一些googleing但没有发现任何相关内容.任何帮助赞赏.请务必使用裸体vm进行尝试没有nodejs安装或依赖问题.基督教解决方法我刚刚面临同样的问题,问题是没有正确设置sdk工具的路径:请尝试以下方法:

随机推荐

  1. 在airgapped(离线)CentOS 6系统上安装yum软件包

    我有一个CentOS6系统,出于安全考虑,它已经被空气泄漏.它可能从未连接到互联网,如果有,它很长时间没有更新.我想将所有.rpm软件包放在一个驱动器上,这样它们就可以脱机安装而无需查询互联网.但是,我在测试VM上遇到的问题是,即使指定了本地路径,yum仍然会挂起并尝试从在线存储库进行更新.另外,有没有办法使用yum-utils/yumdownloader轻松获取该包的所有依赖项和所有依赖项?目前

  2. centos – 命名在日志旋转后停止记录到rsyslog

    CentOS6.2,绑定9.7.3,rsyslog4.6.2我最近设置了一个服务器,我注意到在日志轮换后,named已停止记录到/var/log/messages.我认为这很奇怪,因为所有日志记录都是通过rsyslog进行的,并且named不会直接写入日志文件.这更奇怪,因为我在更新区域文件后命名了HUPed,但它仍然没有记录.在我停止并重新启动命名后,记录恢复.这里发生了什么?

  3. centos – 显示错误的磁盘大小

    对于其中一个磁盘,Df-h在我的服务器上显示错误的空白区域:Cpanel表明它只有34GB免费,但还有更多.几分钟前,我删除了超过80GB的日志文件.所以,我确信它完全错了.fdisk-l/dev/sda2也显示错误:如果没有格式化,我该怎么做才能解决这个问题?并且打开文件描述符就是它需要使用才能做到这一点.所以…使用“lsof”并查找已删除的文件.重新启动写入日志文件的服务,你很可能会看到空间可用.

  4. 如何在centos 6.9上安装docker-ce 17?

    我目前正在尝试在centOS6.9服务器上安装docker-ce17,但是,当运行yuminstalldocker-ce时,我收到以下错误:如果我用跳过的标志运行它我仍然得到相同的消息,有没有人知道这方面的方法?

  5. centos – 闲置工作站的异常负载平均值

    我有一个新的工作站,具有不寻常的高负载平均值.机器规格是:>至强cpu>256GB的RAM>4x512GBSSD连接到LSI2108RAID控制器我从livecd安装了CentOS6.564位,配置了分区,网络,用户/组,并安装了一些软件,如开发工具和MATLAB.在启动几分钟后,工作站负载平均值的值介于0.5到0.9之间.但它没有做任何事情.因此我无法理解为什么负载平均值如此之高.你能帮我诊断一下这个问题吗?

  6. centos – Cryptsetup luks – 检查内核是否支持aes-xts-plain64密码

    我在CentOS5上使用cryptsetupluks加密加密了一堆硬盘.一切都很好,直到我将系统升级到CentOS6.现在我再也无法安装磁盘了.使用我的关键短语装载:我收到此错误:在/var/log/messages中:有关如何装载的任何想法?找到解决方案问题是驱动器使用大约512个字符长的交互式关键短语加密.出于某种原因,CentOS6中的新内核模块在由旧版本创建时无法正确读取512个字符的加密密钥.似乎只会影响内核或cryptsetup的不同版本,因为在同一系统上创建和打开时,512字符的密钥将起作用

  7. centos – 大量ssh登录尝试

    22个我今天登录CentOS盒找到以下内容这是过去3天内的11次登录尝试.WTF?请注意,这是我从我的提供商处获得的全新IP,该盒子是全新的.我还没有发布任何关于此框的内容.为什么我会进行如此大量的登录尝试?是某种IP/端口扫描?基本上有4名匪徒,其中2名来自中国,1名来自香港,1名来自Verizon.这只发生在SSH上.HTTP上没有问题.我应该将罪魁祸首子网路由吗?你们有什么建议?

  8. centos – kswap使用100%的CPU,即使有100GB的RAM也可用

    >Linux内核是否应该足够智能,只需从内存中清除旧缓存页而不是启动kswap?

  9. centos – Azure将VM从A2 / 3调整为DS2 v2

    我正在尝试调整前一段时间创建的几个AzureVM,从基本的A3和标准A3到标准的DS2v2.我似乎没有能力调整到这个大小的VM.必须从头开始重建服务器会有点痛苦.如果它有所不同我在VM中运行CentOS,每个都有一个带有应用程序和操作系统的磁盘.任何人都可以告诉我是否可以在不删除磁盘的情况下删除VM,创建新VM然后将磁盘附加到新VM?

  10. centos – 广泛使用RAM时服务器计算速度减慢

    我在非常具体的情况下遇到服务器速度下降的问题.事实是:>1)我使用计算应用WRF>2)我使用双XeonE5-2620v3和128GBRAM(NUMA架构–可能与问题有关!

返回
顶部