在AWS上部署Django服务
💡 本文对以下场景有所帮助
- AWS服务的申请和使用
- Django服务的部署
背景介绍
AWS上有免费的云服务一年使用额度,不用白不用,刚好用来试试手。
步骤
整个部署大致分为三步:aws申请、环境配置、服务运行。
0. AWS帐户申请
直接去官网创建即可,如果之前已经创建过了的可以忽略这一步。
注册过程中需要用到的信息:
- 邮箱
- 密码
- 手机号
- 合适的地址
- visa或者万事达信用卡
如果之前已经使用完AWS Free Tier额度,后续申请实例就需要收费了。
1. 申请EC2实例
出于使用习惯,系统镜像的话选择了ubuntu 24.04 LTS。
实例类型选的是micro,nano还是太小了,而且micro刚好是免费额度内最高标准的。
创个新的密钥对。把生成的pem保存下来,具体登陆脚本创建完aws会给你的。嫌命令麻烦的话可以参考之前的博客,直接将ssh的信息配置进系统里面。
安全组的话,先开个SSH和HTTP就行,后续的看需求来开。
磁盘随意,反正不用钱。
2. 系统相关环境配置
系统已经有git和python的了,但是没有pip。并且如果使用pip来下载python库的话,会被系统劝退。这边推荐是使用虚拟环境来解决。
1 | sudo apt-get update # 刚拿到手的新系统,不得更新下 |
3. Django相关环境配置
我这边数据库用的是postgresql,所以只需要下载postgresql就行。你要是想用django自带的SQLite的话,这个session可以直接跳过了。
注意:如果项目中链接postgresql的相关python库是psycopg2的话,哪怕安装完postgresql后可能还是会出现库文件确实的错误,所以需要将psycopg2修改成psycopg2-binary,让它从源码自信构建即可。
3.1 下载PostgreSQL
后面那个postgresql-contrib其实是一些有可能用上的数据库工具包,不想下的话也无所谓。
1 | sudo apt-get install postgresql postgresql-contrib |
3.2 查看运行状态
下载后已经自运行了,可以通过以下命令去查服务是否正常启动了。
1 | sudo systemctl status postgresql |
3.3 连接数据库
1 | # 切换到对应的数据库用户 |
3.4 创建项目所需要的用户和数据库
1 | # 切换到对应的数据库用户 |
3.5 退出数据库服务
1 | # 退出命令行界面 |
4. 下载项目到AWS
如果你是从头开始构建项目的话,不需要看这一个session。
本来想直接git clone的,后来因为提升了认证等级,密码不能用,最终改为用公私钥来clone,具体操作参考github官方文档,这种方式通过公私钥直接绑定机器。需要注意的是,在生成密钥所定义的passphrase,其实就是一个多因子验证。可以理解成以后每次push或者clone的时候,需要输一次passphrase,才能调用对应的公私钥。
5. 运行项目并用公网IP连接
先进入到项目文件夹,然后配置python虚拟环境
1 | cd mydir/ |
运行项目之前,需要下载项目依赖(不会有人还不写项目依赖吧🤯
1 | pip3 install -r requirements.txt |
数据表迁移脚本和迁移操作
1 | python3 manage.py makemigrations |
创建超级管理员
1 | python3 manage.py createsuperuser |
修改项目配置文件setting.py
1 | # 用这个库,只需要在根目录下添加.env文件,就可以当作环境变量来用了,代码不需要保留key value |
.env文件内容如下
1 | ALLOWED_HOSTS=localhost,127.0.0.1,1.2.3.4 |
运行项目在公网IP上
1 | python3 manage.py runserver 0.0.0.0:8000 |
接下来,和修改aws的postgresql入站规则一样,我们再给django服务器增加一条8000端口的入站规则,接下来就能够通过公网IP来访问网站了。
至此,你已经完成了在AWS上部署Django服务的操作。
接下来的是额外的知识点:
6. 本地连接AWS上的数据库
为了更方便地查看aws上的数据库使用情况,你可能期望从本地连接AWS上的数据库。这需要两步,分别是修改AWS安全组的入站规则,以及修改原有的数据库配置文件。这里就以postgresql为例来进行讲解。
6.1 修改AWS安全组的入站规则
规则类型选择PostgreSQL或者自定义,端口号5432,TCP类型。
请求源IP的话,看你对安全和便捷的取舍,我这边只填了本机的IP。
6.2 修改数据库配置文件
原始的Postgresql只允许localhost连接,因此需要修改两个配置文件,postgresql.conf和pg_hba.conf。
6.2.1 定位文件位置
1 | sudo find /etc/postgresql -name postgresql.conf |
6.2.2 将postgresql.conf文件中的listen_addresses修改成如下
1 | listen_addresses = '*' |
6.2.3 在pg_hba.conf文件最后添加一行,写你期望发起请求的ip源即可
1 | host all all your-local-ip-address/32 md5 |
6.2.4 重启数据库服务
1 | sudo systemctl restart postgresql |
6.3 发起链接请求
我这里用的是pycharm自带的数据库连接工具。
将AWS对应的公网IP、postgresql端口、数据库用户、对应密码、数据库名称填入后,点一下test connection检查连通性,如没问题就可以直接apply了。