ubuntu16.4+nginx+uwsgi+Django 部署上线
Nginx概述
Nginx是一款轻量级的HTTP服务器,采用事件驱动和异步非阻塞处理方式框架,这让其具有极好的IO性能,市场用于服务端的反向代理和负载均衡
Nginx优点
高并发连接:官方测试Nginx能够支撑5万并发连接,实际生产环境中更可以支撑2~4万并发连接数。
内存消耗少:在主流的服务器中Nginx目前是内存消耗最小
免费使用可以商业化:开源
配置文件简单:网络和程序配置通俗易懂
环境搭建
购置服务器
阿里云学生优惠服务器(推荐) https://promotion.aliyun.com/ntms/act/campus2018.html?accounttraceid=b580e226-1c85-492e-a500-21116affda2e&userCode=agtj8gav
百度云学生优惠服务器 https://cloud.baidu.com/campaign/campus-2018/index.html?unifrom=eventpage
Ubuntu下载nginx配置(下载最新版nginx)
http://nginx.org/en/linux_packages.html#stable (nginx官网)
对于Ubuntu,请将以下内容追加到/etc/apt/source.list文件的末尾
deb http://nginx.org/packages/ubuntu/ codename nginx
deb-src http://nginx.org/packages/ubuntu/ codename nginx
codename为Ubuntu版本
Version | codename | Supported Platforms |
---|---|---|
16.04 | xenial | x86_64, i386, ppc64el, aarch64/arm64 |
17.10 | artful | x86_64, i386 |
18.04 | bionic | x86_64 |
下载nginx
apt-get update
apt-get install nginx 推荐:http://nginx.org/en/download.html 选择Stable version稳定版下载
下载所需密钥,在/etc/apt目录下
wget http://nginx.org/keys/nginx_signing.key
sudo apt-key add nginx_signing.key
- 在同级目录下解压安装其他扩展库,然后配置,编译安装:
pcre,用于解析正则
https://nchc.dl.sourceforge.net/project/pcre/pcre/8.42/pcre-8.42.tar.gz
zlib,用于压缩文件
http://www.zlib.net/zlib-1.2.11.tar.gz
openssl,用于支持https协议(这个是github的源码,在他releases已发布版本中找一个旧一点的版本如1.01右键复制链接)
https://github.com/openssl/openssl
进入nginx目录,进行编译配置
./configure
--prefix=/usr/local/nginx
--with-http_ssl_module
--with-http_flv_module
--with-http_stub_status_module
--with-http_gzip_static_module
--with-pcre=../pcre-8.42
--with-zlib=../zlib-1.2.
--with-openssl=../openssl-OpenSSL_1_0_1r安装
make && sudo make install
打开浏览器访问此机器的 IP,如果浏览器出现 Welcome to nginx! 则表示 Nginx 已经安装并运行成功
sudo /usr/local/nginx/sbin/nginx
nginx命令
sudu apt-get update
# 更新
sudo apt-get install nginx
# 下载
sudo apt-get remove nginx nginx-common
# 卸载删除除了配置文件以外的所有文件。
sudo apt-get purge nginx nginx-common
# 卸载所有东东,包括删除配置文件。
sudo apt-get autoremove
# 在上面命令结束后执行,主要是卸载删除Nginx的不再被使用的依赖包。
sudo apt-get remove nginx-full nginx-common
#卸载删除两个主要的包。
nginx -V
# 查看版本 .14稳定版
nginx
# 运行
killall nginx
# 终止运行
此时浏览器打开 服务器公网ip 可以看到nginx欢迎页面
uwsgi概述
web服务器和web框架
web服务器是用来接收客户端请求,建立连接,转发响应的程序 web框架是处理业务逻辑 举例: web服务器:nginx web框架:flask
uWSGI和WSGI
WSGI:通信协议 uWSGI:属于WSGI协议的web服务器(nginx、nginx都是web服务器)
为什么需要nginx+uWSGI
利用nginx可以实现反向代理的能力,可以实现分布式服务器功能可以解决网络访问量过大的问题。
安装 pip
一般默认Ubuntu服务器自带python3.5但是却没有自带pip
sudo apt-get install python3-pip
安装 uwsgi
pip3 install uwsgi
Django自带wsgi为什么不直接使用,Django自带wsgi只是为了开发使用的是单进程的,不适合上线使用。
在项目根目录(manage.py同目录)下创建 uwsgi.ini 文件
[uwsgi]
socket = 127.0.0.1:
chdir = /home/foobar/myproject/
wsgi-file = myproject/wsgi.py
processes =
threads =
stats = 127.0.0.1:
在etc/nginx/conf.d/default.conf 配置nginx
将其中如下代码注释
#location / {
# root /usr/share/nginx/html;
# index index.html index.htm;
#}
替换为
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:;
}
运行Django程序
检查项目异常
python3 manage.py runserver
下载项目所依赖包裹
安装数据库
sudo apt-get install mysql-server
#期间设置数据库密码
DEBUG = FALSE
ALLOWED_HOSTS = ['*']
+ static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
数据库常用命令
mysql -u root -p
# 登录数据库
show databases;
# 查看数据库
CREATE DATABASE db_name DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
# 创建数据库
quit;
# 退出数据库
执行迁移
python manage.py migrate
uwsgi运行
uwsgi uwsgi.ini
到此服务器部署成功,接下来就是设置静态文件了。
设置静态文件
因为此时服务器路由统一由nginx管理,所以我们需要进行配置nginx,etc/nginx/conf.d/default.conf
location /static {
autoindex on;
alias /home/ydh/<项目根目录>/static;
}
将项目中的文件同一管理
在项目settion.py中设置STATIC_ROOT 静态文件根目录
STATIC_ROOT = os.path.join(BASE_DIR,'static')
在项目根目录创建 static
执行命令
python3 manage.py collectstatic
# 将静态文件收集到STATIC_ROOT
重启nginx
ubuntu16.4+nginx+uwsgi+Django 部署上线的更多相关文章
- Nginx+uWSGI+Django部署web服务器
目录 Nginx+uWSGI+Django部署web服务器 环境说明 前言 搭建项目 Django部署 编辑luffy/luffy/settings.py 编辑luffy/app01/views.py ...
- nginx+uwsgi+django 部署原理
python开发群里经常有同学问 nginx+uwsgi+django 着了教程部署,但是不知道他们之间怎么样的关系,于是我就google到了一个让我看起来很认同的图,大家看了也比较认同,于是就分享出 ...
- nginx+uwsgi+django部署流程
当我们在用django开发的web项目时,开发测试过程中用到的是django自带的测试服务器,由于其安全及稳定等性能方面的局限性,django官方并不建议将测试服务器用在实际生产. nginx+uws ...
- 10、nginx+uwsgi+django部署(动静分离)
10.1.说明: 1.介绍: 创建Django项目,可以通过 pyhon3 manage.py runserver 0.0.0.0:8080 & 命令更方便地调试程序,但是如果当一个项目完成了 ...
- 在ubuntu16上进行nginx+uwsgi+django部署的简要步骤
网上有很多部署教程,说了一大堆,遇到坑还是要自己一个个解决,这里有几个比较重要的坑大家一定要注意. 1.首先要安装python和python-dev环境,如果没有安装python-dev后面安装有些依 ...
- Ubuntu-18.04.2系统 Nginx+uWSGI+Django 部署生产环境
首先准备环境: 1.使用虚拟机 VMware Workstation Pro (也可以不用),安装Ubuntu-18.04.2系统 开始搭建环境 (因为ubuntu18.4.2集成了python3.6 ...
- ubantu+nginx+uwsgi+django部署
1.更新ubantu的apt apt-get update 必要时候更新系统: apt-get upgrade 2.远程连接服务器 ssh 用户名@ip 上传代码 : scp ...
- 使用docker-compose+nginx+uwsgi+django部署项目
(1)centos上下载docker + docker-compose (2)基础目录 (3)首先创建一个纯净的python+django+uwsgi的镜像,便于后期使用(也可不用创建,后期docke ...
- Nginx+uwsgi+django部署项目
nginx把请求转发给uwsgi,然后把uwsgi处理得到的结果返回给浏览器. 安装nginx: yum -y install gcc pcre-devel openssl-devel #安装Ngin ...
随机推荐
- linux的RPM软件包管理工具
RPM(Redhat Package Manage)原本是Red Hat Linux发行版专门用来管理Linux各项套件的程序,由于它遵循GPL规则且功能强大方便,因而广受欢迎.逐渐受到其他发行版的采 ...
- 不一样的日期、时间转换(moment.js)
无意中遇到了一种很奇怪的日期格式,从接口中返回的日期是这样的,如 2018-02-06T11:59:22+08:00 .然而这却不是我们想要的,我们要的是这种,YYYY-MM-DD HH:mm:ss. ...
- java极光推送记录
1. 添加poom依赖: <dependency> <groupId>cn.jpush.api</groupId> <artifactId>jigu ...
- Caffe 使用记录(一)mnist手写数字识别
1. 运行它 1. 安装caffe请参考 http://www.cnblogs.com/xuanyuyt/p/5726926.html 此例子在官网 http://caffe.berkeleyvis ...
- 12-01 Java Scanner类,Scanner类中的nextLine()产生的换行符问题
分析理解:Scanner sc = new Scanner(System.in); package cn.itcast_01; /* * Scanner:用于接收键盘录入数据. * * 前面的时候: ...
- Xamarin 绑定安卓第三方库恢复原始参数问题
大家都知道在绑定xamarin android 第三方库的时候 参数名是乱码的 变成了p1 p2 p3 之类的 这样在实际使用的时候非常不方便. 其实xamarin是提供了三种方式帮助大家恢复ja ...
- 理解web service 和 SOA
什么是SOA? SOA的全称为Service Oriented Architecture,即面向服务架构.这是一种架构理念.它的提出是在企业计算领域将耦合的系统划分为松耦合的无状态的服务.服务发布出来 ...
- (转载)Centos下Elasticsearch安装详细教程
原文地址:http://www.cnblogs.com/sunny1009/articles/7874251.html Centos下Elasticsearch安装详细教程 1.Elasticsear ...
- 使用命令执行 sql 脚本文件
使用命令执行 sql 脚本文件 方法: 在 Windows 下使用 cmd 命令执行(或 Unix 或 Linux 控制台下)[Mysql的bin目录]\mysql –u用户名 –p密码 –D数据库名 ...
- Selenium之元素定位
1.查看页面元素:ID.class.type.name等. 2.通过webdriver的方法定位: find_element_by_name() find_element_by_id() find ...