主页
avatar

Kared

云端部署:使用 Django 打造自己的私有网站平台

Django 是一个高效且安全的 Python Web 框架,提供了快速、安全的网站开发能力,其 MVT(模型-视图-模板)架构简化了开发流程,同时其庞大的社区支持确保了丰富的插件和工具可供使用。本文将介绍如何利用 Django 和云端服务器,轻松构建并部署私有网站平台。

1、云服务器实例配置

本文使用阿里云服务器,并基于 CentOS 操作系统进行部署。有关服务器实例的详细配置,请参考我之前撰写的博客:

[post cid=“99” cover="" size=""/]

2、服务器环境配置

① 安装并配置数据库服务

首先,登录到远程服务器,使用 yum 命令安装 mariadbmariadb-server。执行以下命令:

sudo yum -y install mariadb mariadb-server

输入密码后,安装将会自动进行。接下来,启动 MariaDB 服务,使用命令:

sudo systemctl start mariadb

然后,设置 MariaDB 服务开机自动启动,执行命令:

sudo systemctl enable mariadb.service

接下来,我们需要设置数据库 root 用户的密码。执行命令:

mysql_secure_installation

系统会提示您输入当前 root 用户的密码。由于我们尚未设置密码,可以直接回车跳过。接下来,系统会询问是否设置 root 用户密码,按 y 确认,然后输入两次新密码并一路回车完成设置(注意:此步骤设置的是数据库的 root 用户密码,与服务器的 root 用户无关)。

最后,通过以下命令进入数据库:

mysql -u root -p

输入数据库 root 用户的密码后,即可进入数据库命令行模式。在此模式下,您可以输入以下命令创建数据库:

create database mysite;

(别忘了在命令末尾加上分号)。这样就成功创建了名为 mysite 的数据库。最后,通过命令 exit; 退出数据库。

② 安装 python 3 编程环境

首先,远程登录到服务器,使用以下命令查看当前 CentOS 系统中 Python 的版本:

python --version

如果当前版本过低或与我们需要的版本不符,请继续执行以下安装步骤。

在正式下载安装 Python 3 之前,我们需要安装 Python 的依赖环境。执行以下命令安装所需的依赖:

sudo yum -y install openssl-devel bzip2-devel expat-devel gdbm-devel readline-devel sqlite-devel zlib-devel libffi-devel MySQL-python mysql-devel

由于要安装的依赖环境较多,请确保每个依赖都被正确安装,以避免后续安装 Python 3 时出现错误。

接下来,访问 Python 的官网 Python 官网,找到需要下载的版本。在版本详情页中,找到相应的下载链接,例如 Python-3.8.1.tgz,右键单击并选择“复制链接地址”。然后,执行命令下载 Python 3:

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

下载完成后,解压缩文件:

tar -zxvf Python-3.8.1.tgz

解压后,当前目录中将出现一个名为 Python-3.8.1 的新文件夹。接下来,我们将安装 Python 3。首先,进入 /usr/local 目录,创建一个名为 python3 的文件夹:

cd /usr/local
sudo mkdir python3

然后,返回到 ~/Python-3.8.1 目录,并配置安装路径:

cd ~/Python-3.8.1
./configure --prefix=/usr/local/python3/

最后,编译并安装 Python 3:

make
sudo make install

Python 3 安装完成后,我们需要将 Python 3 和 pip 添加到环境变量。首先,进入 /usr/local/python3/ 目录,创建 Python 3 的链接:

cd /usr/local/python3/
sudo ln -s /usr/local/python3/bin/python3 /usr/bin/python3

现在可以直接使用 python3 命令进入 Python 3 环境。接着,创建 pip 的链接:

sudo ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3

现在可以使用 pip3 命令进行包管理,例如安装 mysqlclient

sudo pip3 install mysqlclient

3、安装配置 Django 项目

① 安装测试 Django

首先,我们登录服务器,然后使用 pip3 进行安装。每次使用 pip3 命令时,learn 账户需要使用 sudo 以超级管理员身份执行。执行以下命令即可成功安装 Django:

sudo pip3 install django

接下来,我们需要将 django-admin 添加到环境变量。执行以下命令创建链接:

