时间:2023-05-31 12:54:01 | 来源:网站运营
时间:2023-05-31 12:54:01 来源:网站运营
Django搭建网络相册:部署网站:我们的相册虽然还有不完善的地方,但是没关系,越早把它部署到互联网上,才能越早发现线上特有的问题,让产品在迭代中成长。阿里云服务器购买页面变动频繁,如果图中展示的步骤和你购买时的不一样也没关系,核心步骤都是差不多,稍微找一下就OK了。首先进入阿里云ECS的购买页面:
如果有询问是否购买公网 IP 的选项,记得勾上。没公网 IP 就没办法连接到互联网了。点击下一步,到系统配置页面:
这一步很重要,如果不打开后续会始终连接不上站点。如果没有黄字提醒,那就一定要到安全组中确认端口已打开。至此服务器的购买、配置就完成啦。稍等几分钟后等待初始化完成,就可以得到服务器的公网 IP 地址,笔者的是
47.104.227.185
,后面会用到。# /album/settings.py...# 修改项。关闭调试模式# 关闭后 django 不再处理静态资源# 也不再提供错误提示页面DEBUG = False# 修改项。允许所有的IP访问网络服务ALLOWED_HOSTS = ['*']# 新增项。静态文件收集目录STATIC_ROOT = os.path.join(BASE_DIR, 'collected_static')
然后在虚拟环境中执行:(env)> pip freeze > requirements.txt
将后端所有的依赖库记录到 requirements.txt
中。Github 经常会速度很慢或无法登录。这时候你也可以尝试用国内的 Gitee,或者直接点对点本地上传服务器。如何上传这里就不细讲了,请自行学习 Git 相关知识,注册 Github 账号等。
env
目录,它们可以在服务器中很方便地安装。 这就是前面生成的 requirements.txt
的作用。
接下来就是正式部署了。使用相当简单,基本就是把主机 IP、端口号(22)以及登录验证填好就能连接了。连接成功后,就能在 XShell 窗口中看到阿里云的欢迎字样了:
Welcome to Ubuntu 20.04.2 LTS (GNU/Linux 5.4.0-77-generic x86_64) * Documentation: https://help.ubuntu.com * Management: https://landscape.canonical.com * Support: https://ubuntu.com/advantageWelcome to Alibaba Cloud Elastic Compute Service !root@dusai:~$
root@dusai:~$
是命令提示符(root 是用户名,dusai 是主机名),输入命令时不需要你输入这个。 本文后面把 root@dusai:
字符省略掉,方便大家阅读。
~$ apt-get update~$ apt-get upgrade
部署到正式环境时,后端服务器就不能用 Django 自带的开发服务器了(性能低下),而是改用 Nginx + Gunicorn + Django 配合提供网络服务:~$ apt-get install nginx~$ apt-get install python3.8~$ apt-get install python3-pip~$ apt-get install git~$ pip3 install virtualenv
均成功后,创建并跳转到项目目录:~$ mkdir -p /home/sites/album~$ cd /home/sites/album# 进入的路径如下所示/home/sites/album$
接下来就可以从 Github 下载项目了:# 以教程仓库为例 django-vue-tutorial../album$ git clone https://github.com/stacklens/django-album-tutorial.git
这里就以教程的仓库为例,读者用自己项目时一定要注意路径名称正确。如果你是从非公开项目下载,用户名密码的认证方式 Github 已经准备废弃了。如遇报错请以密钥认证的形式下载。下载好项目后,在同级路径创建并进入虚拟环境:
../album$ virtualenv --python=3.8 venv../album$ source venv/bin/activate# 看到 (venv) 开头就对了(venv) ../album$
进入项目目录,安装依赖、收集静态资源并迁移数据库:# 这里的 django-album-tutorial 路径是从 Github 拉取下来的项目路径# 记得改成你自己的(venv) ../album$ cd django-album-tutorial(venv) ../django-album-tutorial$ pip3 install -r requirements.txt(venv) ../django-album-tutorial$ python3 manage.py collectstatic(venv) ../django-album-tutorial$ python3 manage.py migrate
最后启动 nginx:# 为了阅读方便,后续命令行均省略 $ 前面的路径部分(venv) ~$ service nginx start
在浏览器中访问你的云服务器的公网 IP ,看看效果:/etc/nginx/sites-available
目录是定义 Nginx 可用配置的地方。输入指令创建配置文件 myblog
并打开 vim 编辑器:(venv) ~$ vim /etc/nginx/sites-available/album
关于 vim
编辑器如何使用也不多说了,这里只说两个最基本的操作:i
键切换到编辑模式,这时候才可以进行输入、删除、修改等操作Ctrl + c
退回到命令模式,然后输入 :wq + Enter
保存文件修改并退回到服务器命令行vim
在 album
文件中写入:server { charset utf-8; listen 80; server_name 47.104.227.185; # 改成你的 IP location /static { # 这里的 django-album-tutorial 路径是从 Github 拉取下来的项目路径 # 记得改成你自己的 alias /home/sites/album/django-album-tutorial/collected_static; } location /media { # 这里的 django-album-tutorial 路径是从 Github 拉取下来的项目路径 # 记得改成你自己的 alias /home/sites/album/django-album-tutorial/media; } location / { proxy_set_header Host $host; proxy_pass http://unix:/tmp/47.104.227.185.socket; # 改成你的 IP }}
此配置会监听 80 端口(通常 http 请求的端口),监听的 IP 地址写你自己的服务器公网 IP。如果你已经申请好域名了,就把配置中有 IP 的地方都修改为域名,比如:server_name http://www.dusaiphoto.com。写好后就退出
vim
编辑器,回到命令行。因为我们写的只是 Nginx 的可用配置,所以还需要把这个配置文件链接到在用配置上去:(venv) ~$ ln -s /etc/nginx/sites-available/album /etc/nginx/sites-enabled
测试下 nginx
配置是否正常:(venv) ~$ nginx -tnginx: the configuration file /etc/nginx/nginx.conf syntax is oknginx: configuration file /etc/nginx/nginx.conf test is successful
至此 Nginx 就配置好了,接下来搞定 Gunicorn
。有的读者无论怎么配置都只能看到 Nginx 欢迎页面,有可能是 sites-enabled 目录中的 default 文件覆盖了你写的配置。将 default 文件删掉就可以正常代理自己的配置文件了。
(venv) ~$ pip3 install gunicorn(venv) ~$ service nginx restart# 将 IP 改为你的公网 IP# .wsgi 前面为 Django 配置文件所在的目录名(venv) ~$ gunicorn --bind unix:/tmp/47.104.227.185.socket album.wsgi:application# Gunicorn 成功启动后命令行提示如下[2021-07-29 15:09:22 +0800] [11945] [INFO] Starting gunicorn 20.1.0[2021-07-29 15:09:22 +0800] [11945] [INFO] Listening at: unix:/tmp/47.104.227.185.socket (11945)[2021-07-29 15:09:22 +0800] [11945] [INFO] Using worker: sync[2021-07-29 15:09:22 +0800] [11947] [INFO] Booting worker with pid: 11947
Gunicorn 就启动成功了。(注意启动时命令行所在的路径)此时你就可以对比本地存储和 OSS 存储的巨大鸿沟了。
git pullpython3 manage.py collectstaticpython3 manage.py migrate# 重启 gunicornpkill gunicorngunicorn --bind unix:/tmp/47.104.227.185.socket my_blog.wsgi:application
加上 cd
更改目录的指令,部署过程有十几条指令,手动输入也太麻烦了。简单粗暴的办法是利用 XShell 的宏,把部署指令写成顺序执行的脚本,点几个按钮就完成了,非常方便。更高级的做法是在服务器上编写自动化部署的脚本,这个就读者以后慢慢研究吧。如果你更改了 Nginx 的配置文件,还需要重启 Nginx 服务:
service nginx restart
Nginx
中与 IP/域名 有关的位置Gunicorn
中与 IP/域名 有关的位置settings.py
中写入如 SECRET_KEY 、邮箱密码等各种敏感信息,部署时千万不要直接上传到公开仓库,而是把这些信息写到服务器本地,然后在 settings.py
中读取。点赞 or 吐槽?来评论区!
关键词:部署,相册,网络