首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Linux部署Django (Nginx + uwsgi + Python3 + Django)全过程

Linux部署Django (Nginx + uwsgi + Python3 + Django)全过程

作者头像
陈雨尘
发布于 2019-01-28 02:40:07
发布于 2019-01-28 02:40:07
3.4K00
代码可运行
举报
文章被收录于专栏:雨尘分享雨尘分享
运行总次数:0
代码可运行

最近把之前的服务器做了转移,重新部署,竟然发现有些生疏,在此做下总结以便日后可以熟悉点,亦可以帮助有需要的人。这里只写大流程可能会遇到一些问题可以参考

Linux 下部署Django项目你可能会遇到的问题!

系统: centos_7 + Python 3.5.2 + nginx-1.13.7 + uWSGI 2.0.17.1 + Django2.2.0


具体步骤如下:

1.升级Python3

系统自带的一般为Python2,需要对旧版本进行升级

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
wget https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tgz
tar -zxvf Python-3.5.2.tgz
cd Python-3.5.2
./configure 
make 
make install  

查看结果

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 python3 -V
 Python 3.5.2

设置python 默认版本3.x

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 ls -al /usr/bin | grep python
 -rwxr-xr-x.  1 root root      11216 121 2018 abrt-action-analyze-python
 lrwxrwxrwx.  1 root root          6 430 12:11 python -> python2
 lrwxrwxrwx.  1 root root          5 430 12:11 python2 -> python2.7
 -rwxr-xr-x.  1 root root       7136 420 2018 python2.7

将原来 python 的软链接重命名:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  mv /usr/bin/python /usr/bin/python.bak
  ln -s /usr/local/bin/python3 /usr/bin/python
  python -V
  python 3.5.2