sudo ln -s /usr/local/python3/bin/django-admin /usr/bin

现在,我们可以直接使用 django-admin 命令了。我们还需要执行以下命令进入 /home/ 目录,并创建并进入名为 programs 的文件夹,用于存放我们的 Django 项目:

cd /home/
sudo mkdir programs
cd programs

进入 programs 目录后,执行以下命令创建 Django 项目,我们便完成了创建 mysite 的 Django 项目。

sudo django-admin startproject mysite

Tip: 为了方便查看项目的目录结构,我们可以通过 yum 安装 tree 工具,执行 sudo yum -y install tree 命令进行安装。安装完成后,使用 tree 命令即可以树状结构显示当前文件夹及其子文件夹的内容。

接下来,我们将编写一个简单的 Django 项目以测试已安装的 Django 程序。

首先,执行以下命令进入 mysite/mysite/ 目录:

cd mysite/mysite/

然后,使用 sudo vim views.py 创建 views.py 文件,并添加以下代码:

from django.http import HttpResponse

def index(request):
    return HttpResponse("Hello World")

接着,使用 sudo vim urls.py 打开 urls.py 文件并进行如下修改:

from django.contrib import admin
from django.urls import path
from . import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', views.index),
]

然后,使用 sudo vim settings.py 打开 settings.py 文件,找到 ALLOWED_HOSTS = [],并将其修改为:

ALLOWED_HOSTS = ['localhost', '你的公网ip']

接下来,仍在打开的 settings.py 文件中,继续寻找 DATABASES 相关代码并进行如下修改:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'mysite',    # 数据库名
        'USER': 'root',      # 用户名
        'PASSWORD': 'password',  # 密码
        'HOST': 'localhost',
        'PORT': '3306',
    }
}

最后,我们需要通过命令 cd .. 返回父目录,然后执行命令 sudo python3 manage.py migrate 进行数据库迁移。迁移完成后,可以通过命令 sudo python3 manage.py runserver 0.0.0.0:80 启动我们的项目。在浏览器中输入我们的公网 IP 就可以查看项目了,最后,可以通过 Ctrl + C 退出项目。

测试 Django 项目

② 远程配置 Django 项目

由于使用 learn 用户修改项目文件需要 root 权限,因此需要调整文件夹的访问权限。远程登录服务器后,执行命令 cd /home/programs/ 进入该路径,并使用 ls -al 查看文件详细信息。最后,执行命令 sudo chown -R learn mysite 修改 mysite 文件夹及其内部所有文件的所有者。

然后,在桌面新建文件夹 mysite,然后在 VS Code 中打开该文件夹并安装 SFTP,安装完成后重启 VS Code。如果您使用的是 PyCharm,可以参考相关资料学习 SFTP 的使用方法。

重启后,按 Ctrl + Shift + P 或在上方的 View 选项中选择 Command Palette 进入命令面板,输入命令 SFTP:Config。VS Code 会在 .vscode 文件夹中自动创建一个 sftp.json 文件(如果没有显示,可以刷新一下)。

接下来,修改 sftp.json 文件中的键值对,完成后记得按 Ctrl + S 保存。

  • "host": 填写服务器的公网 IP。
  • "port": 默认端口为 22,如果之前修改为其他端口(如 12345),请填写相应端口。
  • "username": 填写登录所用的用户名。
  • "password""privateKeyPath": 任选其一。"password" 填写用户密码(明文,不太安全);"privateKeyPath" 填写之前创建的私钥 learnfile 的路径。
  • "ignore": 创建一个列表,列出需要忽略同步的文件和文件夹。例如,.vscode 文件夹和 __pycache__ 文件夹。
  • "syncOption": 创建一个字典,添加 "delete": true,允许删除的文件同步到服务器。是否添加此选项取决于个人意愿。
  • "watcher": 创建一个字典,方便自动同步文件。默认键值对 "autoUpload": true 表示修改或添加的文件自动同步,"autoDelete": false 表示删除的文件不会自动同步,可以将其改为 true

4、使用 WSGI 服务器部署

