在阿里云ECS上配置Apache+wsgi实现blog的部署

简介: 利用Django框架搭建个人博客网站,将网站通过Apache+wsgi部署到阿里云服务器。主要采用html、css、javascript作为前端,并使用了JQuery框架和Bootstrap框架;采用django框架作为后台开发技术、后台数据库使用mysql。本篇幅着重于Django框架介绍、数据库mysql配置和服务器部署。

Blog系统包括两大部分,分别是前台展示和后台数据管理。前台展示包括首页(7日内数据统计、热门博客统计)、登录、注册、博客列表(按日期归档博客列表,按博客类别分类列表等)、博客详情页面、评论模块、个人资料界面、信息修改界面等。后台数据管理包括博客管理、评论管理、数据统计管理、用户管理、动作管理。

本文重点介绍将个人博客网站部署到服务器这部分的内容,而基于Django开发网站的内容篇幅过长,且目前网上视频/文字教学资料丰富,不在此过多叙述。本文网站搭建参考教学视频。欢迎访问我的博客网站

1 技术模块简述

以下为本项目所采用的技术的简单介绍,以便大家对整个技术架构有个大致的了解。

1.1 后端开发

基于Django框架开发,Django是基于Python的Web开发框架,该框架基于“模型视图模板(MVT)”设计模式。Django 网络应用程序将处理网络处理请求流程中每个步骤的代码分组到单独的文件中。一个Django项目有多个应用,每个应用均有以下文件:image.png

  • urls: 通过单个功能来处理来自每个url的请求,同时编写单独的视图函数(views.py)来处理每个资源是更加可维护的。url映射器用于根据请求url将HTTP请求重定向到相应的视图view。url映射器还可以匹配出现在url中的字符串或数字的特定模式,并将其作为数据传递给视图功能。
  • views: 视图文件包含一个个请求处理函数,它接收HTTP请求并返回HTTP响应。视图通过模型访问满足请求所需的数据,并将响应的格式委托给模板。
  • models: 模型是定义应用程序数据结构的Python对象,并提供在数据库中管理(添加,修改,删除)和查询记录的机制。
  • templates:模板是定义文件(例如html页面)的结构或布局的文本文件,用于表示实际内容的占位符。视图可以使用html模板,通过数据填充动态地创建一个html页面模型。可以使用模板来定义任何类型的文件的结构; 它不一定是html。
    如图,为博客网站项目中blog应用文件夹下的目录情况:
    image.png

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):image.png
  • 启动服务:image.png
  • 进入数据库:root是默认创建的用户。image.png
  • SQL语句设置密码:image.png
    创建数据库:
  • 创建数据库(注意字符编码):image.png
  • 查看数据库:image.png
  • 创建新用户:image.png
  • 给用户分配mysite_db数据库的操作权限:image.png
  • 刷新权限:image.png
    创建表(应用数据库迁移文件):
  • settings.py中数据库设置为SQLite:image.png
  • setting.py中数据库设置为mysql:image.png
  • 开启服务:image.png
    MySQL时区设置问题:
  • 下载包含SQL语句的image.png
  • 将解压缩的文件内容加载到时区表中:image.png

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,密码在阿里云控制台可重新设置。连接成功:image.png
  • 用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+链接image.png
  • 安装/加载软件包:image.png
  • 更新软件源:(报错的话,需要换镜像源)image.png
  • 安装:image.png
  • 为用户root设置密码:mysql -u root -p

4. 同步本地数据到服务器

  • 本地生成data.sql数据文件:image.png
  • scp传输到服务器:image.png
  • 创建数据库:
    创建数据库(注意字符编码):image.png
    查看数据库:image.png
    创建新用户:image.png
    给用户分配mysite_db数据库的操作权限:image.png
    刷新权限:image.png
  • 进入数据库:mysql -u username -p mysite_db
  • 导入数据:source data.sql

5. 安装mysqlclient

