在Oracle Cloud上,用Docker发布httpd作为web server,以及如何安装SSL证书

360 阅读2分钟

新建三个主机目录

  • /opt/httpd/www:映射docker容器中的静态文件夹;
  • /opt/httpd/conf:映射docker容器中的配置文件;
  • /opt/httpd/logs:映射docker容器中的log文件夹;
  • /opt/httpd/cert: 映射docker容器中的SSL证书目录;
  • /opt/httpd/conf/extra:映射docker容器中的SSL配置;

获取httpd

docker pull httpd:latest

启动临时httpd容器

第一次启动httpd容器

docker run --name httpd -it -p 80:80 httpd

然后,将容器中的httpd.conf和httpd-ssl.conf文件拷贝出来,省得手写。

docker cp httpd:/usr/local/apache2/conf/httpd.conf /opt/httpd/conf
docker cp httpd:/usr/local/apache2/conf/extra/httpd-ssl.conf /opt/httpd/conf/extra/httpd-ssl.conf

正式启动httpd容器

先停止掉第一个httpd容器

docker stop httpd
docker rm httpd

再次启动正式的httpd容器

docker run -p 80:80 --privileged=true --name doorweb -v /opt/httpd/www/:/usr/local/apache2/htdocs/ -v /opt/httpd/conf/httpd.conf:/usr/local/apache2/conf/httpd.conf -v /opt/httpd/logs:/usr/local/apache2/logs/ -d httpd

v:将主机目录映射到docker容器目录,修改主机文件即可映射到docker容器中。

测试httpd容器

在/opt/httpd/www中编写index.html文件如下:

vim index.html

输入 hello world!保存退出

在browser中输入ip,一切Ok。

开始安装SSL证书。

  1. 申请SSL证书

选择阿里云免费的DV-SSL的证书,具体申请和下载过程参考阿里云介绍。 最后获得三个文件:xxxx_public.crt, xxxx_chain.crt, xxxx.key, 放入/opt/httpd/cert中。

  1. 修改httpd.conf

将httpd.conf下的

#LoadModule ssl_module modules/mod_ssl.so、  
#Include conf/extra/httpd-ssl.conf、  
#LoadModule socache_shmcb_module modules/mod_socache_shmcb.so 

三处地方删除#符号,保存httpd.conf。

  1. 修改httpd-ssl.conf配置文件
<VirtualHost *:443> 
ServerName #修改为申请证书时绑定的域名www.YourDomainName1.com。 
DocumentRoot #/usr/local/apache2/htdocs/,注意要和httpd.conf中的DocumentRoot一致。
SSLEngine on 
SSLProtocol all -SSLv2 -SSLv3 # 添加SSL协议支持协议,去掉不安全的协议。 
SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM # 修改加密套件。 
SSLHonorCipherOrder on 
SSLCertificateFile /usr/local/apache2/cert/domain name1_public.crt # 将domain name1_public.crt替换成您证书文件名。 
SSLCertificateKeyFile /usr/local/apache2/cert/domain name1.key # 将domain name1.key替换成您证书的密钥文件名。 
SSLCertificateChainFile /usr/local/apache2/cert/domain name1_chain.crt # 将domain name1_chain.crt替换成您证书的密钥文件名;证书链开头如果有#字符,请删除。 
</VirtualHost>

保存退出

  1. 重新启动docker.
docker run -p 80:80 -p 443:443 --privileged=true --network xxxx --name xxxxx -v /opt/httpd/cert/:/usr/local/apache2/cert -v /opt/httpd/conf/extra/httpd-ssl.conf:/usr/local/apache2/conf/extra/httpd-ssl.conf -v /opt/httpd/www/:/usr/local/apache2/htdocs/ -v /opt/httpd/conf/httpd.conf:/usr/local/apache2/conf/httpd.conf -v /opt/httpd/logs:/usr/local/apache2/logs/ -d httpd

再次测试https:, 一切ok.