10 腾讯云、django2.0、uwsgi、mysql、nginx 部署
1、腾讯云
操作系统
Ubuntu Server 16.04.1 LTS 64位
获取root权限
ubuntu@VM---ubuntu:~$ sudo passwd root
Enter new UNIX password: root
Retype new UNIX password:
passwd: password updated successfully
ubuntu@VM---ubuntu:~$
ubuntu@VM---ubuntu:~$ su -
Password:
root@VM---ubuntu:~#
2、Mysql
1、安装mysqly ,需要y确认
apt-get install mysql-server
设置MySQL密码 ,输入两次密码,回车即可
查看MySQL版本命令
root@VM---ubuntu:~# mysql --version
mysql Ver 14.14 Distrib 5.7., for Linux (x86_64) using EditLine wrapper
运行数据库Mysql安全配置向导: 输入root密码,4个回车 ok
mysql_secure_installation
启动mysql服务
root@VM---ubuntu:~# service mysql start
配置字符集,
root@VM---ubuntu:~# vim /etc/mysql/my.cnf # 添加如下代码,保存退出
[client]
port =
socket = /var/lib/mysql/mysql.sock
default-character-set=utf8 [mysqld]
port =
socket = /var/lib/mysql/mysql.sock
character-set-server=utf8 [mysql]
no-auto-rehash
default-character-set=utf8
重启mysql服务
root@VM---ubuntu:~# service mysql restart
2、测试数据库
创建项目的数据库 # 我的数据库 cnblog
root@VM---ubuntu:~# mysql -uroot -proot mysql> CREATE DATABASE `cnblog` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
Query OK, row affected (0.00 sec) mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| cnblog |
| mysql |
| performance_schema |
| sys |
+--------------------+
rows in set (0.00 sec)
3、python3 +django2.0
1、Ubuntu自带python3.5版本
root@VM---ubuntu:~# python3
Python 3.5. (default, Nov , ::)
[GCC 5.4. ] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>>
2、安装pip3
root@VM---ubuntu:~# apt-get install python3-pip
测试pip3
root@VM---ubuntu:~# pip3
3、安装django2.0
root@VM---ubuntu:~# pip3 install django==2.0
测试
root@VM---ubuntu:~# python3
Python 3.5. (default, Nov , ::)
[GCC 5.4. ] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> import django
>>>
4、 uWSGI,uwsgi,WSGI
1、uWSGI介绍
uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。Nginx中HttpUwsgiModule的作用是与uWSGI服务器进行交换。
要注意 WSGI / uwsgi / uWSGI 这三个概念的区分。
- WSGI是一种Web服务器网关接口。它是一个Web服务器(如nginx,uWSGI等服务器)与web应用(如用Flask框架写的程序)通信的一种规范。
- uwsgi是一种线路协议而不是通信协议,在此常用于在uWSGI服务器与其他网络服务器的数据通信。
- 而uWSGI是实现了uwsgi和WSGI两种协议的Web服务器。
- uwsgi协议是一个uWSGI服务器自有的协议,它用于定义传输信息的类型(type of information),每一个uwsgi packet前4byte为传输信息类型描述,它与WSGI相比是两样东西
uWSGI的主要特点如下
- 超快的性能
- 低内存占用(实测为apache2的mod_wsgi的一半左右)
- 多app管理(终于不用冥思苦想下个app用哪个端口比较好了-.-)
- 详尽的日志功能(可以用来分析app性能和瓶颈)
- 高度可定制(内存大小限制,服务一定次数后重启等)
总而言之uwgi是个部署用的好东东,正如uWSGI作者所吹嘘的:
If you are searching for a simple wsgi-only server, uWSGI is not for you, but if you are building a real (production-ready) app that need to be rock-solid,
fast and easy to distribute/optimize for various load-average, you will pathetically and morbidly fall in love (we hope) with uWSGI.
2、uwsgi模块安装
root@VM---ubuntu:~# pip3 install uwsgi
Collecting uwsgi
测试:新建test.py 输入以下内容
root@VM---ubuntu:~# vim test.py
def application(env, start_response):
start_response('200 OK', [('Content-Type','text/html')])
return [b"Hello World"]
uwsgi启动8000端口,浏览器访问你的ip:8000
root@VM---ubuntu:~# uwsgi --http : --wsgi-file test.py
5、上传本地django项目,测试
1、用xftp上传到
home下的ubuntu目录下
root@VM---ubuntu:/home/ubuntu# pwd
/home/ubuntu
安装tree命令,查看目录结构
root@VM---ubuntu:/home/ubuntu# apt install tree
root@VM---ubuntu:/home/ubuntu# tree
└── cnblog
├── blog
│?? ├── migrations
│?? │?? └── __pycache__
│?? ├── templatetags
│?? │?? └── __pycache__
│?? └── utils
│?? └── __pycache__
├── cnblog
├── logger
├── media
│?? ├── add_article_img
│?? └── avatars
├── static
│?? ├── blog
│?? │?? └── bs
│?? │?? ├── css
│?? │?? ├── fonts
│?? │?? └── js
│?? ├── bootstrap3
│?? │?? ├── css
│?? │?? ├── fonts
│?? │?? └── js
│?? ├── css
│?? ├── font
│?? ├── img
│?? ├── js
│?? └── kindeditor
│?? ├── asp
│?? ├── asp.net
│?? │?? └── bin
│?? ├── jsp
│?? │?? └── lib
│?? ├── lang
│?? ├── php
│?? ├── plugins
│?? │?? ├── anchor
│?? │?? ├── autoheight
│?? │?? ├── baidumap
│?? │?? ├── clearhtml
│?? │?? ├── code
│?? │?? ├── emoticons
│?? │?? │?? └── images
│?? │?? ├── filemanager
│?? │?? │?? └── images
│?? │?? ├── fixtoolbar
│?? │?? ├── flash
│?? │?? ├── image
│?? │?? │?? └── images
│?? │?? ├── insertfile
│?? │?? ├── lineheight
│?? │?? ├── link
│?? │?? ├── map
│?? │?? ├── media
│?? │?? ├── multiimage
│?? │?? │?? └── images
│?? │?? ├── pagebreak
│?? │?? ├── plainpaste
│?? │?? ├── preview
│?? │?? ├── quickformat
│?? │?? ├── table
│?? │?? ├── template
│?? │?? │?? └── html
│?? │?? └── wordpaste
│?? └── themes
│?? ├── common
│?? ├── default
│?? └── simple
└── templates
├── backend
└── blog
2、配置django项目
安装依赖包
# 连接mysql的模块
root@VM---ubuntu:/home/ubuntu# pip3 install PyMySQL==0.8. ----下面两个是我项目需要的模块,大家可以不需要安装----
# pil生成验证码
root@VM---ubuntu:/home/ubuntu# pip3 install Pillow==5.2.
# 防止xss攻击的
root@VM---ubuntu:/home/ubuntu# pip3 install bs4==0.0.
到django项目下,与manage.py同目录
数据表迁移
root@VM-0-9-ubuntu:/home/ubuntu/cnblog# python3 manage.py makemigrations
root@VM-0-9-ubuntu:/home/ubuntu/cnblog# python3 manage.py migrate
3、启动django项目
到django项目下,与manage.py同目录,启动项目
root@VM---ubuntu:/home/ubuntu/cnblog# python3 manage.py runserver 0.0.0.0:
不太对?这是因为设置了ALLOWED_HOSTS的原因
我们在setting.py里设置一下
ubuntu@VM---ubuntu:~$ cd cnblog/
ubuntu@VM---ubuntu:~/cnblog$ cd cnblog/
ubuntu@VM---ubuntu:~/cnblog/cnblog$ ls
__init__.py __pycache__ settings.py urls.py wsgi.py
ubuntu@VM---ubuntu:~/cnblog/cnblog$ vim settings.py
DEBUG = False ALLOWED_HOSTS = ['*']
root@VM---ubuntu:/home/ubuntu/cnblog# python3 manage.py runserver 0.0.0.0:
4、uwsgi命令测试启动
ubuntu@VM---ubuntu:~/cnblog$ pwd
/home/ubuntu/cnblog
root@VM---ubuntu:/home/ubuntu/cnblog# uwsgi --http 0.0.0.0: --file cnblog/wsgi.py --static-map=/static=static
5、至此
我们可以暂定以下内容
- 项目没问题.
- 项目配置没问题
- uwsgi没问题
- 对项目的支持环境没问题
5、nginx
1、什么是 Nginx?
Nginx (engine x) 是一款轻量级的 Web 服务器 、反向代理服务器及电子邮件(IMAP/POP3)代理服务器。
http://www.cnblogs.com/venicid/p/8440576.html
2、什么是反向代理
反向代理(Reverse Proxy)方式是指以代理服务器来接受 internet 上的连接请求,然后将请求转发给内部网络上的服务器,
并将从服务器上得到的结果返回给 internet 上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。
3.Nginx的特点
(1)跨平台:Nginx 可以在大多数 Unix like OS编译运行,而且也有Windows的移植版本。(2)配置异常简单,非常容易上手。配置风格跟程序开发一样,神一般的配置
(3)非阻塞、高并发连接:数据复制时,磁盘I/O的第一阶段是非阻塞的。官方测试能够支撑5万并发连接,在实际生产环境中跑到2~3万并发连接数.(这得益于Nginx使用了最新的epoll模型)
(4)事件驱动:通信机制采用epoll模型,支持更大的并发连接。
(5)master/worker结构:一个master进程,生成一个或多个worker进程
(6)内存消耗小:处理大并发的请求内存消耗非常小。在3万并发连接下,开启的10个Nginx 进程才消耗150M内存(15M*10=150M)
(7)成本低廉:Nginx为开源软件,可以免费使用。而购买F5 BIG-IP、NetScaler等硬件负载均衡交换机则需要十多万至几十万人民币
(8)内置的健康检查功能:如果 Nginx Proxy 后端的某台 Web 服务器宕机了,不会影响前端访问。
(9)节省带宽:支持 GZIP 压缩,可以添加浏览器本地缓存的 Header 头。
(10)稳定性高:用于反向代理,宕机的概率微乎其微
4、安装
apt-get install nginx
5、测试
url中输入你的IP地址
6、nginx命令以及配置文件
https://www.cnblogs.com/jingmoxukong/p/5945200.html
6、nginx与uwsgi通信
通过 uWSGI 启动 django 的web服务,nginx 将请求中转给 uWSGI 然后返回。
1、配置uwsgi
1)复制uwsgi_params文件 ,与manage.py 同目录中
一般可以直接使用nginx路径下的uwsgi_params,路径一般在 /etc/nginx/uwsgi_params
root@VM-0-9-ubuntu:~# ls -l /etc/nginx/uwsgi_params
-rw-r--r-- 1 root root 664 Aug 9 15:29 /etc/nginx/uwsgi_params
uwsgi_param QUERY_STRING $query_string;
uwsgi_param REQUEST_METHOD $request_method;
uwsgi_param CONTENT_TYPE $content_type;
uwsgi_param CONTENT_LENGTH $content_length; uwsgi_param REQUEST_URI $request_uri;
uwsgi_param PATH_INFO $document_uri;
uwsgi_param DOCUMENT_ROOT $document_root;
uwsgi_param SERVER_PROTOCOL $server_protocol;
uwsgi_param REQUEST_SCHEME $scheme;
uwsgi_param HTTPS $https if_not_empty; uwsgi_param REMOTE_ADDR $remote_addr;
uwsgi_param REMOTE_PORT $remote_port;
uwsgi_param SERVER_PORT $server_port;
uwsgi_param SERVER_NAME $server_name;
2)新建 cnblog.ini文件,与manage.py 同目录中
[uwsgi]
# uwsgi监听的socket,一会儿配置Nginx会用到
socket = 127.0.0.1:8001
# 在app加载前切换到该目录,设置为Django项目根目录
chdir = /home/ubuntu/cnblog # 加载指定的python WSGI模块,设置为Django项目的wsgi文件
module = cnblog.wsgi
# 启动一个master进程来管理其他进程
master = true
# 工作的进程数
processes = 4
# 每个进程下的线程数量
threads = 2
# 当服务器退出的时候自动删除unix socket文件和pid文件
vacuum = true
# 使进程在后台运行,并将日志打到指定的日志文件或者udp服务器
daemonize = /home/ubuntu/cnblog/uwsgi.log
创建个uwsgi.log文件
root@VM-0-9-ubuntu:/home/ubuntu/cnblog# touch uwsgi.log
2、配置nginx
打开配置文件,在Http内创建server子项如下:
vim /etc/nginx/nginx.conf
server {
listen 80; # 设置监听端口号 用于http协议
server_name 193.112.59.93; # 设置对外访问入口,可以是域名可以是IP地址,我设置的是IP charset UTF-8; # 设置访问的语言编码
access_log /var/log/nginx/cnblog_access.log; # 访问日志记录
error_log /var/log/nginx/cnblog_error.log; # 错误日志记录 location / { # 设置虚拟主机的基本信息
include uwsgi_params;
uwsgi_pass 127.0.0.1:8001; # 刚才uwsgi设置的socket
uwsgi_read_timeout 2;
}
location /static { # 静态文件设置,nginx自己处理
expires 7d; # 过期时间
alias /home/ubuntu/cnblog/static/; # 项目静态文件地址
}
}
3、启动uwsgi和nginx服务.
其中uwsgi使用自定义位置配置文件cnblog.ini
切换到/home/Ubuntu/cnblog/目录下运行: >> uwsgi --ini cnblog.ini >> /etc/init.d/nginx restart
4、浏览器访问80端口
7、bug
1、tcp:8001端口占用问题
# 查看tcp连接
root@VM-0-9-ubuntu:/home/ubuntu/cnblog# netstat -tln # 查看8001端口,已经占用的进程
root@VM-0-9-ubuntu:/home/ubuntu/cnblog# lsof -i:8001 # kill该进程
root@VM-0-9-ubuntu:/home/ubuntu/cnblog# kill -9 19793
2、访问 django 的 admin 会不显示图片
创建超级用户
root@VM-0-9-ubuntu:/home/ubuntu/cnblog# python3 manage.py createsuperuser
Username: alex
Email address: alex@qq.com
Password: 1234qwer
Password (again):
Superuser created successfully.
访问 django 的 admin 会显示不出图片
这是由于 找不到 css 的缘故。需要在 location 里面加上
root@VM-0-9-ubuntu:~# vim /etc/nginx/nginx.conf
location /static/admin { #admin的css路径
root /usr/local/lib/python3.5/dist-packages/django/contrib/admin;
}
2、项目更新
项目有更新的时候,需要先关闭uwsgi然后重启即可,关闭wsgi依然可以用一招解决输入:
>> killall -9 uwsgi
重启
>> uwsgi --ini cnblog.ini >> /etc/init.d/nginx restart
Nginx服务器重新加载,以使Nginx的配置生效。
nginx -s reload
10 腾讯云、django2.0、uwsgi、mysql、nginx 部署的更多相关文章
- 腾讯云数据库团队:MySQL AHI 实现解析
MySQL 定位用户记录的过程可以描述为:打开索引 -> 根据索引键值逐层查找 B+ 树 branch 结点 -> 定位到叶子结点,将 cursor 定位到满足条件的 rec 上:如果树高 ...
- 腾讯云-ASP.NET Core+Mysql+Jexus+CDN上云实践
腾讯云-ASP.NET Core+Mysql+Jexus+CDN上云实践.md 开通腾讯云服务器和Mysql 知识点: ASP.NET Core和 Entity Framework Core的使用 L ...
- 腾讯云数据库团队:MySQL语句复制(SBR)的缺陷列举
作者介绍: 赵伟 腾讯云TDSQL数据库开发者 MySQL (这里的MySQL是指广义的mysql,包括oracle,mysql,percona,mariadb等)的Statement Based R ...
- django2.0+连接mysql数据库迁移时候报错
django2.0+连接mysql数据库迁移时候报错 情况一 错误信息 django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 ...
- 腾讯云CentOS7.0使用yum安装mysql
背景: 今天才申请了腾讯云+校园计划的1元服务器,(https://www.qcloud.com/event/qcloudSchool)安装了Centos7.0,在安装mysql的时候,使用yum l ...
- Django线上部署教程:腾讯云+Ubuntu+Django+Uwsgi(转载)
网站名称: 向东的笔记本 本文链接: https://www.eastnotes.com/post/29 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议.转载请注明出处! ...
- 腾讯云ubuntu安装使用MySQL
安装步骤 ubuntu@VM---ubuntu:~$ sudo apt-get install mysql-server (密码: root/root) ubuntu@VM---ubuntu:~$ s ...
- 腾讯云数据库团队:MySQL数据库的高可用性分析
作者介绍:易固武,腾讯高级工程师,参与腾讯账号安全建设,腾讯数据仓库(TDW)优化改造,腾讯云数据库等项目,对大规模分布式存储和计算系统有浓厚的兴趣和经历 MySQL数据库是目前开源应用最大的关系型数 ...
- Django:Python3.6.2+Django2.0配置MySQL
持续学习Django中... Django默认使用的数据库是python自带的SQLlite3,但SQLlite并不适用于大型的项目,因此我将数据库换成了MySQL,下面介绍下Django如何配置数据 ...
随机推荐
- Falsk的模板分配和蓝图、定制错误信息、 和补充
Flask的模板渲染: Flask的模板在进行渲染的时候是默认选则templates下的html文件 我们可以在实例化app的时候,指定文件来进行选择: 模板渲染更改文件夹:template_fold ...
- 2018年阿里巴巴关于java重要开源项目汇总
1.分布式应用服务开发的一站式解决方案 Spring Cloud Alibaba Spring Cloud Alibaba 致力于提供分布式应用服务开发的一站式解决方案.此项目包含开发分布式应用服务的 ...
- 铁乐学python_md5校验两个文件的一致性
# 写一个函数,参数是两个文件的路径 # 返回的结果是T/F # 判断两个文件的md5值是否相同 import hashlib def diff_md5(file1,file2): def chick ...
- 在.NET中操作数字证书(新手教程)
.NET为我们提供了操作数字证书的两个主要的类,分为为: System.Security.Cryptography.X509Certificates.X509Certificate2类, 每个这个类的 ...
- async/await actor promise 异步编程
Python协程:从yield/send到async/await http://blog.guoyb.com/2016/07/03/python-coroutine/ Async/Await替代Pro ...
- P4906 小奔关闹钟
题目背景 由于今天是星期一,闹钟准时响了,由于小奔太困了,所以她想关停闹钟. 题目描述 可是,他的闹钟电路太复杂了,有很多个开关,每个开关都连着其他开关,其他开关又连着更多的开关,当且仅当所有开关都关 ...
- Install Weblogic12C
1. 安装JDK软件 1.1)jdk版本选择 由于jdk编译出class文件是一个二进制文件,其中前四个字节是magic位,第五到第六个字节对应于minor和major.class文件的minor和m ...
- Java实现数据库操作
Java实现数据库操作 这里的样例是使用mysql数据库 代码实现 /* MySQLHelper.java */ import java.io.*; import java.util.*; impor ...
- [luogu1600] 天天爱跑步
题面 直接写正解吧, 不想再写部分分了, 对于\(u\)和\(v\), 我们可以将它拆成两条路径, \(u\)到\(lca(u, v)\)和\(lca(u, v)\)到v, 在这里只分析从\(u\ ...
- NSPredicate的使用
简述 NSPredicate谓词条件过滤器,一般用于过滤数组数据,原理和用法都类似于SQL中的where,作用相当于数据库的过滤取. 常用函数 创建谓词 + (NSPredicate *)predic ...