将 django 部署到生产环境

Barbara Streisand
发布: 2024-09-25 06:15:37
原创
1101 人浏览过

我最近将我自己的 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 的新文件夹

现在要设置静态文件,我们有两个选项:

  1. 将 /etc/nginx/nginx.conf 中的用户更改为您的用户(不太安全)
  2. 将静态文件复制到/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 的域。

首先前往零信任仪表板

在“网络”下单击“隧道”,然后单击“创建隧道”

创建后,您应该安装并运行连接器,按照页面上的说明进行特定设置。

连接器运行后,您应该单击公共主机名选项卡并添加公共主机名。

现在您应该看到类似这样的内容:Deploy django to production

按照我的信息填写。服务类型应为 HTTP,url 应为 127.0.0.1:80 或 localhost:80

现在,如果您前往指定的域,您应该会看到您的应用程序已启动并正在运行。

恭喜你!

如果您喜欢这篇文章并想支持我的(大部分是无偿的)工作,您可以在这里捐款。

加入我的免费时事通讯!

加入这里

以上是将 django 部署到生产环境的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板