Django搭建深度日记:将项目部署到服务器-深度日记官方网站(django搭建个人博客)

代码部署

首先安装相关的环境库

root@deep-diary:~# sudo apt-get install Nginxroot@deep-diary:~# sudo apt-get install python3root@deep-diary:~# sudo apt-get install python3-piproot@deep-diary:~# sudo pip3 install virtualenv

之前开发时虚拟环境用的 python 自带的,为了避免读者的版本不同造成的各类错误,稳妥起见用 virtualenv 库来创建虚拟环境,操作步骤都是差不多的。

Django搭建深度日记:将项目部署到服务器-深度日记官方网站(django搭建个人博客)

在虚拟环境中,打包相关依赖库,便于直接在服务器进行安装

创建网站目录

root@deep-diary:~# mkdir -p /home/sites/deep-diary.comroot@deep-diary:~# cd /home/sites/deep-diary.com/root@deep-diary:/home/sites/deep-diary.com#

参数说明

  • -p 确保目录名称存在,不存在的就建一个。

Django搭建深度日记:将项目部署到服务器-深度日记官方网站(django搭建个人博客)

将本地代码直接复制到服务器

接下里需要做就是将本地代码复制到服务器,这里推荐一个工具软件WinSCP, 这个软件可以使用多种协议,连接到服务器,对服务器文件进行可视化操作。

接着在服务器上生成虚拟环境,在这里用 virtualenv 生成并激活了虚拟环境:

root@deep-diary:/home/sites/deep-diary.com# virtualenv --python=python3.8 envcreated virtual environment CPython3.8.10.final.0-64 in 840ms......root@deep-diary:/home/sites/deep-diary.com# source env/bin/activate(env) root@deep-diary:/home/sites/deep-diary.com#

接下来就是安装库、收集静态资源、数据迁移了:

为了避免造成混乱,数据迁移之前,我们先删除本地所有的migratioins记录都删掉,重新开始生成

deep_diary# python3 manage.py collectstaticdeep_diary# python3 manage.py migrate

如果migrate 报错,可以尝试用

deep_diary# python3 manage.py migrate --fake初始化已存在的表 migrate --fake-initial

代码部署基本就完成了,接下来就是配置 nginx

Nginx

启动nginx 服务

(env) root@deep-diary:/home/deep_diary# sudo service nginx start

现在我们就可以用公网ip来访问这个nginx引导页了,哈哈,小功告成,先喝口小咖啡!

前路漫漫,咱们接着继续努力

Django搭建深度日记:将项目部署到服务器-深度日记官方网站(django搭建个人博客)

Nginx 首页

(env) root@deep-diary:/home/deep_diary# cd /etc/nginx/sites-available/(env) root@deep-diary:/etc/nginx/sites-available# lsdefault(env) root@deep-diary:/etc/nginx/sites-available# vi deep-diary.com

关于 vi 编辑器如何使用也不赘述了,这里只说两个最基本的操作:

  • i 切换到编辑模式,这时候才可以进行输入、删除、修改等操作
  • Ctrl c 退回到命令模式,然后输入 :wq Enter 保存文件修改并退回到服务器命令行

Django搭建深度日记:将项目部署到服务器-深度日记官方网站(django搭建个人博客)

此配置会监听 80 端口(通常 http 请求的端口),监听的 IP 地址写你自己的服务器公网 IP

配置中有3个规则:

  • 如果请求 static 路径则由 Nginx 转发到目录中寻找静态资源
  • 如果请求 media 路径则由 Nginx 转发到目录中寻找媒体资源
  • 其他请求则交给 Django 处理

如果你已经申请好域名了,就把配置中有 IP 的地方都修改为域名,比如:server_name www.deep-diary.com;

写好后就退出 vi 编辑器,回到命令行。因为我们写的只是 Nginx 的可用配置,所以还需要把这个配置文件链接到在用配置上去:

(env) root@deep-diary: sudo ln -s /etc/nginx/sites-available/deep-diary.com /etc/nginx/sites-enabled

ln [参数][源文件或目录][目标文件或目录]

-s : 表示软链接符号,关于这个命令的更多参数,可以参考如下博文

linux每日命令(3):ln命令 – 听风。 – 博客园

至此 Nginx 就配置好了,接下来搞定 Gunicorn

Gunicorn

(env) root@deep-diary:/home/deep_diary# pip3 install gunicornLooking in indexes: http://mirrors.cloud.aliyuncs.com/pypi/simple/Collecting gunicorn Downloading http://mirrors.cloud.aliyuncs.com/pypi/packages/e4/dd/5b190393e6066286773a67dfcc2f9492058e9b57c4867a95f1ba5caf0a83/gunicorn-20.1.0-py3-none-any.whl (79 kB) |████████████████████████████████| 79 kB 20.2 MB/s Requirement already satisfied: setuptools>=3.0 in /usr/lib/python3/dist-packages (from gunicorn) (45.2.0)Installing collected packages: gunicornSuccessfully installed gunicorn-20.1.0(env) root@deep-diary:/home/deep_diary# sudo service nginx reload(env) root@deep-diary:/home/deep_diary# gunicorn --bind unix:/tmp/121.43.166.145.socket deep_diary.wsgi:application[2022-01-22 07:31:00 0800] [57670] [INFO] Starting gunicorn 20.1.0[2022-01-22 07:31:00 0800] [57670] [INFO] Listening at: unix:/tmp/121.43.166.145.socket (57670)[2022-01-22 07:31:00 0800] [57670] [INFO] Using worker: sync[2022-01-22 07:31:00 0800] [57673] [INFO] Booting worker with pid: 57673

这里的三个步骤分别是:

  • 安装 Gunicorn
  • 重启 Nginx 服务
  • 启动 Gunicorn

接下来,刷新浏览器试试,是不是很惊喜,自己开发的网站终于上线了

Django搭建深度日记:将项目部署到服务器-深度日记官方网站(django搭建个人博客)

开发的网站终于上线了

终于,大功告成了,可以洗脸睡觉了!!!

接下来的工作

后期运维

通过WinSCP 上传更新后的代码到服务器python3 manage.py collectstatic 重新收集静态文件python3 manage.py migrate 如果数据库设计有变化,需要进行数据迁移# 重启 gunicornpkill gunicorngunicorn --bind unix:/tmp/121.43.166.145.socket deep_diary.wsgi:applicationsudo service nginx reload 如果nginx 有所更改,需要执行此命令进行重新加载

这里执行一次代码更新,需要的命令很多,加上cd更改目录的指令,部署过程有十几条,后续可以考虑编写一个批处理脚步进行快速执行(待更新)。

域名及优化

相对部署来说,域名配置就很容易了。阿里云提供域名的购买、备案(顶级域名必须,约10个工作日)、解析服务,简直全家桶有没有。重点提醒有了域名之后要改的地方:

  • settings.py 中的 ALLOWED_HOSTS
  • Nginx 中与 IP/域名 有关的位置
  • Gunicorn 中与 IP/域名 有关的位置

域名搞定之后,接着就可以着手考虑把网站升级为 https 版本了,这是大趋势,一定要做。

另外,开发时为了效率把所有静态资源都下载到本地,但是部署时不推荐这样做,原因是静态文件通常体积都较大,你花血汗钱买的服务器载入会很慢。尽量远程 CDN 调用(这个会在后续文章发布)BootCDN – Bootstrap 中文网开源项目免费 CDN 加速服务

下一节,咱们来唠唠深度日记网站的基本功能

鸣谢:本文参考了杜塞大神的博客教程,再次表示感谢

Django搭建个人博客:将项目部署到服务器 – 杜赛的博客

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

(0)
上一篇 2022年6月14日 上午9:11
下一篇 2022年6月14日 上午9:23

相关推荐