Django上线部署之uWSGI
环境:
1.CentOS 7.2 64位
2.SQL Server 2016 Enterprise 64位
3.Python 3.6.5 64位
4.root用户
要求:
按照顺序部署
1.Windows Server 2016 Datacenter 64位 操作系统下安装数据库
2.CentOS 7.2 下 Python环境搭建
yum -y install gcc gcc-c++ zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel tree
wget https://www.python.org/ftp/python/3.6.5/Python-3.6.5.tar.xz && tar xf Python-3.6.5.tar.xz
cd Python-3.6. && ./configure --prefix=/opt/python365 --enable-shared && make && make install
/opt/python365/bin/python3. -V && ln -sf /opt/python365/bin/python3. /usr/local/bin/python3 && ln -sf /opt/python365/bin/pip3. /usr/local/bin/pip3
pip3 -V && pip3 install virtualenv && ln -sf /opt/python365/bin/virtualenv /usr/local/bin/virtualenv && pip3 install virtualenvwrapper
pip3 -V && pip3 install ipython && ln -sf /opt/python365/bin/ipython3 /usr/local/bin/ipython
echo "PS1=\"[\[\e[32;40m\]\u\[\e[37;40m\]@\h \[\e[33;40m\]>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> \[\e[36;40m\]\w\[\e[0m\]]\\\\$ \n\"" >> /etc/bashrc
echo "set nu" >> /etc/vimrc
echo "export WORKON_HOME=~/envs" >> /etc/bashrc
echo "export VIRTUALENVWRAPPER_HOOK_DIR=~/envs" >> /etc/bashrc
echo "export VIRTUALENVWRAPPER_PYTHON=/usr/local/bin/python3" >> /etc/bashrc
echo "source /opt/python365/bin/virtualenvwrapper.sh" >> /etc/bashrc
3.安装ODBC for SQL Server
# 安装ODBC for SQL Server 驱动
# 实际上是安装如下三个包
# https://packages.microsoft.com/rhel/7/prod/unixODBC-2.3.7-1.rh.x86_64.rpm
# https://packages.microsoft.com/rhel/7/prod/msodbcsql-13.1.9.2-1.x86_64.rpm
# https://packages.microsoft.com/rhel/7/prod/unixODBC-devel-2.3.7-1.rh.x86_64.rpm
curl https://packages.microsoft.com/config/rhel/7/prod.repo > /etc/yum.repos.d/mssql-release.repo
yum remove unixODBC-utf16 unixODBC-utf16-devel
ACCEPT_EULA=Y yum -y install msodbcsql && yum -y install unixODBC-devel # 安装连接数据库的工具,一般项目上用不到,可不安装
ACCEPT_EULA=Y yum install mssql-tools && ln -sf /opt/mssql-tools/bin/bcp /usr/local/bin/bcp && ln -s /opt/mssql-tools/bin/sqlcmd /usr/local/bin/sqlcmd # 以下是Django的settings.py中数据库配置
DATABASES = {
'default': {
'ENGINE': 'sql_server.pyodbc',
'NAME': 'db',
'USER': 'user',
'PASSWORD': 'pwd',
'HOST': 'ip',
'PORT': '',
'OPTIONS': {
'driver': 'ODBC Driver 13 for SQL Server',
},
},
} DATABASE_CONNECTION_POOLING = True
4.安装uwsgi和uwsgitop(查看uwsgi状态的工具,如果使用securecrt 连接centos,终端需设置成 xterm)
pip install uwsgi uwsgitop && ln -sf /opt/python365/bin/uwsgi /usr/local/bin/uwsgi && ln -sf /opt/python365/bin/uwsgitop /usr/local/bin/uwsgitop
# uwsgi 配置如下:
[uwsgi]
#用户属组ID
gid=
#用户ID
uid=
#启用主进程
master=true
#主进程以root用户启动
master-as-root=true
#4个进程
processes=
#每个进程启用5个线程
threads=
#停止运行后清理动态生成的文件
vacuum=true
#修改当前工作路径,即项目根目录
chdir=/srv/www/
#wsgi文件路径,可以是相对路径(相对chdir),可以是绝对路径
wsgi-file=www/wsgi.py
#采用unixsocket通信
socket=%(chdir)uwsgi.sock
#采用unixsocket通信时,文件权限
chmod-socket=
#配合uwsgitop使用,命令:uwsgitopuwsgi.stats查看uWSGI运行状态
stats=%(chdir)uwsgi.stats
#uwsgi --[reload|stop] uwsgi.pid
pidfile=%(chdir)uwsgi.pid
#以后台模式运行,并且将日志写入文件
daemonize=%(chdir)uwsgi.log
#设置日志文件最大为10MB,最后一次日志输出超过这个值则分割
log-maxsize=
#打印日志添加日期时间前缀
log-date=%%F%%H:%%M:%%S
#禁用请求日志,只记录交互日志和错误日志,请求日志可在nginx中记录
disable-logging=true
#请求日志添加内存和虚拟内存信息,disable-logging是false时生效
#memory-report=true
#Python启用线程,由于GIL的限制,可能没啥用,未测试
enable-threads=true
#socket监听数,不能超过系统中net.core.somaxconn值
listen=
#主进程死了,其它进程一起死
no-orphans=true
#进程请求总数累计超过这个值则重启,用reload-on-as和reload-on-rss替换
#max-requests=
#(单位:MB)进程虚拟内存超过限制则重启
reload-on-as=
#(单位:MB)进程物理内存超过限制则重启
reload-on-rss=
#超时重启进程
harakiri=
#超时重启进程后打印日志
harakiri-verbose=true
#(单位:B)
buffer-size=
#(单位:B)
post-buffering=
#(单位:B)限制HTTP请求体60MB
limit-post=
#静态文件路由
static-map=/static=%(chdir)static
static-map=/media=%(chdir)media
5.安装nginx
wget http://nginx.org/download/nginx-1.16.1.tar.gz
tar -zxvf nginx-1.16..tar.gz
cd nginx-1.16./ && ./configure --prefix=/opt/nginx --with-http_ssl_module --with-http_gzip_static_module && make && make install
/opt/nginx/sbin/nginx -V && ln -sf /opt/nginx/sbin/nginx /usr/local/bin/nginx # nginx.conf配置如下:
pid logs/nginx.pid;
user chimoph chimoph; worker_processes ;
worker_rlimit_nofile ; events {
use epoll;
worker_connections ;
} http {
include mime.types;
default_type application/octet-stream; server_tokens off; sendfile on;
tcp_nopush on;
keepalive_timeout ; limit_conn_zone $binary_remote_addr zone=conn_ip:10m;
limit_req_zone $binary_remote_addr zone=req_ip:10m rate=5r/s;
limit_conn_log_level info;
limit_req_status ; gzip on;
gzip_vary on;
gzip_static on;
gzip_min_length 10k;
gzip_comp_level ;
gzip_http_version 1.0;
gzip_types *; log_format main '$time_iso8601|$http_x_forwarded_for|$remote_addr|$remote_user|'
'$request_length|$body_bytes_sent|$request_time|$upstream_response_time|'
'$status|"$request"|"$http_referer"|"$http_user_agent"'; server {
listen ;
server_name 192.168.70.110;
charset utf-;
client_max_body_size 60M; location /media {
alias /srv/www/media;
access_log logs/static.log main;
expires 30d;
} location /static {
alias /srv/www/static;
access_log logs/static.log main;
expires 30d;
} location / {
uwsgi_pass unix:///srv/www/uwsgi.sock;
include uwsgi_params;
access_log logs/access.log main;
limit_conn conn_ip ;
limit_req zone=req_ip burst=;
} error_page /50x.html;
location = /50x.html {
root html;
}
}
}
6.安装Redis
wget http://download.redis.io/releases/redis-4.0.14.tar.gz
tar -zxvf redis-4.0..tar.gz && cd redis-4.0. && make && make PREFIX=/opt/redis install
/opt/redis/bin/redis-cli -v && ln -sf /opt/redis/bin/redis-cli /usr/local/bin/redis-cli
/opt/redis/bin/redis-server -v && ln -sf /opt/redis/bin/redis-server /usr/local/bin/redis-server # [redis.conf] 如下
dir /opt/redis/
loglevel notice
logfile redis.log
pidfile redis.pid
timeout
protected-mode yes
bind 127.0.0.1
port
tcp-backlog
tcp-keepalive
databases
daemonize yes
supervised no
save
save
save
stop-writes-on-bgsave-error yes
rdbcompression yes
rdbchecksum yes
dbfilename dump.rdb
maxclients
maxmemory 1gb
maxmemory-policy noeviction
slowlog-log-slower-than
7.启动
redis-server /opt/redis/redis.conf && uwsgi /srv/www/uwsgi.ini && nginx
8.安装supervisor
yum install epel-release && yum install -y supervisor && systemctl enable supervisord && systemctl start supervisord && systemctl status supervisord
Django上线部署之uWSGI的更多相关文章
- [py]django上线部署-uwsgi+nginx+py3/django1.10
https://github.com/lannyMa/django-uwsgi-nginx.git 单机调试启动-确保项目代码没问题 - 克隆代码进入项目 git clone https://gith ...
- Django【部署】uwsgi+nginx
uwsgi 遵循wsgi协议的web服务器 uwsgi的安装 pip install uwsgi uwsgi的配置 项目部署时,需要把settings.py文件夹下的: DEBUG = FALSE A ...
- Django上线部署之IIS
环境: 1.Windows Server 2016 Datacenter 64位 2.SQL Server 2016 Enterprise 64位 3.Python 3.6.0 64位 4.admin ...
- Django上线部署之Apache
环境: 1.Windows Server 2016 Datacenter 64位 2.SQL Server 2016 Enterprise 64位 3.Python 3.6.0 64位 4.admin ...
- 第四百零二节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署,uwsgi安装和启动,nginx的安装与启动,uwsgi与nginx的配置文件+虚拟主机配置
第四百零二节,Django+Xadmin打造上线标准的在线教育平台—生产环境部署,uwsgi安装和启动,nginx的安装与启动,uwsgi与nginx的配置文件+虚拟主机配置 软件版本 uwsgi- ...
- 玩转Django2.0---Django笔记建站基础十二(Django项目上线部署)
第十二章 Django项目上线部署 目前部署Django项目有两种主流方案:Nginx+uWsGI+Django或者Apache+uWSGI+Django.Nginx作为服务器最前端,负责接收浏览器的 ...
- 五步教你实现使用Nginx+uWSGI+Django方法部署Django程序
Django的部署可以有很多方式,采用nginx+uwsgi的方式是其中比较常见的一种方式. 在这种方式中,我们的通常做法是,将nginx作为服务器最前端,它将接收WEB的所有请求,统一管理请求.ng ...
- debian完整部署 Nginx + uWSGI + Django
手工部署一个Django服务器真心不容易,需要安装很多东西.从头开始搭建服务器,主要是为了梳理一下后续开发中一般为碰到的平台部署.对后续问题的解决有一定帮助. 通常部署有2中方式: 一种是使用现成提供 ...
- 学习VirtualEnv和Nginx+uwsgi用于django项目部署
以下叙述中用到的操作系统:Linux CentOS 6.X. 最近几天了解一下VirtualEnv,Apache+Daemon mode,Nginx+uwsgi的概念,并且在项目中实验性部署了一下(目 ...
随机推荐
- 基于mesos 安装 jenkins
mesos master 机子上安装 jenkins git clone https://github.com/jenkinsci/mesos-plugin.git && cd me ...
- Oracle:同步两张表的相同字段
有一个需求需要同步两张表的相同字段,比如表A和表B,这两张表是不同的用户下的表,表结构是一样的. 一开始我简单写了一个sql语句,如下: update ord_log1 A set (A.pid, A ...
- django框架常用的数据库迁移命令
python manage.py makemigrations 默认所有修改过的model层转为迁移文件 python manage.py migrate 默认将所有的迁移文件都执行,更新数据库 ...
- 1.VUE前端框架学习记录一
VUE前端框架学习记录一文字信息没办法描述清楚,主要看编码实战里面,有附带有一个完整可用的Html页面,有需要的同学到脑图里面自取.脑图地址http://naotu.baidu.com/file/f0 ...
- Sass-插值#{}
使用 CSS 预处理器语言的一个主要原因是想使用 Sass 获得一个更好的结构体系.比如说你想写更干净的.高效的和面向对象的 CSS.Sass 中的插值(Interpolation)就是重要的一部分. ...
- jenkins持续集成(三): jenkins配置邮件通知
完成基于jenkins的持续集成部署后,任务构建执行完成,测试结果需要通知到相关人员.这篇博客,介绍如何在jenkins中配置邮件通知的方法... 一.安装邮件插件 由于Jenkins自带的邮件功能比 ...
- 百度MIP技术快速入门(上)
前言 「本文假定读者已经有初级的前端开发知识,包括HTML.CSS.」 百度在一年前推出了称为 MIP(Mobile Instant Pages)的前端开发组件,主要目的是加速移动端网页的显示.MIP ...
- Java字节缓冲流和字符缓冲流学习
1.字节缓冲流 首先要明确一个概念:对文件或其他目标频繁的读写操作,效率低,性能差. 使用缓冲流的好处是,能够高效的读写信息,原理是将数据先缓冲起来,然后一起写入或者读取出来. BufferedInp ...
- Maven项目的pom.xml配置文件格式初识
Maven项目 有pom.xml文件的项目就已经是一个maven项目了,但是还没有被maven托管,我们需要将该项目添加为maven项目 <project xmlns="http:// ...
- python3-Django初始化项目详细
0.背景 近期在学习django,在初始化项目的时候遇到了一丢坑,记录一下. 1.安装django 下载安装包解压出来后,python3 setup.py install 即可 2.创建项目 djan ...