第三篇文章主要介绍的是如何将Django网站部署到阿里云服务器上,具体的流程如下图所示:

我们会按照这张思维导图的顺序逐个展开讲解:

Section I, Ubuntu

(1)我们需要在阿里云上租一台新的服务器,选择系统类型;或者将一台已经租好的服务器停止运行,之后再重装系统。这次我们的演示用的是公共镜像 + Ubuntu16.04 64位系统 + 自定义密码。

点击右下角阿里云的确定按钮,然后会弹出一个小窗口,提示你通过“点击获取”验证码。一旦你点击了按钮之后,验证码会在你发到你手机上,输入验证码之后,点击确定,就会提示你返回阿里云控制台。一般系统重装需要一点时间,控制台会显示“启动中”,过一会就切换成“运行中”,代表系统重装并处于运行状态。

(2)如何用本地系统的终端的连接阿里云服务器?

如果你是ubuntu系统,尝试下面的操作:

我专门准备了一台Thinkpad,将系统重装为Ubuntu,目的就是为了方便本地连接服务器。大家也可以安装虚拟机来操作,参考B站小哥的视频:Linux(Ubuntu)零基础体验教学_哔哩哔哩 (゜-゜)つロ 干杯~-bilibili​www.bilibili.com

我们把系统的终端Terminal打开,输入下面这行命令:

ssh root@47.95.144.251

结果它提醒我,Host key verification failed,意思是说认证失败了。这是因为我之前连服务器的时候,是有认证过的;但是,因为我们更新了系统,老的认证就失效了(它会自动认证)。我们需要根据提醒,将就的认证先删除掉:

ssh-keygen -f "/home/psyjt/.ssh/known_hosts" -R "47.95.144.251"

然后再次输入:

ssh root@47.95.144.251

它会问你:小朋友,要不要更换认证啊?Are you sure?

答案当然是:yes

然后,阿里云会要求你输入密码,你把刚刚安装系统的密码输进去,你就成功从客户端连接到了阿里云服务器。

如果你是windows系统,尝试下面这个视频中的操作:Windows:使用 putty 远程控制服务器《 阿里云 ECS:Linux 服务器 》​ninghao.net

(3)了解阿里云服务器的系统信息和已经安装的Python的版本情况。

当你来到一个陌生的环境的时候,通常要到处走走,探探周边的情况;同样的,来到阿里云服务器,你要知道这个系统是不是如你所愿,是Ubuntu16.04 64位系统,而且,里边的Python安装的版本情况又是怎样的?

如何获取系统信息?可以输入:lsb_release -a

如何获取Python版本信息呢?

你可以直接输入Python,它就会进入到Python环境中,并且会有提示当前是哪个Python2.x版本。同样,你也可以输入Python3,会提示当前属于Python3.x版本。

补充:退出python环境出了输入quit()之外,还可以用快捷键ctrl+D

这个时候,因为自己的Linux系统自带的是Python3.6,和阿里云服务器系统的版本有点不一样,所以我们可能会纠结,到底要不要把Python3.5升级Python3.6?

我这个人的特点一贯比较“怂”,不会轻易冒风险,在我不确定Python3.5和Python3.6之间的差异会必然导致某项功能无法实现之前,我选择不安装升级

Section II, 虚拟环境Virtualenv

在这个部分,我们需要了解pip的功能,pip和pip3的区别,安装pip3,并用pip3安装虚拟环境。本来这一步是单纯安装虚拟环境的,但是,为了强调pip和pip3的区别,很多小伙伴容易把两者搞混,我就故意把这个部分分解成四个问题。

·第一个问题,pip是用来干什么的?

pip是一个Python包管理工具,提供了对Python包的查找、下载、安装和卸载等功能。python安装包的工具有easy_install,setuptools,pip,以及distribute等。pip是easy_install的替代品。安装pip之前必须要先安装setuptools,而安装setuptools之前,必须要先安装python。

·第二个问题,pip和pip3的区别是什么?

如果系统同时装有python2和python3,那么pip默认给python2用,而pip3指定给python3用。

那是不是说,安装了python2的系统包含pip,安装了python3的系统就自带pip3?

我们可以用which查找某个命令是否存在,以及命令存在哪个位置。

这说明安装python3并不会自带pip3。

从网上查到的资料显示:使用pip install XXX,新安装的库会放在这个目录下面:

python2.x/site-packages

如果使用pip3 install XXX,新安装的库会放在这个目录下面:

