gpt4 book ai didi

django - 我在哪里复制我的 Apache docker 镜像中的 VirtualHost 指令?

转载 作者:行者123 更新时间:2023-12-02 19:51:57 25 4
gpt4 key购买 nike

我正在尝试在本地 Dockerize 我的 Apache/Django 项目。在我的本地机器(运行 Mac Sierra)上,我的/etc/apache2/other/目录中有这个文件(maps.conf)...

<VirtualHost *:80>
ServerName maps.example.com

Alias /static /Library/WebServer/Documents/maps/maps/static
<Directory /Library/WebServer/Documents/maps/maps/static>
Require all granted
</Directory>

# Next, add the following directory block
<Directory /Library/WebServer/Documents/maps/maps_project>
<Files wsgi.py>
Require all granted
</Files>
</Directory>

WSGIDaemonProcess maps python-home=/Library/WebServer/Documents/maps/venv python-path=/Library/WebServer/Documents/maps
WSGIProcessGroup maps
WSGIScriptAlias / /Library/WebServer/Documents/maps/maps_project/wsgi.py

</VirtualHost>

我找到了这个 Apache docker 文件...
FROM httpd:2.4
COPY ./public-html/ /usr/local/apache2/htdocs/

我应该在哪里复制上面的 VirtualHost 指令,以便我的 Apache docker 镜像正确连接?

最佳答案

TL; 博士
它在 /usr/local/apache2/conf/extra/httpd-vhosts.conf ,但您需要做的不仅仅是将您的复制到那里,因为 a) Apache 不会知道它; b) 您的 macOS 路径不起作用。
长版
The Docker docs for the official Apache image展示如何提取主要的 Apache 配置:

docker run --rm httpd:2.4 cat /usr/local/apache2/conf/httpd.conf > my-httpd.conf
现在你有一个 my-httpd.conf本地,容器外。打开它看看——它只是一个标准的 Apache 配置,在底部你会看到通常的:
# Virtual hosts
#Include conf/extra/httpd-vhosts.conf
所以现在我们可以看到如何包含 vhost 配置,以及放置它的位置。
首先,取消注释 Includemy-httpd.conf 的本地副本中添加一行以便实际包含 vhosts 配置。我们将编辑后的版本复制到容器中,覆盖原始版本,以便在运行时使用。
现在我们需要更新您现有的 vhosts 配置文件( maps.conf ),使其适合在容器中使用。您当前在该文件中使用的特定于 macOS 的路径将不存在于容器中,因此该文件将无法按原样运行。
您可以在主 my-httpd.conf 中看到主 Docroot文件:
DocumentRoot "/usr/local/apache2/htdocs"
为简单起见,让我们将您的内容放在该主 Docroot 下,例如放在名为 maps/ 的目录中。 .复制您的 maps.conf到一个新文件(比如 my-vhosts.conf 在与 my-httpd.conf 相同的目录中),更新你的 macOS /Library/WebServer/Documents/maps带有容器路径的路径 /usr/local/apache2/htdocs/maps .我无法复制您的应用程序/配置,但为了演示起见,我使用了这个 super 简单的 my-vhosts.conf :
<VirtualHost *:80>
DocumentRoot "/usr/local/apache2/htdocs/maps"
</VirtualHost>
接下来将它们全部放在 Dockerfile 中。它需要复制 2 个新的配置文件,以及您的实际内容。请注意,您不能在 COPY 中使用源文件的绝对路径。命令,因此您需要移动或复制您的本地 maps/内容首先进入当前目录。
FROM httpd:2.4
COPY ./my-httpd.conf /usr/local/apache2/conf/httpd.conf
COPY ./my-vhosts.conf /usr/local/apache2/conf/extra/httpd-vhosts.conf
COPY ./maps /usr/local/apache2/htdocs/maps
现在只需构建并运行它。再次使用 Apache Docker 文档中显示的命令:
docker build -t my-apache2 .
docker run -dit --name my-running-app -p 8080:80 my-apache2
最后,为了完整起见,对于本地开发,您可能不想在处理应用程序或调整配置文件时不断重新创建和运行镜像,您可以将这些内容作为卷映射到容器中,而不仅仅是复制它们在构建时一次性完成。这样您就可以工作并在容器中看到您的更改。
最简单的方法是使用 docker-compose , 和 docker-compose.yml :
version: '3'

services:
apache:
image: httpd:2.4
container_name: apache
ports:
- "8080:80"
volumes:
- ./my-httpd.conf:/usr/local/apache2/conf/httpd.conf
- ./my-vhosts.conf:/usr/local/apache2/conf/extra/httpd-vhosts.conf
- ./maps:/usr/local/apache2/htdocs/maps
然后 docker-compose up运行它。

关于django - 我在哪里复制我的 Apache docker 镜像中的 VirtualHost 指令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60085173/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com