Azure 云 App 部署Django 和 PostgrSQL - 程序员学点xx 192th
列表
步骤
承前
最近接了个需求,部署一套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 分几个小步骤,让我们来依次查看:
-
创建应用服务应用 -
配置环境变量 -
运行数据库迁移 -
浏览到Azure应用
创建应用服务应用
az webapp up --plan myAppServicePlan --location westus2 --sku B1 --name <app-name>
命令依然很长,做的事包括生成资源组,创建App Service应用程序,启用应用程序的默认日志记录。在启用了构建自动化的情况下,会使用ZIP部署上传存储库。
在输出结果中,复制
配置环境变量
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://
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 | | | | | 近期文章