一开始感觉部署服务器挺难的,以为自己都不会成功了,不过坚持研究了两天,最终网站能够成功访问。现在整个流程也都清晰起来了。废话不多说,下面是部署流程。
(如果基本概念不熟悉的,可以跳到本文最后,我贴了一些基本概念的介绍链接)

首先购买一台云服务器,我选择了Ubuntu18.04系统
利用FTP把文件上传到云服务器
如果是图形界面可以参考我这个方法,先在本地机上下载FTP

~$ sudo apt-get install filezilla

然后打开软件

~$ filezilla

在host输入云服务器的公有ip,用户名,密码,端口,就可以连接上了,直接鼠标拖拽就就可以上传文件到云服务器了

Django+uwsgi+Nginx+阿里云服务器(Ubuntu)部署_云服务

windows用户可以参考这篇文章: http://www.yiweihy.com/knowledge/used/215-ftp-filezilla.html

远程连接云服务器

~$ ssh root@xxx.xx.xxx.xxx

然后在命令行界面输入密码就可以了远程连接到你的云服务器了。(远程连接的意义在于可以直接在本地机器上完成下面的部署操作,当然,不连接也可以)
如果不想通过命令行界面进行远程连接操作的话,也可以直接在阿里云的控制台点击“远程连接”直接操作

测试上传后的Django项目
连接之后首先测试Django项目能不能启动
因为ubuntu18.04系统预装了python3,所以直接安装Django,另外记得把你的创作Django项目时添加的依赖包也安装上

~# pip3 install django
~# cd /path-of-your-project ##把/path-of-your-project修改成你上传项目的路径
~# python3 manage.py runserver

cd的路径是你刚刚上传项目到云服务器的路径,一般都能正常启动,不放心的话就去阿里云的控制台打开云服务器,再通过图形界面的firefox打开127.0.0.1看看Django项目是否正常运行

安装uwsgi并测试uwsgi是否正常运行
安装uwsgi

~# pip3 install uwsgi

测试uwsgi

~# uwsgi --http :8001 --chdir /path-of-your-project --file /path-of-your-project/project/wsgi.py

参数说明
–http :8001 表示开放8001端口被客户的访问(可以自己设置为其他端口)
–chdir /path-of-your-project 表示项目的路径
–file /path-of-your-project/project/wsgi.py 表示指向该项目的wsgi.py文件(Django创建项目的时候自带了一个wsgi.py文件)

打开浏览器(这时有2种方式):
可以在你自己的电脑上,输入云服务器的公网IP:8001,测试是否看到你自己的网站项目
也可以直接在云服务器的浏览器上输入127.0.0.1:8001,测试是否看到你自己的网站项目
如果成功,我们就可以进入下一步。

备注1:如果想在你自己的电脑上查看网站的话,一定要记得先在云服务器上开放8001端口,不然连接不上(其他端口也可以,自己决定,只要没被其他进程占用就可以用)。
在更多-网络和安全组-安全组配置-配置规则-添加安全组规则

备注2:如果打开网站发现显示是400(Bad Requests),检查一下项目的setting.py 文件中的ALLOW_HOSTS = []是不是设置错误了,或者现在测试的时候可以先设置为ALLOW_HOSTS = [‘*‘]

云服务器启动uwsgi服务时(没有开启Nginx),本地浏览器经公有IP地址+端口访问出现400(bad requets)现象,检查项目settings.py中的ALLOW_HOSTS = [‘*‘] 是否设置了限制

安装nginx并测试nginx

~# apt-get install nginx

打开nginx服务

~# nginx

如果用自己的电脑浏览器,就访问公网IP:80
如果用云服务器的浏览器,就访问127.0.0.1:80
(nginx默认端口为80)

看到这个页面,表示nginx安装成功。

关闭nginx服务

~# nginx -s stop

设置uwsgi配置文件,把uwsgi和Django项目连接起来
现在django,uwsgi和nginx都安装好了,可以开始真正地干活了。

刚才测试uwsgi的时候,我们用命令行的方式把uwsgi和Django连接起来

~# uwsgi --http :8001 --chdir /path-of-your-project --file /path-of-your-project/project/wsgi.py