python3.x/site-packages

我们可以由第三个问题的解决来检验是不是这样?

·第三个问题,如何安装pip3?

先更新,apt-get update;再安装,apt-get install python3-pip。

第四个问题,如何借助pip3安装虚拟环境?

在终端中输入pip3 install virtualenv virtualenvwrapper

结果报错了,显示说:

locale.Error: unsupported locale setting

这是语言设置问题,只需要在命令窗口中输入:export LC_ALL=C

这时候在终端再次输入pip3 install virtualenv virtualenvwrapper就可以跑了。

虚拟环境安装成功!

Section III, uWSGI

pip3 install uwsgi

Section IV, Nginx

sudo apt-get install Nginx

安装Nginx之后,就可以通过外网对网站进行访问了。如果是阿里云服务器,需要注意的是,你需要配置安全组的策略(截图如下):

点击安全组,然后右边有“修改”,“克隆”,“还原规则”,“管理实例”,“配置规则”,和“管理弹性网卡”六个选项,点击“配置规则”,就可以配置你的服务器的访问规则(分为入方向和出方向)。你要把80端口打开才能从外网对配置在阿里云服务器上对网站进行访问。具体可以参考下面这张图中的参数来设置:

设置好之后点击确定保存,你在本地计算机的浏览器中输入服务器公网ip地址,就可以看到:

这说明nginx安装成功了!当然,我们的目的不止于如此,肯定是要把在本地已经编写好的django项目上传到服务器,并让其他用户能够通过网址访问服务器,才是我们最终的目标。

SectionV, Django

(1)进入到nginx默认创立的www网站的文件夹位置,

cd /var/www/

(2)开启虚拟环境,然后安装django,

创建虚拟环境

virtualenv GoodProject01

激活虚拟环境

source GoodProject01/bin/activate

进入这个虚拟环境的文件夹

cd GoodProject01

·安装requirements.txt中的项目依赖包

重新打开一个端口Terminal,然后把本地的项目文件夹,生成好的requirements.txt,还有数据库文件db_psyBlog.sql都上传到服务器的这个虚拟环境文件夹GoodProject01中。

本地的requirements.txt如何生成?

输入下面这段代码:

pip freeze > requirements.txt

切记,这个一定要在虚拟环境中操作,有同学如果不是在虚拟环境中操作,有可能会引入项目之外的安装包。通常我们打开requirements.txt是这样的:

Django==1.11.7

pkg-resources==0.0.0

PyMySQL==0.9.3

pytz==2019.3

我们可以把第2项删掉,只保留3个项目即可。

利用scp命令,我们可以把本地机器上的requirements.txt上传到服务器上,比如像这样:

scp requirements.txt root@xx.xx.xx.xx:/var/www/GoodProject01/mBlog/requirements.txt

上传完毕之后,我们就可以安装django在python3虚拟环境下的一系列依赖工具包,执行pip3 install -r requirements.txt,读取文件requirements.txt中的扩展库信息并在服务器上的虚拟环境中进行安装。

·安装数据库

接下来是重点,就是要安装mysql数据库,并且把本地上传的这个数据库文件db_psyBlog想办法纳入到数据库里边。

一般我们都是要找一个安装数据库的教程作为参考,我通过百度找到了一个:Django+Ubuntu WEB部署(超详细版)​www.jianshu.com

这里核心的安装的语句:

sudo apt-get install mysql-server

这一步是要你输入mysql的密码的,设置成你记得住的密码。然后按回车继续...

可以利用

mysql -uroot -p

输入密码,登录进mysql数据库中。其他数据库方面的操作与本地数据库操作是类似的。但是,这个时候数据库中并没有本地数据库,需要将本地的数据库迁移到服务器上。

·迁移数据库

迁移数据库的教程也找了一个,而且亲测有效:mysql-数据库备份与恢复(Ubuntu16.04)_数据库_student241的博客-CSDN博客​blog.csdn.net

所以,可以跑到django项目文件夹(就是那个带manage.py文件的目录)中,运行

mysqldump -uroot -p db_mBlog > db_mBlog.sql

这样就可以把数据库中的db_mBlog数据库导出。利用scp命令,将 db_mBlog.sql 拷贝到服务器上的项目文件夹中。

这个时候,你先要在数据库中创建一个同名的数据库:

create database db_mBlog charset=utf8;

然后借助下面的命令将.sql数据库文件导入到数据库中:

