将本地Django项目部署到服务器上(Ubuntu20.04)

这篇具有很好参考价值的文章主要介绍了将本地Django项目部署到服务器上(Ubuntu20.04)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最近因为项目的需求开始正在搭建一个个人网站。在本地完成了项目后端的内容后需要部署到服务器上以供用户访问。因为后端使用的是Django框架,就在网上找了很多有关将Django项目部署到网站上的教程。由于本人在网络这块属于小白,原理了解甚少,在一边参照各种教程一边实操的过程中碰了不少壁,总算是成功实现…因此写这篇博客来记录自己配置的过程,也希望能对正在学习Django的小伙伴提供一些帮助~
本文主要是参考了极客点儿的博客进行配置,是我在网上众多教程中找到的最清晰的一篇,为原博主疯狂点赞!!!

一、云服务器

1.1 购买云服务器

首先搭建一个网站需要一个远程服务器来运行项目。阿里云有个飞天免费试用计划,可以免费试用1核2G的云服务器ECS,试用期为3个月,个人用为仅用来学习网站搭建足矣。

django项目部署到ubuntu,django,服务器,python

试用(或购买)服务器后选择操作系统等就可以开始使用。这里不建议选Windows系统。本人选择的是Ubuntu20.04。不同版本的Ubuntu在配置上也有一些区别,这里建议选择版本旧一些的如16.04,后面会详细说明。

1.2 连接云服务器

在阿里云控制台实例处可以看到自己购买的服务器,一般第一次连接是无法使用WorkBench或SSH登录的,会提示服务器禁用了密码登录的方式。这是因为在服务器SSH配置文件 /etc/ssh/sshd_config中的 PasswordAuthentication 被设置为 no 。解决方法是通过VNC连接服务器后将上述项修改为 yes 。阿里云官方文档中也提供了对该问题完整的解决步骤,这里就不再赘述。

django项目部署到ubuntu,django,服务器,python

如果提示 访问公网IP地址需要在实例安全组白名单中增加Workbench的服务器白名单 ,则在控制台的 安全组 -> 配置规则 -> 入方向 中增加22端口。

django项目部署到ubuntu,django,服务器,python

22端口是远程连接端口,因此要通过SSH方式登录服务器肯定需要这个端口开放。这里可以顺便把80(http端口),3306(MySQL)也设置开放。

二、部署项目环境

连接好服务器后,我们需要开始在服务器部署项目需要的环境,安装一些必要的包。以下是本项目中使用到工具和包。

Python 3.8.1
Django 4.2
Nginx 1.18.0 
uWSGI 2.0.21

这里解释一下各个工具的用途。Django项目部署到服务器的方式有很多种,本项目是基于Django+Nginx+uWSGI的方式。这种方式的工作原理是将 Nginx 作为服务器最前端来接收 web 的所有请求,统一管理请求。Nginx 把所有静态请求自己来处理,将所有非静态请求通过 uWSGI 传递给 Django,由 Django 来进行处理,从而完成一次 web 请求。

2.1 安装Python


打开终端,输入以下指令下载Python 3.8.1安装包,如果是其他版本则要按官方下载链接修改,不要选择3.5以下的!!!

wget https://www.python.org/ftp/python/3.8.1/Python-3.8.3.tgz

然后新建一个安装目录:

sudo mkdir -p /usr/local/python3

解压安装包:

tar -zxvf Python-3.8.1.tgz

进入解压后的目录:

cd Python-3.8.1

配置安装的目录:

./configure --prefix=/usr/local/python3

编译Python 3.8.1的代码,并安装:

sudo make install

由于Linux中自带Python2.7,因此需要在终端建立软连接将python3指向Python3.8。
建立软连接运行的名称:

sudo ln -s /usr/local/python3/bin/python3.8 /usr/local/bin/python38
sudo ln -s /usr/local/python3/bin/pip3.8 /usr/bin/pip3

完成以上过程后在命令行输入python3后有回显>>>就表示安装成功,进入Python环境了。

django项目部署到ubuntu,django,服务器,python

2.2 安装Django

这个比较简单,直接pip3 install就可以了。

pip3 install Django==4.0

2.3 安装Nginx

使用apt之前可以先更新一下可用软件包列表和已安装的包

sudo apt update
sudo apt upgrade

然后install

sudo apt install nginx

安装完之后可以在本地输入你的服务器公网IP查看是否显示Nginx欢迎页,显示的话则证明安装成功。

2.3 安装uWSGI

执行pip install安装uWSGI

pip3 install uwsgi

安装完后可以测试一下,先创建一个test.py

#test.py
def application(env, start_response):
    start_response('200 OK', [('Content-Type','text/html')])
    return [b"Hello World"] # python3
    #return ["Hello World"] # python2

然后在test.py所在目录下运行:

uwsgi --http :8000 --wsgi-file test.py

