感谢祺神的指导,欢迎访问祺神的站点:随机存取记忆。本篇包含服务器购买后至站点正常安全访问的过程,以我个人的经历为例,能力有限,不足之处还请指教。
Before reading: 乱搞前请记得随时在阿里云创建备份,三个免费备份一般是抗造的。
本篇之后您可以:
初步管理个人服务器,获得自己的个人站点
准备
购买阿里云轻量应用服务器,在阿里云购买域名(若购买服务器在大陆内则需要域名备案过程,本篇中以香港服务器为例,因此没有备案过程)。
域名解析至服务器
将购买的域名与你的服务器联系在一起
登录阿里云云解析DNS控制台,在域名列表中可以看到购买的域名(如在阿里云购买)。单击操作一栏下的解析设置
单击添加记录,记录类型选择A。解析的是一级域名,所以主机记录不填。解析请求来源设置默认,记录值填写自己服务器的公网IP(在阿里云服务器控制台查看),TTL默认10min。然后确认。默认解析出两条结果,使得加www与不加www都可以访问,如果只有一条结果请重复以上过程,将主机记录填入www。

远程连接至服务器
以xShell为例,实现对服务器的远程连接
打开阿里云服务器控制台,在服务器运维-远程连接中点击密钥管理,生成后下载密钥,密钥文件请妥善保管。注:如使用密钥连接过服务器,服务器会自动禁止用户名密码的方式登入。
打开xShell,新建连接,在连接栏中:协议SSH,主机填入自己服务器的公网IP,端口号22。在用户身份验证栏中:方法勾选Public Key,点击连接。


用户名填root,点击确定,在用户密钥栏中选择自己的密钥文件,点击连接,连接至远程服务器。
Welcome to Alibaba Cloud Elastic Compute Service !
看到以上说明连接成坤,之后的代码都在xshell中输入。
安装 Docker
Docker 是一个开源的应用容器引擎,你可以将其理解为一个轻量级的虚拟机,开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上。
sudo yum install docker-ce # 安装 docker
docker -v # 检查版本,若出现版本即为安装成功
systemctl start docker # 启动 docker
systemctl enable docker # 设置开机启动
安装 Portainer
使用 Portainer,实现对 docker 的图形化管理。
docker run -d -p 9443:9443 \ # host端口:container端口
--restart=always \ # 自动重启
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \ # 挂载名为“portainer_data”的 volume。
--name portainer \
portainer/portainer-ce:latest
打开阿里云服务器管理界面,添加规则,应用类型自定义,端口范围填入设置的 host 端口,即为9443,然后确定,放行9443端口。此时在浏览器中输入”example.com:9443″便可访问你的 portainer界面,输入”公网ip:9443″也可。
在 Portainer 中创建 WordPress 容器与 MySQL容器
WordPress就不说了,但他不包含数据库,需要自己创建数据库并稍后指向这个数据库。
在浏览器中输入”公网ip:9443″来访问你的 portainer。
点击左侧 “Volumes (卷)”,添加几个卷,自由命名,例如此卷将来要用作储存 wordpress 中的数据,可以命名为 “myWordpress_data”。其实不添加也行,创建 container (容器) 时会自动创建,但名字长的一又难记。
此时添加 wordpress 容器。点击左侧 container,右上 Add container。名称填你喜欢的,Image (镜像) 中填入 “wordpress:latest” 。点击的 “publish a new network port” ,添加两条,分别为 80:80 与443:443。
80 端口为 http 默认侦听端口,使得你的域名直接指向 wordpress 。443 端口为稍后添加 ssl 协议用,使得 https 下域名直接指向你的 wordpress (稍后介绍)。host 端口为你输入 公网ip:端口号 时访问的端口,container端口要根据具体镜像输入,例如 mysql 使用 3306 端口。80 ,22 与 443 端口不用放行,因为防火墙中自动放行了这三条端口。

拉到底部,在 “Restart policy” 中选择 “Always”,默认开机自启。在 “Volumes” 中添加映射的卷,在 “container” 中填入 “/var/www/html”, “volume”中选择你想要的卷,此步为方便之后使用 Filebrowser 进行图形化文件管理。点击 “Deploy the container” 完成容器创建。

现在创建 mySQL 容器。名称任意填,”Image” 中填入 “mysql:5.7″,5.7是因为 wordpress 建议使用 5.7 及以上版本,我用的是 5.6 还每天被提醒哈哈。同样开放端口,host 端口可任填,container 端口填 3306。同样设置开机自启。点击 “Env”,添加两条环境变量如下图。第一条环境变量为你数据库访问的密码,建议整复杂一些总没坏处,第二条为数据库名称,之后用得到。”Volumes” 中同样,可指定你之前创建的卷,也可以不指定。

