vlambda博客
学习文章列表

Azure 云 App 部署Django 和 PostgrSQL - 程序员学点xx 192th

Azure 云 App 部署Django 和 PostgrSQL - 程序员学点xx 192th


这是yann的第262篇分享


  • 列表

  • 步骤


承前

最近接了个需求,部署一套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:// .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 或简书不是个好习惯」。








深度科普  (CNCF→) |  | Ansible | Chef | Puppet | VMware | OpenStack | registry | | | Containerd | RKT |  | | | Open vSwitch | | Zookeeper | Consul | | GRPC | thrift | MySQL | Spark | Storm | RocketMQ | | RabbitMQ | Helm | | Packer | Jenkins | Bamboo |  (Prometheus→) | | | | Zabbix | Fluentd | | Logstash | Jaeger | Go语言  (go web) | | | |  | (go docker) | | Python   |  ELK   | | | |   | | | | |   | | | | | | |  Redis | | | | | | | Kafka | | | | | 近期文章