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 这三个概念的区分。

  1. WSGI是一种Web服务器网关接口。它是一个Web服务器(如nginx,uWSGI等服务器)与web应用(如用Flask框架写的程序)通信的一种规范。
  2. uwsgi是一种线路协议而不是通信协议,在此常用于在uWSGI服务器与其他网络服务器的数据通信。
  3. 而uWSGI是实现了uwsgi和WSGI两种协议的Web服务器。
  4. uwsgi协议是一个uWSGI服务器自有的协议,它用于定义传输信息的类型(type of information),每一个uwsgi packet前4byte为传输信息类型描述,它与WSGI相比是两样东西

  

uWSGI的主要特点如下

  1. 超快的性能
  2. 低内存占用(实测为apache2的mod_wsgi的一半左右)
  3. 多app管理(终于不用冥思苦想下个app用哪个端口比较好了-.-)
  4. 详尽的日志功能(可以用来分析app性能和瓶颈)
  5. 高度可定制(内存大小限制,服务一定次数后重启等)

总而言之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
│?? ├── qq
│?? └── 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、至此

我们可以暂定以下内容

  1. 项目没问题.
  2. 项目配置没问题
  3. uwsgi没问题
  4. 对项目的支持环境没问题

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 部署的更多相关文章

  1. 腾讯云数据库团队:MySQL AHI 实现解析

    MySQL 定位用户记录的过程可以描述为:打开索引 -> 根据索引键值逐层查找 B+ 树 branch 结点 -> 定位到叶子结点,将 cursor 定位到满足条件的 rec 上:如果树高 ...

  2. 腾讯云-ASP.NET Core+Mysql+Jexus+CDN上云实践

    腾讯云-ASP.NET Core+Mysql+Jexus+CDN上云实践.md 开通腾讯云服务器和Mysql 知识点: ASP.NET Core和 Entity Framework Core的使用 L ...

  3. 腾讯云数据库团队:MySQL语句复制(SBR)的缺陷列举

    作者介绍: 赵伟 腾讯云TDSQL数据库开发者 MySQL (这里的MySQL是指广义的mysql,包括oracle,mysql,percona,mariadb等)的Statement Based R ...

  4. django2.0+连接mysql数据库迁移时候报错

    django2.0+连接mysql数据库迁移时候报错 情况一 错误信息 django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 ...

  5. 腾讯云CentOS7.0使用yum安装mysql

    背景: 今天才申请了腾讯云+校园计划的1元服务器,(https://www.qcloud.com/event/qcloudSchool)安装了Centos7.0,在安装mysql的时候,使用yum l ...

  6. Django线上部署教程:腾讯云+Ubuntu+Django+Uwsgi(转载)

    网站名称: 向东的笔记本 本文链接: https://www.eastnotes.com/post/29 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议.转载请注明出处! ...

  7. 腾讯云ubuntu安装使用MySQL

    安装步骤 ubuntu@VM---ubuntu:~$ sudo apt-get install mysql-server (密码: root/root) ubuntu@VM---ubuntu:~$ s ...

  8. 腾讯云数据库团队:MySQL数据库的高可用性分析

    作者介绍:易固武,腾讯高级工程师,参与腾讯账号安全建设,腾讯数据仓库(TDW)优化改造,腾讯云数据库等项目,对大规模分布式存储和计算系统有浓厚的兴趣和经历 MySQL数据库是目前开源应用最大的关系型数 ...

  9. Django:Python3.6.2+Django2.0配置MySQL

    持续学习Django中... Django默认使用的数据库是python自带的SQLlite3,但SQLlite并不适用于大型的项目,因此我将数据库换成了MySQL,下面介绍下Django如何配置数据 ...

随机推荐

  1. C# 标准的MD5加密32位

    标准的MD5加密32位小写的: public static string GetMD5(string myString) { MD5 md5 = new MD5CryptoServiceProvide ...

  2. 使用ASP.Net WebAPI构建REST服务——客户端

    原文的链接:http://www.cnblogs.com/TianFang/p/3724449.html WebAPI是标准的Http协议,支持Http协议的客户端(如浏览器)都可以访问.但是,有的时 ...

  3. MDT概念说明

    转自:http://www.winos.cn/html/21/t-39621.html         http://hi.baidu.com/popweb/item/95ea6cf3aea966b5 ...

  4. 我们是如何拿下Google和Facebook Offer的?

    http://posts.careerengine.us/p/57c3a1c1a09633ee7e57803c 大家好,我是小高,CMU CS Master,来Offer第一期学员,2014年初在孙老 ...

  5. Python学习---IO的异步[gevent+Grequests模块]

    安装gevent模块 pip3 install gevent Gevent实例 import gevent import requests from gevent import monkey # so ...

  6. 安装Stunnel来实现正向代理邮件

    文:铁乐与猫 2017年8月 一开始我是使用yum install来安装stunnel的 感觉版本低点也无所谓,毕竟只是拿来加密代理一下邮件收发. 可是后来发现之前下载的最新官网版本的tar包里有很多 ...

  7. 数据库服务注册(使用命令注册):解决my.ini配置文件不存在的问题

    注册数据库的时候,有一键式安装,还有一种通过压缩包安装.今天主要来讲一下压缩包安装会出现的问题. 1. 新建一个my.ini文件,里面内容为: [client] port=3306 default-c ...

  8. September 14th 2017 Week 37th Thursday

    Don't let the past steal your present. 别让过去悄悄偷走了我们的当下. We take what we can get and make the best of ...

  9. TCP socket和web socket的区别

    小编先习惯性的看了下某中文百科网站对Web Socket的介绍,觉得很囧.如果大家按照这个答案去参加BAT等互联网公司的前端开发面试,估计会被鄙视. 还是让我们阅读一些英文材料吧. 让我们直接看sta ...

  10. python第二十四课——set中的函数

    集合中常用的一些函数: 1.add(obj):追加一个obj元素到集合中 pop():从集合中随机弹出一个元素 remove(obj):删除集合中和obj匹配的元素 clear():清空集合 s1={ ...