回到阿里云控制台,添加规则,应用类型自定义,端口范围填入你设置的 host 端口,放行该端口。
安装 Filebrowser
Filebrowser 可以实现图形化管理文件,非常方便,就不用每天在 xshell里敲字了
访问你的 portainer。在 “Containers” 界面添加新的 container,名字填你喜欢的,”Image” 中输入 filebrowser:latest。同样添加端口,host 端口随意但请记下来,因为之后要访问,container 端口填80。然后拉到底部部署容器。
在阿里云中放行对应 host 端口。现在在浏览器输入 “公网ip:端口号” 就可以访问你的 filebrowser 界面了,但啥也没有,因为还没有设置让他访问的卷。
现在回到 portainer ,设置 filebrowser 访问对应卷,以 wordpress 为例。在 container 中点击 wordpress 的 container ,拉到最下方,查看 “volumes” 中复制下 “Host/volume” 中该 volume 的名称。
在 container 中点击 filebrowser,点击 “Duplicate/Edit”,拖到最下方,在 “Volumes” 中点击 “map additional volume”,在 “container” 内填写 “/srv/example_name”,example_name 为你之前复制的卷名,volume 选择该卷。点击 Deploy。
访问 Filebrowser 即可实现图形化管理你设定的卷中的文件。可以重复这一操作使得 mySQL 与其他 container 的文件实现图形化访问。
配置 WordPress
这一步完成后你的站点就算半步上线了
浏览器输入你的域名加 wordpress 对应 host 端口: “example.com:端口” 或公网ip:端口,便可打开wordpress设置界面。语言看你心情选择。接下来进入数据库信息界面。
数据库名为部署 mySQL 时设置的数据库名,用户名默认 root ,密码为部署 mySQL 时设置密码。数据库主机为 公网ip:mySQL对应host端口号,提交。之后按照 wordpress 的指引一路安装,就可以进入后台。
此时浏览器输入你的域名便可访问你的网站。经典 Hello world 开局
配置 HTTPS
访问你的网站时,左侧会有一个警示号,警告你该站点并不安全,而一般的网站是一把锁。这是由于你的站点是使用 HTTP 协议传输的,HTTP 协议也就是超文本传输协议,数据为明文发送,不提供任何数据加密。而 HTTPS 为安全套接字层超文本传输协议,使用可信任服务商签发的证书实现数据加密,保护了数据安全。
进入阿里云数字证书管理网站,点击左侧 ssl 证书,点击免费证书,免费的东西就是香。点击创建证书,在证书申请中填入你自己的域名,为了防止你拿网站去搞不适宜的内容,还有实名认证环节,总之提交审核,按流程来。
申请成功后就可以在这个界面看到签发的证书。点击右侧下载,docker 中的 wordpress 默认使用 Apache Web服务器,所以我们下载 Apache 对应的证书。也可以查询自己网站使用的网络服务器,在 cmd 中输入以下命令:
curl --head example.com
下载后解压有三个文件,分别为证书文件 “www.example.com_public.crt”,chain 文件 “www.example.com_chain.crt”与 KEY 文件 “www.example.com.key” 。证书名可能不同,但总归 Apache 服务器对应的证书为这三个文件。
使用 xshell 远程连接服务器,首先进入容器:
docker ps # 列出所有容器名称与状态,找到 wordpress 容器对应名称
docker exec -it container_name /bin/bash # 进入 wordpress 容器
开启 SSL,并重启容器:
alenmod ssl # 开启 SSL,若没用试一下 a2enmod ssl
exit # 退出容器
docker restart container_name
重启后再次使用 exec 命令进入容器,安装 vim 和 lrzsz ,分别为文件编辑器与文件传输。
apt-get update
apt-get install vim
apt-get install lrzsz
在容器内进入 apache2 目录,使用 rz 命令上传三份证书文件:
cd /etc/apache2 # 进入 apache2 的默认目录,若不是请查找 apache2 文件夹位置
mkdir ssl # 创建 ssl 文件夹
cd ssl # 进入 ssl 文件夹下
rz # 呼出文件传输窗口并上传三份证书文件
cp /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-enabled/default-ssl.conf # 复制 default-ssl.conf 文件至 /etc/apache2/sites-enabled
vi /etc/apache2/sites-enabled/default-ssl.conf # 使用 vi 命令修改文件
按 i 进入修改模式,按照下图进行修改,修改完毕以后按 esc 退出修改,输入 “:wq!”保存并退出。

检查 apache2/sites-enabled 下是否有 default-ssl.conf,apache2/mods-enabled 下是否有 ssl.conf, ssl.load。若没有则从 sites-abailable 目录下 cp 复制过去。
增加 http 强制跳转 https
vi /etc/apache2/sites-available/000-default.conf # 打开该文件
在文件中增加以下配置
ServerAdmin webmaster@
DocumentRoot /var/www/html
<Directory "/var/www/html">
RewriteEngine on
RewriteBase /
# FORCE HTTPS
RewriteCond %{HTTPS} !=on
RewriteRule ^/?(.*) [https://%](https://%25/){SERVER_NAME}/$1 [R,L]
</Directory>

退出容器,并重启 docker
service docker restart
顺利的话,在浏览器中输入 “example.com” 便可直接进入 https 下的站点了。若目前顺利,在浏览器输入 “example.com/wp-admin” 打开 wordpress 后台,在设置中将 http 链接全部转换为 https 链接。
若不顺利的话,进入 wordpress 后台,进入插件栏,安装 “Easy HTTPS (SSL) Redirection” 插件,重启 wordpress。wordpress 中的插件还是很好用的。