运行结果跟下图一样就是正常的啦。
django项目部署到ubuntu,django,服务器,python

三、配置uWSGI与Django,Nginx之间的通信

3.1 上传本地Django项目到服务器

首先需要将本地的项目上传到阿里云服务器上,这里提供两种方式作为参考:一种是将自己的Django项目上传到GitHub后再在服务器上git clone下来;另一种是通过ftp软件将本地项目传输给服务器。题主原本使用第一种方式但后来发现git仓库不能上传太大的文件(T~T),故改用第二种。
这里我使用的是FileZilla,连接后上传项目文件即可。

django项目部署到ubuntu,django,服务器,python

3.2 配置uWSGI

上传项目文件后,cd 进入项目文件夹的根目录创建uwsgi.ini文件。

cd myproject #我的Django项目文件
vi uwsgi.ini

配置uwsgi.ini内容如下:

[uwsgi]

socket          = :8888 
chdir           = /root/myroject
module          = myproject.wsgi
master          = true
processes       = 4
vacuum          = true

socket=:8888 表示指定项目的端口号为8888,chdir为指定的项目目录。
这一步在网上很多教程中,wsgi.py文件的位置都跟我不一样,不知道是不是因为Django版本的问题。我的项目文件中,wsgi.py文件是在同名子目录myproject下的,所以module处应为myproject.wsgi。这里show一下我的项目文件结构,有一样问题的配置文件可以参考这么写。

myproject/
├── manage.py
├── myproject
│   ├── asgi.py
│   ├── __init__.py
│   ├── __pycache__
│   │   ├── __init__.cpython-310.pyc
│   │   └── ...
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── uwsgi.ini
└── ...

之后就是运行uwsgi --ini uwsgi.ini读取uwsgi.ini启动项目。正常运行结果如下:
django项目部署到ubuntu,django,服务器,python

如果报以下错误则需要检查以下该端口是否已被占用,可以执行uwsgi --stop uwsgi.pidpkill -f uwsgi -9关闭进程。
django项目部署到ubuntu,django,服务器,python
然后我们可以将uWSGI配置为开机自启。网上一些教程是在/etc/rc.local下添加开机命令,但Ubuntu在20.04版本已经取消了rc.local文件,所以这里提供另一种方法设置开机自启动

首先设置rc-local.service

sudo vi /etc/systemd/system/rc-local.service

内容如下:

[Unit]
 Description=/etc/rc.local Compatibility
 ConditionPathExists=/etc/rc.local

[Service]
 Type=forking
 ExecStart=/etc/rc.local start
 TimeoutSec=0
 StandardOutput=tty
 RemainAfterExit=yes
 SysVStartPriority=99

[Install]
 WantedBy=multi-user.target

然后激活rc-local.service

sudo systemctl enable rc-local.service

创建rc.local文件

sudo vi /etc/rc.local

内容如下:

#!/bin/sh -e
# 
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

# 开机启动的命令
uwsgi --ini /root/myproject/uwsgi.ini & # 开机自动启动项目,并在后台运行

exit 0

保存退出后,给予脚本执行权限。

sudo chmod +x /etc/rc.local

这样开机自启动就设置好了。

3.3 配置Nginx

首先需要查看一下nginx配置文件,Ubuntu20.04的nginx配置文件为/etc/nginx/sites-available下的default,有些版本的Linux系统下配置文件为/etc/nginx/nginx.conf
修改配置文件运行:

sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/default.bak #这里先对原来的配置文件进行备份
sudo vi /etc/nginx/sites-available/default

在文件后面添加这段:

server {

    listen          80;
    server_name     xx.xxx.xxx.xx #有域名填域名,没有就写自己的公网IP
    charset         UTF-8;
    access_log      /var/log/nginx/myweb_access.log;
    error_log       /var/log/nginx/myweb_error.log;

    client_max_body_size 800M;

    location / {

        include uwsgi_params;
        uwsgi_pass 127.0.0.1:8888; #这里的端口号要与uwsgi.ini中填写的一样
        uwsgi_read_timeout 2;
    }

    location /static {

        expires 30d;
        autoindex on;
        add_header Cache-Control private;
        alias myproject/static/;
    }
}

这里建议直接复制粘贴进去修改,因为这个配置文件对格式检查比较严格。
配置完后重新启动Nginx:

sudo /etc/init.d/nginx restart

现在在自己的主机或其他设备上的浏览器输入服务器的IP:端口号,就能正常访问自己的项目了。

总结

这两天在完成项目部署的过程中确实是碰了很多壁,加上原先对网络通信这块确实不是很了解,查阅了各种资料后对那些配置文件的内容等还是一头雾水,不懂得背后的原理,报错也不知道从何解决。好在最后还是一点一点的搞定了。希望我的这篇记录能够为同样正在学习Django的朋友提供一些些帮助吧!文章来源地址https://www.toymoban.com/news/detail-777783.html

