荣耀之链论坛

 找回密码
 立即注册
搜索
查看: 606|回复: 2

docker安装httpd基于apache 三楼我完整实现了apache+php+mysql

[复制链接]

1440

主题

2676

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
11333
发表于 2025-3-17 18:12 | 显示全部楼层 |阅读模式
https://hub.docker.com/_/httpd?tab=tags

我在hub.docker.com里面搜索apache
结果出来的是另外一个东西
我说我找了半天感觉不对劲呢

  1. 先临时运行一下把conf文件复制出来
  2. docker run -it \
  3. -d \
  4. --name httpd \
  5. -v /root/docker/httpd/:/root/docker/httpd/ \
  6. -e TZ=Asia/Shanghai \
  7. --restart unless-stopped \
  8. httpd:latest

  9. 把/usr/local/apache2/路径下面的conf和htdocs文件复制出来
  10. 最后删掉这个docker
  11. ##########################################################################################
  12. 然后编辑conf文件
  13. #############################################
  14. 需要https的话就把下面3行前面的注释去掉

  15. #LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
  16. ...
  17. #LoadModule ssl_module modules/mod_ssl.so
  18. ...
  19. #Include conf/extra/httpd-ssl.conf

  20. #############################################
  21. 需要VHOST的话就把下面的注释去掉
  22. # Virtual hosts
  23. #Include conf/extra/httpd-vhosts.conf

  24. #############################################
  25. 需要rewrite的话就把下面的注释去掉
  26. #LoadModule rewrite_module modules/mod_rewrite.so

  27. #############################################
  28. 把显示文件列表去掉
  29. AllowOverride All

  30. #############################################
  31. 然后编辑网站的配置文件

  32. 首先
  33. 编辑extra/httpd-vhosts.conf
  34. 默认已经提供了2个网站
  35. DocumentRoot "/usr/local/apache2/docs/dummy-host.example.com"
  36. DocumentRoot "/usr/local/apache2/docs/dummy-host2.example.com"
  37. 需要手动创建文件夹,注意,这个默认的路径不是htdocs,需要手动改为htdocs

  38. 然后
  39. 编辑extra/httpd-ssl.conf
  40. 默认提供了一个网站
  41. DocumentRoot "/usr/local/apache2/htdocs"
  42. ServerName www.example.com:443
  43. 根据需要修改
  44. 貌似这个必须要改好,不然docker无法启动

  45. 和阿里云给的配置文件对比了一下
  46. 只需要改下面几个地方
  47. <VirtualHost _default_:443> 这里改为*:443

  48. DocumentRoot "/usr/local/apache2/htdocs"
  49. ServerName www.example.com:443
  50. ServerAdmin you@example.com
  51. ErrorLog /proc/self/fd/2
  52. TransferLog /proc/self/fd/1 #这个多
  53. 这几个按照对应的改就行

  54. CustomLog /proc/self/fd/1 \
  55. 这个路径改一下

  56. 参考这个配置
  57.     ServerAdmin 123456@qq.com
  58.     DocumentRoot /var/www/html/ryzl/www
  59.     ServerName www.ryzl.com.cn
  60.     ErrorLog logs/www.ryzl.com.cn-error_log
  61.     CustomLog logs/www.ryzl.com.cn-access_log common

  62. 然后把证书路径改好
  63.     SSLCertificateFile /var/www/html/ryzl/zhengshu/ryzl.com.cn_public.crt
  64.     SSLCertificateKeyFile /var/www/html/ryzl/zhengshu/ryzl.com.cn.key
  65.     SSLCertificateChainFile /var/www/html/ryzl/zhengshu/ryzl.com.cn_chain.crt #这个默认是注释掉了的,取消注释

  66. 应该就好了

  67. #############################################

  68. 最后
  69. 开始正式创建
  70. docker run -it \
  71. -d \
  72. --name httpd_13 \
  73. -v /root/docker/httpd/conf/:/usr/local/apache2/conf/ \
  74. -v /root/docker/httpd/htdocs/:/usr/local/apache2/htdocs/ \
  75. -e TZ=Asia/Shanghai \
  76. --network=docker_bridge_192_168_21 --ip=192.168.21.13 \
  77. -p 30080:80 \
  78. -p 30043:443 \
  79. --restart unless-stopped \
  80. httpd:latest

  81. 我临时测试的,端口没用80和443
  82. #############################################

  83. 然后配置好域名解析就可以访问了

  84. #############################################
  85. docker stats
  86. 纯http模式下,内存占用只有不到10M

  87. 重启这个docker就相当于重启了httpd

  88. #############################################

  89. #目前httpd最新的版本是2.4.64
  90. #我的HK阿里云用的是2.4.37

  91. #############################################
