将 django 部署到生产环境
我最近将我自己的 django 应用程序部署到生产环境中。该网站名为 videoeiro.com,是用 django + HTML/CSS/JS + Tailwind 开发的。
设置
我正在使用 debian 12 服务器,它将通过 cloudflare 隧道公开我的应用程序。所有静态文件都通过 nginx 提供服务,Django 项目由 Gunicorn 运行。
在本指南中,我将向您展示我如何进行设置。
准备 Django 项目
您要做的第一件事是打开 settings.py 并更改以下内容
Debug = False ALLOWED_HOSTS = ['yourdomain.tld'] CSRF_COOKIE_SECURE = True CSRF_TRUSTED_ORIGINS = [ 'yourdomain.tld', ]
您还应该将 SECRET_KEY 更改为一个长随机字符串,切勿与任何人共享。
之后创建一个名为 .gitignore 的新文件并粘贴以下内容:
db.sqlite3 *.pyc
这将确保数据库不会上传到我们的服务器,也不会上传任何 pyc 文件。
现在您可以将项目上传到新的 github 存储库(或 gitea 存储库)。如果您不希望每个人都可以访问您的源代码,请确保将存储库设置为私有。
如果您想确保源代码保持私密,我建议您设置一个自托管 gitea 实例,请阅读 Selfhost your own gitea instance - selfhosted, lightweight github Alternative,以了解如何做到这一点。
git init git branch -M main git add . git commit -m "initial commit" git remote add origin https://... git push -u origin main
现在您已经完成了,您应该登录到您的服务器
服务器设置
在配置任何内容之前,请确保您不允许任何使用密码的 ssh 登录。请遵循使用基于密钥的身份验证保护 ssh 来保护您的服务器免受此类攻击。
登录您的服务器
ssh user@server.ip
确保您的包裹符合数据
sudo apt update && sudo apt upgrade
现在安装 python、pip、git 和 nginx
sudo apt install python3 python3-pip git nginx
现在将您的项目克隆到您的主目录中。
git clone https://... cd my-project
安装后,安装以下内容:
pip install django django-crispy-forms whitenoise
现在尝试运行该项目:
python3 manage.py runserver
如果您收到软件包丢失的错误,请安装它并重新运行。
配置gunicorn
现在我们将设置gunicorn
首先安装
pip install gunicorn
现在用您最喜欢的文本编辑器创建一个名为gunicorn.service的新文件:
sudo vim /etc/systemd/system/gunicorn.service
并粘贴以下内容:
[Unit] Description=gunicorn daemon After=network.target [Service] User=YOURUSER Group=www-data WorkingDirectory=/home/YOURUSER/PROJECT ExecStart=/path/to/gunicorn --access-logfile - --workers 3 --bind 127.0.0.1:8000 PROJECTNAME.wsgi:application [Install] WantedBy=multi-user.target
将 YOURUSER 更改为您的用户。
要找到gunicorn运行的路径:
which gunicorn
您的项目名称是项目内包含 settings.py 文件的文件夹的名称。
现在运行以下命令来启动并启用gunicorn(开机启动)
sudo systemctl daemon-reload sudo systemctl start gunicorn.service sudo systemctl enable gunicorn.service
现在,如果您访问 127.0.0.1:8000,您应该会看到您的项目正在运行。
但是还没完成
设置 nginx
现在我们需要通过 nginx 提供静态内容。
首先使用您最喜欢的文本编辑器创建一个新的 nginx 配置文件:
sudo vim /etc/nginx/sites-available/PROJECT
将 PROJECT 更改为您想要的任何内容
现在粘贴以下内容:
server { listen 80; server_name YOURDOMAIN; location /static/ { alias /var/www/staticfiles/; } location / { proxy_pass http://127.0.0.1:8000; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }
只需将 YOURDOMAIN 更改为将托管该域的域。
创建符号链接以启用您的网站:
sudo ln -s /etc/nginx/sites-available/PROJECT /etc/nginx/sites-enabled/
启动并启用 nginx:
sudo systemctl start nginx sudo systemctl enable nginx
设置静态文件
您要做的第一件事就是 cd 进入您的 (django) 项目
cd project
现在运行以下命令:
python3 manage.py collectstatic
这将创建一个名为 staticfiles 的新文件夹
现在要设置静态文件,我们有两个选项:
- 将 /etc/nginx/nginx.conf 中的用户更改为您的用户(不太安全)
- 将静态文件复制到/var/www/(更安全)
我将执行第二个选项:
首先在 /var/www 中创建一个名为 staticfiles 的新文件
sudo mkdir -p /var/www/staticfiles
现在复制项目中的所有静态文件:
sudo cp staticfiles/* /var/www/staticfiles
现在 cd 进入 /var/www
cd /var/www
更改所有文件的所有权
sudo chown www-data:www-data staticfiles sudo chown www-data:www-data staticfiles/*
重启nginx服务:
sudo systemctl restart nginx
现在如果您前往:
127.0.0.1
您应该看到您的网站正在运行,并提供所有静态文件!
通过 cloudflare 隧道公开
现在让您的网站可公开访问。
为此,您需要一个 cloudflare 帐户和一个指向 cloudflare 的域。
首先前往零信任仪表板
在“网络”下单击“隧道”,然后单击“创建隧道”
创建后,您应该安装并运行连接器,按照页面上的说明进行特定设置。
连接器运行后,您应该单击公共主机名选项卡并添加公共主机名。
现在您应该看到类似这样的内容:
按照我的信息填写。服务类型应为 HTTP,url 应为 127.0.0.1:80 或 localhost:80
现在,如果您前往指定的域,您应该会看到您的应用程序已启动并正在运行。
恭喜你!
如果您喜欢这篇文章并想支持我的(大部分是无偿的)工作,您可以在这里捐款。
加入我的免费时事通讯!
加入这里
以上是将 django 部署到生产环境的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

Python适合数据科学、Web开发和自动化任务,而C 适用于系统编程、游戏开发和嵌入式系统。 Python以简洁和强大的生态系统着称,C 则以高性能和底层控制能力闻名。

Python在游戏和GUI开发中表现出色。1)游戏开发使用Pygame,提供绘图、音频等功能,适合创建2D游戏。2)GUI开发可选择Tkinter或PyQt,Tkinter简单易用,PyQt功能丰富,适合专业开发。

Python更易学且易用,C 则更强大但复杂。1.Python语法简洁,适合初学者,动态类型和自动内存管理使其易用,但可能导致运行时错误。2.C 提供低级控制和高级特性,适合高性能应用,但学习门槛高,需手动管理内存和类型安全。

要在有限的时间内最大化学习Python的效率,可以使用Python的datetime、time和schedule模块。1.datetime模块用于记录和规划学习时间。2.time模块帮助设置学习和休息时间。3.schedule模块自动化安排每周学习任务。

Python在开发效率上优于C ,但C 在执行性能上更高。1.Python的简洁语法和丰富库提高开发效率。2.C 的编译型特性和硬件控制提升执行性能。选择时需根据项目需求权衡开发速度与执行效率。

pythonlistsarepartofthestAndArdLibrary,herilearRaysarenot.listsarebuilt-In,多功能,和Rused ForStoringCollections,而EasaraySaraySaraySaraysaraySaraySaraysaraySaraysarrayModuleandleandleandlesscommonlyusedDduetolimitedFunctionalityFunctionalityFunctionality。

Python在自动化、脚本编写和任务管理中表现出色。1)自动化:通过标准库如os、shutil实现文件备份。2)脚本编写:使用psutil库监控系统资源。3)任务管理:利用schedule库调度任务。Python的易用性和丰富库支持使其在这些领域中成为首选工具。

每天学习Python两个小时是否足够?这取决于你的目标和学习方法。1)制定清晰的学习计划,2)选择合适的学习资源和方法,3)动手实践和复习巩固,可以在这段时间内逐步掌握Python的基本知识和高级功能。
