Bootstrap

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  --database-name pollsdb --admin-user  --admin-password  --ssl-enforcement Enabled

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

  • 创建一个资源组

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

  • 创建一个pollsdb数据库

  • 允许从本地IP地址访问

  • 允许从Azure服务进行访问

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

Deploy the App Service app

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

创建应用服务应用

az webapp up --plan myAppServicePlan --location westus2 --sku B1 --name 

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

在输出结果中,复制的值。

配置环境变量

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

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

运行数据库迁移

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

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

浏览到Azure应用

理论上访问 http://.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  --resource-group  --docker-container-logging filesystem

# 查看日志
az webapp log tail --name  --resource-group 

Manage your app in the Azure portal

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

Clean up resources

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

az group delete --name myResourceGroup
az group delete --name 

总结

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