云服务器容器化服务
Zane Lv4

前言

我的个人网站一直都是直接通过云服务器的 Nginx 服务进行反向代理提供出去的,虽然我对服务器端需求目前为止只有这一个对外提供的服务,但是为了方便以后的迁移以及维护,将所有服务都容器化达到以后迁移服务器时能够开箱即用的目的。

正文

本次主要围绕着个人主页的更新,我希望通过域名访问时能够先进入到个人主页的页面,再通过引导以及一些介绍跳转到其余服务。而在服务器的宿主机上,仅仅提供一个主要的 Nginx 路由功能即可。

个人主页

采用的主页是开源的「ZYYO666/homepage: 我的个人主页(github.com)」,对于更新与维护,一个稍微方便且更高效的方法:

  1. fork 出一个仓库到我的 github

  2. 修改完成以后 push

  3. 在从服务器端 pull

这样即便以后对服务器进行迁移也仅仅是需要简单配置一个 nginx.conf 以及 clone 下仓库代码就能直接使用,并且本地和远端都是有代码的备份的。

博客

对于博客的迁移,由于我原先的工作流已经算是比较适合迁移了「结合git+nginx将hexo部署到云服务器 | Czz’s Home (chenzheng.xyz)」,原有的方法是在本地写好文章以后,使用 Hexo 自带的 git 推送功能将静态资源直接部署到服务器。

那么这次对于博客的更新主要是服务端的容器化,除宿主机中的 Nginx 其余服务都由 Docker 容器中的 Nginx 服务管理,再由宿主机中的 Nginx 进行路由配置进而访问容器中的服务。

Docker 容器配置

Dockerfile 文件如下:

1
2
3
4
5
6
7
8
# 使用 Nginx 官方镜像作为基础镜像
FROM nginx
# 将当前文件夹下的 nginx.conf 复制到镜像的 /etc/nginx/ 目录中
COPY nginx.conf /etc/nginx/
# 暴露 80 端口
EXPOSE 80
# 启动 Nginx 服务
CMD ["nginx", "-g", "daemon off;"]

使用到了官方的 Nginx 镜像,构建完成后的运行运行脚本如下:

1
2
#!/bin/bash
docker run --name=hexo-nginx -v /var/hexo:/var/hexo -d -p 对外端口:服务端口 hexo-nginx

通过挂载宿主机的路径到容器中去。

而对于容器内的nginx配置就是简单的设置了根目录以及服务名。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
http {


server{
listen 对外端口(容器对宿主机);
server_name blog.chenzheng.xyz;
location / {
root /var/hexo/;
index index.html index.htm;
}
error_page 404 = /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}

Nginx 的路由配置

主服务器的 nginx 包括主页的服务端以及各个容器的路由配置,并且我对 nginx 加了 ssl 证书,不过并没有对泛域名进行认证,腾讯云的免费 ssl 证书只支持单域名,因此, nginx.conf 如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
http{
// 个人主页服务
server {
listen 对外端口;
server_name www.chenzheng.xyz chenzheng.xyz;
return 301 https://$server_name$request_uri;
}

server{
listen 443 ssl;
server_name www.chenzheng.xyz chenzheng.xyz;
include mime.types;
ssl_certificate /path/to/ssl_certificate.crt;
ssl_certificate_key /path/to/ssl_certificate_key.key;
location / {
root /home/git/my-blog-home/;
index index.html index.htm;
}
error_page 404 = /404.html;
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
// 容器内 Hexo 服务
server {
listen 80;
server_name blog.chenzheng.xyz;
return 301 https://$server_name$request_uri;
}

server{
listen 对外端口;
server_name blog.chenzheng.xyz;
ssl_certificate /path/to/ssl_certificate.crt;
ssl_certificate_key /path/to/ssl_certificate_key.key;
location / {
proxy_pass http://容器ip地址:容器内服务端口;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}

研发中…

除此之外,我还希望我的主页拥有一些其他服务,目前想到的由小型云盘、工具箱、图床等等。这些会在以后的需求中不断扩充。

参考

由 Hexo 驱动 & 主题 Keep