手牵手教你用Django+Nginx+uwsgi+MySQL部署

作者: 于饼喵 | 来源:发表于2020-06-13 11:42 被阅读0次

01 - 配置服务器

这里使用阿里云作为案例,阿里云上有详细的购买和使用教程。【年龄小于24岁的一律可以享受学生优惠,114RMB/年,】

本人购买的阿里云配置:1核CPU、2GiB内存、1Mbps的宽带,操作系统是Ubuntu 16.04 64位,价格是114RMB/年。这个配置对于起初搭建一个个人博客是完全够用的。


设置网络端口,如果还需要开启别的端口,可以自行添加。


选择安全组,然后选择 配置规则,选择快速添加,把22(SSH),443(HTTPS),3306(MySQL),80(HTTP),都添加到安全组。如果使用Django自带的sqlite数据库,则可以不打开3306端口。我这里由于需要用到8080端口,因此也添加了8080端口。

02 - 连接服务器

连接服务器的方法有很多,可以使用阿里云自带的workingbench,也可以使用xshell、git等远程连接工具。由于本人不想在网页编辑,所以我选择xshell作为远程连接工具。我们需要将代码部署到服务器,所以同时也可以使用文件上传工具连接服务器,Filazilla等,也可以安装git,在服务器上直接clone代码。

远程连接工具的使用也很简单,只需要输入服务器ip地址,端口【记得开启22端口】,用户名和密码就可以连接了。各款连接工具差别不大,选一款称手的即可。

03 - 代码部署

进入服务器后,为了防止系统太久引起的问题,首先升级系统。

apt-get update          # 升级ubantu系统

apt-get upgrade     # 升级ubantu系统

遇到需要点击Y/N的时候,输入Y即可,接下来,安装需要用到的库。

apt-get install nginx                  # 安装nginx
apt-get install python3
apt-get install python3-pip
#apt-get install git                   # 用于clone github上的代码,如果使用文件上传工具上传代码则不需要
pip3 install virtualenv                # 用于创造虚拟环境
sudo apt-get install mysql-server      # 安装mysql,安装过程需要设置数据库密码

阿里云的ubantu自带python2.7.12和python3.5.2,但python2.7.12优先级更高,如果要使用python3,我们需要调整python3的优先级。

sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.5 200 # 调整优先级

python   # 查看对应的版本,显示3.5.1则配置成功

03 - 1 更改数据库默认编码方式【不使用MySQL则直接跳到03 -2】

调整MySQL数据库的默认编码格式,因为MySQL数据库的默认编码格式不是utf8,如果不调整,后期上传文章会导致不能写入的问题,因此我们需要调整默认编码格式。

# 进入MySQL的配置目录
sudo vim /etc/mysql/conf.d/mysql.cnf

# 在[mysql]标签下添加下列代码
default-character-set=utf8

# 打开另一个位置的cnf文件
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

# 在[mysql]下添加下列代码
character-set-server=utf8

# 修改完成后重启MySQL
sudo service mysql restart

# 进入MySQL,查看是否修改成功 database后为数据库名
show create database my_blog;

03 -2 代码部署和数据迁移

在对应目录下创建虚拟环境,本人是在/home下创建虚拟环境。

cd /home   

virtualenv --python=python3.5 env          # 使用virtualenv创建虚拟环境

source env/bin/activate                    # 进入虚拟环境
                              

克隆仓库代码,或者使用FileZilla等文件上传工具直接上传。

# 仓库url: https://github.com/yujunke/My_blog

(env) root@iZuf6bhk70n1s67mi79aerZ: git clone https://github.com/yujunke/My_blog.git

设置Django项目的settings.py文件。

DEBUG = False                                            # 关闭debug模式

ALLOWED_HOSTS = ["127.0.0.1",'106.15.204.94']            # 把106.15.204.94改为自己服务器的ip地址

STATICFILES_DIRS = (
    os.path.join(BASE_DIR, "static"),                   
)
STATIC_URL = '/static/'

