Linux部署Django应用


当项目开发完成后,需要将项目代码放到服务器上,这个服务器拥有固定的IP,再通过域名绑定,就可以供其它人浏览,对于python web开发,可以使用wsgi、apache服务器,此处以wsgi为例进行布署。

服务器首先是物理上的一台性能高、线路全、运行稳定的机器,分为私有服务器、公有服务器。

  • 私有服务器:公司自己购买、自己维护,只布署自己的应用,可供公司内部或外网访问,成本高,需要专业人员维护,适合大公司使用。

  • 公有服务器:集成好运营环境,销售空间或主机,供其布署自己的应用,适合初创公司使用,成本低。

常用的公有服务器,如阿里云、腾讯云、青云等,可按流量收费或按时间收费。服务器还需要安装服务器软件,此处需要uWSGI、Nginx

准备工作

安装Python与MySQL5.6

因为很多Linux是自带Python2版本,但没有Python3,我们需要提前安装Python3和pip3,项目中使用数据库存储数据,我在这里选择安装的是MySQL5.6版本,具体安装教程可以参考以下两篇文章

Linux(CentOS7)安装Python3和pip3并为pip换源

Linux(CentOS7)安装MySQL5.6

安转所需Python包

部署前需要关闭调试、允许任何机器访问,打开项目的settings.py文件

DEBUG = False
ALLOW_HOSTS=['*',]

在本机执行以下命令导出当前需要的所有包

pip freeze > plist.txt

因为我本机是windows,所以是pip命令

这里建议大家以后每创建一个项目,都使用mkvirtualenv 虚拟环境名称创建一个单独的虚拟环境进行开发,因为pip freeze命令会列出此环境下安装的所有模块

通过ftp软件将项目代码和plist.txt文件上传到Linux

在linux下通过之前安转的pip3命令安装Django应用所需的所有包

pip3 install -r plist.txt

使用WSGI

在生产环境中使用WSGI作为python web的服务器。WSGI:全拼为Python Web Server Gateway Interface,Python Web服务器网关接口,是Python应用程序或框架和Web服务器之间的一种接口,被广泛接受。WSGI没有官方的实现, 因为WSGI更像一个协议,只要遵照这些协议,WSGI应用(Application)都可以在任何服务器(Server)上运行。

项目默认会生成一个wsgi.py文件,确定了settings模块、application对象。

  • application对象:在Python模块中使用application对象与应用服务器交互
  • settings模块:用于进行项目配置

uWSGI

uWSGI实现了WSGI的所有接口,是一个快速、自我修复、开发人员和系统管理员友好的服务器。uWSGI代码完全用C编写,效率高、性能稳定

安装uWSGI

pip3 install uwsgi

配置uWSGI,在项目目录下创建uwsgi.ini文件,配置如下

[uwsgi]
#使用nginx连接时使用
#socket=IP地址:端口号
#直接做web服务器使用
http=IP地址:端口号
#项目目录
chdir=项目目录
#项目中wsgi.py文件的目录,相对于项目目录
wsgi-file=wsgi.py文件地址
processes=4
threads=2
master=True
pidfile=uwsgi.pid
daemonize=uwsgi.log

启动

uwsgi --ini uwsgi.ini

若没有软连接则建立链接文件

ln -s /usr/local/bin/uwsgi /usr/bin/uwsgi

此时可以在本机通过刚才配置的IP:端口号访问项目提供的主页

若访问失败可能是由于防火墙或uwsgi.pid文件中的进程id不正确,

防火墙可以使用systemctl stop firewalld关闭防火墙

uwsgi.pid文件中的进程id不正确可以参考以问题解决标题下的内容。

查看进程

ps -ef | grep uwsgi

停止(访问成功无需执行此命令,此处为报错演示做铺垫)

uwsgi --stop uwsgi.pid

报错演示

执行关闭命令时出现错误

# 命令
uwsgi --stop uwsgi.pid

# 错误信息
signal_pidfile()/kill(): No such process [core/uwsgi.c line 1695]

报错内容后边的数字会发生变化,根据自身情况灵活操作

问题解决

查看uwsgi的进程pid

# 查看进程pid
ps -ef | grep uwsgi

# pid信息
root       1653      1  0 09:38 ?        00:00:00 uwsgi --ini uwsgi.ini
root       1655   1653  0 09:38 ?        00:00:00 uwsgi --ini uwsgi.ini
root       1656   1653  0 09:38 ?        00:00:00 uwsgi --ini uwsgi.ini
root       1657   1653  0 09:38 ?        00:00:00 uwsgi --ini uwsgi.ini
root       1658   1653  0 09:38 ?        00:00:00 uwsgi --ini uwsgi.ini
root       1660   1653  0 09:38 ?        00:00:00 uwsgi --ini uwsgi.ini
root       1740   1616  0 09:45 pts/0    00:00:00 grep --color=auto uwsgi

