通过 uWSGI 部署 Django 项目到云服务器的步骤及常见问题

通过 uWSGI 部署 Django 项目到云服务器的完整步骤及常见问题

注意事项

本文默认读者已经安装完毕 Python 环境、git、Nginx 以及相应的数据库,同时读者已经将项目托管(无论在哪个平台上,如 GitHub、Gitee……),请在部署之前确认这一点。

本文举的例子(仅针对后端)均监听 8000 端口,请读者根据自己的需求自行更改。

部署步骤

签出项目

这是个非必须步骤,不过建议完成该步骤。

基于当前项目新建一个分支并签出(可以参考该文章)然后推送,建议分支名为 production,然后以下改动均在原分支上修改。

修改前端

在新的分支中(如果有的话,以下不再特别提起)更改前端测试时使用的 URL 至自己的主机的公网 IP(不建议)或者域名。此处笔者采用 axios 完成网络请求,修改 baseURL 至自己的域名,代码看起来如下:

const httpGet = axios.create({
        baseURL: 'url',
        timeout: 3000
    }
)

修改 Django 项目

首先先说明几个在此处可能会出现的错误:

400 ALLOWED_HOSTS 未正确配置。

403 未正确配置 corsheaders 包下的一些配置。

接下来说明步骤:

修改 ALLOWED_HOSTS:添加你的内网 IP 以及如果有的话添加你在 nginx.conf 中配置的 upstream 的 URL(所有字母无论如何小写,稍后会提到)。

修改 CORS_ORIGIN_WHITELIST、CSRF_TRUSTED_ORIGINS 和 CORS_ALLOWED_ORIGINS:添加 http:// 加上内网 IP 以及如果有的话添加域名。

如果你在 nginx.conf 中配置了 upstream,请修改 url.py 文件,在该文件处添加你在 Nginx 中配置的相应 location 的前缀。

配置 Nginx

在你的 nginx.conf 中,添加一个 server 并提供监听的端口,当然这在你配置前端时应该做过这件事了,如果你没有前端那请参照如下:

server {
	listen			8000;
	server_name 	...;

	location / {
		uwsgi_pass	...;
		include /etc/nginx/uwsgi_params
	}
}

如果有前端的话相信你的 nginx.conf 应该大致如下:

server {
	listen			80;
	server_name 	...;

	location / {
		root 		...;
		try_files	$uri $uri/ /index.html;
		index       index.html;
	}
}

那么可以在此基础上进行修改,为 server 添加一个 location 同时为该 location 提供一个转发地址:

upstream xyz {
    server      ...:8000;
}

server {
	listen			80;
	server_name 	...;

	location / {
		root 		...;
		try_files	$uri $uri/ /index.html;
		index       index.html;
	}

	location /api/ {
        proxy_pass      http://xyz;
    }
}

配置 uWSGI

新建一个文件 uwisg.ini,其内容如下:

[uwsgi]
project = [project_name]
master = true

chdir = [Django 项目根目录]
http = 内网 IP:8000

wsgi-file = [project_name]/wsgi.py

processes = 4
threads = 2
buffer-size = 65536

pidfile = uwsgi.pid(或者任何一个你希望存储 pid 的位置)
daemonize = /var/log/uwsgi.log(或者任何一个你希望存储 log 的位置)

virtualenv = (虚拟环境地址)

记得不要拼错前面属性名的任何一个单词,否则会在 uwsgi 运行时认为找不到 Python 应用。

上服务器!

首先先找到一个你想要放你的项目的目录,本文后续均用 root 表示。

上传项目

还记得你在 GitHub 上面上传了项目吗?把那个项目 clone 下来。

配置虚拟环境

(建议)在 root 下(必须)执行:

virtualenv venv

然后通过 pip install 或者如果有 requirements 的话 pip install -r requirements.txt 安装项目所需要的依赖包。

随后执行 pip install uwsgi --no-cache-dir,uwsgi 请在全局和虚拟环境中均安装。

上传 uwsgi.ini 以及 nginx.conf

通过 FinalShell 或者别的什么可以上传文件的软件上传你的文件,请注意你的权限问题,如果你使用了非 root 登录,这里提供一种思路:

先上传到用户目录下,然后执行 su root 获取 root 权限,最后通过 cd 命令上传到相应目录,其中:

nginx.conf 上传到 etc/nginx 下,uwsgi.ini 可以任意上传但是建议上传到 root 下。

运行!

启动 Nginx 和 uwsgi:

nginx -c /etc/nginx/nginx.conf
uwsgi --ini root/uwsgi.ini

大功告成!

一个有点扯淡的错误

如果你启动了多个相同 uwsgi 则会报 500 的错误,请按照如下步骤执行:

lsof -i tcp:8000

然后根据显示的进程 pid 进行 kill。此时不要通过 pid 文件进行 kill,那个不是准确的 pid!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,这是一个关于如何使用uWSGI部署Django项目的简单步骤: 1. 安装uWSGIDjango 首先,你需要安装uWSGIDjango。你可以使用pip安装这些软件包。在命令行中输入以下命令: ``` pip install uwsgi pip install django ``` 2. 创建Django项目 创建一个Django项目,并确保它能够在本地运行。 3. 创建uWSGI配置文件 创建一个名为uwsgi.ini的文件,该文件将包含uWSGI的配置信息。在这个文件中,你需要定义Django应用程序的位置、uWSGI服务器的配置和其他必要的配置。这是一个示例uwsgi.ini文件: ``` [uwsgi] project = myproject base_dir = /path/to/my/project chdir = %(base_dir)/%(project) module = %(project).wsgi:application home = /path/to/my/virtualenv processes = 4 threads = 2 socket = /tmp/%(project).sock chmod-socket = 664 vacuum = true ``` 在这个文件中,你需要将project和base_dir替换为你的项目名称和项目路径。你还需要将home设置为你的虚拟环境的路径,如果你没有使用虚拟环境,则可以将其删除。processes和threads指定了uWSGI服务器使用的进程和线程数。socket定义了uWSGI服务器的套接字位置。chmod-socket将套接字的访问权限设置为664,这样你的Web服务器可以访问它。vacuum=true将在uWSGI服务器停止时清除套接字文件。 4. 启动uWSGI服务器 运行以下命令启动uWSGI服务器: ``` uwsgi --ini /path/to/your/uwsgi.ini ``` 5. 配置Web服务器 最后,你需要将Web服务器配置为将请求转发到uWSGI服务器。这个过程取决于你使用的Web服务器。如果你使用Nginx,你可以使用以下示例配置文件: ``` server { listen 80; server_name example.com; location / { include uwsgi_params; uwsgi_pass unix:/tmp/myproject.sock; } } ``` 在这个文件中,你需要将server_name替换为你的域名。uwsgi_pass指定了请求应该转发到的uWSGI服务器套接字位置。 这就是使用uWSGI部署Django应用程序的基本步骤。希望这可以帮助你开始。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值