到了这里,关于将本地Django项目部署到服务器上(Ubuntu20.04)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Langchain-Chatchat-Ubuntu服务器本地安装部署笔记

     Langchain-Chatchat(原Langchain-ChatGLM)基于 Langchain 与 ChatGLM 等语言模型的本地知识库问答 | Langchain-Chatchat (formerly langchain-ChatGLM), local knowledge based LLM (like ChatGLM) QA app with langchain。         开源网址:https://github.com/chatchat-space/Langchain-Chatchat ​        因为这是自己毕设项目所需

    2024年04月08日
    浏览(48)
  • Docker 部署本地爬虫项目到服务器

    笔记:一直想写一篇博客的,那就趁着周末闲暇时光记录一下。 目录 一、前提准备 二、Docker部署爬虫示例 整体梳理 1、打包构建本地项目镜像 2、在 hub 网站上 创建一个仓库。 3、将本地镜像与hub上的仓库打上标签 4、确保已登录 Dockerhub 账号 5、推送镜像到 Dockerhub 仓库中

    2024年02月03日
    浏览(44)
  • Windows服务器,通过Nginx部署VUE+Django前后端分离项目

    基本说明 安装 Nginx 部署 VUE 前端 部署 Django 后端 Django admin 静态文件(CSS,JS等)丢失的问题 总结 本文介绍了在 windows 服务器下,通过 Nginx 部署 VUE + Django 前后端分离项目。本项目前端运行在 80 端口,服务器端运行在 8000 端口。因此本项目使用 Django 的 runserver 命令进行部署

    2024年02月05日
    浏览(50)
  • 如何一键部署本地Java项目到服务器上

    我开发了一个Java代码,现在想部署到服务器上,当然可以使用Jenkins部署,但是Jenkins配置和维护成本比较高,所以我今天分享的是轻量级的一键部署脚本 演示:本地Window的Java代码 - Vmware虚拟机Centos7上 如果你的项目结构不同,可以根据项目结构自行调整 1、对项目进行Maven编

    2024年01月20日
    浏览(41)
  • 如何用个人电脑搭建一台本地服务器,并部署项目到服务器详细教程

    服务器是一种高性能计算机,作为网络的节点,它存储、处理网络上80%的数据、信息,因此也被称为网络的灵魂。与普通计算机相比,服务器具有高速CPU运算能力、长时间可靠运行、强大I/O外部数据吞吐能力以及更好的扩展性。 服务器的主要用途广泛,包括: 网站托管 :服

    2024年04月29日
    浏览(53)
  • vue项目本地开发完成后部署到服务器后报404

    前后端分离开发模式下,前后端是独立布署的,前端只需要将最后的构建物上传至目标服务器的 web 容器指定的静态目录下即可 我们知道 vue 项目在构建后,是生成一系列的静态文件 常规布署我们只需要将这个目录上传至目标服务器即可 让 web 容器跑起来,以 nginx 为例 配置

    2024年02月05日
    浏览(43)
  • 使用IDEA部署Web项目到本地的Tomcat服务器

    1.1 Tomcat下载与安装启动 下载地址:http://tomcat.apache.org/ (左侧Download选择下载版本) 1.1.1 安装: 1、下载好了解压到一个没有特殊符号的目录中(一般纯英文即可) 2、进入到解压的目录下找到binstartup.bat双击启动即可 tomcat需要配置JAVA_HOME环境变量,不要把bin目录也配置到JAVA

    2024年02月13日
    浏览(43)
  • 通过宝塔辅助部署本地Python爬虫项目到阿里云轻量服务器

    笔记:最近想把本地的一套爬虫项目给搞到服务器上跑跑。 可在本地压缩成zip,手动将压缩包上传到宝塔文件夹,最终要将它解压出来,放到下面图片的路径下。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/35683919ba694d5485ad9b5197549105.png 对于添加python项目这里就不再赘述,详

    2024年02月09日
    浏览(62)
  • nginx部署本地项目如何让异地公网访问?服务器端口映射配置!

    接触过IIS或apache的小伙伴们, 对 nginx 是比较容易理解的, nginx有点类似,又有所差异,在选择使用时根据自己本地应用场景来部署使用即可。通过一些对比可能会更加清楚了解: 1 . nginx是轻量级,比apache占用更少的内存以及资源 2 . apache对php支持较简单,apache组件比nginx多

    2024年02月16日
    浏览(50)
  • asp.net core 项目从本地部署到远程云服务器

    今天向大家详细介绍一下,如何将一个.net core项目部署到远程云服务器,我的服务器镜像为 window server 2019. 1.安装IIS 首先在服务器上安装IIS(我的是最新的iis10),我已经安装完毕,这个安装操作比较简单,自行谷歌。 安装完成后会看到下面的界面: 2.安装web deploy程序 该程序的功能: 它

    2023年04月22日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包