2.升级pip3(该过程可能要安装 setuptools

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  wget https://pypi.python.org/packages/source/p/pip/pip-1.3.1.tar.gz --no-check-certificate  
  tar xvf pip-1.3.1.tar.gz  
  python pip-1.3.1/setup.py install 

3.安装Django (很多方法可以自己选)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 pip install django

4.安装uwsgi

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install uwsgi

5.安装nginx和配置nginx.conf文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
wget http://nginx.org/download/nginx-1.13.7.tar.gz
tar -zxvf nginx-1.13.7.tar.gz
./configure
make
make install

.conf文件配置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
server {
listen 8996; #暴露给外部访问的端口
server_name localhost;
    charset utf-8;
location / {
    include uwsgi_params;
    uwsgi_pass 127.0.0.1:8997; #外部访问8996就转发到内部8997
}
location /static/ {
    alias /home/www/myproject/myapp/static/; #项目静态路径设置
  }
}

6.配置diango

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<uwsgi>
<socket>127.0.0.1:8997</socket><!-- 内部端口,自定义注意跟.conf 一致 -->
    <chdir>/home/www/myproject</chdir><!-- 项目路径 -->
        <module>myproject.wsgi</module>
            <processes>4</processes> <!-- 进程数 --> 
<daemonize>uwsgi.log</daemonize><!-- 日志文件 -->
</uwsgi>

7.运行nginx

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   cd /usr/local/nginx/sbin
  ./nginx  
  //没有任何输出说明启动成功

这时候可以打开网页访问对应IP了

8.运行uwgix

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd 到项目
uwsgi -x  项目.xml
// [uWSGI] parsing config file my_blog.xml 一般这样输出就说明成功了

这个时候访问IP就可以打开具体的网页喽

一般来说到这里就算搞成了,但是现实中肯定有很多问题,对于这些问题我也做了总结有需要的可以查看Linux 下部署Django项目你可能会遇到的问题! 下面我对经常用的指令做下总结方便日后使用


常用指令

配置 nginx.conf文件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  cd /usr/local/nginx/conf/
  vim nginx.conf

启动: nginx

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd /usr/local/nginx/sbin
./nginx

运行 uwsgi

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  uwsgi -x my_blog.xml

查看 nginx 日志

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 tail -f /usr/local/nginx/logs/access.log

查看日志 uwsgi

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
tail -f uwsgi.log

查看进程号

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 ps -ef|grep nginx

杀死进程

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
   kill   进程ID

查看端口使用情况

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
netstat -ntulp|grep 80

MAC查看端口占用情况

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
lsof -i tcp:8000
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019.01.24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
SpringCloud组件:你的Eureka服务注册中心安全吗?
在之前的章节我们讲到了SpringCloud组件:搭建Eureka服务注册中心,已经可以让我们自定义的微服务节点进行注册到该Eureka Server上,不过在注册过程中存在一个风险的问题,如果我们的Eureka Server的地址无意暴露在外,那岂不是通过Eureka协议创建的任意服务都可以进行注册到该Eureka Server吗?(当然如果你配置了服务器的安全组并且使用内网的IP地址或者主机名方式对外提供服务注册地址几乎不存在这个问题。)
恒宇少年
2018/10/11
1.5K0
服务发现与消费--Eureka与Ribbon的联手出击
服务消费者的目标只有两个:发现服务,消费服务。其中服务的发现由Eureka客户端提供,而服务的消费由Ribbon完成。
JathonKatu
2020/10/27
4750
服务发现与消费--Eureka与Ribbon的联手出击
SpringCloud组件:Eureka高可用集群部署
我们在之前的章节SpringCloud组件:搭建Eureka服务注册中心学习到了单个服务注册中心的创建,不过单模式的部署方式在实战中确实不太提倡,因为有很多种原因可能会导致服务注册中心宕机,如果宕机就会有一些灾难性的问题出现,所以保证服务注册中心处于活着运行状态显得尤为重要!!!
恒宇少年
2018/10/10
2.7K0
目录:SpringCloud核心技术学习目录
这段时间一直在编写开源的相关框架,致力于公司使用的框架升级以及开源计划,将公司使用到的工具以及插件进行升级重构并且开源。
恒宇少年
2018/09/20
9210
最适合新手入门的SpringCloud教程 6—Ribbon负载均衡「F版本」
写博客一个多月了,断断续续的更新,今天有小伙伴催更新了,很高兴,说明我的分享是有意义的。
鹿老师的Java笔记
2020/04/14
4600
SpringCloud组件:搭建Eureka服务注册中心
Eureka服务注册中心是netflix开源组织提供的一个服务高可用的解决方案,在前端时间一直在疯传的2.0开源流产的问题,其实并不影响我们的使用,netflix只不过是不再维护2.0分支的开源代码,所以做出了免责声明,不过对于我们使用者来说确实比较担心这一点,还有不少人更换服务注册中心,比如:zookeeper、consul。
恒宇少年
2018/10/10
7740
SpringCloud组件:搭建Eureka服务注册中心
SpringCloud组件: GateWay整合Eureka转发服务请求
在上一篇文章Spring Cloud GateWay 路由转发规则介绍中我们讲解了SpringCloud Gateway内部提供的断言、谓语,让我们可以组合更精确的业务场景进行请求,既然SpringCloud GateWay担任了网关的角色,在之前Zuul可以通过服务名进行自动转发,SpringCloud Gateway是否可以实现自动转发呢?
恒宇少年
2019/05/07
5.6K0
SpringCloud组件: GateWay整合Eureka转发服务请求
SpringCloud组件:将微服务提供者注册到Eureka服务中心
Eureka提供了Server当然也提供了Client,如果你对Eureka Server不了解,点击SpringCloud组件:搭建Eureka服务注册中心阅读文章查看具体的编码实现。
恒宇少年
2018/10/10
1.1K0
SpringCloud组件:将微服务提供者注册到Eureka服务中心
负载均衡Bibbon
Spring Cloud Ribbon是一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现。通过Spring Cloud的封装,可以让我们轻松地将面向服务的REST模版请求自动转换成客户端负载均衡的服务调用。Spring Cloud Ribbon虽然只是一个工具类框架,它不像服务注册中心、配置中心、API网关那样需要独立部署,但是它几乎存在于每一个Spring Cloud构建的微服务和基础设施中。因为微服务间的调用,API网关的请求转发等内容,实际上都是通过Ribbon来实现的,包括后续我们将要介绍的Feign,它也是基于Ribbon实现的工具。所以,对Spring Cloud Ribbon的理解和使用,对于我们使用Spring Cloud来构建微服务非常重要。
暴躁的程序猿
2022/03/24
5420
负载均衡Bibbon
Spring Cloud(三)服务提供者 Eureka + 服务消费者(rest + Ribbon)
Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具。它是一个基于HTTP和TCP的客户端负载均衡器。它可以通过在客户端中配置ribbonServerList来设置服务端列表去轮询访问以达到均衡负载的作用。 Ribbon是什么? Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。简单的说,就是在配置文件中列出Load Ba
程序员鹏磊
2018/02/09
1K0
Spring Cloud(三)服务提供者 Eureka + 服务消费者(rest + Ribbon)
Spring Cloud 系列之负载均衡 Ribbon
  Ribbon 是 Netflix 发布的负载均衡器,它有助于控制 HTTP 和 TCP 客户端的行为。为 Ribbon 配置服务提供者地址列表后,Ribbon 就可基于某种负载均衡算法,自动地帮助服务消费者去请求。Ribbon 默认为我们提供了很多的负载均衡算法,例如轮询、随机等。当然,我们也可为 Ribbon 实现自定义的负载均衡算法。Ribbon 现在已经进入维护状态,但目前仍在大规模使用,Spring Cloud 准备使用 LoadBalancer 作为 Ribbon 的替换方案。
Demo_Null
2020/11/11
9450
Spring Cloud 系列之负载均衡 Ribbon
SpringCloud---Eureka
Spring Cloud封装了Netflix 公司开发的Eureka模块来实现服务治理
大忽悠爱学习
2021/11/15
3590
Eureka 服务注册与发现
Spring Cloud封装了Netflix 公司开发的Eureka模块来实现服务治理
用户9615083
2022/12/25
6990
Eureka 服务注册与发现
springCloud - 第3篇 - 消费者调用服务 ( RestTemplate + Ribbon )
2. spring Initializr - module SDK 选择自己的 JDK ,其余的可以不用填写,next。
微风-- 轻许--
2019/08/01
7300
Spring Cloud 2.x系列之服务发现&服务消费者Ribbon
在《服务注册&服务提供者》这一篇可能学习了这么开发一个服务提供者,在生成上服务提供者通常是部署在内网上,即是服务提供者所在的服务器是与互联网完全隔离的。这篇说下服务发现(服务消费者),通常服务消费者是部署在与互联网联通的服务器上,提供restful接口给H5和App调用。
BUG弄潮儿
2022/06/30
2400
Spring Cloud 2.x系列之服务发现&服务消费者Ribbon
SpringCloud必会知识点最全(精美版)
Spring Cloud也是一样,它将现在非常流行的一些技术整合到一起,实现了诸如:配置管理,服务发现,智能路由,负载均衡,熔断器,控制总线,集群状态等等功能。
编程张无忌
2021/01/26
2K0
SpringCloud必会知识点最全(精美版)
SpringCloud服务发现注册Eureka +Ribbon + Feign
假设有2个微服务A和B分别在端点http:// localhost:8181 /和http:// localhost:8282 /上运行,如果想要在A服务中调用B服务,那么我们需要在A服务中键入B服务的url,这个url是负载均衡器分配给我们的,包括负载平衡后的IP地址,那么很显然,B服务与这个URL硬编码耦合在一起了,如果我们使用了服务自动注册机制,就可以使用B服务的逻辑ID,而不是使用特定IP地址和端口号来调用服务。
慕容千语
2019/06/11
1K0
springCloud学习2(服务发现)
  通常服务实例都只向一个服务发现实例注册,服务发现实例之间再通过数据传输,让每个服务实例注册到所有的服务发现实例中。   服务在向服务发现实例注册后,这个服务就能被服务消费者调用了。服务消费者可以使用多种模型来"发现"服务。
用户2038589
2018/12/28
5020
微服务架构之Spring Cloud入门
欢迎访问千羽的编程时光 https://nateshao.gitee.io或者原文获取更多精彩文章!
千羽
2021/01/14
7650
微服务架构之Spring Cloud入门
SpringCloud组件:将服务提供者注册到Eureka集群
在之前章节SpringCloud组件:将微服务提供者注册到Eureka服务中心已经讲解了把服务注册到单个Eureka Server节点上,既然我们在SpringCloud组件:Eureka高可用集群部署讲到了如何去构建Eureka Server 集群的问题,那么我们该考虑下怎么将服务注册到Eureka Server集群上呢?
恒宇少年
2018/10/10
1.9K0
推荐阅读
相关推荐
SpringCloud组件:你的Eureka服务注册中心安全吗?
更多 >
LV.0
山东有鸿信息技术有限公司架构师
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验