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

第三篇文章主要介绍的是如何将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/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值