Apache
1 基础知识
以下版本基于MySQL数据库的连接,本章节需要你先掌握Linux系统的PHP 7.4.11部署,如你尚未具备此知识,请按如下方法熟悉部署,
2 最佳实践
2.1 部署前的准备
本章使用如下Docker环境部署,参阅本章建议你先搭建以下Docker集群环境并熟悉,
2.2 创建新镜像
2.2.1 创建镜像项目文件夹
mkdir ~/imageProject-php-7.4.11
2.2.2 创建Dockerfile
vim ~/imageProject-php-7.4.11/Dockerfile
加入如下配置,
FROM centos:centos8 MAINTAINER will@cmdschool.org # Update OS RUN rm -rf /etc/yum.repos.d/* RUN curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-8.repo RUN dnf update -y # Deploy tools RUN dnf install -y wget net-tools vim bzip2 RUN dnf install -y gcc gcc-c++ make expat-devel # Download fiels WORKDIR /root/ RUN wget https://mirrors.tuna.tsinghua.edu.cn/apache/apr/apr-1.7.0.tar.gz RUN wget https://mirrors.tuna.tsinghua.edu.cn/apache/apr/apr-util-1.6.1.tar.gz RUN wget https://mirror.bit.edu.cn/apache/httpd/httpd-2.4.46.tar.gz RUN wget https://www.php.net/distributions/php-7.4.11.tar.bz2 # Deploy apr WORKDIR /root/ RUN tar -xf apr-1.7.0.tar.gz WORKDIR /root/apr-1.7.0 RUN ./configure RUN make RUN make install # Deploy apr-util WORKDIR /root/ RUN tar -xf apr-util-1.6.1.tar.gz WORKDIR /root/apr-util-1.6.1 RUN ./configure --with-apr=/usr/local/apr RUN make RUN make install # Deploy httpd RUN dnf install -y pcre-devel openssl-devel perl-devel WORKDIR /root/ RUN tar -xf httpd-2.4.46.tar.gz WORKDIR /root/httpd-2.4.46 RUN ./configure --bindir=/usr/sbin/ \ --sbindir=/usr/sbin/ \ --sysconfdir=/etc/httpd/ \ --libdir=/usr/lib64/ \ --mandir=/usr/share/man/ \ --includedir=/usr/include/ \ --enable-so \ --enable-ssl \ --enable-socache-shmcb RUN make RUN make install RUN groupadd -g 48 apache RUN useradd -u 48 -g 48 -d /usr/share/httpd -s /sbin/nologin apache RUN sed -i "s/User daemon/User apache/g" /etc/httpd/httpd.conf RUN sed -i "s/Group daemon/Group apache/g" /etc/httpd/httpd.conf RUN sed -i "s/\#ServerName www.example.com\:80/ServerName localhost\:80/g" /etc/httpd/httpd.conf RUN sed -i "s/\#LoadModule socache\_shmcb\_module modules\/mod\_socache\_shmcb\.so/LoadModule socache\_shmcb\_module modules\/mod\_socache\_shmcb\.so/g" /etc/httpd/httpd.conf COPY httpd-ssl.conf /etc/httpd/conf.d/httpd-ssl.conf RUN mkdir -p /etc/httpd/conf.d RUN echo 'Include /etc/httpd/conf.d/*.conf' >> /etc/httpd/httpd.conf RUN mkdir /var/www RUN ln -s /usr/local/apache2/htdocs /var/www/html RUN ln -s /usr/local/apache2/logs /var/log/httpd # Deploy php RUN dnf install -y libxml2-devel sqlite-devel WORKDIR /root RUN tar -xf php-7.4.11.tar.bz2 WORKDIR /root/php-7.4.11 RUN ./configure --bindir=/usr/sbin/ \ --sbindir=/usr/sbin/ \ --sysconfdir=/etc/ \ --libdir=/usr/lib64/ \ --mandir=/usr/share/man/ \ --includedir=/usr/include/ \ --with-apxs2=/usr/sbin/apxs \ --with-pdo-mysql RUN make RUN make install RUN cp php.ini-development /etc/php.ini RUN ln -s /etc/php.ini /usr/lib64/ RUN sed -i 's/;date.timezone =/date.timezone = Asia\/Shanghai/g' /etc/php.ini COPY php.conf /etc/httpd/conf.d/php.conf RUN mkdir -p /var/lib/php/session RUN chown apache:apache /var/lib/php/session RUN chmod 775 /var/lib/php/session RUN httpd -t RUN mkdir -p /var/www/html RUN echo '' > /var/www/html/index.php # clean cache WORKDIR /root RUN dnf clean all RUN rm -rf /root/apr-* RUN rm -rf /root/httpd-2.4.46* RUN rm -rf /root/php-7.4.11* # Config Start Scripts RUN echo '#!/bin/bash' > /root/start.sh RUN echo 'echo "Starting HTTP Server...";' >> /root/start.sh RUN echo '/usr/sbin/httpd -f /etc/httpd/httpd.conf -D FOREGROUND' >> /root/start.sh RUN chmod +x /root/start.sh EXPOSE 80 443 WORKDIR /root CMD ["/bin/bash","./start.sh"]
注:
“FROM”指令声明基于“centos:centos8”镜像打包
“COPY”指令声明复制当前目录的具体文件到打包的镜像
“ENV”指令声明Java JDK运行所需的环境变量
所以我们需要根据定义的Apache的httpd-ssl.conf配置文件,
vim ~/imageProject-php-7.4.11/httpd-ssl.conf
加入的配置如下,
LoadModule ssl_module modules/mod_ssl.so Listen 443 SSLPassPhraseDialog builtin SSLSessionCache shmcb:/var/cache/mod_ssl/scache(512000) SSLSessionCacheTimeout 300 SSLRandomSeed startup file:/dev/urandom 256 SSLRandomSeed connect builtin SSLCryptoDevice builtin
然后,我们需要根据定义的PHP的php.conf配置文件,
vim ~/imageProject-php-7.4.11/php.conf
加入的配置如下,
# # Cause the PHP interpreter to handle files with a .php extension. # <FilesMatch \.php$> SetHandler application/x-httpd-php </FilesMatch> # # Allow php to handle Multiviews # AddType text/html .php # # Add index.php to the list of files that will be served as directory # indexes. # DirectoryIndex index.php # # Uncomment the following lines to allow PHP to pretty-print .phps # files as PHP source code: # #<FilesMatch \.phps$> # SetHandler application/x-httpd-php-source #</FilesMatch> # # Apache specific PHP configuration options # those can be override in each configured vhost # php_value session.save_handler "files" php_value session.save_path "/var/lib/php/session"
然后,可使用如下命令确认文件,
ls ~/imageProject-php-7.4.11
可见如下显示,
Dockerfile httpd-ssl.conf php.conf
2.2.3 执行打包操作
cd ~/imageProject-php-7.4.11 docker build -t build/php:7.4.11 .
以上“.”指当前目录为编译目录,编译程序会自动加载“Dockerfile”文件定义,可见如下显示,
Sending build context to Docker daemon 23.77MB Step 1/73 : FROM centos:centos8 ---> 0d120b6ccaa8 [...] Successfully built ad31ce7e5fc8 Successfully tagged build/php:7.4.11
完成后,可使用如下命令查看镜像,
docker images
可见如下显示,
REPOSITORY TAG IMAGE ID CREATED SIZE build/php 7.4.11 ad31ce7e5fc8 About a minute ago 1.35GB [...]
2.2.4 测试软件运行
docker run -d --name apache-php -p 80:80 -p 443:443 build/php:7.4.11
以上运行容器环境后,我们使用以下命令登录容器虚拟机,
docker exec -it `docker container ls | grep 'apache-php' | cut -d" " -f1 ` /bin/bash
测试apache-php运行
netstat -antp
可见如下显示,
Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 6/httpd tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 6/httpd
另外,你也可以使用浏览器测试,
http://10.168.0.210/index.php
测试完成后可使用如下命令退出容器虚拟机,
exit
另外,你可以使用如下命令查询当前运行的container,
docker ps -a
可见如下显示,
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4b48cc991ea4 build/php:7.4.11 "/bin/bash ./start.sh" About a minute ago Up About a minute 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp apache-php [...]
然后可以使用如下命令停止并删除,
docker container stop 4b48cc991ea4 docker container rm 4b48cc991ea4
参阅文档
=======================
没有评论