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.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.rhkb.cn/news/7116.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于神经网络的视频编码NNVC(1):帧内预测

在H.266/VVC发布后,基于传统编码框架提升压缩率越来越难,随着深度学习的发展,研究人员开始尝试将神经网络引入编码器。为此,JVET工作组在2020年成立AHG11小组来专门进行基于神经网络的视频编码的研究。 为了方便研究,工…

深入探究分布式日志系统 Graylog:架构、部署与优化

文章目录 一、Graylog简介二、Graylog原理架构三、日志系统对比四、Graylog部署传统部署MongoDB部署OS或者ES部署Garylog部署容器化部署 五、配置详情六、优化网络和 REST APIMongoDB 七、升级八、监控九、常见问题及处理 一、Graylog简介 Graylog是一个简单易用、功能较全面的…

寒假1.23

题解 web:[极客大挑战 2019]Secret File(文件包含漏洞) 打开链接是一个普通的文字界面 查看一下源代码 发现一个链接,点进去看看 再点一次看看,没什么用 仔细看,有一个问题,当点击./action.ph…

ORB-SLAM2源码学习:Initializer.cc⑧: Initializer::CheckRT检验三角化结果

前言 ORB-SLAM2源码学习:Initializer.cc⑦: Initializer::Triangulate特征点对的三角化_cv::svd::compute-CSDN博客 经过上面的三角化我们成功得到了三维点,但是经过三角化成功的三维点并不一定是有效的,需要筛选才能作为初始化地图点。 …

微信小程序1.1 微信小程序介绍

1.1 微信小程序介绍 内容提要 1.1 什么是微信小程序 1.2 微信小程序的功能 1.3 微信小程序使用场景 1.4 微信小程序能取代App吗 1.5 微信小程序的发展历程 1.6微信小程序带来的机会

STM32 GPIO配置 点亮LED灯

本次是基于STM32F407ZET6做一个GPIO配置,实现点灯实验。 新建文件 LED.c、LED.h文件,将其封装到Driver文件中。 双击Driver文件将LED.c添加进来 编写头文件,这里注意需要将Driver头文件声明一下。 在LED.c、main.c里面引入头文件LED.h LED初…

vulnhub靶场【kioptrix-3】靶机

前言 靶机:kioptrix-3,IP地址为192.168.1.74 攻击:kali,IP地址为192.168.1.16 都采用虚拟机,网卡为桥接模式 文章中涉及的靶机,来源于vulnhub官网,想要下载,可自行访问官网下载&a…

Cloudflare通过代理服务器绕过 CORS 限制:原理、实现场景解析

第一部分:问题背景 1.1 错误现象复现 // 浏览器控制台报错示例 Access to fetch at https://chat.qwenlm.ai/api/v1/files/ from origin https://ocr.doublefenzhuan.me has been blocked by CORS policy: Response to preflight request doesnt pass access con…

VMware虚拟机安装Linux系统(openKylin)

首先打开VMware Workstation,点击创建新的虚拟机。 进入虚拟机引导界面后,选择“典型”选项,点击下一步; 选择“稍后安装操作系统”,点击下一步; 客户机操作系统选择“Linux”,版本选择Ubuntu 6…

RabbitMQ 多种安装模式

文章目录 前言一、Windows 安装 RabbitMq1、版本关系2、Erlang2.1、下载安装 Erlang 23.12.2、配置 Erlang 环境变量 3、RabbitMQ3.1、下载安装 RabbitMQ 3.8.93.2、环境变量3.3、启动RabbitMQ 管理插件3.3、RabbitMQ3.4、注意事项 二、安装docker1、更新系统包:2、…

【Java-数据结构】Java 链表面试题上 “最后一公里”:解决复杂链表问题的致胜法宝

我的个人主页 我的专栏:Java-数据结构,希望能帮助到大家!!!点赞❤ 收藏❤ 引言: Java链表,看似简单的链式结构,却蕴含着诸多有趣的特性与奥秘,等待我们去挖掘。它就像一…

【0x03】HCI_Connection_Complete事件详解

目录 一、事件概述 二、事件格式及参数详解 2.1. HCI_Connection_Complete事件格式 2.2. 事件参数 2.2.1. Status 2.2.2. Connection_Handle 2.2.3. BD_ADDR 2.2.4. Link_Type 2.2.5. Encryption_Enabled 三、事件处理流程 3.1. 事件触发 3.2. 事件接收与解析 3.…

激活版,快速安装

每天开机都要等待很长时间,玩游戏或看视频时频繁卡顿,甚至偶尔还会莫名其妙地崩溃。这种情况几乎每个人都遇到过,真是让人头疼不已。 别担心,其实有一种方法可以让你的电脑恢复如新,让我们一起看看如何解决这些烦恼吧…

二叉树(了解)c++

二叉树是一种特殊的树型结构,它的特点是: 每个结点至多只有2棵子树(即二叉树中不存在度大于2的结点) 并且二叉树的子树有左右之分,其次序不能任意颠倒,因此是一颗有序树 以A结点为例,左边的B是它的左孩子,右边的C是…

C#标准Mes接口框架(持续更新)

前言 由于近期我做了好几个客户的接入工厂Mes系统的需求。但是每个客户的Mes都有不同程度的定制需求,原有的代码复用难度其实很大。所以打算将整个接入Mes系统的框架单独拿出来作为一个项目使用,同时因为不同的设备接入同一个Mes系统,所以代…

【Nacos】负载均衡

目录 前言 一、服务下线二、权重配置三、同一个集群优先访问四、环境隔离 前言 我们的生产环境相对是比较恶劣的,我们需要对服务的流量进行更加精细的控制.Nacos支持多种负载均衡策略,包括配置权重,同机房,同地域,同环…

嵌入式MCU面试笔记2

目录 串口通信 概论 原理 配置 HAL库代码 1. 初始化函数 2. 数据发送和接收函数 3. 中断和DMA函数 4. 中断服务函数 串口通信 概论 我们知道,通信桥接了两个设备之间的交流。一个经典的例子就是使用串口通信交换上位机和单片机之间的数据。 比较常见的串…

DDD该怎么去落地实现(1)关键是“关系”

DDD落地的关键是“关系” 这些年,我认为DDD走到了一个死胡同里了,因为落地实现过于困难。很多团队在经过一段时间的学习,清楚理解了DDD那些晦涩的概念,根据业务绘制出领域模型,这都不困难。但绘制领域模型不是我们最终…

RabbitMQ---面试题

常见面试题 1.MQ的作用及应用场景 类似问题:项目什么情况下用到了MQ,为什么要用MQ MQ的主要应用场景,消息队列的应用场景,为什么说消息队列可以削峰 首先MQ是一种用来接收和转发消息的队列,常见的应用常见如下&…

PaddleSeg 从配置文件和模型 URL 自动化运行预测任务

git clone https://github.com/PaddlePaddle/PaddleSeg.git# 在ipynb里面运行 cd PaddleSegimport sys sys.path.append(/home/aistudio/work/PaddleSeg)import os# 配置文件夹路径 folder_path "/home/aistudio/work/PaddleSeg/configs"# 遍历文件夹,寻…