背景
为了方便记录、管理自己的所思所想,很多小伙伴都会选择在网上搭建属于自己的博客。
wordpress产品可以快速实现这样的需求。
众所周知,http协议是以名文传输,为了确保传输过程中,敏感信息不被第三方嗅探,本文将带大家实现http协议下,配置、启用ssl协议,完成个人博客安全传输访问。
本文记录、分享如何利用Docker,完成ssl协议下的个人博客搭建。wordpress和mysql分别运行在不同的两个容器中,而openssl、wordpress位于同一个镜像。
(一)、拉取镜像
在正式搭建之前,需要先从docker的hub上,拉取(pull)所需的镜像文件。
mysql
wordpress
命令
docker pull name
1、mysql
docker pull mysql
2、wordpress
docker pull wordpress
(二)、mysql镜像启动和配置
启动mysql镜像。
docker run -d -e MYSQL_ROOT_PASSWORD=mysql_root_password–name mysql_ssl mysql
-d参数,容器在后端运行;
-e参数,设定数据库的root登录密码。详见页面:https://hub.docker.com/_/mysql
–name:命名即将运行的容器。
docker exec -it mysql_ssl /bin/bash
使用exec方式进入命令行的交互模式,并返回一个新的shell,不影响上一步已运行程序。
apt-get update -y && apt-get install net-tools -y&& apt-get install vim -y
镜像文件为了减少容量,所以裁剪了不必要的工具,但使用者可根据需要自行安装。以下命令实现软件列表的更新,并安装net-tools和vim工具,其中net-tools工具可完成ip地址查看、监听的端口,以及已经建立的连接等基本信息。
mysql -u root -p
以root用户登录mysql数据库。
create database wordpress;
创建名为wordpress的数据库。
CREATE USER ‘user’@’%’ IDENTIFIED WITHmysql_native_password BY ‘user_password’;
因mysql高版本(比如8.0)的原因,采用了新的验证机制,‘%’表示允许所有远程主机连接。参考: https://blog.csdn.net/xiaoxinshuaiga/article/details/82798919
grant all onwordpress.* to ‘user’@’%’ with grant option;
flush privileges;
设置权限,并使其生效。
(三)、wordpress ssl配置
启动镜像
在原版wordpress镜像上,配置ssl,然后生成新的镜像,以供后续使用。
docker run –name wordpress -d wordpress
以后台方式启动wordpress镜像,并为容器取名为wordpress。
docker exec -it wordpress /bin/bash
以另一个新的shell,交互式访问已运行的容器。
apt-get update -y && apt-get install net-tools -y&& apt-get install vim -y
安装常用的小工具。类同于“mysql镜像启动与配置” 中相关内容的描述。
OpenSSL配置部分
配置openssl,主要在服务器本地产生CA证书,并用证书生成服务端、客户端使用的证书。参考:https://blog.csdn.net/setoy/article/details/78441613
a2enmod ssl
启动ssl相关模块
openssl genrsa -des3 -out server.key 1024
创建第三方CA机构签署证书。向第三方提交一个“生成证书请求文件(CSR)”。
-des3选项能对私钥进行加密,采用此选项会在后续的设置中提示你输入密码(只是加密私钥,https访问时不需要这个密码),这样会在当前目录下生成server.key私钥文件。
openssl req -new -key server.key -out server.csr
生成请求文件CSR(Certificate Signing Request)。这里还需提供一系列信息(如果不填写,也不影响正常功能),比如:
Country Name:
Province Name:
Common Name:
Email:
openssl x509 -req -days 3650 -in server.csr -signkeyserver.key -out server.crt
自己签发证书。3650表示证书有效期10年。
cp server.crt/etc/ssl/certs
cp server.key /etc/ssl/private
复制到SSL目录。
ln -s /etc/apache2/sites-available/default-ssl.conf/etc/apache2/sites-enabled/default-ssl.conf
vim /etc/apache2/sites-enabled/default-ssl.conf
修改apache配置文件。在DocumentRoot中加入内容:
SSLEngineOn
SSLOptions +StrictRequire
SSLCertificateFile/etc/ssl/certs/server.crt
SSLCertificateKeyFile /etc/ssl/private/server.key
/etc/init.d/apache2 stop
停用apache2。此时,容器会自动关闭,并停止。
docker commit –author “author_name”
–message “messages” wordpress wordpress_ssl:v1
生成镜像。取名为“wordpress_ssl:v1”。
wordpress 镜像启动和配置
docker run -p xx:443 –name wordpress_ssl -eWORDPRESS_DB_HOST=mysql_ip:3306 -e WORDPRESS_DB_USER=xxxx -eWORDPRESS_DB_PASSWORD=xxxx -it wordpress_ssl:v1
启动容器。采用交互式启动,因为需要输入rsa密码。
将容器置入后台运行。Ctrl+P+Q即可退出控制台,此时回到母体主机,通过命令:
docker ps
可查看到容器是否在后端正常运行。
(四)其它
docker logs 容器名。查看后台运行的容器的运行状态。

查看容器分配的IP地址。
通过命令:
docker inspect 容器名称 | grep IPAddress
wordpress容器连接mysql容器时,需要用到mysql的ip地址。

网友评论