Docker + Nginx 部署个人静态博客指南

本文是一个使用 Docker 和 Nginx 部署个人静态博客的指南。通过本指南,您可以快速了解如何使用 Docker 和 Nginx 部署自己的静态博客网站。

前提

在开始使用本指南之前,请具备以下前提:

  • 首先你得有个服务器
  • 服务器已经安装好Git、Vim等工具
  • 一份静态博客源码,本文以 Astro Air Blog 为例

步骤

第一步:安装 Docker

复制代码
sudo apt install docker

第二步:拉取 Nginx 镜像

复制代码
docker pull nginx

镜像名后不加版本号表示拉取最新版,若希望拉取指定版本则需在镜像名后加上tag,例如docker pull nginx:1.16

第三步:获取 Nginx 的配置文件

  • 先运行一个不挂载的 Nginx 容器

    复制代码
     docker run -d --name my-nginx -p 80:80 nginx

    -d:使容器在后台以守护进程模式运行。

    --name:为容器指定一个名称。

    -p 80:80:将Docker容器的80端口映射到主机的80端口,让你可以通过浏览器访问运行在容器内的 Nginx 服务器。80端口是HTTP服务,443端口是HTTPS服务。

  • 进入这个 Nginx 容器内部

    复制代码
     docker exec -it my-nginx bash

    -i:表示以交互式模式运行容器。

    -t:表示为容器分配一个伪终端。 因此-it表示使用交互式终端,允许在容器内交互式地运行命令。

    bash:表示使用Bash shell。

  • 了解 Nginx 的目录结构

Nginx 容器的部分目录结构如下图:

复制代码
/
├── etc/
│   └── nginx/
│       ├── nginx.conf
│       └── conf.d/
│           ├── default.conf
│           └── other.conf
├── var/
│   └── log/
│       └── nginx/
│						├── access.log
│						└── error.log
└── usr/
    └── share/
        └── nginx/
            ├── html/
            └── conf/

nginx.conf是 Nginx 主配置文件,用于设置全局的 Nginx 配置。

default.conf是 Nginx 的 server 的配置文件。这个文件中通常包含了 HTTP 或 HTTPS 服务器的基本配置信息,如监听端口、虚拟主机等。
access.log是 Nginx 的访问日志。

