ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

阿里云部署Django项目(nginx+uWSGI)-2018.11

2022-01-21 11:00:28  阅读:188  来源: 互联网

标签:文件 2018.11 Django nginx 虚拟环境 uWSGI 安装 uwsgi


 

Mars_DD 于 2018-11-22 16:50:40 发布 16543 收藏 125
文章标签: 阿里云部署 django nginx uwsgi
版权
前言:部署的前提是你的项目已经在本地完成可以运行了,我的本地环境是ubuntu16.04+python3.5+Django2.1.2+Mysql,在python虚拟环境(virtualenv)下建的项目。阿里云部署用的是nginx+uWSGI。

一、云服务器购买和配置

去阿里云官网购买一台云服务器ECS(Elastic Compute Service),可以直接支付宝扫码登录。个人用的话入门级就可以了,我买的是1核2G的,原价还是挺贵的。个人练手的话1核1G应该也是够用了,看实际需求。

 

购买的时候会让你选操作系统,因为我本地用的就是Ubuntu,所以选的ubuntu16.04 64位。除了操作系统选择,还有几个要设置的地方,等下说。先说下这个云服务器ECS(Elastic Compute Service)是个什么东西,简单的就可以把它理解为一台电脑,我们租的一台电脑,可以一直运行。我们可以通过远程连接对它进行操作,只能通过终端命令操作,不能用鼠标。

 

购买成功后进入控制台→云服务器(ECS)→实例,就能看到你买的服务器。上面的公网IP就是这台服务器所在的IP地址,部署成功后浏览器通过这个地址访问你部署的项目。这里还有两个密码要设置,一个是远程连接的密码,第一次点击上图的远程连接会出现一个6位数字密码,只出现一次,所以要记住这个密码,后面也可以修改。第二个是ubuntu登录的账户密码,帐户名默认为root,密码需要设置。点击上图的管理,点击更多-重置密码 设置ubuntu登录密码。

 

除此之外还有一个要设置的就是安全组,设置允许访问的端口。点击安全组--配置规则 进入如下界面,最下面三条是系统的默认设置。

 

点击添加安全组规则进行端口添加,只需要填端口范围和授权对象,比如80端口,端口范围写80/80,授权对象写0.0.0.0/0,表示所有IP地址都能访问。常用的几个端口号,SSH(22),HTTP(80),HTTPS(443)。

 

到此,云服务器的基本设置完成了。点击 实例页面的远程连接,输入6位密码,就可以远程登录。然后会让你输入Ubuntu的账户名和密码。输入成功后就可以远程登录ubuntu的终端,可以像在本地一样通过各种命令操作。

 

二、项目资料上传和环境搭建

1、把我们本地Django项目工程文件拷贝到阿里云上

这里要用到一个工具:Xftp,可以用来在本地和远程Linux之间拷贝文件。

进入官网,https://www.netsarang.com/products/xfp_overview.html 。点击Free License,填写下姓名、邮箱就可以免费下载安装。

 

安装成功后,打开,点击左上角新建,主机 输入你阿里云的公网IP,确定。然后点击对话,输入ubuntu的账户名,密码,就可以实现本地和阿里云的连接。

 

左边就是你的PC桌面,右边是阿里云ubuntu的root目录。可以直接按住把文件从左边拖到右边的文件夹中。因为本地是在虚拟机中运行的ubuntu,项目文件叫做myweb,先把文件从ubuntu中拷贝到桌面,再从桌面拖到阿里云ubuntu的home文件夹下。这里还有一点设置是如何显示ubuntu中的隐藏文件,在工具栏--选项--显示隐藏文件。

 

2、虚拟环境(virtualenv)的安装

本地项目是建在python虚拟环境下的,所以在阿里云上也要先建下虚拟环境。安装如下步骤如下:

1、安装virtualenv

sudo pip install virtualenv
sudo pip install virtualenvwrapper #安装虚拟环境管理工具
2、在home下创建虚拟环境安装目录

