使用 Postgresql 数据库创建 Azure Web 应用程序(这可能吗?)

Posted

技术标签:

【中文标题】使用 Postgresql 数据库创建 Azure Web 应用程序(这可能吗?)【英文标题】:Creating an Azure Web App with Postgresql database (is that possible?) 【发布时间】:2016-02-28 17:08:27 【问题描述】:

我使用 Heroku 来托管一个带有 postgres 后端的 Django Web 应用程序。我现在希望将这个 Web 应用程序迁移到 Azure,以利用 Azure 最近为我提供的大量优惠。

但我对一件事感到困惑:如何在 Azure 上使用 postgresql 作为数据库 创建一个 Django 网站?我成功创建了一个 Django 网站,将其连接到 git,但我似乎无法将其 DB 更改为 postgresql。

因此,当我执行git push azure master 时,我收到错误:Command python setup.py egg_info failed with error code 1 in D:\home\site\wwwroot\env\build\psycopg2它在 psycopg2 (postgresql) 上失败。

其次,一旦我在 Azure Web 应用程序上成功安装了 postgresql,我需要调整它的 postgresql.conf 文件来调整设置(默认值太低)。我该怎么做?


文档只讨论了如何为带有 Linux 的 Azure VM 安装 PG,而不是 Azure Web App:https://azure.microsoft.com/en-us/documentation/articles/virtual-machines-linux-postgresql/

【问题讨论】:

您是如何将 django Web 应用程序与 postgresql 虚拟机连接起来的?或者你只是在 VM 中的 wsgi 上安装了 django? 是的,我的设置包括两个独立的虚拟机 - 一个托管数据库,另一个托管 Web 应用程序。 我终于成功了 =D,谢谢你的帮助! 【参考方案1】:

Azure Web Apps Service 是一种 PaaS,它提供多种服务来托管您的网站应用程序。我们拥有在其上安装 PostgreSQL 的限制权限。

目前,要在 Azure 上托管 PostgreSQL,您可以利用@theadriangreen 提到的带有 linux 的虚拟机。您可以使用 SSH 命令ssh user@VMhost 远程访问您的 linux VM 并设置您的 PG 配置。您可以参考YoLinux Tutorial: The PostgreSQL Database and Linux 了解更多关于 Linux 上 PG 的信息。

此外,您可以在 Azure 插件市场中创建一个包含 PostgreSQL 映像的 docker。

登录预览管理门户,点击new=>在搜索栏搜索“postgres”,可以找到docker提供的postgres服务。

您也可以通过 SSH 远程访问此虚拟机来设置您的 PG 配置。

如果要直接tcp连接到PG服务器,需要在Inbound安全规则中添加5432端口。

在上面创建的VM服务器的“所有设置”中,点击“网络接口”=>点击正在使用的接口=>点击正在使用的网络安全组名称,可以在设置页面找到入站安全规则.

然后你就可以测试你的PG服务的连接了:

import psycopg2

try:
    conn = psycopg2.connect(database="postgres", user="postgres", password="password", host="host_ip", port="5432")
    print "Opened database successfully"

    cur = conn.cursor()

    cur.execute("SELECT ARRAY[1.1,2.1,3.1]::int[] = ARRAY[1,2,3]");
    rows = cur.fetchall()
    print(rows)

    conn.commit()
    print "Records created successfully";
    conn.close()
except Exception, e:
    print "I am unable to connect to the database"

【讨论】:

感谢加里的低调。要通过 ssh 连接,我不需要 publicdns 吗?在之前的 Azure 文章中,我一直在使用此命令连接来测试我一直在创建的 Azure VM:ssh <username>@<publicdnsaddress> -p <the ssh port>。在那些虚拟机上,如果我尝试ssh username@hostname -p 22,我通常会得到无法解析主机名。怎么办? 如果您通过上一篇文章创建VM,您可以在Azure mange portal的VM门户的DASHBOARD页面中找到DNS NAME,应该类似于@987654331 @。并在 ENDPOINT 页面检查 22 端口是否已被允许。然后您可以直接利用ssh <username>@<your_vm_name>.cloudapp.net 连接您的虚拟机 资源管理器虚拟机中没有 ENDPOINT 选项卡,还是我忽略了它? 我刚刚意识到我一直在查看 portal.azure.com,而您指的是 manage.windowsazure.com。两个不同的仪表板具有非常不同的 UI,意味着或多或少相同的事情。微软。【参考方案2】:

Azure Web Apps 仅提供 Web 应用程序,因为数据库由其他服务提供。通常,这要么是提供 SQL Server 数据库即服务的 Azure SQL,要么是提供 mysql 的 ClearDB。

因此,要让您的 Django 应用程序启动并与 Postgres 一起运行,您将需要在某个地方部署 Postgres DB。最初您可以尝试将 settings.py 指向您的 Heroku Postgres DB,但是您可能会在 DB 端遇到一些防火墙设置。

如果您要按照链接 (https://azure.microsoft.com/en-us/documentation/articles/virtual-machines-linux-postgresql/) 中的步骤进行操作,那么您可以将该实例用作您的 Postgres 数据库并调整您的 settings.py 文件以指向该机器。您还可以更改 postgresql.conf,因为您拥有这台机器。

【讨论】:

您知道,在深入研究 Azure Web 应用程序之前,我采用了一种非常不同的方法。我制作了一个 Azure VM(带有 Ubuntu),并将我的 DB + 应用程序的代码(通过 github)迁移到它。它还坐在那里。但是在我阅读了 Troy Hunt 关于NOT 走 VM 路线的文章后,我将这种方法搁置了:troyhunt.com/2014/01/with-great-azure-vm-comes-great.html 但现在看来是由于 postgresql,我无法避免 VM 路线在这里。 请记住,您仍然可以在 Azure 应用服务上运行 Web 应用。只是您需要在某处托管数据库,而在 Azure 中实现此目的的唯一方法是配置您自己的 VM,因为 Azure 不提供 Postgres 作为服务。 % load rant%% rant %你们为什么不提供 postgres 即服务 -_- % endrant % 有 2 个后续菜鸟问题要问您(在提前):(i)如何在 Azure VM 上找到我的数据库的database_url(我必须在我的 settings.py 中引用)? (ii) 如何为我的应用程序设置环境变量(我的 settings.py 中的某些内容取决于此)?我的猜测是,它是管理门户中的 Web Apps> Application Name>All Settings>Application Settings>App settings 我认为您的原始问题已得到解答。你能接受并将 (i) 作为一个单独的问题提出吗?对于(ii)您的猜测是正确的,它是应用程序设置。您可以在 scm 站点 (https://.scm.azurewebsites.net/Env#envVariables) 查看环境设置。

以上是关于使用 Postgresql 数据库创建 Azure Web 应用程序(这可能吗?)的主要内容,如果未能解决你的问题,请参考以下文章

用于 postgresql 的 Azure 专用终结点无法与多个 Vnet 一起使用

用于PostgresQL的本机Azure数据库与Azure VM中的PostgresQL docker容器

如何在 Azure Databricks 中使用 JDBC 从 PostgreSQL 读取表数据?

PostgreSQL on Azure.cn : 性能测试及调优

PostgreSQL on Azure.cn : 安装部署

微软宣布MySQL和PostgreSQL的Azure数据库服务正式可用