error.log是 Nginx 的错误日志。
/usr/share/nginx/ 目录用于存放 Nginx 的一些静态文件,我们通常把打包后的网站代码挂载到此处。

  • 退出容器

    按下ctrl + D或者输入exit 即可退出容器。

  • 复制容器内部的配置文件到服务器

    复制代码
    docker cp my-nginx:/etc/nginx/nginx.conf ~/nginx/nginx.conf
    docker cp my-nginx:/etc/nginx/conf.d ~/nginx/

    这样就不怕自己写的配置文件不标准而导致容器运行失败啦。

    简单分析一下这两个配置文件:

    复制代码
    cd ~
    vim nginx/nginx.conf

    先看nginx.conf

    复制代码
    user  nginx;
    worker_processes  auto;		# 指定 Nginx 使用的工作进程数,auto 表示 Nginx 会自动根据 CPU 核数设置合适的进程数
    
    error_log  /var/log/nginx/error.log notice;		# Nginx 错误日志文件的路径和日志级别,这里的日志级别为 notice,表示只记录警告级别及以上的日志
    pid        /var/run/nginx.pid;
    
    
    events {
       worker_connections  1024;
    }
    
    
    http {
       include       /etc/nginx/mime.types;
       default_type  application/octet-stream;
    
     	# 定义访问日志的格式
       log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                         '$status $body_bytes_sent "$http_referer" '
                         '"$http_user_agent" "$http_x_forwarded_for"';
    
       access_log  /var/log/nginx/access.log  main;	# 指定访问日志文件的路径和日志格式,日志格式为上面定义的 main 格式
    
       sendfile        on;		# 启用 sendfile 指令,加快文件传输速度
       #tcp_nopush     on;
    
       keepalive_timeout  65;	# 指定客户端连接保持时间的最大值。
    
       #gzip  on;
    
       include /etc/nginx/conf.d/*.conf;		# 加载 /etc/nginx/conf.d/ 目录下的所有以 .conf 结尾的配置文件
    }

    接着是default.conf

    复制代码
    server {
        listen       80;	# 监听 IPV4 的80端口
        listen  [::]:80;	# 监听 IPV6 的80端口
        server_name  111.222.111.222;		# 这里填入你的服务器地址
        #access_log  /var/log/nginx/host.access.log  main;
    
      	# location 指令用于匹配请求的 URL 路径,并设置对应的处理方式
      	# 简单的说就是当有客户端访问 http://111.222.111.222/ 时,Nginx 将会尝试在 			
      	# /usr/share/nginx/html 路径下查找 index.html 返回给客户端
        location / {
            root   /usr/share/nginx/html;		
            index  index.html index.htm;
        }
    
      	# error_page 指令定义了当服务器出现 500、502、503、504 错误时的处理方式
        error_page   500 502 503 504  /50x.html;	# 统一请求 /50x.html
        location = /50x.html {	# '='表示精确匹配,后面不可带参数。
            root   /usr/share/nginx/html;
        }
    }
  • 暂停并删除容器

    暂停容器:

    复制代码
    docker stop my-nginx

    删除容器:

    复制代码
    docker rm my-nginx

第四步:克隆静态博客源码

  • 克隆源码:

    复制代码
     git clone git@github.com:austin2035/astro-air-blog.git
  • 给你的博客源码改个名:

    复制代码
     mv astro-air-blog ~/blog
  • 进入项目目录:

    复制代码
     cd ~/blog

第五步:打包博客源码

  • 打包项目:
复制代码
npm run build

一定要打包后才再挂载,Nginx 只能解析 html 文件。

  • 查看打包后的文件:

    复制代码
    cd dist
    ls

    确保目录内存在 index.html 文件。

第六步:部署网站

  • 先创建一个日志目录:

    复制代码
    cd ~
    mkdir nginx/logs
  • 挂载目录并运行容器:

    复制代码
     docker run \
     -p 80:80 \
     --name my-nginx \
     -v ~/blog/dist:/usr/share/nginx/html \
     -v ~/nginx/nginx.conf:/etc/nginx/nginx.conf \
     -v ~/nginx/conf.d:/etc/nginx/conf.d \
     -v ~/nginx/logs:/var/log/nginx \
     -d nginx
  • 查看容器是否运行成功:

    复制代码
    docker ps

    若有my-nginx 这个镜像表示运行成功,若没有则表示 Docker 运行出错了,检查nginx.confdefault.conf文件语法是否存在错误。

第七步:测试网站

试在浏览器直接访问你的服务器IP,若部署成功你将看到你的网站。

相关推荐
木风小助理20 分钟前
PostgreSQL 的范式跃迁:从关系型数据库到统一数据平台
服务器·云原生·kubernetes
蜜獾云3 小时前
charles抓包原理
服务器·https·ssl
vortex53 小时前
Linux 处理以 Null 字节分隔内容的文件
linux·运维·服务器
人工智能训练3 小时前
Docker Desktop WSL 集成配置宝典:选项拆解 + 精准设置指南
linux·运维·服务器·人工智能·docker·容器·ai编程
遇见火星3 小时前
Linux 如何设置开机自启:全面指南!
linux·运维·服务器·systemd
玥轩_5214 小时前
OSPF路由协议单区域配置
服务器·网络·智能路由器·交换机·ospf·动态路由
小陈phd4 小时前
大语言模型实战(五)——大模型开发范式演进:从“调用API”到“多Agent复杂目标”
服务器·microsoft·语言模型
QQ__17646198245 小时前
SSH远程时找不到模块ModuleNotFoundError
linux·服务器·ssh
CHANG_THE_WORLD5 小时前
6.2.在汇编层面,数据本身没有类型
java·服务器·汇编
wangchen_05 小时前
Linux文件描述符定时器:timerfd系列接口
linux·运维·服务器