快速上手!使用Docker和Nginx部署Web服务的完美指南

news2024/9/28 17:23:07

前言

        Docker是一种容器化技术,它可以将应用程序及其依赖项打包到一个独立的、可移植的容器中。这意味着开发人员可以在任何环境中轻松部署和运行他们的应用程序,而无需担心环境差异和依赖问题。而Nginx则是一款高性能的Web服务器和反向代理服务器,它可以处理大量并发请求并提供高可用性和负载均衡。Docker+Nginx是一种高效、灵活且可扩展的解决方案。

        在当今快速发展的技术领域,C/C++、云原生、人工智能等前沿技术正引领着软件工程的发展。作为后端开发人员,掌握Java、JavaScript、PHP、Python等编程语言是必不可少的。同时,结合云原生的理念,将应用程序容器化部署,能够更好地适应云环境的动态性和弹性需求。使用Docker和Nginx可以帮助开发团队实现快速部署和持续集成,提高开发效率和代码质量。

目录

​编辑

前言

准备工作

Docker环境安装

部署Web应用

1.拉取nginx镜像

2.创建挂载目录

​编辑

3.创建容器并挂载目录

创建容器

复制容器配置文件到宿主机

删除容器,启动容器并挂载目录

4.修改配置文件

5.上传web文件到挂载目录中

6.访问网页测试

域名配置

域名购入

设置DNS解析

Nginx配置监听域名

SSL证书配置

为什么要配置SSL证书

申请SSL证书

配置SSL证书

总结


准备工作

Docker环境安装

 这里简单讲述下docker的安装,可以通过官方提供的安装脚本安装

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

如果因为网络问题无法正常安装,也可以使用国内 daocloud 一键安装命令

curl -sSL https://get.daocloud.io/docker | sh

启动docker

sudo systemctl start docker

这里推荐个比较好用的面板1Panel,我拿到云服务器后一般习惯先装个1Panel,他安装的同时也会把Docker 和Docker Compose安装好,还是很方便的

部署Web应用

1.拉取nginx镜像

这里我们可以直接拉取最新版本

docker pull nginx

2.创建挂载目录

接下来我们创建容器的挂载目录文件夹,主要有三个目录,目录位置可根据自己的习惯调整

  • nginx_logs :日志文件目录
  • nginx_conf :配置文件目录
  • nginx_web :项目文件目录(这里可以存放web文件)
mkdir /root/nginx_conf
mkdir /root/nginx_logs
mkdir /root/nginx_web

授权文件夹,防止nginx操作文件夹权限不足

chmod 777 /root/nginx_conf
chmod 777 /root/nginx_logs
chmod 777 /root/nginx_web

3.创建容器并挂载目录

        挂载操作会直接将两个文件夹内容同步,若是直接用宿主机的空文件夹直接挂载到容器内部的配置文件目录上,会造成nginx容器配置文件目录被同步为空文件夹,进而导致容器启动失败。故我们需要先启动一遍容器,将初始配置拷贝出来。

创建容器

docker run -itd --name nginx -p 80:80  nginx

复制容器配置文件到宿主机

docker cp nginx:/etc/nginx /root/nginx_conf

这样就完成了配置文件的复制

删除容器,启动容器并挂载目录

这里的-v参数挂载目录记得检查一下路径是否有误

docker rm -f nginx
docker run -itd --name nginx -p 80:80 -v /root/nginx_web:/var/www/html -v /root/nginx_conf/nginx:/etc/nginx -v /root/nginx_logs:/var/log/nginx nginx

4.修改配置文件

到挂载的配置文件夹/root/nginx_conf/conf.d下,修改default.conf,或者新建conf文件,在这个目录下,conf后缀的文件都会被读取为配置文件(因为/root/nginx_conf/nginx.conf中配置了include)

示例配置文件内容如下