mysql -uroot -p db_mBlog < db_mBlog.sql

因为,我们已经安装了uwsgi和nginx,我们可以进入到配置nginx.conf文件和GoodProject01.ini文件的操作。

·配置nginx.conf文件

在所有这些工作做好之后,可以把本地的Django项目,上传到服务器上,需要先迁移一次数据库,运行django的项目看看能不能正常运行。如果可以,说明django项目连接服务器上的数据库并且启动项目是可以的。然后,我们开始考虑用uwsigi 启动nginx。这里就涉及到如何配置nginx和uwsgi的问题:

nginx的配置文件nginx.conf,我们把这个文件从本地上传服务器,打开看看配置文件里边是什么样子(需要修改):

user www-data;

worker_processes auto;

pid /run/nginx.pid;

events {

worker_connections 768;

# multi_accept on;

}

http {

server {

listen 80;

server_name xx.xx.xxx.xxx;

charset utf-8;

location /static {

alias /var/www/GoodProject01/psyBlog/static;

}

location / {

uwsgi_pass 127.0.0.1:8000;

include /etc/nginx/uwsgi_params;

}

}

##

# Basic Settings

##

sendfile on;

tcp_nopush on;

tcp_nodelay on;

keepalive_timeout 65;

types_hash_max_size 2048;

# server_tokens off;

# server_names_hash_bucket_size 64;

# server_name_in_redirect off;

include /etc/nginx/mime.types;

default_type application/octet-stream;

##

# SSL Settings

##

ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE

ssl_prefer_server_ciphers on;

##

# Logging Settings

##

access_log /var/log/nginx/access.log;

error_log /var/log/nginx/error.log;

##

# Gzip Settings

##

gzip on;

gzip_disable "msie6";

# gzip_vary on;

# gzip_proxied any;

# gzip_comp_level 6;

# gzip_buffers 16 8k;

# gzip_http_version 1.1;

# gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

##

# Virtual Host Configs

##

#include /etc/nginx/conf.d/*.conf;

#include /etc/nginx/sites-enabled/*;

}

#mail {

# # See sample authentication script at:

# # Using a PHP Script on an Apache Server as the IMAP Auth Backend

#

# # auth_http localhost/auth.php;

# # pop3_capabilities "TOP" "USER";

# # imap_capabilities "IMAP4rev1" "UIDPLUS";

#

# server {

# listen localhost:110;

# protocol pop3;

# proxy on;

# }

#

# server {

# listen localhost:143;

# protocol imap;

# proxy on;

# }

#}

这里大部分内容是不需要修改的,需要调整的是两个地方,第一个是:

server_name xx.xx.xxx.xxx;

第二个是:

location /static {

alias /var/www/GoodProject01/psyBlog/static;

}

如果你有用到static文件夹的话,需要修改成项目的static路径。

·配置uwsgi.ini文件

我们需要自己新建一个uwsigi的启动文件,然后填入信息,这两部分的内容我都是从网络上收集好了的。新建一个文件我用的是touch命令,然后用vim打开,再将准备好的脚本拷贝进去(如下所示):

[uwsgi]

chdir =/var/www/GoodProject01/psyBlog

module =psyBlog.wsgi

home =/var/www/GoodProject01

master =true

processes =4

socket =127.0.0.1:8000

chmod-socket = 666

vacuum = true

启动的命令用

uwsgi --ini GoodProject01.ini

这一步需要进入nginx文件夹来执行,如果.ini文件是在nginx文件夹下面的话:

cd /etc/nginx/

