介绍
Django是一个强大的网络框架,可以帮助你的Python应用程序或网站从地面上得到。Django包括一个简化的开发服务器来测试你的代码在本地。
在本教程中,您将安装和配置 Ubuntu 18.04 上的某些组件以支持和服务 Django 应用程序,设置 PostgreSQL 数据库,而不是使用默认 SQLite 数据库,然后配置 Gunicorn 应用程序服务器与您的应用程序接口。
前提条件
要完成本教程,你需要一个Ubuntu 18.04服务器设置,一个非根用户配置了sudo
特权,并启用了防火墙。
步骤 1 — 从 Ubuntu 存储库中安装包
首先,从Ubuntu存储库下载和安装您需要的所有项目,然后使用Python包管理器pip
在以后安装额外的组件。
首先,更新本地apt
包索引,然后下载和安装包:
1sudo apt update
接下来,安装您的包,这取决于您的项目将使用哪个Python版本。
如果您正在使用 Django 與 Python 3,請執行下列操作:
1sudo apt install python3-pip python3-dev libpq-dev postgresql postgresql-contrib nginx curl
Django 1.11 是 Django 支持 Python 2 的最新版本,如果您正在启动新项目,强烈建议您选择 Python 3. 如果您仍然需要使用 Python 2,请执行以下操作:
1sudo apt install python-pip python-dev libpq-dev postgresql postgresql-contrib nginx curl
這將安裝「pip」,後來建立 Gunicorn 所需的 Python 開發檔案、Postgres 資料庫系統和與之互動所需的圖書館,以及 Nginx 網頁伺服器。
步骤 2 – 创建 PostgreSQL 数据库和用户
在此步骤中,您将使用 PostgreSQL 创建您的 Django 应用程序的数据库和数据库用户,也称为Postgres
。
默认情况下,Postgres 使用一个名为 peer authentication 的身份验证方案进行本地连接,这意味着如果用户的操作系统用户名匹配一个有效的 Postgres 用户名,则该用户可以无需进一步身份验证登录。
在 Postgres 安装过程中,创建了一个名为 postgres
的操作系统用户,以匹配 postgres
的 PostgreSQL 管理用户. 您需要使用这个用户来执行管理任务. 使用 sudo
登录到一个交互式的 Postgres 会话,然后通过 -u
选项输入用户名:
1sudo -u postgres psql
您将收到一个PostgreSQL提示,在那里您可以设置您的要求,首先为您的项目创建一个数据库:
1CREATE DATABASE myproject;
<$>[注] 注: 每个 Postgres 语句都必须以半字符号结束。
接下来,为您的项目创建一个数据库用户,然后选择一个安全的密码:
1CREATE USER myprojectuser WITH PASSWORD 'password';
1[secondary_label Output]
2CREATE ROLE
然后,对您创建的用户更改一些连接参数,从而加速数据库操作,以免每次建立连接时需要查询并设置正确值。
将默认编码设置为UTF-8
,Django 预期:
1ALTER ROLE myprojectuser SET client_encoding TO 'utf8';
1[secondary_label Output]
2ALTER ROLE
然后将默认交易隔离方案设置为读取承诺
,以阻止未承诺的交易的读取:
1ALTER ROLE myprojectuser SET default_transaction_isolation TO 'read committed';
1[secondary_label Output]
2ALTER ROLE
由于您的 Django 项目将默认设置为UTC
,请设置相应的时区:
1ALTER ROLE myprojectuser SET timezone TO 'UTC';
1[secondary_label Output]
2ALTER ROLE
这些都是来自Django项目(https://docs.djangoproject.com/en/4.0/ref/databases/#optimizing-postgresql-s-configuration)的建议。
现在,给你的新用户访问管理你的新数据库:
1GRANT ALL PRIVILEGES ON DATABASE myproject TO myprojectuser;
1[secondary_label Output]
2GRANT
完成后,请通过执行以下操作退出 PostgreSQL 提示:
1\q
Postgres 现在已成功设置,以便 Django 能够连接并管理其数据库信息。
步骤 3:为您的项目创建一个Python虚拟环境
现在你已经有了数据库,你可以开始准备剩余的项目要求,这意味着在虚拟环境中安装你的Python要求,以便更高效地管理。
要做到这一点,你需要访问virtualenv
命令,开始安装这个命令,使用pip
。
如果您正在使用 Python 3,请升级pip
:
1sudo -H pip3 install --upgrade pip
然后安装包:
1sudo -H pip3 install virtualenv
如果您正在使用 Python 2,请升级pip
:
1sudo -H pip install --upgrade pip
然后安装包:
1sudo -H pip install virtualenv
安装了virtualenv
,您可以开始创建您的项目,首先创建一个目录,在那里您可以保留您的项目文件,在这里我们将其命名为myprojectdir
,您可以随意命名:
1mkdir ~/myprojectdir
接下来,进入该目录:
1cd ~/myprojectdir
在项目目录中,创建一个Python虚拟环境:
1virtualenv myprojectenv
这将创建一个名为myprojectenv
的目录在你的myprojectdir
目录中。内部,它将安装一个本地版本的Python和一个本地版本的pip
。
但是,在安装项目的 Python 要求之前,您需要激活虚拟环境:
1source myprojectenv/bin/activate
您的提示应更改,以表示您现在正在运行在Python虚拟环境中. 它将看起来像这样的东西: (myprojectenv)user@host:~/myprojectdir$
。
随着虚拟环境的启动,安装 Django、Gunicorn 和psycopg2
PostgreSQL 适配器,使用本地实例pip
:
<$>[注]
注: 当虚拟环境被激活时(当您的提示有(myprojectenv)
之前),使用pip
而不是pip3
,即使您正在使用Python 3. 虚拟环境的副本的工具总是被命名为pip
,无论Python版本。
1pip install django gunicorn psycopg2-binary
现在你拥有启动 Django 项目所需的所有软件。
第4步:创建和配置一个新的Django项目
随着 Python 组件的安装,您现在可以创建实际的 Django 项目文件. 由于您已经拥有一个项目目录,请告诉 Django 在这里安装这些文件。 它将创建一个具有实际代码的第二级目录,这是正常的,并在该目录中放置管理脚本。
1django-admin.py startproject myproject ~/myprojectdir
在此时,您的项目目录(在这种情况下~/myprojectdir
)将具有以下内容:
~/myprojectdir/manage.py
: 一个 Django 项目管理脚本.~/myprojectdir/myproject/
: 该 Django 项目包. 这将包含__init__.py
,settings.py
,urls.py
和wsgi.py
文件.~/myprojectdir/myprojectenv/
: 您之前创建的虚拟环境目录.
您新创建的项目文件下一步要做的是调整设置。在您喜爱的文本编辑器中打开设置文件。
1nano ~/myprojectdir/myproject/settings.py
首先,找出ALLOWED_HOSTS
指令,定义了可以用于连接到Django实例的服务器地址或域名列表,任何未列入此列表的 Host标题的输入请求都会引发例外。
在方块中,列出与您的 Django 服务器相关的 IP 地址或域名。每个项目都应该列入引文中,其中有条纹分开的条目。如果您更喜欢对整个域名和任何子域的请求,请预先预设一个期限,以便开始输入。在下面的片段中,有几个被评论的示例用于演示:
<$>[注]
注: 请确保将localhost
列为选项之一,因为您将通过本地 Nginx 实例代理连接。
1[label ~/myprojectdir/myproject/settings.py]
2. . .
3# The simplest case: just add the domain name(s) and IP addresses of your Django server
4# ALLOWED_HOSTS = [ 'example.com', '203.0.113.5']
5# To respond to 'example.com' and any subdomains, start the domain with a dot
6# ALLOWED_HOSTS = ['.example.com', '203.0.113.5']
7ALLOWED_HOSTS = ['your_server_domain_or_IP', 'second_domain_or_IP', . . ., 'localhost']
接下来,找到配置数据库访问的部分. 它将从DATABASES
开始. 文件中的配置是用于 SQLite 数据库. 由于您已经为您的项目创建了 PostgreSQL 数据库,您需要调整这些设置。
用您的 PostgreSQL 数据库信息更新设置,然后告诉 Django 使用您与pip
安装的psycopg2
适配器,您还需要提供数据库名称,您刚刚创建的数据库用户的用户名称,数据库用户的密码,并指定该数据库可以在本地计算机上找到。
1[label ~/myprojectdir/myproject/settings.py]
2. . .
3
4DATABASES = {
5 'default': {
6 'ENGINE': 'django.db.backends.postgresql_psycopg2',
7 'NAME': 'myproject',
8 'USER': 'myprojectuser',
9 'PASSWORD': 'password',
10 'HOST': 'localhost',
11 'PORT': '',
12 }
13}
14
15. . .
接下来,转到文件的尽头,并添加一个设置,表示 static 文件应该放置在哪里。 这是必要的,以便 Nginx 能够处理这些项目的请求。
1[label ~/myprojectdir/myproject/settings.py]
2. . .
3
4STATIC_URL = '/static/'
5import os
6STATIC_ROOT = os.path.join(BASE_DIR, 'static/')
如果您正在使用nano
,您可以通过按CTRL + X
然后按Y
和ENTER
来做到这一点。
步骤5 - 完成初始项目设置
下一步将是使用以下管理脚本将初始数据库方案迁移到您的 PostgreSQL 数据库:
1~/myprojectdir/manage.py makemigrations
2~/myprojectdir/manage.py migrate
创建项目的管理用户:
1~/myprojectdir/manage.py createsuperuser
您将不得不选择用户名,提供电子邮件地址,然后选择确认密码。
通过执行以下操作,将所有静态内容收集到您配置的目录位置:
1~/myprojectdir/manage.py collectstatic
然后,静态文件将放置在项目目录中的名为静态
的目录中。
如果您遵循最初的服务器设置指南,您应该有一个 UFW 防火墙来保护您的服务器. 为了测试开发服务器,您需要允许访问您正在使用的端口。
1sudo ufw allow 8000
最后,通过使用以下命令启动 Django 开发服务器来测试您的项目:
1~/myprojectdir/manage.py runserver 0.0.0.0:8000
在您的 Web 浏览器中,访问您的服务器的域名或 IP 地址,然后是 :8000
:
1http://server_domain_or_IP:8000
您应该收到以下默认 Django 索引页面:
如果您在地址栏中添加/admin
到URL的末尾,您将被提示使用createsuperuser
命令创建的管理用户名和密码:
验证后,您可以访问默认的 Django 管理界面:
当您完成探索时,请在终端窗口中按CTRL + C
,关闭开发服务器。
步骤 6 – 测试 Gunicorn 服务项目的能力
在离开虚拟环境之前,请测试 Gunicorn 以确保它能服务于应用程序。
1cd ~/myprojectdir
然后运行gunicorn
来加载项目的 WSGI 模块:
1gunicorn --bind 0.0.0.0:8000 myproject.wsgi
这将启动Gunicorn在Django开发服务器正在运行的相同界面上,您可以返回并再次测试应用程序。
<$>[注] 注: 管理界面不会有任何应用的样式,因为Gunicorn不知道如何找到负责此问题的静态CSS内容。
要复制,您通过指定Django的wsgi.py
文件的相对目录路径来传递Gunicorn一个模块,这是您的应用程序的入口点,使用Python的模块语法。Gunicorn作为您的应用程序的界面,将客户端请求从HTTP翻译成Python调用,您的应用程序可以处理。
当你完成测试时,在终端窗口中按CTRL + C
来停止Gunicorn。
现在你已经完成了配置你的Django应用程序,并可以禁用你的虚拟环境:
1deactivate
提示中的虚拟环境指示器将被删除。
步骤 7 — 创建 Gunicorn 的 systemd 接口和服务文件
现在你已经测试了Gunicorn可以与你的Django应用程序进行交互,你应该实施一个更强大的启动和停止应用程序服务器的方式。
Gunicorn 接口将在启动时创建,并会听取连接。当发生连接时,systemd 会自动启动 Gunicorn 过程来处理连接。
首先,在您喜爱的文本编辑器中创建并打开 Gunicorn 的 systemd 接口文件,具有sudo
权限:
1sudo nano /etc/systemd/system/gunicorn.socket
内部,创建一个[Unit]
部分来描述插槽,一个[Socket]
部分来定义插槽的位置,以及一个[Install]
部分来确保插槽在正确的时间创建:
1[label /etc/systemd/system/gunicorn.socket]
2[Unit]
3Description=gunicorn socket
4
5[Socket]
6ListenStream=/run/gunicorn.sock
7
8[Install]
9WantedBy=sockets.target
保存并关闭文件,当你完成。
接下来,在您喜爱的文本编辑器中创建并打开有sudo
权限的 Gunicorn 的 systemd 服务文件。
1sudo nano /etc/systemd/system/gunicorn.service
请从[单位]
部分开始,该部分用于指定元数据和依赖性。在这里添加您的服务的描述,并告诉 init 系统在实现网络目标后才启动此服务。
1[label /etc/systemd/system/gunicorn.service]
2[Unit]
3Description=gunicorn daemon
4Requires=gunicorn.socket
5After=network.target
接下来,添加一个[服务]
部分,并指定您希望该过程运行的用户和组。 提供您的常规用户帐户所有权,因为它拥有所有相关的文件。
随后,绘制工作目录并指定运行命令以启动服务. 在这种情况下,指定在您的虚拟环境中安装的Gunicorn可执行的完整路径。然后将过程绑定到您在/run
目录中创建的Unix插件,以便该过程可以与Nginx进行通信。将所有数据记录到标准输出,以便journald
过程可以收集Gunicorn日志。您也可以在这里指定任何可选的Gunicorn调整。
1[label /etc/systemd/system/gunicorn.service]
2[Unit]
3Description=gunicorn daemon
4Requires=gunicorn.socket
5After=network.target
6
7[Service]
8User=sammy
9Group=www-data
10WorkingDirectory=/home/sammy/myprojectdir
11ExecStart=/home/sammy/myprojectdir/myprojectenv/bin/gunicorn \
12 --access-logfile - \
13 --workers 3 \
14 --bind unix:/run/gunicorn.sock \
15 myproject.wsgi:application
最后,添加一个[安装]
部分,这将告诉系统d如果您允许该服务在启动时启动,该服务将链接到什么。
1[label /etc/systemd/system/gunicorn.service]
2[Unit]
3Description=gunicorn daemon
4Requires=gunicorn.socket
5After=network.target
6
7[Service]
8User=sammy
9Group=www-data
10WorkingDirectory=/home/sammy/myprojectdir
11ExecStart=/home/sammy/myprojectdir/myprojectenv/bin/gunicorn \
12 --access-logfile - \
13 --workers 3 \
14 --bind unix:/run/gunicorn.sock \
15 myproject.wsgi:application
16
17[Install]
18WantedBy=multi-user.target
这样,你的 systemd 服务文件就完成了. 现在保存并关闭该文件。
接下来,启动 Gunicorn 接口,然后在 /run/gunicorn.sock
现在和启动时创建接口文件:
1sudo systemctl start gunicorn.socket
然后启用它,以便当连接到该插槽时,systemd 会自动启动gunicorn.service
来处理它:
1sudo systemctl enable gunicorn.socket
您可以通过检查插件文件来确认操作成功。
步骤 8 — 查找 Gunicorn Socket 文件
检查过程的状态,看看它是否能够开始:
1sudo systemctl status gunicorn.socket
1[secondary_label Output]
2● gunicorn.socket - gunicorn socket
3 Loaded: loaded (/etc/systemd/system/gunicorn.socket; enabled; vendor prese>
4 Active: active (listening) since Thu 2021-12-02 19:58:48 UTC; 14s ago
5 Triggers: ● gunicorn.service
6 Listen: /run/gunicorn.sock (Stream)
7 Tasks: 0 (limit: 1136)
8 Memory: 0B
9 CGroup: /system.slice/gunicorn.socket
10
11Dec 02 19:58:48 gunicorn systemd[1]: Listening on gunicorn socket.
接下来,检查在/run
目录中是否存在gunicorn.sock
文件:
1file /run/gunicorn.sock
1[secondary_label Output]
2/run/gunicorn.sock: socket
如果systemctl status
命令表明出现错误,或者您在目录中找不到gunicorn.sock
文件,则表明 Gunicorn 接口没有正确创建。
1sudo journalctl -u gunicorn.socket
检查您的 /etc/systemd/system/gunicorn.socket
文件,在继续之前修复任何问题。
第9步:测试 Socket 激活
如果您刚刚启动了gunicorn.socket
单元,则gunicorn.service
将不会活跃,因为插件没有接收任何连接。
1sudo systemctl status gunicorn
1[secondary_label Output]
2● gunicorn.service - gunicorn daemon
3 Loaded: loaded (/etc/systemd/system/gunicorn.service; disabled; vendor preset: enabled)
4 Active: inactive (dead)
要测试插槽激活机制,通过弯曲
发送连接到插槽:
1curl --unix-socket /run/gunicorn.sock localhost
您应该从终端中收到您的应用程序的HTML输出。这证实Gunicorn已经启动并能够服务您的Django应用程序。您可以通过再次检查状态来验证Gunicorn服务正在运行:
1sudo systemctl status gunicorn
1[secondary_label Output]
2● gunicorn.service - gunicorn daemon
3 Loaded: loaded (/etc/systemd/system/gunicorn.service; disabled; vendor preset
4 Active: active (running) since Tue 2021-11-23 22:55:12 UTC; 11s ago
5 Main PID: 11002 (gunicorn)
6 Tasks: 4 (limit: 1151)
7 CGroup: /system.slice/gunicorn.service
8 ├─11002 /home/sammy/myprojectdir/myprojectenv/bin/python /home/sammy/
9 ├─11018 /home/sammy/myprojectdir/myprojectenv/bin/python /home/sammy/
10 ├─11020 /home/sammy/myprojectdir/myprojectenv/bin/python /home/sammy/
11 └─11022 /home/sammy/myprojectdir/myprojectenv/bin/python /home/sammy/
12. . .
如果从弯曲
的输出或systemctl 状态
的输出表明出现问题,请检查日志以获取更多细节:
1sudo journalctl -u gunicorn
如果您对 /etc/systemd/systemd/system/gunicorn.service
文件进行更改,请重新加载 DAEMON 以重新阅读服务定义:
1sudo systemctl daemon-reload
然后重启 Gunicorn 过程:
1sudo systemctl restart gunicorn
如果出现任何类似这些问题,在继续之前解决问题。
步骤 10 — 配置 Nginx 到 Proxy Pass 到 Gunicorn
现在Gunicorn已设置,接下来您将配置 Nginx 来将流量传输到进程中。
首先,在 Nginx 的可用站点
目录中创建并打开一个新的服务器块:
1sudo nano /etc/nginx/sites-available/myproject
在内部,打开一个新的服务器块,首先指定该块应该听到正常端口80
,并应响应您的服务器的域名或IP地址:
1[label /etc/nginx/sites-available/myproject]
2server {
3 listen 80;
4 server_name server_domain_or_IP;
5}
接下来,指示 Nginx 忽略找到 favicon 的任何问题. 另外,告诉它在你的 ~/myprojectdir/static’ 目录中收集的静态资产的位置。 所有这些文件都有一个标准的 URI 前缀
/static`,这样你就可以创建一个位置块来匹配这些请求:
1[label /etc/nginx/sites-available/myproject]
2server {
3 listen 80;
4 server_name server_domain_or_IP;
5
6 location = /favicon.ico { access_log off; log_not_found off; }
7 location /static/ {
8 root /home/sammy/myprojectdir;
9 }
10}
最后,创建一个位置 / {}
块来匹配所有其他请求. 在这个位置内,从 Nginx 安装中添加标准的proxy_params
文件,然后将流量直接传输到 Gunicorn 接口:
1[label /etc/nginx/sites-available/myproject]
2server {
3 listen 80;
4 server_name server_domain_or_IP;
5
6 location = /favicon.ico { access_log off; log_not_found off; }
7 location /static/ {
8 root /home/sammy/myprojectdir;
9 }
10
11 location / {
12 include proxy_params;
13 proxy_pass http://unix:/run/gunicorn.sock;
14 }
15}
完成后保存并关闭该文件. 现在,您可以通过链接到网站启用
目录来启用该文件:
1sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled
测试您的 Nginx 配置以检测语法错误:
1sudo nginx -t
如果没有报告错误,请继续并重新启动 Nginx:
1sudo systemctl restart nginx
由于您不再需要访问开发服务器,请通过删除打开端口8000
的规则来调整您的防火墙设置:
1sudo ufw delete allow 8000
然后在端口80
和443
上允许正常流量,从而分别允许 HTTP 和 HTTPS 连接,使用以下命令:
1sudo ufw allow 'Nginx Full'
您现在应该能够访问您的服务器的域或IP地址来查看您的应用程序。
<$>[注] 注: 配置 Nginx 后,下一步应该是通过 SSL/TLS 确保到服务器的流量,因为没有它,所有信息,包括密码,都通过网络以简单的文本发送。
如果你有一个域名,获得SSL证书以保护你的流量最快的方法是使用Let's Encrypt。你可以通过遵循我们在Ubuntu 18.04上的如何保护Let's Encrypt
(How to Secure Let's Encrypt on Ubuntu 18.04)上的指南来设置它。
如果你没有域名,你仍然可以用自签名的SSL证书(https://andsky.com/tech/tutorials/how-to-create-a-self-signed-ssl-certificate-for-nginx-in-ubuntu-18-04)保护你的网站进行测试和学习。
步骤 11 — 故障排除 Nginx 和 Gunicorn
如果您在应用程序中遇到问题,以下部分为您提供如何解决安装问题的指南。
Nginx将显示默认页面而不是Django应用程序
如果 Nginx 显示默认页面而不是向您的应用程序代理,这通常意味着您需要在 /etc/nginx/sites-available/myproject’ 文件中调整
server_name` 以指向您的服务器的 IP 地址或域名。
Nginx 使用「server_name」指令来确定使用哪个服务器块来响应请求. 如果您正在获取默认的 Nginx 页面,这是一个迹象,表明 Nginx 无法明确匹配请求到服务器块,因此它正在返回在 `/etc/nginx/sites-available/default 中定义的默认块。
项目服务器块中的server_name
必须比要选择的默认服务器块中的server_name
更为具体。
Nginx 顯示 502 Bad Gateway 錯誤,而不是 Django 應用程式
502 错误表明 Nginx 无法成功代理请求. 各种配置问题以 502 错误表达,因此需要更多信息才能正确解决问题。
寻找更多信息的主要场所是 Nginx 错误日志. 一般来说,这会告诉您在代理事件中引起的问题的条件。
1sudo tail -F /var/log/nginx/error.log
现在,请在浏览器中提出另一个请求,以生成新错误(尝试刷新页面)。
您可能会收到如下这样的消息:
connect() 到 unix:/run/gunicorn.sock 失败了(2:没有此类文件或目录)
這表明 Nginx 無法在該位置找到「gunicorn.sock」檔案,您應該將在「/etc/nginx/sites-available/myproject」檔案內定義的「proxy_pass」位置與由「gunicorn.socket」 systemd 單位生成的「gunicorn.sock」檔案的實際位置進行比較。
如果您无法在/run
目录中找到一个gunicorn.sock
文件,这通常意味着 systemd socket 文件无法创建它。
另一个消息可以读到如下:
connect() 到 unix:/run/gunicorn.sock 失败了(13:允许被拒绝)
这表明 Nginx 由于权限问题无法连接到 Gunicorn 接口,这可能发生在使用 root 用户而不是sudo
用户时。
如果 root 目录 (/
) 和 'gunicorn.sock' 文件之间有有限的权限,则会发生这种情况,您可以通过将对您的 socket 文件的绝对路径转移到 'namei' 命令来查看 socket 文件及其每个母目录的权限和所有权值:
1namei -l /run/gunicorn.sock
1[secondary_label Output]
2f: /run/gunicorn.sock
3drwxr-xr-x root root /
4drwxr-xr-x root root run
5srw-rw-rw- root root gunicorn.sock
输出显示了每个目录组件的权限. 通过查看权限(第一列),所有者(第二列)和组所有者(第三列),您可以确定允许对插件文件的访问类型。
在本示例中,插件文件和它所带来的每个目录都有世界读取和执行权限(目录的权限列以r-x
而不是---
结束)。
如果连接到连接器的任何目录都没有世界读取和执行权限,那么 Nginx 将无法访问连接器,而不允许世界读取和执行权限,或者通过向 Nginx 是组的一部分赋予组所有权。
Django表示:无法连接到服务器:连接被拒绝
在 Web 浏览器中尝试访问应用程序的部分时,您可能收到 Django 的一个信息是:
1OperationalError at /admin/login/
2could not connect to server: Connection refused
3 Is the server running on host "localhost" (127.0.0.1) and accepting
4 TCP/IP connections on port 5432?
这表明 Django 无法连接到 Postgres 数据库. 检查 Postgres 实例是否正在运行:
1sudo systemctl status postgresql
如果不是,你可以启动它,并允许它在启动时自动启动(如果它尚未配置为此):
1sudo systemctl start postgresql
2sudo systemctl enable postgresql
如果您仍然遇到问题,请确保在 ~/myprojectdir/myproject/settings.py
文件中定义的数据库设置正确。
进一步麻烦解决
为了进一步解决问题,日志可以帮助缩小根源原因,检查每个原因,并注意任何指示问题区域的消息。
以下日志可能有用:
- 检查 Nginx 进程日志:
sudo journalctl -u nginx
- 检查 Nginx 访问日志:
sudo less /var/log/nginx/access.log
- 检查 Nginx 错误日志:
sudo less /var/log/nginx/error.log
- 检查 Gunicorn 应用日志:
sudo journalctl -u gunicorn.socket
- 检查 Gunicorn 接口日志:
sudo journallct -u gunicornic.socket
当您更新配置或应用程序时,您可能需要重新启动流程以适应您的更改。
如果您更新 Django 应用程序,您可以通过执行以下操作重新启动 Gunicorn 流程以获取更改:
1sudo systemctl restart gunicorn
如果您更改 Gunicorn 插槽或服务文件,请重新加载 DAEMON 并通过执行以下操作重新启动该过程:
1sudo systemctl daemon-reload
2sudo systemctl restart gunicorn.socket gunicorn.service
如果您更改了 Nginx 服务器块配置,请测试配置,然后运行以下操作:
1sudo nginx -t && sudo systemctl restart nginx
这些命令有助于在调整配置时应用更改。
结论
在本指南中,你在自己的虚拟环境中设置了一个Django项目,并配置了Gunicorn来翻译客户端请求,以便Django能够处理它们。
Django 使创建项目和应用程序变得方便,通过提供许多常见的部分,允许您专注于独特的元素。