前言
我的个人网站一直都是直接通过云服务器的 Nginx 服务进行反向代理提供出去的,虽然我对服务器端需求目前为止只有这一个对外提供的服务,但是为了方便以后的迁移以及维护,将所有服务都容器化达到以后迁移服务器时能够开箱即用的目的。
正文
本次主要围绕着个人主页的更新,我希望通过域名访问时能够先进入到个人主页的页面,再通过引导以及一些介绍跳转到其余服务。而在服务器的宿主机上,仅仅提供一个主要的 Nginx 路由功能即可。
个人主页
采用的主页是开源的「ZYYO666/homepage: 我的个人主页(github.com)」,对于更新与维护,一个稍微方便且更高效的方法:
fork 出一个仓库到我的 github
修改完成以后 push
在从服务器端 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
| FROM nginx
COPY nginx.conf /etc/nginx/
EXPOSE 80
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{ 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; } } server { listen 80; server_name blog.chenzheng.xyz; return 301 https: }
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: proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } }
|
研发中…
除此之外,我还希望我的主页拥有一些其他服务,目前想到的由小型云盘、工具箱、图床等等。这些会在以后的需求中不断扩充。
参考