我有一个 VPS 主机,有一个域名重定向到它。我使用 WordPress CMS 为我的主要网站安装了 LAMP 堆栈。此外,我还使用 Odoo 作为后端,并在子域中使用 python 和 PostgreSQL。
一切正常直到我安装了 Certbot Let's Encrypt 来获取 SSL 证书通过遵循这些教程
对于我的 Wordpress,我安装的是插件:
WP Encryption – 一键免费 SSL 证书和强制 HTTPS
这让我陷入了困境,因为它强制使用 https,我稍后会解释它
因此,当插件不起作用时,我通过以下教程为整个 VPS 寻找另一种方法:
如何在 Ubuntu 16.04 上使用 Let's Encrypt 保护 Apache
如何在 Ubuntu 18.04 上使用 Let's Encrypt 保护 Apache
完成 ubuntu 18.04 的第二个教程后,我注意到我的所有域流量都转到 https,并且它陷入了一个循环,就像我上面说的一样
“ERR_TOO_MANY_REDIRECTS 表示站点重定向次数过多”
并且无法访问域中的 wordpress 网站前端。
然后当我申请
“步骤 3 — 允许 HTTPS 通过防火墙”
我的互联网连接被解释,当我回到 ssh 会话时,我发现自己被锁定在服务器之外,并且找不到任何方法重新进入。
当我尝试使用包含 Odoo 的子域名时,我得到了同样的错误
“ERR_TOO_MANY_REDIRECTS 表示站点重定向次数过多”
直到这里我感到绝望,不知道该怎么办。
我联系了我的 VPS 服务器提供商,告诉他到底发生了什么。然后他设法让我再次进入服务器,并提供终端 URL,但我仍然无法使用 Putty 等 ssh 客户端访问服务器。所以当我在他提供 URL 后进入服务器时,我注意到的第一件事是他“重新启动了 VPS”,一秒钟后就会出现这种情况。
所以我做的第一件事就是删除 wordpress 插件“WP Encryption”,并更新 mysql 数据库的 wp_options 表中的 wordpress site-url,因为该插件将其从 http 更改为 https,所以我将其改回来,这样就解决了我的网站的 ERR_TOO_MANY_REDIRECTS 问题。
然后我做的第二件事是禁用我在上面第 3 步的教程中启用的 ufw 防火墙。
我立即使用 ssh 客户端 putty 重新建立了与服务器的连接,但我再次注意到 postgres 服务处于非活动状态,并随着 VPS 的重新启动而关闭。我尝试启动该服务,但没有出现此错误。
Failed to start postgresql.service: Unit postgresql.service is masked.
我搜索了一个解决方案,并找到了这些命令来揭露
sudo systemctl unmask postgresql
sudo systemctl enable postgresql
sudo systemctl restart postgresql
然后服务已经启动,当我运行状态命令时,一切都正常
service postgresql status
答案是
● postgresql.service - LSB: PostgreSQL RDBMS server
Loaded: loaded (/etc/init.d/postgresql; generated)
Active: active (exited) since Thu 2020-03-26 05:54:09 UTC; 2h 22min ago
Docs: man:systemd-sysv-generator(8)
Tasks: 0 (limit: 2286)
Memory: 0B
CGroup: /system.slice/postgresql.service
但是当我尝试通过默认端口连接到 postgres 时显示:
could not connect to server: No such file or directory
Is the server running locally and accepting
connections on Unix domain socket "/var/run/postgresql/.s.PGSQL.5432"
经过多次搜索,我发现 posgres 主集群也处于非活动状态或关闭状态,我尝试使用此命令启动它
pg_ctlcluster 11 main start
但是我遇到了这个错误
Job for [email protected] failed because the service did not take the steps required by its unit configuration. See "systemctl status [email protected]" and "journalctl -xe" for details.
当我按要求运行命令时
systemctl status [email protected]
我遇到了这个错误
● [email protected] - PostgreSQL Cluster 11-main Loaded: loaded (/lib/systemd/system/[email protected]; disabled; vendor preset: enabled) Active: failed (Result: protocol) since Thu 2020-03-26 15:22:15 UTC; 14s ago Process: 18930 ExecStart=/usr/bin/pg_ctlcluster --skip-systemctl-redirect 11-main start (code=exited, status=1/FAILURE)
独自一人
systemd[1]: Starting PostgreSQL Cluster 11-main...
postgresql@11-main[18930]: Error: Could not find pg_ctl executable for version 11
systemd[1]: [email protected]: Can't open PID file /run/postgresql/11-main.pid (yet?) after start: No such file or
systemd[1]: [email protected]: Failed with result 'protocol'.
systemd[1]: Failed to start PostgreSQL Cluster 11-main.
我猜想 Let's Encrypt 在 pg_hba.conf 和 postgres.conf 中添加了 ssl 配置,就像 id 对 apache 所做的那样,所以我搜索了它们并注释掉了“ssl on”行,然后重新启动了 postgres 服务和主集群,但什么也没发生,仍然是同样的错误,即
Error: Could not find pg_ctl executable for version 11
我已经搜索了很多关于这个问题,但没有任何效果我该如何解决版本 11 中的 pg_ctl 可执行文件?
提前感谢,我非常感激
附言:我正在使用 Ubuntu 19.10 (GNU/Linux 5.3.0-24-generic x86_64) Odoo 11 和 postgres 11 作为数据库,odoo 无法连接到 postgres,正如我之前提到的
答案1
您还可以下载https://wordpress.org/plugins/ssl-zen/ 以下是有关如何逐步安装 SSL 证书的视频教程 -https://www.youtube.com/watch?v=aHBB91AdUSg
- 使用 SSH 客户端(例如 Putty 或 WinSCP)并登录到服务器的根目录。
- 我们的首要任务是找到服务器上的 SSL 证书文件。转到安装 WordPress 的文件夹,通常是 /var/www/html
- SSL 文件位于 /wp-content/plugins/ssl_zen/ssl_zen/keys。记下 certificate.txt、privatekey.pem 和 cabundle.crt 的文件位置
- 现在打开另一个窗口并导航到 /etc/apache2/sites-available 并查找 default-ssl.conf
- 找到“SSLEngine on”指令并确保它已被取消注释。如果不是,请删除它前面的 # 符号
- 转到 SSLCertificateFile 指令,删除现有值并添加 certificate.crt 文件的位置(包括其路径)
- 对 SSLCertificateKeyFile 执行相同的流程
- 转到 SSLCACertificateFile,如果该行被注释,请删除 # 符号并添加 cabundle.crt 的位置
- 接下来,转到 000-default.conf 文件并确保 ServerAdmin 指令设置为您的域名。
- 打开 SSH 终端窗口并输入“apachectl configtest”以确保 apache 配置正常工作
- 要在 Apache 服务器上启用 SSH 模块,请输入“a2enmod ssl”并按回车键
- 输入“a2ensite default-ssl”以启用默认 ssl 配置
- 最后,输入“systemctl apache2 restart”重新启动 apache 服务器
- 返回 SSL Zen 插件页面并单击下一步按钮。插件会询问您是否要将所有 http 请求重定向到 https,如果您同意,请单击下一步按钮。
答案2
经过几个小时的挖掘
所有 PostgreSQL 文件都已损坏和丢失,我对修复它们已不抱有希望,我不知道是什么原因造成的,但这与服务器意外重启有关。
因此,我设法在此路径中找到了生产服务器的重要数据库信息的主集群数据文件
/var/lib/postgres/11/
我使用这个命令压缩了整个文件夹并进行了备份
zip -r main.zip main/
然后我做了一个完整的清除并重新安装了 postgres,使用这些命令这里
apt-get --purge remove postgresql\*
从系统中删除所有 PostgreSQL。仅清除 postgres 包是不够的,因为它只是一个空的元包。
删除所有 PostgreSQL 包后,运行:
rm -r /etc/postgresql/
rm -r /etc/postgresql-common/
rm -r /var/lib/postgresql/
userdel -r postgres
groupdel postgres
然后我使用此命令安装了 postgres 来匹配 odoo11
sudo apt-get install postgresql libpq-dev -y
然后创建 ODOO PostgreSQL 用户
sudo su - postgres -c "createuser -s odoo" 2> /dev/null || true
现在一切正常,odoo 应该可以正常工作,但你仍然没有任何数据库
因此,为了从我们之前创建的集群文件夹中恢复备份,我们需要将 zip 文件移动到我们创建它的同一目录中,即
/var/lib/postgres/11/
但在此之前你应该停止 postgres 服务
sudo systemctl stop postgresql
并确保它已经停止
sudo systemctl status postgresql
之后重命名 postgres 现在使用的主集群,因为它是空的,我们不需要它,因为我们将用我们的备份集群替换它
mv /var/lib/postgres/11/main /var/lib/postgres/11/main_old
然后使用此命令将 zip 文件从备份位置移动到 postgres 集群文件夹
mv /backups/main.zip /var/lib/postgres/11/
使用此命令将文件夹解压到同一路径
unzip -a /var/lib/postgres/11/main.zip
解压文件夹后,将所有权授予您的 postgres 用户和组
chown -R postgres:postgres main
然后你就可以开始了。启动 Postgres 服务
sudo systemctl start postgresql
sudo systemctl status postgresql
并确保您还启动了主集群服务
pg_ctlcluster 11 main start
如果你停止了 odoo,请确保也启动它
service odoo-server start
附言:我通过在我的 odoo.config Apache2 虚拟主机中注释 ssl 配置解决了 odoo 子域的 ERR_TOO_MANY_REDIRECTS,该虚拟主机允许加密之前更新,并且一切都恢复到安装允许加密之前的位置。
我想我会把它留在这里,直到我弄清楚如何在测试服务器中使用它,我才会在生产中使用 ssl。感谢您的时间,我希望我的问题和答案将来能对某人有所帮助