云端部署:使用 Django 打造自己的私有网站平台
Django 是一个高效且安全的 Python Web 框架,提供了快速、安全的网站开发能力,其 MVT(模型-视图-模板)架构简化了开发流程,同时其庞大的社区支持确保了丰富的插件和工具可供使用。本文将介绍如何利用 Django 和云端服务器,轻松构建并部署私有网站平台。
1、云服务器实例配置
本文使用阿里云服务器,并基于 CentOS 操作系统进行部署。有关服务器实例的详细配置,请参考我之前撰写的博客:
[post cid=“99” cover="" size=""/]
2、服务器环境配置
① 安装并配置数据库服务
首先,登录到远程服务器,使用 yum
命令安装 mariadb
和 mariadb-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 项目
由于使用 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证书