前言:部署的前提是你的项目已经在本地完成可以运行了,我的本地环境是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 virtualenvsudo 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    #进入虚拟环境XXdeactivate   #退出虚拟环境

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 updatesudo 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 = FalseALLOW_HOSTS=['XXXXXX'] #改成[阿里云](https://l.gushuji.site/aliyun)的公网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 updatesudo 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 pythonapt-get install python-devpip 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.logdisable-logging = truewsgi-file = /home/myweb/myweb/wsgi.pypidfile=/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,因该就可以用浏览器访问你的项目了。

以下是我部署的django项目,前端基本是用的现成的,一些js和后端是自己写的。

http://47.106.84.245/

水平有限如有问题,望指正。

参考文章:

https://blog.csdn.net/qq_41590417/article/details/80509098

阿里云部署Django项目(nginx+uWSGI)-2018.11相关推荐

  1. 阿里云部署Django项目发送邮件时,端口25,465,587上的坑

    今天在往阿里云上部署Django项目时,遇到一个端口的坑,花了半天终于找到问题所在. 在Django项目中,发送邮件需要在settings.py中做如下的设置: EMAIL_HOST = 'smtp. ...

  2. 阿里云部署Django项目

    文章目录 1.阿里云安装CentOS7.8操作系统. 2.安装MySQL5.7.32: 3.安装mysqlclient: 4.安装Nginx1.20.2: 5.安装uwsgi2.0.20服务器: 6. ...

  3. 阿里云部署django项目流程【centos7+python3+mysql】

    购买阿里云服务器 到[阿里云官网],选择轻量应用服务器, 步骤如图所示:  地域随便选择哪一个,镜像的话,对比了CentOS,Debian,Ubuntu,我最终选择了CentOS,因为流行嘛-配置的话 ...

  4. 阿里云部署docker项目流程

    阿里云部署docker项目流程 这是自己的项目项目原来的项目是一个手机远程管理交换机的项目,项目中包含嵌入开发,python+flash对接的flutter(android+ios),mysql,re ...

  5. 使用阿里云部署Web项目后无法通过浏览器访问

    部署时使用Django+Nginx+uwsgi的框架,部署完成后访问网页一直报错无法访问,检查部署过程没有问题,之后发现原因是没有开启阿里云的端口 解决方法是: 1.登录阿里云,在控制台进入云服务器的 ...

  6. 【超详细附参考】阿里云部署spring项目基本流程详解及踩坑经验

    文章目录 环境及前期准备 基本流程 购买云服务器 连接云服务器 工具准备 Xshell连接: Xftp连接: 环境配置 JDK安装 Tomcat安装 Mysql安装 Maven安装 项目打包部署 数据 ...

  7. 阿里云部署SpringBoot项目

    目录 步骤1:购买服务器(新用户免费试用一个月) 步骤2:查看服务器相关信息 ​编辑 步骤3:设置安全组 步骤4:远程连接 步骤5:使用FinalShell连接阿里云服务器 步骤6:阿里云服务器上安装 ...

  8. 阿里云部署war项目

    一:     使用IDEA创建一个SpringMVC网站 DEMO 链接如下:(为转载) 1:  使用IntelliJ IDEA开发SpringMVC网站(一)开发环境 https://my.osch ...

  9. javaweb k8s_阿里云部署K8Sweb项目

    一.背景 如果你 1.使用Java进行开发 2.使用容器镜像的制品形式进行交付 3.制品最终会运行在阿里云ACK或者其他K8S集群上 那么本文档可以帮助您实现研发流程的协同自动化. 二.用户诉求 1. ...

最新文章

  1. cve-2017–10271 XMLDecoder 反序列化漏洞 原理分析
  2. 管中窥豹,初探Win RE(Windows恢复环境)
  3. 实现对文本的简单one-hot编码
  4. Linux jdk配置/下载/安装简单说明
  5. 【算法知识】详解直接插入排序算法
  6. sql查询成绩最高分_sql查询各科成绩前三名----详述过程,思路清晰不烧脑!
  7. 计算机网络与通信的课程报告,计算机网络与通信课程设计报告.doc
  8. 成员变量和局部变量的区别_Java 变量类型
  9. 并发编程之——写锁源码分析
  10. 利用K8S技术栈打造个人私有云(连载之:初章)
  11. 重定向与请求转发的区别
  12. SSD网络结构优劣分析
  13. LED设备驱动开发实验—源码代码详解
  14. 华为云--云平台部署管理架构图
  15. STM32实现水下四旋翼(六)传感任务2——姿态解算代码实现(使用角度传感器)
  16. LINUX基础知识笔记全
  17. 转自一个计算机毕业生的求职经验
  18. 51nod 2600 小Biu的旅行
  19. 股指的趋势持续研究(Hurst指数)
  20. 8个免费的PNG素材网站推荐

热门文章

  1. Python爬取京东任意商品数据实战总结
  2. windows程序单实例
  3. SVN检出报错,SVN更新时忽略指定文件或文件夹
  4. 乡郎桑黄:揭秘吃神农架野生桑黄后居然改变了生活态度
  5. 安卓用ffmeg解码
  6. Android客户端异常检测
  7. windows电脑中的待机、休眠和睡眠状态的区别
  8. 学生信息管理系统-教师端
  9. 联系导师邮件如何写?要注意什么?
  10. ubuntu16.04更新系统后桌面出错的解决办法