复制代码
回复

使用道具 举报

1440

主题

2676

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
11333
 楼主| 发表于 2025-7-22 07:44 | 显示全部楼层
  1. 用docker分别运行httpd和php  怎么把php集成到httpd里面
  2. https://www.doubao.com/thread/w4289e7c4abaa8695
  3. 我问了豆包
  4. 结果他回复的 有问题
  5. 最后我查阅了大量资料 总结如下
  6. #############################################
  7. 首先是php的选择

  8. 必须要用带fpm的docker镜像
  9. 然后-v的目录映射必须和httpd一样
  10. 最后最好是固定IP

  11. https://hub.docker.com/_/php
  12. docker pull php:7.2-fpm

  13. docker run -it \
  14. -d \
  15. --name php_14 \
  16. -v /root/docker/httpd/htdocs/:/usr/local/apache2/htdocs/ \
  17. -e TZ=Asia/Shanghai \
  18. --network=docker_bridge_192_168_21 --ip=192.168.21.14 \
  19. --restart unless-stopped \
  20. php:7.2-fpm

  21. docker exec -it php_14 bash
  22. 默认是/var/www/html的目录
  23. cd /usr/local/apache2/htdocs/
  24. 然后直接执行 php phpinfo.php 如果能看到输出就是正常的

  25. #############################################
  26. 然后httpd的配置
  27. 编辑conf文件

  28. # 启用必要的模块
  29. LoadModule proxy_module modules/mod_proxy.so
  30. LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so

  31. # 服务器根目录的配置 添加下面的那段PHP的
  32. DocumentRoot "/usr/local/apache2/htdocs"
  33. <Directory "/usr/local/apache2/htdocs">
  34.     Options Indexes FollowSymLinks
  35.     AllowOverride All
  36.     Require all granted
  37.    
  38.     # 将 PHP 文件转发到 PHP-FPM
  39.     <FilesMatch \.php$>
  40.         SetHandler "proxy:fcgi://192.168.21.14:9000"
  41.     </FilesMatch>
  42. </Directory>

  43. 把默认页面加上index.php并且放到index.html前面
  44. <IfModule dir_module>
  45.     DirectoryIndex index.php index.html
  46. </IfModule>




  47. 然后重新运行httpd的docker
  48. 确保他们的IP是同一个网段

  49. docker run -it \
  50. -d \
  51. --name httpd_13 \
  52. -v /root/docker/httpd/conf/:/usr/local/apache2/conf/ \
  53. -v /root/docker/httpd/htdocs/:/usr/local/apache2/htdocs/ \
  54. -e TZ=Asia/Shanghai \
  55. --network=docker_bridge_192_168_21 --ip=192.168.21.13 \
  56. -p 30080:80 \
  57. -p 30043:443 \
  58. --restart unless-stopped \
  59. httpd:latest

  60. 注意:必须启动php容器以后才能正常显示php的网页

  61. #############################################

  62. 最后访问就能看到正常的解析了php网页了

  63. #############################################

  64. 怎么添加功能呢 比如php-gd或者数据库连接
  65. 我参考的这个教程
  66. https://www.cnblogs.com/firstlady/p/17636034.html

  67. 如果php容器服务里面还需要安装一些扩展,可以这样操作
  68. 运行命令:docker exec -it 容器ID /bin/bash进入容器,并执行下列命令
  69. docker-php-ext-install mysqli
  70. docker-php-ext-enable mysqli

  71. docker-php-ext-install pdo_mysql
  72. docker-php-ext-enable pdo_mysql

  73. docker-php-ext-install bcmath
  74. docker-php-ext-enable bcmath

  75. docker-php-ext-install gd
  76. docker-php-ext-enable gd


  77. 最后安装discuz 只需要额外的安装
  78. docker-php-ext-install mysqli

  79. 然后重启php容器
  80. 然后在httpd容器里面把bbs目录权限改为777

  81. 之后就可以安装了

  82. #############################################
复制代码
回复 支持 反对

使用道具 举报

1440

主题

2676

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
11333
 楼主| 发表于 2025-7-22 08:11 | 显示全部楼层
LAMP的配置

