我正在尝试使用 podman-compose(工作方式类似于 docker-compose)在生产服务器上部署一个容器化的 Wordpress。 Web 服务在主机上的端口 8080 上公开。然后,我利用 Apache 的 ProxyPass 指令创建一个反向代理并将请求发送到 localhost:8080,其中提供 WordPress,从而使 WordPress 在 http://example.com 上可用。
我成功地将数据库和 wordpress 卷迁移到服务器。我遇到的第一个问题是 WordPress 在 wpoptions 中将 localhost 存储为 siteurl
和 home
,因此它无法在生产服务器上运行。将这些值更改为 example.com(我的域)后,它会一直重定向到 localhost。疯狂的!
这是我的 docker-compose.yaml:
version: "3.8"
services:
web:
image: wordpress
restart: always
volumes:
- wordpress:/var/www/html
ports:
- 8080:80
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: user
WORDPRESS_DB_NAME: db
WORDPRESS_DB_PASSWORD: mypass
WORDPRESS_DEBUG: 0
depends_on:
- db
networks:
- wpnet
db:
image: mariadb:10.5
restart: always
ports:
- 6603:3306
volumes:
- wpdbvol:/var/lib/mysql
environment:
MYSQL_DATABASE: db
MYSQL_USER: user
MYSQL_PASSWORD: mypass
MYSQL_ROOT_PASSWORD: mypass
networks:
- wpnet
volumes:
wordpress: {}
wpdbvol: {}
networks:
wpnet: {}
这是我的反向代理配置:
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
ProxyPass "/" "https://localhost:8080"
#Allows modification of Location: headers from backend server to point to the reverse proxy
ProxyPassReverse "/" "http://localhost:8080"
</VirtualHost>
答案 0 :(得分:1)
这是一个远景,很可能不会奏效。
也许可以尝试在 compose yml https://example.com
environment
设置中将 WORDPRESS_CONFIG_EXTRA
定义为您的主页网址。
services:
web:
image: wordpress
restart: always
volumes:
- wordpress:/var/www/html
ports:
- 8080:80
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: user
WORDPRESS_DB_NAME: db
WORDPRESS_DB_PASSWORD: mypass
WORDPRESS_DEBUG: 0
WORDPRESS_CONFIG_EXTRA: |
/** define our home url */
define('WP_HOME', 'https://example.com');
define('WP_SITEURL', 'https://example.com');
depends_on:
- db
networks:
- wpnet
这可能强制安装 wordpress 到它的目的地并阻止它重定向回 localhost
。
此外,当我在让 ngrok tunnelling 访问我的本地 wordpress 环境时遇到问题时,我不得不安装 Relative URL wordpress 插件让我的隧道正常工作。
不确定这是否与您的问题相关,但可能值得安装 Relative URL 插件并在尝试上述 WORDPRESS_CONFIG_EXTRA
想法之前查看这是否解决了您的 localhost 重定向问题。
该插件已 2 年未更新,但仍可与 ngrok 一起正常工作。插件实际上是 20 行 php,我想可以将它们放入您的函数中。
Ngrok 允许我通过像 http://example.ngrok.io/
这样的 https 协议 url 访问我的本地 docker compose wordpress 环境,这对我处理本地 webhook 响应回调(我与 Stripe 一起使用)很方便。< /p>
答案 1 :(得分:1)
对于在 ssl 上运行 WP 遇到此问题的每个人:
如果你有 Nginx 作为 Apache 的代理,HTTPS
全局必须在 PHP 中显式设置(最好在 wp-config.php 中)和 $_SERVER['HTTPS'] = 'On';
,否则 WP 将继续重定向,因为Nginx 在 ssl 上运行,但 Apache 不是,WP 只能看到 Apache 环境。