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

ops/2025/2/2 11:14:46/

本文是一个使用 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.htmllocation = /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,若部署成功你将看到你的网站。


http://www.ppmy.cn/ops/155018.html

相关文章

【实战篇章】深入探讨:服务器如何响应前端请求及后端如何查看前端提交的数据

文章目录 深入探讨:服务器如何响应前端请求及后端如何查看前端提交的数据一、服务器如何响应前端请求HTTP 请求生命周期全解析1.前端发起 HTTP 请求(关键细节强化版)2. 服务器接收请求(深度优化版) 二、后端如何查看前…

Git进阶之旅:Git 配置信息 Config

Git 配置级别: 仓库级别:local [ 优先级最高 ]用户级别:global [ 优先级次之 ]系统级别:system [ 优先级最低 ] 配置文件位置: git 仓库级别对应的配置文件是当前仓库下的 .git/configgit 用户级别对应的配置文件时用…

pytorch生成对抗网络

人工智能例子汇总:AI常见的算法和例子-CSDN博客 生成对抗网络(GAN,Generative Adversarial Network)是一种深度学习模型,由两个神经网络组成:生成器(Generator)和判别器&#xff0…

Linux抢占式内核:技术演进与源码解析

一、引言 Linux内核作为全球广泛使用的开源操作系统核心,其设计和实现一直是计算机科学领域的研究热点。从早期的非抢占式内核到2.6版本引入的抢占式内核,Linux在实时性和响应能力上取得了显著进步。本文将深入探讨Linux抢占式内核的引入背景、技术实现以及与非抢占式内核的…

C++,STL 简介:历史、组成、优势

文章目录 引言一、STL 的历史STL 的核心组成三、STL 的核心优势四、结语进一步学习资源: 引言 C 是一门强大且灵活的编程语言,但其真正的魅力之一在于其标准库——尤其是标准模板库(Standard Template Library, STL)。STL 提供了…

L30.【LeetCode笔记】设计链表

1.题目 707. 设计链表 - 力扣(LeetCode) 你可以选择使用单链表或者双链表,设计并实现自己的链表。 单链表中的节点应该具备两个属性:val 和 next 。val 是当前节点的值,next 是指向下一个节点的指针/引用。 如果是双向…

Pdf to forms如何实现?如何在3分钟内将PDF自动转换为Microsoft Forms

通过将杂乱的文件转换为标准化表单,简化数据收集——无需手动操作。 问题:为什么非标准文件会破坏您的工作流程 每天,企业和教育工作者都淹没在非结构化数据中:PDF报告、CSV导出或保存为TXT文件的手写笔记。手动将这些数据复制到…

使用pandas的read_excel()报错:

ImportError: Unable to import required dependencies: numpy: Error importing numpy: you should not try to import numpy from its source directory; please exit the numpy source tree, and relaunch your python interpreter from there. 问题原因&a…