django+nginx+uwsgi+MySQL 项目部署


最近因为完成了一个小项目的云服务器部署,在中间踩了很多的坑,所以写这篇文档,梳理一下自己的思路,好了废话不多,开始正文。

1. 首先你需要找一个自己喜欢的云服务器(我喜欢免费的),所以我就选择了腾讯云服务器的免费15天体验,这里我选择了Ubuntu Server 18.04.1 LTS 64位的服务器,这个版本的服务器自带了Python3.6和Pythonon 2.7哦,经过巴拉巴拉登录等操作,领取服务器等动作以后就可以看到下图的界面啦。

云服务器

2.上述的图片中箭头表示的是后面后续需要用到的比较重要的地方,这里如果是微信等登录方式的,需要重置一下密码,重置后就可以登录啦,登录后就能得到一个终端的界面在浏览器中,这个时候的系统是一个纯净版的Ubuntu,我们需要自己来安装各种我们需要的库和软件。

3.说起安装Python3第三方库的话,就需要用到pip3啦,这里有坑注意

首先安装pip3:sudo apt-get install python3-pip

pip3 install --upgrade pip 更新pip3版本

更新pip3至最新版本后 - 需要修改 pip3 文件,流程如下

sudo vi /usr/bin/pip3

from pip import __main__

if __name__ == '__main__':

    sys.exit(__main__._main())

这样一来我们的pip3就能顺利的使用啦

4.这里就可以开始安装自己需要的库啦,如果没有用库导出的方法的话,就只能自己打命令来下载咯~

安装django:sudo pip3 install Django==1.11.8

安装jwt:sudo pip3 install pyjwt

安装uwsgi:sudo pip3 install uwsgi

安装pymsql:sudo pip3 install pymysql

官网下载 django-cors-headers-3.0.2.tar安装源码包,方法如下10.1 解压 tar -zxvf django-cors-headers-3.0.2.tar10.2 cd 至 解压后的目录 并执行 sudo python3 setup.py install

安装nginx:sudo apt-get install nginx

5.这里注意就是跨域请求头插件cors如果直接打命令的话会直接强制升级Django项目到最新版本的哦,所以如果项目是用其他Django版本创建的话,最好不要直接打命令的方式来下载哦,需要去官网下载包来安装,对了,这里的话来提一下如何传输文件到远程服务器吧,上传文件到服务器的方法有很多,比如windows操作系统中的WinSCP方法,XFTP一样可以提供在windows与Linux之间传输的文件的工具,同样提供有图形化的操作界面,操作起来会比较方便。

这里就介绍一个在Linux系统里比较简单的方法好啦!

操作步骤

在 Linux 操作系统的计算机上,执行以下命令,向 Linux 云服务器上传文件。

scp本地文件地址 云服务器登录名@云服务器公网 IP/域名:云服务器文件地址

例如,您需要将本地文件/home/lnmp0.4.tar.gz上传至 IP 地址为129.20.0.2的 CentOS 系统云服务器对应目录下,则执行的命令如下:

scp /home/Inmp0.4.tar.gz [email protected]:/home/Inmp0.4.tar.gz

Enter,并输入登录密码,即可完成上传,这样一来,到时候项目也可以打包一起上传到服务器上咯。

如果需要从云服务器下载文件的话也是这样哦!

scp root@服务器地址:/服务器上文件名字或路径+空格+/本地路径

例如:

scp [email protected]:/opt/cheery/sys.log /d/workspace

6.这个项目中我用的是MySQL的数据库,所以当然必须要安装一下MySQL咯~

#命令1

sudo apt-get update

#命令2

sudo apt-get install mysql-server

安装好后当然需要先初始化配置一下咯~

sudo mysql_secure_installation

配置项较多,如下所示:

#1

VALIDATE PASSWORD PLUGIN can be used to test passwords...

Press y|Y for Yes, any other key for No: N (我的选项)

#2

Please set the password for root here...

New password: (输入密码)

Re-enter new password: (重复输入)

#3

By default, a MySQL installation has an anonymous user,

allowing anyone to log into MySQL without having to have

a user account created for them...

Remove anonymous users? (Press y|Y for Yes, any other key for No) : N (我的选项)

#4

Normally, root should only be allowed to connect from

'localhost'. This ensures that someone cannot guess at

the root password from the network...

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : Y (我的选项)

#5 默认情况下,MySQL附带一个test的数据库,任何人都可以访问,可以选择是否需要删除

By default, MySQL comes with a database named 'test' that

anyone can access...

Remove test database and access to it? (Press y|Y for Yes, any other key for No) : Y(我的选项)

#6

Reloading the privilege tables will ensure that all changes

made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : Y (我的选项)

好了,那么让我们来检查一下MySQL服务状态

systemctl status mysql.service


MySQL服务状态

当然啦,如果你觉得每次都需要启动远程服务器来进入MySQL太麻烦的话呢,就要做配置远程访问啦

在Ubuntu下MySQL缺省是只允许本地访问的,如果你要其他机器也能够访问的话,需要进行配置;

首先用根用户进入

sudo mysql -uroot -p

登入root进行其他设置:

GRANT ALL PRIVILEGES ON *.* TO root@localhost IDENTIFIED BY "123456";

其中root@localhos,localhost就是本地访问,配置成%就是所有主机都可连接;第二个'123456'为你给新增权限用户设置的密码,%代表所有主机,也可以是具体的ip;不过这随设置了%但我root通过工具还是登陆不进去,可能是为了安全性,所以新建数据库和用户;