mkdir .virtualenvs
3、为virtualenv配置环境变量,打开.bashrc文件,在末尾加上两行代码,在阿里云的ubuntu上,你想编辑文件只能用vi/vim打开,对于没用过vi的话还是需要点时间学习的。或者你可以在本地pc编辑好,再用Xftp工具上传覆盖原来的文件。

用vim打开.bashrc ,一般就在home文件夹下

sudo vim ~/.bashrc
在末尾添加两行代码

export WORKON_HOME=$HOME/.virtualenvs # 所有虚拟环境存储的目录
source /usr/local/bin/virtualenvwrapper.sh
使配置文件生效

source ~/.bashrc
4、创建虚拟环境,默认命令创建的是python2的虚拟环境,指定创建python3.5的虚拟环境可以使用以下命令

mkvirtualenv -p /usr/bin/python3.5 XX #XX是虚拟环境的名字,创建python3.5的虚拟环境

其他命令:
workon xx #进入虚拟环境XX
deactivate #退出虚拟环境
3、在虚拟环境中安装相应的工具包

我们在本地写django项目肯定是安装了一堆相应的包,需要把他们移植到阿里云上。首先在本地ubuntu进入虚拟环境,在项目根目录下,执行以下命令收集安装的包,就是生成一个包的清单文件plist.txt。

pip freeze > plist.txt
然后用xftp把这个plist.txt文件上传到阿里云项目的根目录home/myweb,然后进入虚拟环境test(test是我新建的虚拟环境的名字)。

workon test #进入虚拟环境test

cd到plist.txt所在目录
pip install -r plist.txt #安装txt文件上的包
4、Mysql数据库的安装和数据的迁移

安装Mysql:输入以下命令,安装过程会设置密码,设置成和原来本地一样的,就不用在setting中修改了。

​sudo apt-get update
sudo apt-get install mysql-server
sudo apt-get install mysql-client
创建数据库:先登录数据库, 然后创建数据库v1,数据库名字也创建成和原来本地一样的,我的叫v1。

create database v1;
数据的迁移:把本地数据库中的数据复制到阿里云上的数据库中。先在本地生成备份文件,v1是要备份的数据库,v1.sql是生成的备份文件。然后用Xftp把v1.sql文件上传到阿里云。

mysqldump -u root -p v1 >v1.sql
数据还原:阿里云终端 cd到v1.sql所在目录,输入以下命令

mysql -u root -p v1<v1.sql
mysql配置:找到mysqld.cnf文件注释掉bind-address这一行

/etc/mysql/mysql.conf.d/mysqld.cnf #配置文件路径

#bind-address = 127.0.0.1 #注释掉这一行
5、修改django的setting文件:

DEBUG = False
ALLOW_HOSTS=['XXXXXX'] #改成阿里云的公网IP
至此,我们已经完成了项目文件迁移、环境建立、数据库迁移 。可以在阿里云的终端中运行Django项目,先进入虚拟环境,然后cd到项目目录下,python manage.py runserver 看能不能启动项目,如果可以说明项目本身已经没有问题了。如果不能说明项目本身还有问题。有些包安装好后需要设置配置文件,看是不是没设置。到目前为止的操作其实基本都和本地是一样,下面我们要安装两个额外的东西,nginx和uWSGI。

三、nginx、uWSGI的安装

在安装前先了解下这几个是什么东西:WSGI、uWSGI、nginx。

WSGI:PythonWeb服务器网关接口(Python Web Server Gateway Interface),这是一种协议规范,用于规范web server(比如uWSGI)和web application(Flask、Django等)之间的通信方式。这种协议其实是将我们和更加底层的HTTP、TCP等协议分隔开来,使我们在开发的时候可以不用自己去实现这些协议的处理,只关注于更高层次的逻辑处理,实现面向对象的编程。

uWSGI:uWSGI是一个Web服务器,它实现了WSGI协议、uwsgi、http等协议。它本身可以作为一个服务器单独使用,但是也可以和nginx组合使用。一般Django部署都是用的nginx+uWSGI,可以理解为这种组合性能更优。

