写点什么

Azure App 部署 Django 和 PostgrSQL

发布于: 2020 年 05 月 16 日
Azure App 部署Django 和 PostgrSQL



[toc]



承前



最近接了个需求,部署一套Python下的Web项目到微软Azure 云上去,yann 之前较少接触 Azure ,所以记录下一免得忘记。






列表



  • Create an Azure Database for PostgreSQL database

  • Deploy code to Azure App Service and connect to Postgres

  • Update your code and redeploy

  • View diagnostic logs

  • Manage the web app in the Azure portal



需要的工作如下:



为PostgreSQL数据库创建对应的Azure数据库

将代码部署到Azure App Service并连接到Postgres上

更新代码并重新部署

查看诊断日志

在Azure面版中管理Web应用



步骤



Install dependencies



安装依赖,需要 Azure CLI,git 和 Python3,另外两个已经有了,Azure CLI 了解一下:



sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc
sudo sh -c 'echo -e "[azure-cli]
name=Azure CLI
baseurl=https://packages.microsoft.com/yumrepos/azure-cli
enabled=1
gpgcheck=1
gpgkey=https://packages.microsoft.com/keys/microsoft.asc" > /etc/yum.repos.d/azure-cli.repo'
sudo yum install azure-cli



中间的命令是有引号的,大家可以熟悉一下。习惯了 EOF的写法,这是另外一种生成配置的方式。



Clone the sample app



部署项目属于私人信息,这里放官方实例,效果是一样的,下载代码。



git clone https://github.com/Azure-Samples/djangoapp
cd djangoapp



Prepare app for App Service



准备应用服务,都是一些常规设置:



  • 继承 azuresite/settings.py 的设置

  • 把域名添加到允许的主机设置里

  • 使用WhiteNoise 软件提供静态文件

  • 添加PostgreSQL数据库的配置

  • Postgres配置使用环境变量



以上大部分配置都在 settings.py 里,需要的软件通过 requirements.txt 安装



下面为另外一此配置,同样是Python项目发布时需要的:



# manage.py 和 wsgi.py 文件
#os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'azuresite.settings')
if os.environ.get('DJANGO_ENV') == 'production':
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'azuresite.production')
else:
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'azuresite.settings')



Sign in to Azure CLI



到上面为止,所有操作都在本地进行,下面要通过 CLI 连接到 Azure 云里去配置和发布。



通过 az login 登录Azure 云, 相关认证问题,请看网站说明。



az login



Create Postgres database in Azure



创建数据库,先安装db扩展,再配置数据库



az extension add --name db-up
az postgres up --resource-group myResourceGroup --location westus2 --server-name <postgresql-name> --database-name pollsdb --admin-user <admin-username> --admin-password <admin-password> --ssl-enforcement Enabled



命令比较长,包括了以下内容(有些是默认提供):



  • 创建一个资源组

  • 用管理用户创建一个Postgres服务器

  • 创建一个pollsdb数据库

  • 允许从本地IP地址访问

  • 允许从Azure服务进行访问

  • 创建一个有权访问pollsdb数据库的数据库用户



Deploy the App Service app



部署 app 分几个小步骤,让我们来依次查看:



  1. 创建应用服务应用

  2. 配置环境变量

  3. 运行数据库迁移

  4. 浏览到Azure应用



创建应用服务应用



az webapp up --plan myAppServicePlan --location westus2 --sku B1 --name <app-name>



命令依然很长,做的事包括生成资源组,创建App Service应用程序,启用应用程序的默认日志记录。在启用了构建自动化的情况下,会使用ZIP部署上传存储库。



在输出结果中,复制<app-resource-group>的值。



配置环境变量



az webapp config appsettings set --name <app-name> --resource-group <app-resource-group> --settings DJANGO_ENV="production" DBHOST="<postgresql-name>.postgres.database.azure.com" DBUSER="root@<postgresql-name>" DBPASS="Pollsdb1" DBNAME="pollsdb"



通过环境变量传递生产数据库的配置值



运行数据库迁移



cd site/wwwroot
source /antenv/bin/activate
python manage.py migrate
python manage.py createsuperuser



Django 的标志操作之一,数据库迁移。



浏览到Azure应用



理论上访问 http://<app-name>.azurewebsites.net/admin ,可以看到页面了,类似这样。





Develop app locally and redeploy



这一段讲的是本地调试和代码更新的例子



# 建立启动本地环境
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
python manage.py migrate
python manage.py createsuperuser
python manage.py runserver



修改代码



vi polls/models.py
# choice_text = models.CharField(max_length=200)
choice_text = models.CharField(max_length=100)



本地数据库更新,迁移,服务器运行



python manage.py makemigrations
python manage.py migrate
python manage.py runserver



验证成功后,更新到 Azure 云上面



az webapp up
cd site/wwwroot
source /antenv/bin/activate
python manage.py migrate



Stream diagnostic logs



查看诊断日志流,Azure 的设置是应用启动时会开启日志流,过一段时间会自动关闭。



# 手动开启
az webapp log config --name <app-name> --resource-group <app-resource-group> --docker-container-logging filesystem
# 查看日志
az webapp log tail --name <app-name> --resource-group <app-resource-group>



Manage your app in the Azure portal



可以在 Azure 云的控制面板上进行可视化管理,请自行查看。



Clean up resources



环境清理,yann 这边用不到,姑且记录一下:



az group delete --name myResourceGroup
az group delete --name <app-resource-group>






总结



这次的内容其实很简单,只是想实践一个相法,「厂家的文档很完善也很易懂,遇到问题去查csdn 或简书不是个好习惯」。





用户头像

面向工资充电 2018.08.07 加入

系统运维专家

评论

发布
暂无评论
Azure App 部署Django 和 PostgrSQL