其中第三列1653为uwsgi服务器进程id

打开你的uwsgi.ini文件,查看pid文件路径

# 进入项目目录执行查看命令
cat uwsgi.ini

# 信息显示
...
pidfile=uwsgi.pid
...

打开uwsgi.pid文件,把文件里的数字改成查询到的1653

vim uwsgi.pid

1653

保存退出

根据自己服务器中uwsgi的pid为准

重启后uwsgi.pid文件会自动更新pid

继续执行重启(uwsgi --reload uwsgi.pid)或停止(uwsgi --stop uwsgi.pid)命令,如果还报错,继续从第一步重新操作

测试成功

即本机可以使用IP:端口号进行访问

将配置中启用socket,禁用http

[uwsgi]
#使用nginx连接时使用,真实服务器中IP地址为私网地址
socket=IP地址:端口号
#直接做web服务器使用
#http=IP地址:端口号
#项目目录
chdir=项目目录
#项目中wsgi.py文件的目录,相对于项目目录
wsgi-file=wsgi.py文件地址
processes=4
threads=2
master=True
pidfile=uwsgi.pid
daemonize=uwsgi.log

停止uwsgi服务,然后再启动uwsgi

uwsgi --stop uwsgi.pid

uwsgi --ini uwsgi.ini

安装Nginx

使用nginx的作用主要包括负载均衡、反向代理:官方网站

基础配置

下载nginx后放到桌面上,解压缩

建议本地下载后使用ftp上传至Linux

tar xvzf nginx-1.16.1.tar.gz

此处linux后的版本以自己下载的为准

进入nginx-1.16.1目录,依次执行以下命令进行安装

cd nginx-1.16.1 && ./configure --prefix=/usr/local/nginx-1.16.1

make && make install

默认安装到/usr/local/nginx/目录,进入此目录

cd /usr/local/nginx/

启动

/usr/local/nginx/sbin/nginx

查看进程

ps -ef | grep nginx

此时可以通过IP地址在本机访问Linux,显示为Welcome to nginx!

停止(无需执行此命令,在此作为了解)

/usr/local/nginx/sbin/nginx -s stop

启动与停止命令可以通过软链接的方式加入到/usr/bin/中

ln -s /usr/local/nginx/sbin/nginx /usr/bin/nginx

指向uWSGI项目

打开Nginx配置文件文件

vim /usr/local/nginx/conf/nginx.conf

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

location / {
            #将所有的参数转到uwsgi下
            include uwsgi_params;
            #uwsgi的ip与端口
            uwsgi_pass 127.0.0.1:8080;
        }

示例

server {
        listen       80;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        #location / {
        #    root   html;
        #    index  index.html index.htm;
        #}
        location / {
            #将所有的参数类型转到uwsgi下
            include uwsgi_params;
            #uwsgi的ip与端口,需要与uwsgi.ini文件中的socket指定的ip与端口号一致
            uwsgi_pass 192.168.230.128:8080;
            uwsgi_connect_timeout 30;
            client_max_body_size 75M;

        }

        #error_page  404              /404.html;
...
}

关闭nginx后再开启

/usr/local/nginx/sbin/nginx -s stop

/usr/local/nginx/sbin/nginx

此时打开浏览器,输入Linux的IP地址访问,看到的就是Django项目中的内容了

到这还没有结束,需要将Django所需的静态文件配置一下

静态文件配置

所有的静态文件都会由nginx处理,不会将请求转到uwsgi

打开Nginx配置文件文件

vim /usr/local/nginx/conf/nginx.conf

在server节点下添加新的location项,用于处理静态文件

location /static {
    alias /var/www/django/static/;
}
...

在服务器上创建如下目录

mkdir -vp /var/www/django/static/

修改目录权限

chmod 777 /var/www/django/static/

修改项目下的settings.py文件

STATIC_ROOT = '/var/www/django/static/'

STATIC_URL = '/static/'

收集所有静态文件到static_root指定目录

python3 manage.py collectstatic

按提示输入yes,收集文件

停止后再启动nginx服务

/usr/local/nginx/sbin/nginx -s stop

/usr/local/nginx/sbin/nginx

此时在本机通过Linux的ip地址就可以访问到完整的项目了

大功告成!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值