Loading... <div class="tip inlineBlock warning simple"> 🤖 本博客内容使用 GPT-4 技术进行润色 </div> Django 是一个高效且安全的 Python Web 框架,提供了快速、安全的网站开发能力,其 MVT(模型-视图-模板)架构简化了开发流程,同时其庞大的社区支持确保了丰富的插件和工具可供使用。本文将介绍如何利用 Django 和云端服务器,轻松构建并部署私有网站平台。 ## 1、云服务器实例配置 本文使用阿里云服务器,并基于 CentOS 操作系统进行部署。有关服务器实例的详细配置,请参考我之前撰写的博客: <div class="preview"> <div class="post-inser post box-shadow-wrap-normal"> <a href="https://www.huarzone.com/archives/99/" target="_blank" class="post_inser_a no-external-link no-underline-link"> <div class="inner-image bg" style="background-image: url(https://www.huarzone.com/usr/uploads/images/blog-images/99/1148477430.png);background-size: cover;"></div> <div class="inner-content" > <p class="inser-title">走上云端:云服务器使用入门指南</p> <div class="inster-summary text-muted"> 一、设置用户组 & 用户1、登录远程服务器① 方法一:通过浏览器登录如果购买的阿里云服务器,可以在实例列表中找到目... </div> </div> </a> <!-- .inner-content #####--> </div> <!-- .post-inser ####--> </div> ## 2、服务器环境配置 ### ① 安装并配置数据库服务 首先,登录到远程服务器,使用 `yum` 命令安装 `mariadb` 和 `mariadb-server`。执行以下命令: ```bash sudo yum -y install mariadb mariadb-server ``` 输入密码后,安装将会自动进行。接下来,启动 MariaDB 服务,使用命令: ```bash sudo systemctl start mariadb ``` 然后,设置 MariaDB 服务开机自动启动,执行命令: ```bash sudo systemctl enable mariadb.service ``` 接下来,我们需要设置数据库 root 用户的密码。执行命令: ```bash mysql_secure_installation ``` 系统会提示您输入当前 root 用户的密码。由于我们尚未设置密码,可以直接回车跳过。接下来,系统会询问是否设置 root 用户密码,按 `y` 确认,然后输入两次新密码并一路回车完成设置(注意:此步骤设置的是数据库的 root 用户密码,与服务器的 root 用户无关)。 最后,通过以下命令进入数据库: ```bash mysql -u root -p ``` 输入数据库 root 用户的密码后,即可进入数据库命令行模式。在此模式下,您可以输入以下命令创建数据库: ```bash create database mysite; ``` (别忘了在命令末尾加上分号)。这样就成功创建了名为 `mysite` 的数据库。最后,通过命令 `exit;` 退出数据库。 ### ② 安装 python 3 编程环境 首先,远程登录到服务器,使用以下命令查看当前 CentOS 系统中 Python 的版本: ```bash python --version ``` 如果当前版本过低或与我们需要的版本不符,请继续执行以下安装步骤。 在正式下载安装 Python 3 之前,我们需要安装 Python 的依赖环境。执行以下命令安装所需的依赖: ```bash 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 官网](https://www.python.org/ftp/python/),找到需要下载的版本。在版本详情页中,找到相应的下载链接,例如 [Python-3.8.1.tgz](https://www.python.org/ftp/python/3.8.1/Python-3.8.1.tgz),右键单击并选择“复制链接地址”。然后,执行命令下载 Python 3: ```bash wget https://www.python.org/ftp/python/3.8.1/Python-3.8.1.tgz ``` 下载完成后,解压缩文件: ```bash tar -zxvf Python-3.8.1.tgz ``` 解压后,当前目录中将出现一个名为 `Python-3.8.1` 的新文件夹。接下来,我们将安装 Python 3。首先,进入 `/usr/local` 目录,创建一个名为 `python3` 的文件夹: ```bash cd /usr/local sudo mkdir python3 ``` 然后,返回到 `~/Python-3.8.1` 目录,并配置安装路径: ```bash cd ~/Python-3.8.1 ./configure --prefix=/usr/local/python3/ ``` 最后,编译并安装 Python 3: ```bash make sudo make install ``` Python 3 安装完成后,我们需要将 Python 3 和 pip 添加到环境变量。首先,进入 `/usr/local/python3/` 目录,创建 Python 3 的链接: ```bash cd /usr/local/python3/ sudo ln -s /usr/local/python3/bin/python3 /usr/bin/python3 ``` 现在可以直接使用 `python3` 命令进入 Python 3 环境。接着,创建 pip 的链接: ```bash sudo ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3 ``` 现在可以使用 `pip3` 命令进行包管理,例如安装 `mysqlclient`: ```bash sudo pip3 install mysqlclient ``` ## 3、安装配置 Django 项目 ### ① 安装测试 Django 首先,我们登录服务器,然后使用 `pip3` 进行安装。每次使用 `pip3` 命令时,`learn` 账户需要使用 `sudo` 以超级管理员身份执行。执行以下命令即可成功安装 Django: ```bash sudo pip3 install django ``` 接下来,我们需要将 `django-admin` 添加到环境变量。执行以下命令创建链接: ```bash sudo ln -s /usr/local/python3/bin/django-admin /usr/bin ``` 现在,我们可以直接使用 `django-admin` 命令了。我们还需要执行以下命令进入 `/home/` 目录,并创建并进入名为 `programs` 的文件夹,用于存放我们的 Django 项目: ```bash cd /home/ sudo mkdir programs cd programs ``` 进入 `programs` 目录后,执行以下命令创建 Django 项目,我们便完成了创建 `mysite` 的 Django 项目。 ```bash sudo django-admin startproject mysite ``` > Tip: 为了方便查看项目的目录结构,我们可以通过 `yum` 安装 `tree` 工具,执行 `sudo yum -y install tree` 命令进行安装。安装完成后,使用 `tree` 命令即可以树状结构显示当前文件夹及其子文件夹的内容。 ![](https://www.huarzone.com/usr/uploads/images/blog-images/100/1363788461.png) 接下来,我们将编写一个简单的 Django 项目以测试已安装的 Django 程序。 首先,执行以下命令进入 `mysite/mysite/` 目录: ```bash cd mysite/mysite/ ``` 然后,使用 `sudo vim views.py` 创建 `views.py` 文件,并添加以下代码: ```python from django.http import HttpResponse def index(request): return HttpResponse("Hello World") ``` 接着,使用 `sudo vim urls.py` 打开 `urls.py` 文件并进行如下修改: ```python 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 = []`,并将其修改为: ```python ALLOWED_HOSTS = ['localhost', '你的公网ip'] ``` 接下来,仍在打开的 `settings.py` 文件中,继续寻找 `DATABASES` 相关代码并进行如下修改: ```python 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 项目](https://www.huarzone.com/usr/uploads/images/blog-images/100/990669713.png) ### ② 远程配置 Django 项目 由于使用 `learn` 用户修改项目文件需要 root 权限,因此需要调整文件夹的访问权限。远程登录服务器后,执行命令 `cd /home/programs/` 进入该路径,并使用 `ls -al` 查看文件详细信息。最后,执行命令 `sudo chown -R learn mysite` 修改 `mysite` 文件夹及其内部所有文件的所有者。 ![](https://www.huarzone.com/usr/uploads/images/blog-images/100/2893984549.png) 然后,在桌面新建文件夹 `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`。 ![](https://www.huarzone.com/usr/uploads/images/blog-images/100/2783515816.png) ## 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'),]`,并在文件末尾添加以下两行代码: ```python STATIC_ROOT = os.path.join(BASE_DIR, '../collected_static') STATICFILES_DIRS = (os.path.join(BASE_DIR, 'static'),) ``` 同时,在主目录下创建名为 `static` 和名为 `templates` 的文件夹,按 `Ctrl + S` 保存修改对设置文件的修改。 ![](https://www.huarzone.com/usr/uploads/images/blog-images/100/2747330571.png) 然后,回到终端,登录远程服务器,执行命令 `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证书](https://help.aliyun.com/zh/ssl-certificate/user-guide/install-ssl-certificates-on-nginx-servers-or-tengine-servers?spm=a2c4g.11186623.0.i3) Last modification:August 4, 2024 © Allow specification reprint Support Appreciate the author AliPayWeChat Like 如果觉得我的文章对你有用,请随意赞赏