server{
    #监听的端口号
    listen 80;
    #要监听的服务器地址,域名也可行,根据实际情况修改
    server_name 154.111.111.111;
    client_max_body_size 20m;
    access_log /var/log/nginx/host.access.log main;
     #开启gzip功能(这段可选,如果web界面资源有压缩格式文件可开启)
  	gzip on; 
  	#开启gzip静态压缩功能
  	gzip_static on; 
  	#gzip缓存大小
  	gzip_buffers 4 16k;
  	#gzip http版本
  	gzip_http_version 1.1;
  	#gzip 压缩级别 1-10 r
  	gzip_comp_level 5;
  	#gzip 压缩类型
  	gzip_types text/plain application/javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
  	#配置禁用gzip条件,支持正则。此处表示ie6及以下不启用gzip(因为ie低版本不支持
  	gzip_disable   "MSIE [1-6]\.";
    #前端,根据实际情况修改
	location / {
		# 项目地址,这里指的是nginx容器的地址
        root   /var/www/html/luckysj;
		try_files $uri $uri/ /index.html?s=$uri&$args;
		# 默认访问的资源
        index index.html index.htm index.php;
        
    }
    
    # 错误网页配置
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

5.上传web文件到挂载目录中

将你的web文件上传到/root/nginx_web这个目录中,如下

重启nginx容器,使配置生效

docker restart nginx

6.访问网页测试

可通过ip+nginx设置的监听端口来访问Web服务,如http://1.1.1.231:80

若报错或者启动失败,可查看日志排除错误

docker logs nginx

域名配置

接下来我们讲解如何配置域名,让我们能通过域名(如www.baidu.com)访问自己的网站

域名购入

域名购入的话可以去腾讯云,便宜的域名几块钱可以买一年

设置DNS解析

购买域名后还不能直接使用,需要设置DNS解析,将域名指向我们的服务器Ip

输入Ip并保存解析

一般来说,成功设置解析后几分钟就会正常生效,可以尝试通过ping 域名来确定是否成功解析

Nginx配置监听域名

这里只要把我们上面的配置中的server_name从ip改成我们的域名就可以了

    #监听的端口号
    listen 80;
    #要监听的服务器地址,域名也可行,根据实际情况修改
    server_name 你的域名;

重启nginx容器,使配置生效,就可通过域名访问网站啦~

docker restart nginx

SSL证书配置

为什么要配置SSL证书

        当我们没有配置SSL证书访问网页时,会发现地址栏左边会提示不安全,这是由于http明文方式传输缺乏安全性,谷歌等主流浏览器也会对没有安装SSL证书的网站显示“不安全”。

        故我们需要配置SSL证书,从Http请求访问网站改为Https请求访问网站。

申请SSL证书

        申请SSL证书可以去阿里云免费申请SSL证书。一年可以申请20次,每次申请的证书有效期为三个月,也够个人使用了。

 申请SSL证书成功后,我们可下载该SSL证书的pem/key文件

上传pem/key文件到服务器上,比如我上传的位置为/root/nginx_conf/ssl目录下

配置SSL证书

修改Nginx配置,转发80端口请求,转发至443端口

#以下为启用SSL证书的配置
server {
    listen       80;
    #支持IPV6
    listen  [::]:80;
    server_name  你的域名;

    client_max_body_size 20m;

    access_log /var/log/nginx/host.access.log main;

     #开启gzip功能
  	gzip on; 
  	#开启gzip静态压缩功能
  	gzip_static on; 
  	#gzip缓存大小
  	gzip_buffers 4 16k;
  	#gzip http版本
  	gzip_http_version 1.1;
  	#gzip 压缩级别 1-10 r
  	gzip_comp_level 5;
  	#gzip 压缩类型
  	gzip_types text/plain application/javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;
  	#配置禁用gzip条件,支持正则。此处表示ie6及以下不启用gzip(因为ie低版本不支持
  	gzip_disable   "MSIE [1-6]\.";
  	
    rewrite ^(.*) https://$server_name$1 permanent;

}

443端口监听配置如下,主要注意的地方为ssl_certificate和ssl_certificate_key要改成你的文件名

server {
    listen       443 ssl;
    server_name  www.luckysj.online;

    ssl_certificate      /etc/nginx/ssl/你的pem文件;
    ssl_certificate_key  /etc/nginx/ssl/你的key文件;

    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;

    #自定义设置使用的TLS协议的类型以及加密套件(以下为配置示例,请您自行评估是否需要配置)
    #TLS协议版本越高,HTTPS通信的安全性越高,但是相较于低版本TLS协议,高版本TLS协议对浏览器的兼容性较差。
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;

    #表示优先使用服务端加密套件。默认开启
    ssl_prefer_server_ciphers on;

     location / {
        # 项目地址,这里指的是nginx容器的地址
        root   /var/www/html/luckysj;
		try_files $uri $uri/ /index.html?s=$uri&$args;
		# 默认访问的资源
        index index.html index.htm index.php;
    }
    
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}

重启nginx容器,通过域名访问网站就会发现请求自动变为https啦~

这里需要注意的是,如果你web服务改为了Https请求,那么web服务请求后端也需要通过Https协议,也就是后端服务也需要配置SSL证书服务(可通过nginx反向代理实现,这里就不细讲啦)

总结

        本文简单的介绍了如何使用Docker和Nginx来部署和管理Web服务,以及域名与SSL证书的配置,感谢您的观看,有帮助就多多三连吧~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1414266.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

银行数据仓库体系实践(11)--数据仓库开发管理系统及开发流程

数据仓库管理着整个银行或公司的数据,数据结构复杂,数据量庞大,任何一个数据字段的变化或错误都会引起数据错误,影响数据应用,同时业务的发展也带来系统不断升级,数据需求的不断增加,数据仓库需…

渲染农场哪家好?渲染农场怎么用?

渲染农场也可以叫做分布式并行集群计算系统,这是一种利用现成的CPU、以太网和操作系统构建的超级计算机,它使用主流的商业计算机硬件设备达到或接近超级计算机的计算能力,提供动画、电影、视觉效果以及建筑可视化等渲染服务。 渲染农场哪家…

高防服务器、高防 IP、安全SCDN该如何选择

在日常遇到各种问题中,如果让网络运营人员选择一个自己觉得最让人头痛的是什么问题的话,那么在各种问题中,网络攻击问题无疑名列前茅。一旦业务遭受网络攻击,所面临的损失可能是无法估量的。那有什么解决方案可以有效地防御网络攻…

Linux - 数据流重定向、管道符、环境变量配置文件的加载

概述 想了解Linux编程,shell脚本是绕不开的关键知识点,原计划写一个整篇来分享shell的来龙去脉,但知识点过于繁杂,先分享一下学习shell的准备工作,数据流重定向、管道符、环境变量配置文件的加载,有助于知…

零基础学习数学建模——(三)数学建模备赛要点

本篇博客将详细介绍数学建模备赛要点。 如何学习数学建模 本人曾经担任过学校建模协会的学生教练,经常和各种专业各个年级的学生在一起沟通、聊天。从个人角度来看,我将选择数学建模这条路的人大致分为三类: 1、没有明确目的。这类人选择数…

6.2第三次作业

综合练习:请给openlab搭建web网站 网站需求: 1.基于域名www.openlab.com可以访问网站内容为welcome to openlab!!! 2.给该公司创建三个子界面分别显示学生信息,教学资料 和缴费网站,基于,www.openlab.com/data网站…

16.计划任务服务程序

计划任务分为一次性计划任务与长期性计划任务 一次性任务 一次性计划任务只执行一次,一般用于临时的工作需求。 at 可以用at命令实现这种功能,只需要写成"at 时间"的形式就行 如果想要查看已设置好但还未执行的一次性 计划任务&#xff0…

统计学-R语言-8.2

文章目录 前言双因子方差分析数学模型主效应分析交互效应分析正态性检验 绘制3个品种产量数据合并后的正态Q-Q图(数据:example8_2)练习 前言 本篇将继续介绍方差分析的知识。 双因子方差分析 考虑两个类别自变量对数值因变量影响的方差分析…

JavaScript模块系统入门教程

🧑‍🎓 个人主页:《爱蹦跶的大A阿》 🔥当前正在更新专栏:《VUE》 、《JavaScript保姆级教程》、《krpano》、《krpano中文文档》 ​ 目录 ✨ 前言 ✨ 正文 一、模块 (Module) 简介 什么是模块 导出与导入 默…

uniapp导入uView组件库

目录 准备工作 1. 新建一个项目 2. 导入uview组件库 3. 关于SCSS 配置步骤 1. 引入uView主JS库 2. 在引入uView的全局SCSS 3. 引入uView基础样式 4. 配置easycom组件模式 添加效果实验运行即可成功 准备工作 1. 新建一个项目 2. 导入uview组件库 在进行配置之前&#x…

防御保护---安全策略

文章目录 目录 一.安全策略概述 概述: 安全策略的作用: 安全策略与传统防火墙的区别 二.案例分析 练习 一.安全策略概述 概述: 防火墙安全策略的作用在于加强网络系统的安全性,保护网络免受恶意攻击、非法访问和数据泄露的威胁。…

postman对接口进行加密解密——实战案例

背景 我们在使用postman进行接口测试的时候,尤其是对整个项目主流程的接口化测试,往往会涉及到接口的加密解密。如:在登录的时候,我们可能需要针对密码进行加密传输才能成功调用接口,那么这种情况该如何处理呢&#x…

从零开发短视频电商 Tesseract OCR识别增强

文章目录 概要图像预处理阶段默认反转图像重新缩放二值化噪音消除膨胀/腐蚀旋转/偏移校正边框缺少边框边框太大扫描边框去除 透明度/Alpha通道 引擎处理阶段语言模型配置提高识别速度词典、单词列表和模式表格识别 使用 Tesseract OCR 的 GUI 和其他项目 原文如下: …

《动手学深度学习(PyTorch版)》笔记4.7

Chapter4 Multilayer Perceptron 4.7 Forward/Backward Propagation and Computational Graphs 本节将通过一些基本的数学和计算图,深入探讨反向传播的细节。首先,我们将重点放在带权重衰减( L 2 L_2 L2​正则化)的单隐藏层多层…

【docker】linux系统docker的安装及使用

一、docker应用的安装 1.1 安装方式 Docker的自动化安装,即使用提供的一键安装的脚本,进行安装。 官方的一键安装方式:curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun 国内 daocloud一键安装命令:curl -s…

VSCode Debug 参数设置说明

如果想在vscode中debug一个项目,比如python3 run.py --args 这个时候你需要着重关注几个参数,参数用两个双引号分开,不能有空格。 cwd :运行代码的基础目录env: 设置环境变量 PYTHONPATH: 设置项目用到的模块搜索路径&#xff…

数学建模论文笔记

一、概述 1. 数学建模论文组成 论文电子版:摘要页、正文、参考文献、附录支撑材料:源程序代码以及调用说明、中间结果、支撑数据等首页:论文题目、摘要、关键词论文正文:问题重述、问题分析、模型假设、符号说明、模型建立与求解…

@JsonIgnore的使用及相关问题的解决

目录 1 前言 2 对比及其使用方法 3 遇到的相关问题及解决方法 1 前言 在我们编写的后端项目中,有时候可能需要将某个实体类以JSON格式传送给前端,但是其中可能有部分内容我们并不想传送,这时候我们选择将这部分内容变成Null,这…

响应式Web开发项目教程(HTML5+CSS3+Bootstrap)第2版 例5-1事件处理

代码 <!doctype html> <html> <head> <meta charset"utf-8"> <title>事件处理</title> </head><body> <input id"btn" type"button" name"btn" value"提交" /> <…

Backtrader 文档学习-Bracket Orders

Backtrader 文档学习-Bracket Orders 1. 概述 组合订单类型是一个非常宽泛的订单类别&#xff0c;只要brokder支持的订单类型都可以&#xff0c; 包括(Market, Limit, Close, Stop, StopLimit, StopTrail, StopTrailLimit, OCO)。 该功能用于回测&#xff0c;交互broker Brac…