首先创建httpd的容器 做好配置
然后创建php的容器 并安装mysqli扩展
最后创建mariadb的容器

下面是我刚完成的


  1. docker load < /root/docker/docker-image/httpd.tar.gz
  2. docker load < /root/docker/docker-image/mariadb-10.3.35.tar.gz
  3. docker load < /root/docker/docker-image/php-7.4.33-fpm.tar.gz

  4. 先临时运行一下把conf文件复制出来
  5. docker run -it \
  6. -d \
  7. --name httpd \
  8. -v /root/docker/httpd_bak/:/root/docker/httpd/ \
  9. -e TZ=Asia/Shanghai \
  10. --restart unless-stopped \
  11. httpd:latest

  12. 把/usr/local/apache2这个文件夹整个复制出来
  13. docker exec -it httpd mv /usr/local/apache2 /root/docker/httpd/
  14. 最后删掉这个docker

  15. 然后准备修改配置文件,用改好的配置文件创建docker

  16. 编辑配置文件
  17. 这里我就按照我自己的需求来写了,既有http也有https
  18. vi /usr/local/apache2/conf/httpd.conf
  19. 需要https的话就把下面3行前面的注释去掉
  20. #LoadModule socache_shmcb_module modules/mod_socache_shmcb.so
  21. #LoadModule ssl_module modules/mod_ssl.so
  22. #Include conf/extra/httpd-ssl.conf
  23. 需要VHOST的话就把下面的注释去掉
  24. #Include conf/extra/httpd-vhosts.conf
  25. 需要rewrite的话就把下面的注释去掉
  26. #LoadModule rewrite_module modules/mod_rewrite.so
  27. 把显示文件列表去掉,大概在280行
  28. Options +FollowSymLinks -Indexes
  29. AllowOverride All
  30. 启用PHP的模块,把下面两行前面的注释去掉
  31. #LoadModule proxy_module modules/mod_proxy.so
  32. #LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
  33. 还是在280行那里在AllowOverride All下面添加这一段内容
  34.     # 将 PHP 文件转发到 PHP-FPM
  35.     <FilesMatch \.php$>
  36.         SetHandler "proxy:fcgi://192.168.21.4:9000"
  37.     </FilesMatch>
  38. 把默认页面加上index.php并且放到index.html前面
  39. <IfModule dir_module>
  40.     DirectoryIndex index.php index.html
  41. </IfModule>


  42. 然后编辑网站配置
  43. vi /usr/local/apache2/conf/extra/httpd-vhosts.conf
  44. 按照下面的方式编辑
  45. <VirtualHost *:80>
  46.     ServerAdmin 648473061@qq.com
  47.     DocumentRoot "/usr/local/apache2/htdocs/d2mods.cn/www"
  48.     ServerName www.d2mods.cn
  49.     ServerAlias www.d2mods.cn
  50.     ErrorLog logs/www.d2mods.cn-error_log
  51.     CustomLog logs/www.d2mods.cn-access_log common

  52. RewriteEngine off
  53. RewriteCond %{SERVER_NAME} =www.d2mods.cn
  54. RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
  55. </VirtualHost>

  56. <VirtualHost *:80>
  57.     ServerAdmin 648473061@qq.com
  58.     DocumentRoot "/usr/local/apache2/htdocs/d2mods.cn/www"
  59.     ServerName www.d2mods.cn
  60.     ServerAlias www.d2mods.cn
  61.     ErrorLog logs/d2mods.cn-error_log
  62.     CustomLog logs/d2mods.cn-access_log common

  63. RewriteEngine on
  64. RewriteCond %{SERVER_NAME} =d2mods.cn
  65. RewriteRule ^ https://www.%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
  66. </VirtualHost>
  67. 带www的那个的重定向我没开启,因为用c#winform编辑的网页比较坑,用https以后提示证书错误,我用的阿里云免费证书

  68. 然后编辑https的配置
  69. vi /usr/local/apache2/conf/extra/httpd-ssl.conf
  70. 大约在121行
  71. <VirtualHost _default_:443>
  72. DocumentRoot "/usr/local/apache2/htdocs/d2mods.cn/www"
  73. ServerName www.d2mods.cn:443
  74. ServerAdmin 648473061@qq.com
  75. ErrorLog logs/www.d2mods.cn-error_log
  76. TransferLog logs/www.d2mods.cn-transfer_log
  77. SSLCertificateFile "/usr/local/apache2/htdocs/d2mods.cn/zhengshu/d2mods.cn_public.crt"
  78. SSLCertificateKeyFile "/usr/local/apache2/htdocs/d2mods.cn/zhengshu/d2mods.cn.key"
  79. SSLCertificateChainFile "/usr/local/apache2/htdocs/d2mods.cn/zhengshu/d2mods.cn_chain.crt"
  80. 基本上就是改上面这些东西就行

  81. 如果未来有多个网站,估计要按照下面的改,有机会再试
  82. <VirtualHost *:443>

  83. 至此http容器就编辑好了

  84. 最后创建docker
  85. docker run -it \
  86. -d \
  87. --name httpd_3 \
  88. -v /root/docker/httpd/apache2/:/usr/local/apache2/ \
  89. -e TZ=Asia/Shanghai \
  90. --network=docker_bridge_192_168_21 --ip=192.168.21.3 \
  91. -p 80:80 \
  92. -p 443:443 \
  93. --restart unless-stopped \
  94. httpd:latest

  95. 注意:一定要手动固定IP地址
  96. docker logs httpd_3
  97. docker exec -it httpd_3 bash

  98. 最后修改d2mods的数据库ip,一共三个地方
  99. config/config_global.php
  100. config/config_ucenter.php
  101. uc_server/data/config.inc.php

  102. 还需要修复一下权限,不然访问管理后台会提示没权限
  103. docker exec -it httpd_3 chmod -R 777 /usr/local/apache2/htdocs/d2mods.cn/www/bbs
  104. ----------------------------------------------------

  105. 然后创建php的
  106. docker run -it \
  107. -d \
  108. --name php_4 \
  109. -v /root/docker/httpd/apache2/htdocs/:/usr/local/apache2/htdocs/ \
  110. -e TZ=Asia/Shanghai \
  111. --network=docker_bridge_192_168_21 --ip=192.168.21.4 \
  112. --restart unless-stopped \
  113. php:7.4.33-fpm

  114. #这里映射目录就不需要把配置文件映射进来了,只需要映射网页目录就行,并且一定要严格对应httpd的目录,否则php会找不到文件的
  115. docker exec -it php_4 bash

  116. 然后给php安装功能
  117. docker-php-ext-install mysqli
  118. docker-php-ext-enable mysqli

  119. # 1. 替换容器内的 apt 源为阿里云(解决源慢+索引旧的问题)
  120. sed -i 's/deb.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list
  121. # 2. 快速更新索引(仅需一次,国内源几秒完成)
  122. apt update -y
  123. # 3. 安装依赖(此时就能找到包了)
  124. apt install -y libpng-dev libjpeg62-turbo-dev libgif-dev
  125. # 4. 安装 GD 扩展 同时还安装freetype的
  126. #配置 GD 扩展(仅保留 FreeType + JPEG,GIF 自动支持)
  127. docker-php-ext-configure gd --with-freetype --with-jpeg
  128. #安装 GD 扩展
  129. docker-php-ext-install -j$(nproc) gd

  130. 安装完毕重启这个容器
  131. docker restart php_4

  132. ----------------------------------------------------

  133. 最后安装mariadb
  134. 注意,各种排除错误以后我发现数据要用旧服务器上同样的版本才行
  135. 最新的mariadb并不兼容于discuz3.4了 弄了很久才发现的

  136. docker run \
  137. -d \
  138. --name mariadb_6 \
  139. -v /root/docker/mariadb_6/datadir/:/var/lib/mysql:Z \
  140. -v /root/docker/mariadb_6/backup/:/backup/ \
  141. -e TZ=Asia/Shanghai \
  142. -e MARIADB_ALLOW_EMPTY_ROOT_PASSWORD=1 \
  143. --network=docker_bridge_192_168_21 --ip=192.168.21.6 \
  144. --restart unless-stopped \
  145. mariadb:10.3.35

  146. docker exec -it mariadb_6 bash
  147. 进入数据库
  148. mysql
  149. 添加数据库
  150. create database d2mods
  151. 退出数据库操作

  152. 然后导入数据库
  153. mysql d2mods<d2mods.sql

  154. 这个版本的数据库可以直接用mysqldump备份
  155. mysqldump d2mods>d2mods.sql

  156. ----------------------------------------------------
  157. 至此,apache mariadb10.3.35 php就都分开了
  158. 然后d2dmos论坛也全部迁移完毕了
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

荣耀之链

GMT+8, 2026-3-20 09:27 , Processed in 0.016120 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表