6. Apache+mod_wsgi配置
Linux常用的web服务器软件:Apache和Nginx。
Apache:模块多,功能强大;内置了对PHP,python,Perl和其他语言的支持。
Nginx(Engine-x):轻量级,抗高并发,速度快。

  • 安装apache2+wsgi:
    安装Apache2:sudo apt-get install apache2
    安装wsgi:image.png
    查看模块:image.pngimage.pngimage.png
    编译安装:
      安装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. 配置站点

  • 编辑站点文件:(注意目录)image.pngimage.png
  • Apache2启用站点配置:image.png
  • 查看启动的服务:image.png
  • 关闭默认服务:a2dissite 000-default.conf
  • 重启Apache服务:image.png
  • 查看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
    image.png

参考:

相关实践学习
通义万相文本绘图与人像美化
本解决方案展示了如何利用自研的通义万相AIGC技术在Web服务中实现先进的图像生成。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
相关文章
|
2月前
|
人工智能 数据处理 API
阿里云、Ververica、Confluent 与 LinkedIn 携手推进流式创新,共筑基于 Apache Flink Agents 的智能体 AI 未来
Apache Flink Agents 是由阿里云、Ververica、Confluent 与 LinkedIn 联合推出的开源子项目,旨在基于 Flink 构建可扩展、事件驱动的生产级 AI 智能体框架,实现数据与智能的实时融合。
445 6
阿里云、Ververica、Confluent 与 LinkedIn 携手推进流式创新,共筑基于 Apache Flink Agents 的智能体 AI 未来
|
2月前
|
弹性计算 运维 安全
阿里云轻量应用服务器与云服务器ECS啥区别?新手帮助教程
阿里云轻量应用服务器适合个人开发者搭建博客、测试环境等低流量场景,操作简单、成本低;ECS适用于企业级高负载业务,功能强大、灵活可扩展。二者在性能、网络、镜像及运维管理上差异显著,用户应根据实际需求选择。
280 10
|
2月前
|
运维 安全 Ubuntu
阿里云渠道商:服务器操作系统怎么选?
阿里云提供丰富操作系统镜像,涵盖Windows与主流Linux发行版。选型需综合技术兼容性、运维成本、安全稳定等因素。推荐Alibaba Cloud Linux、Ubuntu等用于Web与容器场景,Windows Server支撑.NET应用。建议优先选用LTS版本并进行测试验证,通过标准化镜像管理提升部署效率与一致性。
|
2月前
|
弹性计算 ice
阿里云4核8g服务器多少钱一年?1个月和1小时价格,省钱购买方法分享
阿里云4核8G服务器价格因实例类型而异,经济型e实例约159元/月,计算型c9i约371元/月,按小时计费最低0.45元。实际购买享折扣,1年最高可省至1578元,附主流ECS实例及CPU型号参考。
427 8
|
2月前
|
存储 监控 安全
阿里云渠道商:云服务器价格有什么变动?
阿里云带宽与存储费用呈基础资源降价、增值服务差异化趋势。企业应结合业务特点,通过阶梯计价、智能分层、弹性带宽等策略优化成本,借助云监控与预算预警机制,实现高效、可控的云资源管理。
|
2月前
|
弹性计算 运维 安全
区别及选择指南:阿里云轻量应用服务器与ECS云服务器有什么区别?
阿里云轻量应用服务器适合个人开发者、学生搭建博客、测试环境,易用且性价比高;ECS功能更强大,适合企业级应用如大数据、高流量网站。根据需求选择:轻量入门首选,ECS专业之选。
276 2
|
2月前
|
存储 弹性计算 安全
阿里云渠道商:新手如何选择阿里云ECS实例?
阿里云ECS凭借弹性扩展、稳定可靠与安全防护,助力企业高效上云。本文系统解析实例规格选择关键因素:业务场景匹配、性能评估、成本优化、地域部署与扩展规划,结合计费模式与实际需求,提供科学选型建议,助您精准匹配资源,提升云上效能。(238字)
|
2月前
|
存储 弹性计算 安全
阿里云渠道商:新手怎么选阿里云ECS实例规格?
本文深入解析阿里云ECS的弹性、稳定与安全优势,详解实例规格选择的关键因素,涵盖应用场景、性能需求、成本预算、地理位置与扩展性,助力用户精准选型,优化业务部署与成本效益。

推荐镜像

更多