Blog系统包括两大部分,分别是前台展示和后台数据管理。前台展示包括首页(7日内数据统计、热门博客统计)、登录、注册、博客列表(按日期归档博客列表,按博客类别分类列表等)、博客详情页面、评论模块、个人资料界面、信息修改界面等。后台数据管理包括博客管理、评论管理、数据统计管理、用户管理、动作管理。
本文重点介绍将个人博客网站部署到服务器这部分的内容,而基于Django开发网站的内容篇幅过长,且目前网上视频/文字教学资料丰富,不在此过多叙述。本文网站搭建参考教学视频。欢迎访问我的博客网站。
1 技术模块简述
以下为本项目所采用的技术的简单介绍,以便大家对整个技术架构有个大致的了解。
1.1 后端开发
基于Django框架开发,Django是基于Python的Web开发框架,该框架基于“模型视图模板(MVT)”设计模式。Django 网络应用程序将处理网络处理请求流程中每个步骤的代码分组到单独的文件中。一个Django项目有多个应用,每个应用均有以下文件:
- urls: 通过单个功能来处理来自每个url的请求,同时编写单独的视图函数(views.py)来处理每个资源是更加可维护的。url映射器用于根据请求url将HTTP请求重定向到相应的视图view。url映射器还可以匹配出现在url中的字符串或数字的特定模式,并将其作为数据传递给视图功能。
- views: 视图文件包含一个个请求处理函数,它接收HTTP请求并返回HTTP响应。视图通过模型访问满足请求所需的数据,并将响应的格式委托给模板。
- models: 模型是定义应用程序数据结构的Python对象,并提供在数据库中管理(添加,修改,删除)和查询记录的机制。
- templates:模板是定义文件(例如html页面)的结构或布局的文本文件,用于表示实际内容的占位符。视图可以使用html模板,通过数据填充动态地创建一个html页面模型。可以使用模板来定义任何类型的文件的结构; 它不一定是html。
如图,为博客网站项目中blog应用文件夹下的目录情况:
1.2 前端开发
html+javascript+css。jQuery(JavaScript库);Bootstrap(CSS框架);ajax(jQuery.ajax();用JavaScript执行异步网络请求)
- CSS框架选择:易用性、兼容性、大小、效果、功能。Boostrap框架特点:文档齐全使用简单;兼容较多浏览器;非轻量级;扁平、简洁;组件齐全、响应式
- Highcharts:是一个用于以纯JavaScript编写的图表的软件库。
- Ajax:Ajax是以异步的方式向服务器提交需求。Ajax应用可以仅向服务器发送并取回必须的数据,并在客户端采用JavaScript处理来自服务器的回应。因为在服务器和浏览器之间交换的数据大量减少,服务器回应更快了。同时,很多的处理工作可以在发出请求的客户端机器上完成,因此Web服务器的负荷也减少了。
1.3 部署相关
- 数据库采用mysql:mysql是一款跨平台的开源的关系型数据库。优点:为服务端而设计,可高并发访问,且开源、免费、好用。(Django自带的是SQLite数据库)
- 服务器使用Ubuntu-18.04 64位阿里云ECS: 后续篇幅会详细讲如何在服务器部署。此处再次感谢阿里云ECS的支持(飞天加速计划·高校学生在家实践)
- 版本控制Git: 使用GitHub时,国内的用户经常遇到的问题是访问速度太慢,有时候还会出现无法连接的情况(原因你懂的)。所以,我用的是国内的Git托管服务Gitee。
2 Django相关的命令
- django-admin startproject djangoproject
- py manage.py shell 在shell命令行模式下测试代码
- py manage.py runserver (8080)运行程序,默认服务器127.0.0.1:8000
- py manage.py startapp APP 创建应用
- py manage.py makemigrations APP# 通过运行makemigrations命令,Django会检测你对模型文件的修改(在这种情况下,你已经取得了新的),并且把修改的部分储存为一次迁移
- python manage.py migrate # 迁移——修改模型需要更新数据库
- py manage.py createsuperuser 创建管理员账号
- py manage.py test APP 测试应用
3 本地开发-环境部署
1. 下载python3.x
2. 虚拟环境:
安装:pip install virtualenv
使用:创建:virtualenv djangoproject_env
启动:Scripts\activate
退出:deactivate
之后使用都在djangoproject_env目录下创建djangoproject项目
3. pip一键导出和安装:
pip freeze > requirements.txt
pip install -r requirements.txt
4. 数据库mysql本地(window环境)配置:
安装mysql:
- 下载mysql: https://dev.mysql.com/downloads/mysql/
- 路径加入系统环境:
path
\mysql-8.0.29-winx64\bin - 配置MySQL(
path
\mysql-8.0.29-winx64\my.ini): - 启动服务:
- 进入数据库:root是默认创建的用户。
- SQL语句设置密码:
创建数据库:
- 创建数据库(注意字符编码):
- 查看数据库:
- 创建新用户:
- 给用户分配mysite_db数据库的操作权限:
- 刷新权限:
创建表(应用数据库迁移文件):
- settings.py中数据库设置为SQLite:
- setting.py中数据库设置为mysql:
- 开启服务:
MySQL时区设置问题:
- 下载包含SQL语句的包:
- 将解压缩的文件内容加载到时区表中:
4 服务器-环境部署
4.1 Git
- 定义:Git是一款开源的分布式版本控制系统。(分布式相对于集中式)
集中式:有中央服务器,有安全性隐患
分布式:开销小 - 常用命令:
a. git clone username@host:/path/to/repository # 克隆
b. git add . # 将当前目录及其子目录的所有变更文件添加到缓存
c. git add * # 将当前目录下的变更文件添加到缓存
d. git add 指定文件路径 # 将指定变更文件添加到缓存
e. git checkout 分支名 # 切换分支
f. git commit -m "说明提交内容" # 提交变更
g. git remote -v # 查看远程仓库,一般clone下来的仓库默认远程仓库名为origin
h. git push 远程仓库名 分支名 # push到远程仓库
i. git log # 查看日志
4.2 ECS服务器配置
1. 远程连接服务器
- Xshell连接:注意用户名是root,密码在阿里云控制台可重新设置。连接成功:
- 用Git-bash连接:ssh登录公网IP,命令:
ssh root@公网IP
2. 安装准备工作
安装python3.6
apt-get install software-properties-common
add-apt-repository ppa:jonathonf/python-3.6
apt-get update
apt-get install python3.6
查看python3版本:
python3 -V
创建软链接:
which python3
cd/usr/bin
rm python
ln -s python3.6 python
rm python3
ln -s python3.6 python3
移除python其他版本:
apt-get autoremove python3.5
安装pip3.6:
apt-get install python3-pip
pip3 install --upgrade pip
安装虚拟环境:
pip3 install virtuelenv
创建虚拟环境:
virtualenv mysite-env
source mysite_env/bin/activate
deactivate
安装git:apt-get install git
3. 下载文件并安装mysql-server(注意和本地开发环境中mysql版本一致)
- 下载文件:wget+链接
- 安装/加载软件包:
- 更新软件源:(报错的话,需要换镜像源)
- 安装:
- 为用户root设置密码:
mysql -u root -p
4. 同步本地数据到服务器
- 本地生成data.sql数据文件:
- scp传输到服务器:
- 创建数据库:
创建数据库(注意字符编码):
查看数据库:
创建新用户:
给用户分配mysite_db数据库的操作权限:
刷新权限: - 进入数据库:mysql -u
username
-p mysite_db - 导入数据:source data.sql
5. 安装mysqlclient
- 下载文件:
- 加载软件包:(出现mysql依赖相关的问题)
- 更新软件源:
- 安装:
6. Apache+mod_wsgi配置
Linux常用的web服务器软件:Apache和Nginx。
Apache:模块多,功能强大;内置了对PHP,python,Perl和其他语言的支持。
Nginx(Engine-x):轻量级,抗高并发,速度快。
- 安装apache2+wsgi:
安装Apache2:sudo apt-get install apache2
安装wsgi:
查看模块:
编译安装:
安装Apache2-dev:apt-get install apache2-dev
下载mod-wsgi源码:wget https://github.com/GrahamDumpleton/mod_wsgi/archive/refs/tags/4.9.2.tar.gz
解压文件:tar xvfz mod_wsgi-4.9.2.tar.gz
配置源代码:./configure --with-apxs=/usr/bin/apxs --with-python=/usr/bin/python3.6
编译源代码:make
再安装:make install
成功替换旧的/usr/lib/apache2/modules下的mod_wsgi.so(无高亮,已是最新版)
查看目录下是否有wsgi.load文件,有说明已经启动:ls mods-enabled/
启用wsgi:a2enmod wsgi
(显示已经启用)
7. 配置站点
- 编辑站点文件:(注意目录)
- Apache2启用站点配置:
- 查看启动的服务:
- 关闭默认服务:
a2dissite 000-default.conf
- 重启Apache服务:
- 查看Apache错误信息:
cat /var/log/apache2/error.log
- Django后台管理静态文件路径有问题,需要在mysite/setting.py中设置:
STATIC_ROOT = os.path.join(BASE_DIR,'static_collected')
- 重新设置/etc/apache2/sites-available下的mysite.conf配置的静态文件路径为
………/static_collected
参考: