代码部署
首先安装相关的环境库
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 库来创建虚拟环境,操作步骤都是差不多的。
在虚拟环境中,打包相关依赖库,便于直接在服务器进行安装
创建网站目录
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 确保目录名称存在,不存在的就建一个。
将本地代码直接复制到服务器
接下里需要做就是将本地代码复制到服务器,这里推荐一个工具软件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引导页了,哈哈,小功告成,先喝口小咖啡!
前路漫漫,咱们接着继续努力
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 保存文件修改并退回到服务器命令行
此配置会监听 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 : 表示软链接符号,关于这个命令的更多参数,可以参考如下博文
至此 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
接下来,刷新浏览器试试,是不是很惊喜,自己开发的网站终于上线了
开发的网站终于上线了
终于,大功告成了,可以洗脸睡觉了!!!
接下来的工作
后期运维
通过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搭建个人博客:将项目部署到服务器 – 杜赛的博客
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。