Loading

django2.2+Ubuntu+nginx+uwsgi部署心得

随笔记录django在阿里云服务器部署

环境

前提准备:

①django2.2的一个本地项目,本地部署没有问题

②阿里云的Ubuntu18的轻量级应用服务器

③了解linux都有什么目录(/usr,/root...),会使用vim和ls、rm、mkdir等常见文件操作命令

方便对比自己环境 ,这里详细写一下用到的工具,部分的标注了版本:

django=2.2

python3.6(虚拟环境)

nginx(linux命令直装即可)

流程简介

  1. 配置python3的虚拟环境
  2. 安装nginx
  3. 安装uwsgi
  4. 项目以及其他参数文件配置
  5. 没有数据库(我用没有用到...)

四步骤详细(最好在root用户下)

1. python3虚拟环境

首先看一下有没有pip3,没有的

sudo apt-get install python3-pip

!如果你也是Ubuntu,注意了Ubuntu没有yum

切换到目录【即/root】,然后安装virtualenv。

成功后,建立一个虚拟环境名字vir_name,名字可以自定义。

cd ~

sudo pip3 install virtualenv

virtualenv vir_name

此时在~【/root】中建立一个文件夹,名字vir_name,也就是你的虚拟环境创建在这里了。

然后以后使用环境的时候

cd ~

cd vir_name

source ./bin/activate

便会发现命令行前面有个括号,里面标注着你的环境,表示你已经激活了python3

image-20210729220701518

可以查看python版本,查看python包列表

python -V

pip list

2. nginx

网上很多都是yum,但是如果你是Ubuntu,使用下面命令

sudo apt-get install nginx

配置文件在第四步再改。

3. uwsgi

这里采用python的Uwsgi模块,通过建立软连接到/usr/bin/中

pip install  uwsgi

ln -s 你的虚拟环境根目录/bin/uwsgi /usr/bin/

然后可以在命令行使用uwsgi了

4. 项目以及其他参数文件配置

首先将整个项目文件夹传到服务器的/home目录下,这里我是用的filezilla。

比如项目文件/项目名字为kkk

那么kkk路径为/home/kkk/(app啊manage.py啊等等文件在这里面)

使用vim修改/home/kkk/kkk/settings.py

image-20210729222341571

将debug从Ture改为False,27行[]本来是空的,现在加入你的服务器地址(上图debug没改,懒得换图了)

在/home/kkk下vim新建两个文件run.pid,run.log

分别记录进程id和日志,里面都是空白既可,不用写东西

然后继续新建uwsgi.ini,里面加入以下内容

[uwsgi]
chdir = /home/kkk
module = kkk.wsgi:application
socket = 127.0.0.1:8000
master = true
daemonize = run.log
pidfile=run.pid
disable-logging = true
virtualenv = /root/vir_name

chdir是项目目录,

modole后的kkk改成你的项目名(其实是/home/kkk/kkk的kkk)

socket就这个就行,不用改

master不用改

daemonize是日志文件名称

pidfile是进程id存储的文件名

disable-logging不用改

virtualenv是你的python3虚拟环境目录

现在uwsgi和django接口连上了

再把nginx和uwsgi接口连上,分别启动nginx和uwsgi就ok了

开始最后的战斗

进入/etc/nginx

vim修改nginx.conf

找到以下位置:

image-20210729224159000

添加server板块来连接uwsgi

server {
        server_name     1.1.1.1;
        charset UTF-8;

        client_max_body_size    75M;

        location / {
                include uwsgi_params;
                uwsgi_pass 127.0.0.1:8000;
                uwsgi_read_timeout 20;
        }
        location /static {
                expires 30d;
                autoindex on;
                add_header Cache-Control private;
                alias /home/kkk/static;
        }

}

server_name后面是你的服务器地址(例如1.1.1.1)

127.0.0.1:8000要和uwsgi.ini中统一

alisa后面目录是你的项目的静态资源目录,你的js、css文件根目录。

开启uwsgi和nginx

切换路径,打开uwsgi

cd /root/kkk

uwsgi --ini uwsgi.ini

直接输入nginx即可打开nginx服务

也可以重启服务

sudo service nginx restart

完毕!此时正常的话可以在电脑访问服务器网页了。

可能遇到错误,一些可能出错方向:

  1. 登陆阿里云是不是安全组中80端口向外开放了
  2. 查看127.0.0.1:8000是不是正在被占用到是uwsgi启动不了(查看端口命令:netstat -ntlp)
  3. 如果是uwsgi和django连接出了问题,可以通过查看日志run.log度娘解决
  4. 查看nginx进程是否启动:ps -ef | grep nginx(杀死进程命令:kill -QUIT id号)
  5. 查看uwsgi进程是否启动:ps -ef | grep uwsgi(杀死进程命令:kill -QUIT id号)
  6. 关闭防火墙命令:sudo ufw allow 'Nginx Full'

一点心得:

我自己实际真正遇到的1一开始不知道要打开,部署了访问没有反馈,就各种瞎改,只有一个网页反馈403或者500啥的,这是第一次遇到错,后面开始翻各种帖子开始对比自己的步骤,然后重装了nginx(第一次装还是下的压缩包 然后解压什么的 头大,直接命令不香吗)后面改到最后都要放弃了,因为这时候查看uwsgi和nginx进程都在启动着,也蒙了,(当时还调访问地址来着,以为我访问有问题,笑死)后面脑子一抽想到,我为什么有日志不看呢,直接打开run.log看看,果然发现是uwsgi和sjango连接出了问题,于是对着报错日志开始度娘,才发现之前用一个py文件测试uwsgi来着,用的就是127.0.0.1的8000端口,查看端口使用情况,果然正在占用,于是用命令关闭了端口,发现可以访问了,好耶!!

posted @ 2024-09-19 14:03  绯色鱼  阅读(103)  评论(0)    收藏  举报