将 Postgres11 部署到 Elastic Beanstalk - 需要 /etc/redhat-release
Posted
技术标签:
【中文标题】将 Postgres11 部署到 Elastic Beanstalk - 需要 /etc/redhat-release【英文标题】:Deploy Postgres11 to Elastic Beanstalk - Requires /etc/redhat-release 【发布时间】:2019-09-11 21:49:33 【问题描述】:我在将我的第一个应用程序部署到 Elastic Beanstalk 时非常开心,我真的需要一些帮助。尽管 RDS 正式支持 Postgres11,但我无法安装它。
问题
如果我运行eb deploy
,我会收到消息说pg_config
找不到可执行文件。需要从源代码构建psycopg2
。
/usr/lib64/python2.7/distutils/dist.py:267: UserWarning: Unknown distribution option: 'project_urls'
warnings.warn(msg)
running egg_info
creating pip-egg-info/psycopg2.egg-info
writing pip-egg-info/psycopg2.egg-info/PKG-INFO
writing top-level names to pip-egg-info/psycopg2.egg-info/top_level.txt
writing dependency_links to pip-egg-info/psycopg2.egg-info/dependency_links.txt
writing manifest file 'pip-egg-info/psycopg2.egg-info/SOURCES.txt'
Error: pg_config executable not found.
pg_config is required to build psycopg2 from source. Please add the directory
containing pg_config to the $PATH or specify the full executable path with the
option: ...
我想我需要添加存储库?很公平。接下来我尝试添加我在互联网上其他帖子中发现的 repo:
[ec2-user@ip-... etc]$ sudo yum -y install https://download.postgresql.org/pub/repos/yum/11/redhat/rhel-7-x86_64/pgdg-centos11-11-2.noarch.rpm
Loaded plugins: priorities, update-motd, upgrade-helper
pgdg-centos11-11-2.noarch.rpm | 5.6 kB 00:00:00
Examining /var/tmp/yum-root-cQJP_4/pgdg-centos11-11-2.noarch.rpm: pgdg-redhat-repo-42.0-4.noarch
Marking /var/tmp/yum-root-cQJP_4/pgdg-centos11-11-2.noarch.rpm to be installed
Resolving Dependencies
--> Running transaction check
---> Package pgdg-redhat-repo.noarch 0:42.0-4 will be installed
--> Processing Dependency: /etc/redhat-release for package: pgdg-redhat-repo-42.0-4.noarch
--> Processing Dependency: /etc/redhat-release for package: pgdg-redhat-repo-42.0-4.noarch
--> Finished Dependency Resolution
Error: Package: pgdg-redhat-repo-42.0-4.noarch (/pgdg-centos11-11-2.noarch)
Requires: /etc/redhat-release
从这里我卡住了。我试过符号链接/etc/system-release -> /etc/redhat-release
,但没有成功。其他人似乎没有这个问题?出于某种原因,我似乎也没有梦寐以求的amazon-linux-extras
?
环境
环境层:Web 服务器平台:在 64 位 Amazon Linux/2.8.2 上运行的 Python 3.6
.ebextensions/packages.config
packages:
yum:
postgresql11-devel: []
requirements.txt
Django==2.2
psycopg2==2.8.2
pytz==2019.1
sqlparse==0.3.0
[ec2-user@ip-... etc]$ cat /etc/os-release
NAME="Amazon Linux AMI"
VERSION="2018.03"
ID="amzn"
ID_LIKE="rhel fedora"
VERSION_ID="2018.03"
PRETTY_NAME="Amazon Linux AMI 2018.03"
ANSI_COLOR="0;33"
CPE_NAME="cpe:/o:amazon:linux:2018.03:ga"
HOME_URL="http://aws.amazon.com/amazon-linux-ami/"
[ec2-user@ip-... etc]$ cat /etc/system-release
Amazon Linux AMI release 2018.03
【问题讨论】:
我注意到os-release
指定了ID_LIKE="rhel fedora"
。我尝试使用 fedora rpm 并且发生了相同的结果 -> Requires: /etc/fedora-release
我仍然很想知道我缺少什么,但为了继续前进,我已经恢复到 PostgreSQL 9.6,因为它在 EB/EC2 上很容易获得。
使用普通 Amazon Linux 2 AMI 时,您可以发出命令:amazon-linux-extras install postgresql10 以获取版本 10。
对于那些寻找 postgres 12 qiita.com/tmiki/items/00d22edc6a554f61bd04
【参考方案1】:
或者,您可以从源代码构建 posgresql:
wget https://ftp.postgresql.org/pub/source/v11.5/postgresql-11.5.tar.gz
tar zxvf postgresql-11.5.tar.gz
cd postgresql-11.5
./configure --without-readline
make
make install
【讨论】:
谢谢,使用它我能够将我的 pg 客户端升级到 12.4。 这很好用。您还需要设置路径。导出 PATH=$PATH:binDirectoryPath 就是这样。我需要安装 gcc make zlib-devel(所有这些都可以通过 AL1 上的内置 yum repos 获得),至少对于 PG13.5。【参考方案2】:Amazon 尚未提供 PostgreSQL 11,但 PostgreSQL 10 已提供。我正在使用cat /etc/system-release
报告的 Amazon Linux 版本 2 (Karoo)。启用安装:
$ sudo amazon-linux-extras enable postgresql10
启用此附加功能后,您将看到许多可通过 yum 正常安装的 PostgreSQL 10 软件包:
$ yum list postgresql*
Loaded plugins: extras_suggestions, langpacks, priorities, update-motd
Installed Packages
postgresql.x86_64 10.4-5.amzn2.0.2 @amzn2extra-postgresql10
postgresql-devel.x86_64 10.4-5.amzn2.0.2 @amzn2extra-postgresql10
postgresql-libs.x86_64 10.4-5.amzn2.0.2 @amzn2extra-postgresql10
Available Packages
postgresql-contrib.x86_64 10.4-5.amzn2.0.2 amzn2extra-postgresql10
postgresql-docs.x86_64 10.4-5.amzn2.0.2 amzn2extra-postgresql10
postgresql-libs.i686 10.4-5.amzn2.0.2 amzn2extra-postgresql10
postgresql-plperl.x86_64 10.4-5.amzn2.0.2 amzn2extra-postgresql10
postgresql-plpython.x86_64 10.4-5.amzn2.0.2 amzn2extra-postgresql10
postgresql-plpython3.x86_64 10.4-5.amzn2.0.2 amzn2extra-postgresql10
postgresql-pltcl.x86_64 10.4-5.amzn2.0.2 amzn2extra-postgresql10
postgresql-server.x86_64 10.4-5.amzn2.0.2 amzn2extra-postgresql10
postgresql-static.x86_64 10.4-5.amzn2.0.2 amzn2extra-postgresql10
postgresql-test.x86_64 10.4-5.amzn2.0.2 amzn2extra-postgresql10
postgresql-test-rpm-macros.x86_64 10.4-5.amzn2.0.2 amzn2extra-postgresql10
postgresql-upgrade.x86_64 10.4-5.amzn2.0.2 amzn2extra-postgresql10
postgresql-upgrade-devel.x86_64 10.4-5.amzn2.0.2 amzn2extra-postgresql10
【讨论】:
我还没有 amazon-linux-extras。知道为什么会这样吗? @Scott,这很可能是因为您(和我)在 Elastic Beanstalk 上使用 Amazon Linux 1,而“amazon-linux-extras”似乎是 Amazon Linux 2 的一项功能 (aws.amazon.com/amazon-linux-2/faqs/#Amazon_Linux_Extras , “Extras 是 Amazon Linux 2 中的一种机制,可以在稳定的操作系统上使用新版本的应用程序软件”)。 我更新了我的回答,指出是的,我在 Amazon Linux 2 上。 谢谢!我很惊讶他们在 RDS 中提供 PostgreSQL 10.6 和 11,但没有可用于在他们自己的 Linux 发行版上安装的驱动程序的匹配包。【参考方案3】:这是我针对最新 Amazon Linux 2 ami 的特立独行的解决方案:
sudo su
cd /etc/yum.repos.d
nano pgdg.repo
然后我将其粘贴到 nano 编辑器及其新创建的 pgdg.repo 文件中:
[pgdg11]
name=PostgreSQL 11 $releasever - $basearch
baseurl=https://download.postgresql.org/pub/repos/yum/11/redhat/rhel-7.5-x86_64
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG-11
其他命令是:
sed -i "s/rhel-\$releasever-\$basearch/rhel-7.5-x86_64/g" "/etc/yum.repos.d/pgdg.repo"
yum groupinstall "PostgreSQL Database Server 11 PGDG"
创建一个新的 PostgreSQL 数据库集群:
/usr/pgsql-11/bin/postgresql-11-setup initdb
现在执行以下命令来启动和启用 postgresql 服务:
systemctl enable postgresql-11
systemctl start postgresql-11
不过,请记住此地址的注释: Link to Postgresql.org
【讨论】:
【参考方案4】:对于 AWS Elastic Beanstalk 上的 Django 2.1 项目,我在使用 PostgreSQL 10 时遇到了同样的问题。
该问题于上周在 2019 年 4 月 17 日左右推出,以确保操作系统是实际的 Red Hat 版本(Amazon Linux 不是)。我在 PostgreSQL 邮件列表中找到了一些详细信息:
“实际上,Amazon Linux 支持在几年前就被删除了。我只是确保我们的 repo 文件反映了这一点。”(BUG #15768: Removed rpms and now require /etc/redhat-release)
邮件列表中的一位发帖人建议进行以下修复:
“我们通过使用 rpm 并明确忽略存储库依赖项暂时缓解了该问题,但这似乎是对不应该存在依赖项的真正问题的创可贴修复。 "
就我个人而言,Scott,我和你做了同样的事情,我只是恢复到 AWS 直接提供的 PostgreSQL 9.6 客户端包。只要 Django 和 psycopg 支持该版本,它就可以正常工作。
然而,长期的解决办法是让 AWS 最终为平台提供 Amazon Linux 2...
【讨论】:
感谢 goetz,您发现了这一见解。看来我只是运气不好!我会让他们先把这一切整理出来……:)以上是关于将 Postgres11 部署到 Elastic Beanstalk - 需要 /etc/redhat-release的主要内容,如果未能解决你的问题,请参考以下文章
如何将 Postgres 数据库从一个 Elastic Beanstalk 环境复制到另一个环境?我正在使用 Rails 5
Moqui 在 Elastic Beanstalk Tomcat 实例上部署到 AWS
将 MVC4 部署到 Elastic Beanstalk 的“处理”错误消息
将 Docker 部署到 AWS Elastic Beanstalk——如何将端口转发到主机? (端口绑定)