# 设置Django搜集静态文件的目录,存于当前项目的collected_static文件夹内
STATIC_ROOT =os.path.join(BASE_DIR,'collected_static')   


STATIC_ROOT会把所有的静态文件收集起来,包括Django自带的后台管理的css样式等静态文件。方便我们后期使用Nginx统一在此文件下调用静态文件。

使用requirements.txt文件下载项目的所有环境库,如果repository下没有设置requrements.txt,可以自行在服务器逐个下载对应版本的库。

 # 进入项目目录 
(env) root@iZuf6bhk70n1s67mi79aerZ: cd my_blog                   

# 下载requirements文件中对应版本的所有库
(env) root@iZuf6bhk70n1s67mi79aerZ: pip3 install -r requirements.txt     

 # 收集静态资源
python3 manage.py collectstatmic     

修改Django文件settings.py下数据库的部分,需要将数据库的host、password等信息改为当前环境下的数据库信息,ALLOWED_HOSTS改为127.0.0.1和可以访问的ip和域名。

cd my_blog                   # 进入Django项目文件下

vim settings.py              
# vim进入settings.py文件,键入i进行修改,修改DATABASES信息【密码、数据库名等信息】,完成后按Ctrl+c,然后输入:wq保存
# 修改ALLOWED_HOSTS参数   ALLOWED_HOSTS = ['127.0.0.1','其他允许访问的ip或域名']

cd ..                       # 退出到manage.py所在的目录

python3 manage.py migrate   # 使用migrate完成数据迁移

到这里,就已经把Django的项目部署到了服务器上了。

04 - Nginx的配置

上面下载相关软件的时候,已经安装了Nginx

在本机浏览器上,输入对应服务器的外网ip地址,如果能看到Welcome to nginx 画面,则说明Nginx启动成功。


以下为Nginx相关指令,用于后期调试,需要时copy即可

/etc/init.d/nginx restart (&start / stop )  # 开启、重启、停止

vim /var/log/nginx/access.log               # 查看access.log日志
vim /var/log/nginx/error.log                # 查看error.log日志

进入Nginx安装目录 /etc/nginx,更改nginx.conf的user为root

vim /etc/nginx/nginx.conf

# 把第一行的user XXX 改为 user root
user root

配置当前项目的nginx.conf文件

# 进入/etc/nginx/sites-enabled文件夹
cd /etc/nginx/sites-enabled

# 自己创建的.conf文件,名字可以随意,这里使用mu_blog.conf命名
vim my_blog.conf 

进入my_blog.conf文件后,加入以下代码

server {
        charset utf-8;
        listen 80;                      #开启80端口,用于外部用于访问;默认nginx是使用80端口
        server_name www.yujunke.cn;     # 域名,没有域名则写服务器ip

        location /static/ {
                alias /home/my_Blog/collected_static/;    # 使用djngo收集静态文件后的静态目录
         }

        location = /media/ {
                root  /home;                            # 媒体文件存放目录
         }

        location /{
                uwsgi_pass   127.0.0.1:8080;    # 与uwsgi对接的端口
                include      uwsgi_params;      # 只需要写uwsgi_params即可,不需要完整写路径

                }
        }


修改完毕后,可以使用/etc/init.d/nginx restart重启Nginx

注意,上面的location如果配置错误,会找不到对应静态文件,发生404报错。此时可以详细了解下location的相关用法。网上有很多相关文档,也可查看官方文档。具体关注 alias和root的区别;location后的匹配规则即可

05 - Uwsgi的配置

在虚拟环境下安装uwsgi

 (env) root@iZuf6bhk70n1s67mi79aerZ: pip3 install uwsgi   # 在虚拟环境下安装

下载完成后,可以输入以下代码来测试下uwsgi的运行情况uwsgi --http :8000 --module my_Blog.wsgi

配置uwsgi文件,文件名.ini,注意文件后缀名一定不能错

先进入项目目录下,使用vim uwsgi.ini创建uwsgi目录

cd /my_Blog/My_blog     # 进入项目目录,manage.py所在的目录

vim uwsgi.ini     # 创建uwsgi.ini文件

在uwsgi.ini目录下,输入以下代码,按注释提示修改相关内容

[uwsgi]
daemonize = /home/log           # 在/home/log下生成运行日志
chdir = /home/my_Blog/          # 项目文件所在
module = my_Blog.wsgi           # 项目名.wsgi
home = /home/env                # 运行环境为/home下的env
master = true
socket =  127.0.0.1:8080        # 使用8080端口,用于和nginx对接,记得在服务器开启8080端口
processes = 4                   # 开启4个进程
threads = 2                     # 开启2个线程
vacuum = true
mod-socket = 666                # 相关权限

配置完成后,进入相关目录,输入uwsgi 文件名.ini命令启动,然后去浏览器输入我们的ip地址,看能否连接。

06 - 调试

在配置Nginx和Uwsgi时,难免会发生很多错误。错误无非存在于四个地方,Django、uwsgi、Nginx和数据库。调试时可以在Chrome的开发者工具调试 。Chrome下按F12,查看ConsoleNetwork,可以查看报错信息。

  • 静态文件不能加载,出现404报错,一般为Nginx的location配置错误,导致Nginx找不到对应的文件位置。此时不断调试location即可。

  • 遇到500错误,则可能是写入数据库错误,或者是文件权限问题,此时打开Django的debug模式,查看报错信息解决即可。

  • 如何是502错误,而且输入端口不出现welcome to Nginx的字样,则为Nginx出现错误,一般是配置文件出现问题,重新配置后重启Nginx即可。

  • 如果uwsgi不能正常开启,查看uwsgi生成的日志,查看报错信息,修改后使用lsof -i:端口号查看进程PID,然后使用kill -9 PID关闭所有uwsgi进程后重启即可。一般是自己添加的配置文件存在问题。

相关文章

  • 手牵手教你用Django+Nginx+uwsgi+MySQL部署

    01 - 配置服务器 这里使用阿里云作为案例,阿里云上有详细的购买和使用教程。【年龄小于24岁的一律可以享受学生优...

  • Django+Nginx+uwsgi+MySQL部署blog

    1.系统准备 centos7.5 python3的安装 升级 系统源及安装如下所需工具及环境 更换PIP源 编译安...

  • 一步步教你怎么把vue项目部署到Node服务器上

    我之前的那个demo 手把手教你用Vue2+webpack+node开发一个H5 app是部署到openshift...

  • 教你用shell来操作mysql

    个人专题目录 ​ 1. 教你用shell来连接mysql 2. 教你用shell来操作mysql

  • 教你用CollectionView做一个炫酷的旋转轮

    教你用CollectionView做一个炫酷的旋转轮 教你用CollectionView做一个炫酷的旋转轮

  • 手牵手

    去学校之前孩子问:妈妈,昨天老师说今天要分享玩具,你问问老师是不是要带玩具?我是急着要给他送到学校不能迟到...

  • 手牵手

    她是我每天都会遇到的奶奶,个不高,可能只有1米5的样子,还微微有点胖,一头花白短发,看样子估摸着在60岁左右。今天...

  • 手牵手

    她们走出地铁站 阴沉的天气像要下雨 没有带伞 母女俩迟疑了一下 加快了脚步 斑马线上过街行人匆匆 雨说来就来了 妈...

  • 手牵手

    一觉醒来6:40,赶紧翻身下床。今天九点要参加“手牵手”的督导活动。 倒了两趟地铁,赶在九点前...

  • 手牵手

    《手牵手》 又到了这个时候 不说再见怎么泪水还是想要逃走 是难过的要求还是开心的过了头 不管是什么理由就趁现在一起...

网友评论

    本文标题:手牵手教你用Django+Nginx+uwsgi+MySQL部署

    本文链接:https://www.haomeiwen.com/subject/heyatktx.html