新建数据库和用户

##1 创建数据库CREATE DATABASE movieserver;

##2 创建用户luckyxxxx(密码123456) 并允许luckyxxxx用户可以从任意机器上登入mysql的movieserver数据库GRANT ALL PRIVILEGES ON movieserver.* TO luckyxxxx@"%" IDENTIFIED BY "123456";

MySQL
MySQLuser


7.好啦,这里我就不写数据库表的建立或者数据库的迁移的内容啦~如果你的项目不想使用nginx映射呢,下一个8的内容就不需要看啦,如果需要用呢就请继续耐心看下去哦,这里先写一个不需要用nginx的方法吧,这里注意可以把Django项目setting中的DEBUG改成False咯,还有这里ALLOWED_HOSTS = ['*']修改一下

项目部置在软件开发完毕后,将开发机器上运行的开发板软件实际安装到服务器上进行长期运行,用 uwsgi 替代python3 manage.py runserver 方法启动服务器,使用 python manage.py runserver 通常只在开发和测试环境中使用,当开发结束后,完善的项目代码需要在一个高效稳定的环境中运行,这时可以使用uWSGI,uWSGI是WSGI的一种,它可以让Django、Flask等开发的web站点运行其中

让我们来到项目的目录下 cd 项目文件夹,创建一个名字叫做uwsgi.ini的文件吧

[uwsgi]

#Http通信方式的 IP地址:端口号

http=127.0.0.1:8000

#项目当前工作目录

chdir=/home/ubuntu/project/movie2.0/movieserver ... 这里需要换为项目地址

#项目中wsgi.py文件的目录,相对于当前工作目录

wsgi-file=movieserver/wsgi.py

进程个数

process=4

每个进程的线程个数

threads=2

服务的pid记录文件

pidfile=uwsgi.pid

服务的目志文件位置

daemonize=uwsgi.log

uwsgi

好啦,当我们配置完成这个文件以后就不需要像以前一样在终端中输入python3 manage.py runserver来启动一个项目啦,这里就直接启动uwsgi文件就好啦,那么我们来到项目目录下吧

启动uwsgi

sudo uwsgi --ini uwsgi.ini

停止uwsgi

sudo uwsgi --stop uwsgi.pid

说明:当uwsgi 启动后,当前django项目的程序已变成后台守护进程,在关闭当前终端时此进程也不会停止

在浏览器端输入http://127.0.0.1:8000 进行测试,uwsgi还有很多很多的功能,这里就不一一介绍啦~哈哈

**注意,此时端口号为8000

8.好啦,这样我们的服务器差不多就布置完成了,但是我们的网站总有一个端口号让我们感觉比较差呢~那就让我们来布置一下新的东西,那就是nginx 反射代理

Nginx是轻量级的高性能Web服务器,提供了诸如HTTP代理和反向代理、负载均衡、缓存等一系列重要特性,在实践之中使用广泛。因为它是C语言编写,所以执行效率高。

nginx 作用

**负载均衡, 多台服务器轮流处理请求

反射代理

原理:客户端请求nginx,再由nginx 请求 uwsgi, 运行django下的python代码

nginx反射代理

uwsgi配置

这里因为我这个小项目是用了前后端分离来实现的,所以正好一个用到了nginx,这里就来写一下我的nginx配置,这里一样cd到项目目录下来创建一个uwsgi.ini的文件,然后用vim打开

这里我就不再复述很多uwsgi的配置了,就是需要注意把HTTP那一行改成socket

修改项目文件夹/uwsgi.ini下的Http通信方式改为socket通信方式,如:

[uwsgi]

# 去掉如下

# http=127.0.0.1:5000

# 改为

socket=127.0.0.1:5000

uwsgi 2.0版本

nginx配置

修改nginx 的配置文件 /etc/nginx/sites-available/default

# 在server节点下添加新的location项,指向uwsgi的ip与端口。
server {...

        server_name xxx.xxx.xxx.xxx;#这里就可以写你的公网IP或者域名咯

        location / {

               # First attempt to serve request as file, then

               # as directory, then fall back to displaying a 404.

               # try_files $uri $uri/ =404;

               uwsgi_pass 127.0.0.1:5000; # 重定向到127.0.0.1的8000端口

               include uwsgi_params; # 将所有的参数转到uwsgi下

              }

        location /static {

                    # root static文件夹所在的绝对路径,如:

                    alias /home/ubuntu/project/movie2.0/movie/static; # 重定向/static请求的路径,这里改为你项目的文件夹}

...}


nginx


这里要注意一定要注释掉try_files $uri $uri/ =404;这句话哦,然后还有在location的后面和 / 的后面都是有空格的哦,千万注意要加上哦,还有static上面也是有的哦

启动 nginx

$ sudo /etc/init.d/nginx start

$ sudo service nginx restart

查看nginx进程

$ ps aux | grep nginx

$ sudo /etc/init.d/nginx status

$ sudo service nginx status

停止nginx

$ sudo /etc/init.d/nginx stop

$ sudo service nginx stop

重启nginx

$ sudo /etc/init.d/nginx restart

$ sudo service nginx restart

9.好啦,万事大吉啦,那么就让我们来重启和启动uwsgi和nginx吧,这里要注意修改前端html中带有http协议的地址把地址【127.0.0.1:5000 更换 公网IP】(这里注意连端口号都不需要了哦),铛铛,结束啦~

这里加上我最爱的座右铭

Nothing is impossible to a willing heart!

你可能感兴趣的:(django+nginx+uwsgi+MySQL 项目部署)