nginx:这是一个高性能的web服务器/反向代理,类似Apache。什么叫反向代理,客户端通过一个代理去访问服务器,这样的代理叫正向代理;同样的服务器前加一个代理和客户端通信,这样的代理叫反向代理。nginx就是用来放在uWSGI前做反向代理。

 

我们在本地开发的时候没有安装过以上服务器,但是也可以python manage.py runserver运行项目,那是因为Django等框架自带了WSGI服务器,性能不强,可以用于调试。

nginx安装:

直接在终端安装,不用装在虚拟环境中,输入以下命令:

sudo apt-get update
sudo apt-get install nginx
安装成功后,用浏览器访问你的阿里云IP地址,可以看到以下提示 :

 

nginx常用命令:

service nginx start #启动
service nginx stop #停止
service nginx reload #重启
nginx配置:打开配置文件default,路径/etc/nginx/sites-available/default,设置以下内容。一个是server_name后面换成你的阿里云公网IP,有的文章说不换也行。关键是下面2个location,第一个location是设置的和uWSGI的关联。第二个location /static是设置的静态文件的路径。如果你的项目还有media文件夹,那还要加一个location /media,把路径设置上。注意:location 和alias后面有空格。

server_name 47.106.84.245;

location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
# try_files $uri $uri/ =404;
include uwsgi_params;
uwsgi_pass 127.0.0.1:8000;
}
location /static {
alias /home/myweb/static;
}
更新(2018.11.26):

上面nginx配置静态文件有一个问题,就是上面的目录/home/myweb/static只是我们自己的静态文件的目录,你登录admin后发现admin页面的样式都丢失了。因为django自带的admin的静态文件路径没有导入。所以就需要新建一个文件夹,我的是/home/myweb/nginx/static,然后执行命令把整个项目的所有静态文件都收集到这个目录下,再修改下上面的配置。

第一步:新建文件夹 /home/myweb/nginx/static

第二步:修改setting.py文件,增加STATIC_ROOT

STATIC_ROOT='/home/myweb/nginx/static/' #添加收集静态文件的目录
STATIC_URL = '/static/'
STATICFILES_DIRS=(
os.path.join(BASE_DIR,'static'),
)
第三步:执行以下代码收集静态文件

python manage.py collectstatic
第四步:修改nginx的配置

location /static {
alias /home/myweb/nginx/static;
}
uWSGI安装:

这个是安装在虚拟环境中,先workon test进入虚拟环境,安装uWSGI前需要先安装依赖,输入以下命令完成安装

apt-get install build-essential python
apt-get install python-dev
pip install uwsgi
配置uWSGI:在django项目的根目录下,新建两个文件,uwsgi.ini和run.log 。第一个是uWSGI的配置文件,第二个是日志记录文件。设置uwsgi.ini文件如下:

[uwsgi]
chdir = /home/myweb
module = myweb.wsgi:application
socket = 127.0.0.1:8000
master = true
daemonize = /home/myweb/run.log
disable-logging = true
wsgi-file = /home/myweb/myweb/wsgi.py
pidfile=/home/myweb/uwsgi.pid
chdir是django项目所在目录,socket后面的地址是和上面nginx配置文件中的地址uwsgi_pass 127.0.0.1:8000对应的,规定nginx和uWSGI之间的通信端口。daemonize就是日志文件的路径。disable-logging = true 表示不记录正常信息,只记录错误信息。wsgi-file是你django项目根目录下项目同名目录中有一个wsgi.py文件的路径。pidfile是uwsgi.pid文件的路径,这个文件是uWSGI运行后自动生成的,里面记录了uWSGI的进程号,可以用来重启uWSGI。但是我的uwsgi.pid文件记录的进程号老是不对,用不了。

uWSGI基本命令:

启动:uwsgi --ini uwsgi.ini
停止:uwsgi --stop uwsgi.pid
重启:uwsgi --reload uwsgi.pid
全部配置好后,重启nginx和uWSGI,因该就可以用浏览器访问你的项目了。

 

标签:文件,2018.11,Django,nginx,虚拟环境,uWSGI,安装,uwsgi
来源: https://www.cnblogs.com/ZhiXiaoBbai/p/15829407.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有