背景
爲了方便記錄、管理自己的所思所想,很多小夥伴都會選擇在網上搭建屬於自己的博客。
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地址。