阿里云ecs+docker+wordpress建站
Table of Contents
背景
2019双11买了阿里云的服务器,一直搁浅没有用,虽然便宜但不能一直放着吃灰。就从做最简单的服务—-个人博客,开始吧。
前期准备
- 阿里云服务器: Ubuntu 18.04 64位 1核 2g
- 域名:阿里云上买的,域名要先经过阿里云的审核(1
2天),就是上传个人信息和身份证。之后还要经过国家工信部备案系统的审核(12周),过了之后方可使用。 - ssl证书:阿里云也提供免费的证书。DigiCert 免费版 SSL。在使用https时会需要该证书。
- blog框架:自从在项目中接触了docker,仿佛发现了新大陆,快速搭建部署环境的利器,并且不会污染宿主环境。所以直接用wordpress的docker image来一键部署。
wordpress docker
wordpress基于apache+php+mysql,docker compose为多服务一键启动和管理提供了相当便利的操作。只需要一个docker-compose.yml文件。我使用的yml如下:
1 | version: '3.3' |
start: $ docker-compose -f docker-compose.yml up -d
stop : $ docker-compose -f docker-compose.yml down
docker起来之后就可以,记得要去阿里云安全组规则中设置中开放相应的端口,默认是是开放了3389(远程桌面登录的默认端口),22(ssh端口)。所以增加80,443,3386端口。
之后就可以通过阿里云给分配的公网ip地址的方式访问wordpress了,最开始访问是进入wordpress的安装界面,填好相应的信息,就可以定制化你的博客了。
域名+https
虽然blog是在自己服务器上,别人也只是浏览一些静态页面,但是作为一家网络安全公司的员工,怎么能容忍数据在网络上裸奔呢?来,上https。(之后会专门写一篇关于加解密的扫盲级blog)。
这是我在阿里云上申请的免费证书,证书提供商是一家老牌的美国CA认证中心–DigiCert,小细节该免费证书在阿里云只能绑定域名,不能绑定ip,所以一开始域名还没通的时候,通过ip访问时https不work。
服务端apache开启tls/ssl
https是以tls/ssl作为支撑的,要实现https通信,首先确认服务端时候具备tls/ssl的条件,即是否开启了openssl服务(OpenSSL是一个安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议)。
进入wordpress的container,查看openssl是否开启:
进入container内部,测试后看出openssl是开的。
加载apache ssl模块
1
$ a2enmod ssl
a2enmod :enable or disable an apache2 module
修改 SSL 配置文件,绑定证书及打开 443 端口
Apache 加载 SSL 模块后,会在 /etc/apache2/sites-available 下生成 default-ssl.conf 文件.
编辑此文件,其中这两行就是放证书的地方,把从阿里云下载(下载证书时会选相应的http server类型,我们选择我们需要的apache)下来的证书放到某个位置(可以mount到宿主机可以直接cp到container里面)并更新位置。
从阿里云下载下来的证书是一个key文件,两个crt文件,我们需要合并这两个crt到.pem,做法也很简单,用notepad++打开将_public.crt内容在前,换行,_chain.crt在后组织成.pem文件。
从 apache 的配置文件 apache2.conf 可以看到,apache 只会读取 /etc/apache2/sites-enabled 目录的配置文件,所以需要把 /etc/apache2/sites-available 下的 default-ssl.conf 文件链接到 /etc/apache2/sites-enabled 目录下。1
$ ln -s /etc/apache2/sites-available/default-ssl.conf \ /etc/apache2/sites-enabled/default-ssl.conf
http 请求强制跳转到 https
编辑 /etc/apache2/sites-available/000-default.conf在 <VirtualHost *:80> 标签中增加下面的配置。重启容器,就是https啦!
wordpress 修改配置以及数据库修改
server端已经就绪,但是访问网站,还需要在wordpress面板里的设置=>常规中修改下面两项来正确路由。
由于https之前使用的是http+ip,开启https后,之前记录在数据库中使用http的协议的链接或者多媒体可能无法访问,需要更新下。
update wp_posts set post_content = replace(post_content,’http://www.winterio.com.cn','https://www.winterio.com.cn');为什么是灰色🔒不是绿色🔒?
再次访问已经https,灰色小锁,代表是安全的。
之前访问一些https的网站时绿色小锁,查了一下原因,灰色是因为页面中有非https内容。打开我的网站首页,发现里面的html代码里有引用其他第三方库的js,这些链接是http,如何把这些第三方的不在自己数据库的非http链接的内容walk around掉,方法也有很多不赘述,google一下都有,我这边就没更改。
实用工具及插件
WP Statistics:wordpress 提供了很多插件,按需安装。WP Statistics,可以理解为网站的一个流量分析可视化工具。
SQLyog:在操作数据库的时候,为了好操作,下了一个mysql的可视化客户端软件,远程连接到服务器docker中的mysql。