用python中django创建网页终端直接关闭是什么问题_如何用Python Django创建网站?系列文章03(持续更新...)...相关推荐

  1. python中每个if条件后都要使用冒号吗_机器学习之python入门指南(三)条件语句和循环语句的使用...

    Python3条件语句和循环语句的使用 1)Python3条件语句的用法 if语句: Python中if语句的一般形式如下: if 条件1: 语句1 elif条件2: 语句2 else: 语句3 如果 ...

  2. python获取excel数据制作有文字和图表的报告_如何用Python绘制学术报告图表?

    原标题:如何用Python绘制学术报告图表? 作者:ExcelTing 原文:http://cnblogs.com/excelting/p/6507680.html 全文约 3581 字,读完可能需要 ...

  3. python向数据库写入数据_如何用Python向Mysql中插入数据

    我们使用Python经常会和Postgresql进行搭配,很少将python和mysql进行搭配.下面小编给大家分享如何用Python向Mysql中插入数据. 工具/原料 Pycharm 方法/步骤 ...

  4. python set转为list_如何将一个集合转换成python中的列表?(How to convert a set to a list in python?)...

    如何将一个集合转换成python中的列表?(How to convert a set to a list in python?) 我试图将一个集合转换为Python 2.6中的列表. 我使用这种语法: ...

  5. python可视化迷宫求解_如何用 Python 制作一个迷宫游戏

    相信大家都玩过迷宫的游戏,对于简单的迷宫,我们可以一眼就看出通路,但是对于复杂的迷宫,可能要仔细寻找好久,甚至耗费数天,然后可能还要分别从入口和出口两头寻找才能找的到通路,甚至也可能找不到通路. 虽然 ...

  6. python数据表元素不为空值_python 填充空值失败_怎么用 Python 做数据分析实例

    01 生成数据表 第一部分是生成数据表,常见的生成方法有两种,第一种是导入外部数据,第二种是直接写入数据. Excel 中的文件菜单中提供了获取外部数据的功能,支持数据库和文本文件和页面的多种数据源导 ...

  7. 用python画耳朵_如何用python画一只兔子

    python的用处真的是太广泛了,今天在网上学习查找资料时,看到有网友用python来画画.用python画出一只兔子,为大家分享一下:如何用python画一只兔子? 画了一只大耳朵小兔子,灵感来源是 ...

  8. python制作英语小词典_如何用python(django)创建英语词典应用程序?

    我不知道你在说什么功能.如果您的意思是"从数据库中记录的词汇中搜索关键字",那么python dictionnary不是一个可能的解决方案,因为您必须反序列化整个数据库才能进行搜索 ...

  9. python在工作中怎么用_如何用python在工作中“偷懒”

    原标题:如何用python在工作中"偷懒" "偷懒还能干完活,才是本事 " 有些朋友在工作中会有这样的困惑:明明我从早忙到晚,为什么得到的评价还不高? 要知道, ...

最新文章

  1. [国嵌攻略][080][无名管道通讯]
  2. 认识JVM--第一篇-对象分配&回收算法
  3. 将数组前n个和后m-n个整体逆置的实现
  4. php htaccess实现缓存,使用.htaccess进行浏览器图片文件缓存,_PHP教程
  5. webpack4.0各个击破(7)—— plugin篇
  6. 【Android开发—智能家居系列】(二):用手机对WIFI模块进行配置
  7. 扇贝计算机英语单词,扇贝英语单词
  8. mysql和虚拟主机区别_虚拟主机mysql
  9. 对于ros中launch文件的解读
  10. 阿里巴巴JAVA代码规范一【Block】
  11. 教师资格证作文素材---------------背背背。。。
  12. 10G整数文件中寻找中位数
  13. 迁移学习domain adaption
  14. Python大数据分析与挖掘实战微课版答案 Python大数据分析与挖掘实战课后答案 例题 课后作业 python题目 python题库 数据分析与挖掘题库 数据分析与挖掘项目
  15. Elasticsearch集群扩容踩坑记录
  16. 基于魔兽RPG对当前游戏发展趋势的分析,以及尝试一个高游戏性玩法的设计
  17. WI没有有效的ip配置win10 修复网络
  18. 正则表达式 REGEXP_REPLACE
  19. 挥一挥衣袖,开始一段新的旅程
  20. bogomips 骁龙820_解读|手机CPU综合性能排行:骁龙820吊打一切

热门文章

  1. unzip 分包_建筑总包企业计量分包成本时,未取得相应分包发票,增值税如何处理?...
  2. 快速上手linux玩转典型网络,5- 快速上手Linux玩转典型应用- Linux常用命令
  3. python获取文件夹下文件_Python获取目录下的所有文件
  4. 无法分配更多的internet句柄怎么回事_一文精通Java NIO(内容较多,无耐心者勿点)...
  5. java最好的开发工具_IntelliJ IDEA Ultimate Edition 2018 最好的 Java 开发工具
  6. fastText原理和文本分类实战
  7. svm学习之线性部分总结
  8. java文件没反应_Java实现文件点击没反应的方法
  9. 计算机程序输入x是3求输出七年级的题,如图所示是计算机程序计算,若开始输入,则最后输出的结果是  ▲  .  ——青夏教育精英家教网——...
  10. 【企业管理】如何让管理有效