首先,登录远程服务器,使用命令 sudo pip3 install uwsgi 安装 uWSGI。接着,创建链接,执行命令 sudo ln -s /usr/local/python3/bin/uwsgi /usr/bin/uwsgi3。完成 uWSGI 的安装和设置后,使用命令 sudo yum -y install nginx 安装 Nginx,安装完成后可以退出远程登录。

接下来,用 VS Code 打开 mysite 文件夹,编辑 settings.py 文件。将 DEBUG = True 修改为 DEBUG = False,在 TEMPLATES 中将 'DIRS': [] 修改为 'DIRS': [os.path.join(BASE_DIR, 'templates'),],并在文件末尾添加以下两行代码:

STATIC_ROOT = os.path.join(BASE_DIR, '../collected_static')
STATICFILES_DIRS = (os.path.join(BASE_DIR, 'static'),)

同时,在主目录下创建名为 static 和名为 templates 的文件夹,按 Ctrl + S 保存修改对设置文件的修改。

然后,回到终端,登录远程服务器,执行命令 cd /home/programs/ 进入该路径,创建 collected_static 文件夹,命令为 sudo mkdir collected_static。接着,进入项目主目录 cd mysite,执行 sudo python3 manage.py collectstatic 打包静态文件到 collected_static 文件夹中,打包完成后退出服务器。

在项目主目录下创建 uwsgi.ini 文件,并写入以下代码,按 Ctrl + S 保存修改:

[uwsgi]
socket = 127.0.0.1:8080
chdir = /home/programs/mysite
module = mysite.wsgi
master = ture
processes = 1
threads = 2
max-requests = 2000
chmod-socket = 664
vacuum = ture

stats = %(chdir)/uwsgi/uwsgi.status
pidfile = %(chdir)/uwsgi/uwsgi.pid
daemonize = %(chdir)/uwsgi/uwsgi.log

然后,再次登录远程服务器,执行命令 sudo vim /etc/nginx/nginx.conf 进入 nginx.conf 配置文件,删除 server 上面的一行代码,并修改 server 内的代码内容,添加以下配置:

server {
        listen 80;
        server_name localhost;
        charset utf-8;

        location / {
                uwsgi_pass 127.0.0.1:8000;
                include /etc/nginx/uwsgi_params;
        }

        location /static {
                alias /home/programs/collected_static/;
        }

        error_page 404 /404.html;
            location = /40x.html {
        }

        error_page 500 502 503 504 /50x.html;
            location = /50x.html {
        }
    }

最后,执行 cd /home/programs/mysite/ 进入项目路径。然后,执行命令 sudo uwsgi3 --ini uwsgi.ini 启动 uWSGI,并执行 sudo systemctl start nginx 启动 Nginx。现在,可以在浏览器中输入公网 IP 查看项目。

在对项目进行更改后,网页内容可能不会立即更新,此时需要重启 uWSGI 服务。首先,登录服务器执行命令 cd /home/programs/mysite/uwsgi 进入该路径,运行命令 sudo uwsgi3 --reload uwsgi.pid 重启 uWSGI 服务。

5、设置域名和 SSL 证书

① 域名简单设置步骤

  • 选择和购买域名:通过注册商(如 Cloudflare、阿里云)购买域名。
  • 域名解析:将域名指向服务器,使用 DNS 将域名转换为 IP 地址。
  • 设置 DNS 记录:在注册商管理面板中添加 A 记录。
    • A 记录:将域名指向一个 IPv4 地址。
    • AAAA 记录:将域名指向一个 IPv6 地址。
    • CNAME 记录:将一个域名指向另一个域名(别名)。
    • MX 记录:指定处理电子邮件的邮件服务器。
    • TXT 记录:用于存储任意文本信息,常用于验证和安全设置(如 SPF、DKIM)。
  • 等待生效:DNS 更改可能需要几分钟到48小时生效。
  • 测试域名:在浏览器中输入域名,确认是否能访问网站。

② 服务器上配置 SSL 证书

关于如何在 Nginx 或 Tengine ,包括证书文件的下载和上传、在 Nginx 上配置证书文件、证书链和证书密钥等参数,以及安装证书后的验证结果,您可以参考以下文章:Nginx或Tengine服务器配置SSL证书

Django Python Web Server Deployment Cloud