因为每次启动的时候,都输入一大堆参数是很麻烦的,现在把这些参数都写进一个ini的文件中,以后启动uwsgi的时候,直接调用这个配置文件就方便很多了。
文件名自己随意设置,只要后缀一定要是ini
路径最好放在Django项目里,方便管理
现在创建your_project_uwsgi.ini并编辑

~# vim /path-of-your-project/your_project_uwsgi.ini
[uwsgi]
chdir = /path-of-your-project
file = /path-of-your-project/project/wsgi.py
master = True
processes = 4
max-requests = 5000
socket = 127.0.0.1:8002
uid = 1000
gid = 2000

这是一些基本的参数配置,其中最重要的socket参数,刚刚测试的时候我们用的是http参数,因为部署需要加上nginx,所以uwsgi不再需要开放给外网了,只需要通过socket来连接nginx,然后nginx把请求转发给uwsgi

socket的端口8002,一定要记住(当然你可以设置为其他,只要没被其他进程占用即可)

127.0.0.1是环回接口,使运行在同一台主机上的客户端程序和服务器程序可以通过TCP/IP进行通信(这个也叫localhost,此时可以想象为:nginx是uwsgi的客户端程序,它们通过8002这个端口进行通信。)

启动uwsgi

~# uwsgi --ini /path-of-your-project/your_project_uwsgi.ini

设置nginx配置文件,nginx连接外网与uwsgi
~# cd /etc/nginx/
~# ll
这时注意几个文件

注意2个目录sites-available/,sites-enabled/,2个文件nginx.conf,uwsgi_params

nginx.conf是nginx的一个基本配置文件,我看了很多博文,有一部分都是在这里对nginx进行设置的,但是如果还要配置其他网站的话,都去设置这一个文件就会变得很麻烦,而且如果不熟悉nginx的话,一不小心把其他东西改错了,事情就变得更加麻烦了。所以我在这里是不会去动这个文件的。
sites-available/ 这个文件夹的作用就是放置我们设置的文件(仅仅是写了设置文件,并没有启用),我们可以写好很多很多个设置文件放在这里备用,不影响nginx的运行
sites-enabled/ 这个文件夹的作用是,放我们将要启动的设置文件(通常的做法是,通过在site-available/里的设置文件,创建一个软链接放在sites-enabled,软链接是linux的说法,其实就是windows系统里常说的快捷方式)
uwsgi_params 程序nginx就是通过这个uwsgi_params配合我们刚刚设置的8002端口和uwsgi进行通信。
现在cd 进sites-available/创建我们的配置文件
~# cd /etc/nginx/sites-available/
~# vim your_project_nginx.conf

server {
listen 8001;
server_name abqqe;
charset utf-8;
client_max_body_size 75M;

location /static {
alias /path-of-your-project/project/static;
}

location /media {
alias /path-of-your-project/project/media;
}

location / {
uwsgi_pass 127.0.0.1:8002;
include /etc/nginx/uwsgi_params;
}
}

参数说明listen 8001 表示对外监听8001端口,意思是别人访问你的网站,就是通过8001这个端口来通信
server_name 域名,例如qq.com这种,如果没有就随便打一个,不影响nginx运行
location /static 表示静态文件的放置路径
location /media 表示客户上传文件的放置路径
location / 表示和uwsgi的通信,uwsgi_pass 127.0.0.1:8002 通过环回接口127.0.0.1和刚刚uwsgi设置的8002端口,与本机的程序uwsgi进行通信,include 另外带上这个文件 /etc/nginx/uwsgi_params,这个文件里面写的是什么我也不知道。。应该是和uwsgi通信的一些设置吧。
your_project_nginx.conf文件写好之后创建软链接(创建快捷方式放到sites-enabled/)

~# ln -s /etc/nginx/sites-available/your_project_nginx.conf /etc/nginx/sites-enabled/your_project_nginx.conf

接下来就可以启动nginx了
~# nginx

总结
到此为止,部署已经完成了。
在手机或者其他电脑的浏览器访问 你的云服务器的公网Ip 加上8001端口,就可以看到你自己用Django制作的网站了。

备注:
如果只有主页能访问,其他页面出现400 或404的情况,可能是Django项目文件权限的问题,要确保 nginx 有权限访问那个目录的文件

我自己制作的网站有点丑,暂时就先不贴出来了。。。

参考链接

B站上的Django部署教程: https://www.bilibili.com/video/av31456425?from=search&seid=8839211692014709211