经过昨天的折腾,现在这个php+apache容器已经可以运行存于宿主机项目的代码了,详情记录在:https://blog.csdn.net/arthurchan2021/article/details/141404985 。虽然说也是勉强可以用了,但是还有许多地方需要完善。今天继续往下走吧!
昨天为了简单起见,我只是简单的把项目目录直接挂载到容器的/var/www/html下。但是这样肯定是不够的,因为除非是一个极其简单的项目,否则这样把项目所有的文件都暴露在可访问的目录下绝对是不允许的。况且,一个项目目录下也很有可能不仅仅只要代码文件。
现在我对项目目录结构做一个简单的规划吧:
.
+-- src -->源代码目录
| +-- public -->存放可以被访问的php代码或其它文件
| +-- config -->存放一些配置文件
| +-- inc -->存放一些会被引用的文件
+-- doc -->存放一些文档类的文件
创建这些目录:
E:\test>md src doc
E:\test>md src\public src\config src\inc
E:\test>move index.php src\public\
移动了 1 个文件。
现在像昨天那样直接把项目的根目录挂载到容器里的/var/www/html就行不通了。因为按照规划站点可访问的内容不是放在根目录下,而是在./src/public下。如果直接简单粗暴的把./src/public挂载到容器的/var/www/html下虽然好像问题是解决了,但是如果有些页面包含或引用了./src/config或./src/inc的文件就会出问题了,因为这些东西没有挂载到容器中。
所以我想还是把项目根目录挂载到容器中,这样项目的所有内容都在容器中了。但不能直接挂载到/var/www/html下,要么就挂载到/workspaces/myproject下吧。
另外这样就需要配置Apache了的DocumentRoot了。熟悉Ubuntu的朋友应该知道,Ubuntu的Apache关于站点的配置文件是在/etc/apache2/sites-available目录下的。而如果想要使站点配置生效,则需要把想要的配置文件链接到/etc/apache2/sites-enabled下。而安装Apache2时会有一个默认的站点配置是生效的,它就是:/etc/apache2/sites-enabled/000-default.conf,而它的真身是:/etc/apache2/sites-available/000-default.conf。
好,我打算把这个文件先从php_apache容器中复制到宿主机上,然后在它的基础上修改DocumentRoot。再修改Containerfile把修改过的000-default.conf文件覆盖原来的。
复制文件:
E:\containers\php_apache>podman container list
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6c869da7df65 localhost/php_apache:7.4 /bin/bash 14 minutes ago Up 14 minutes 80/tcp sharp_robinson
E:\containers\php_apache>podman cp 6c869da7df65:/etc/apache2/sites-available/000-default.conf .
E:\containers\php_apache>dir
2024/08/08 23:15 <DIR> .
2024/08/08 23:15 <DIR> ..
2024/08/20 23:35 47 entrypoint.sh
2024/08/20 23:35 574 Containerfile
2023/12/05 02:57 1,332 000-default.conf
3 个文件 1,953 字节
2 个目录 124,502,147,072 可用字节
我看到000-default.conf文件已经复制到了本地的php_apache目录下了。接下来就是修改它:
<VirtualHost *:80>
ServerAdmin webmaster@localhost
DocumentRoot /workspaces/myproject/src/public
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
<Directory /workspaces/myproject/src/public>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
再修改Containerfile文件,添加下面两行代码:
COPY 000-default.conf /etc/apache2/sites-available/
RUN chmod 544 /etc/apache2/sites-available/000-default.conf
重新构建容器镜像:
E:\containers\php_apache>podman build . -t php_apache:7.4
STEP 1/14: FROM localhost/ubuntu:20.04
...
COMMIT php_apache:7.4
--> 6a70af8238f3
Successfully tagged localhost/php_apache:7.4
6a70af8238f338b71f719b0178db99140f12b962f7e8a858606eefb8c60555ee
好了迫不及待的想试试了:
E:\test>podman run --rm -it -p8080:80 -v.:/workspaces/myproject localhost/php_apache:7.4
* Starting Apache httpd web server apache2 AH00558: apache2: Could not reliably determine the server's fully qualified domain name, using 10.88.0.35. Set the 'ServerName' directive globally to suppress this message
*
root@1aa14a26ac4c:/#
– 注意,这一步是再项目目录下执行的。
再浏览器访问http://localhost:8080:
看起了是成功了,现在就可以正儿八经的写代码了。今天就折腾到这里了,改天再想想还需要折腾点什么。
新的折腾完成了,现在可以按需配置DocumentRoot目录了:https://blog.csdn.net/arthurchan2021/article/details/141576341