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

前言

        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.mfbz.cn/a/351327.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Chapter 8 - 1. Congestion Management in TCP Storage Networks

This chapter covers the following topics. 本章包括以下主题。 Understanding congestion in TCP storage networks. Detecting congestion in TCP storage networks. Traffic patterns with iSCSI and NVMe/TCP and correlation with network congestion. Preventing co…

Javaweb之SpringBootWeb案例之阿里云OSS服务集成的详细解析

2.3.3 集成 阿里云oss对象存储服务的准备工作以及入门程序我们都已经完成了,接下来我们就需要在案例当中集成oss对象存储服务,来存储和管理案例中上传的图片。 在新增员工的时候,上传员工的图像,而之所以需要上传员工的图像&…

C++版QT:分割窗口

目录 mainwindow.h mainwindow.cpp main.cpp Qt的分割窗口功能允许用户将一个窗口分割成多个区域,每个区域可以独立地显示不同的内容。这种功能在许多应用程序中非常有用,例如编辑器、浏览器和IDE等。 理解Qt的分割窗口,需要从以下几个方面…

SQL注入流程与常用语句

FLAG:别来我梦里了,我已负担不起醒来的失落 专研方向: Mysql,sql注入 每日emo:好久不见,寒暄几句,缺耗尽了半生的勇气 欢迎各位与我这个菜鸟交流学习 SQL注入流程与常用语句 1、判断注入类型,数…

华为三层交换机之基本操作

Telnet简介 Telnet是一个应用层协议,可以在Internet上或局域网上使用。它提供了基于文本的远程终端接口,允许用户在本地计算机上登录到远程计算机,然后像在本地计算机上一样使用远程计算机的资源。Telnet客户端和服务器之间的通信是通过Telnet协议进行的…

element-UI上传文件后valid提示不消失

问题描述&#xff1a;上传文件完成后&#xff0c;必填信息提示不消失 解决方法&#xff1a;在<el-form-item>标签添加show-message属性&#xff0c;字段为空时才显示提示信息 <el-form-item :prop"fileList" :show-message"!form.fileList || !form.f…

web服务和前端交互相关的上中游业务技术知识点梳理

文章目录 前言一、业务API网关鉴权Cookie Session 实现 API 鉴权API Key API Secrettoken 机制实现 API 鉴权 二、Tomcat、Servlet、SpringMVC总结 前言 可能之前在学校里面做的很多东西是纯后端的&#xff0c;不会涉及到太多和前端交互的细节&#xff0c;很多新手对前后端交…

MR image smoothing or filtering 既 FWHM与sigma之间的换算关系 fslmaths -s参数

这里写目录标题 FWHM核高斯核中的sigma是有一个换算公式&#xff1a;结果 大量的文献中都使用FWHM 作为单位&#xff0c;描述对MR等数据的平滑&#xff08;smoothing&#xff09;或者滤波&#xff08;filtering&#xff09;过程。FWHM 通常是指full width at half maximum的缩写…

你是在思考,还是找认同?

这两天&#xff0c;有一篇批判腾讯的文章&#xff0c;开始在互联网圈子里流传开来。 我身边也有人在传播。好奇瞅了下&#xff0c;观察到一个很有意思的地方&#xff1a; 赞同这篇文章的&#xff0c;往往也都是平时那些认为&#xff0c;腾讯面对阿里和字节的冲击岌岌可危的&…

配置dns主从服务器,实现正反向解析

一、安装bind服务 yum install bind -y二、修改主配置文件/etc/named.conf 三、配置数据配置文件/var/named/baidu 四、重启服务&#xff0c;进行测试 systemctl restart named

南昌市青山湖、滕王阁、洛阳路隧道FM调频广播集群通信调度系统应用案例

一、用户需求 青山湖隧道&#xff0c;是南昌市一条东西走向的城市主干道&#xff0c;隧道为双向6车道&#xff0c;长1070米&#xff0c;其中湖底暗埋段为550米&#xff0c;净高5.45米&#xff0c;两孔每孔净宽12.4米。 滕王阁隧道是南昌市沿江北大道与沿江中大道连通工程&#…

【代码随想录-数组】移除元素

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老导航 檀越剑指大厂系列:全面总结 jav…

案例分享 | 助力数字化转型:嘉为科技项目管理平台上线

嘉为科技项目管理平台&#xff08;一期&#xff09;基于易趋&#xff08;EasyTrack&#xff09;进行实施&#xff0c;通过近一年的开发及试运行&#xff0c;现已成功交付上线、推广使用&#xff0c;取得了良好的应用效果。 1.关于广州嘉为科技有限公司&#xff08;以下简称嘉为…

JRT执行SQL脚本

我们可能会从其他库导入表到JRT要支持的库里。或者用其他语言生成导表SQL来让JRT执行SQL创建表和导入数据&#xff0c;为此需要一个能运行SQL脚本文件的脚步。 脚本示例&#xff0c;这个是用JRT的M生成迁移表SQL生成的&#xff1a; 导入SQL的脚本&#xff1a; import JRTBL…

Docker深入解析:从基础到实践

Docker基础知识 Docker是什么&#xff1a;定义和核心概念解释 Docker是一个开源项目&#xff0c;它诞生于2013年&#xff0c;旨在自动化应用程序的部署过程&#xff0c; 让应用程序能够在轻量级的、可移植的、自给自足的容器中运行。这些容器可以在几乎任何机器上运行&#xf…

Task04:DDPG、TD3算法

本篇博客是本人参加Datawhale组队学习第四次任务的笔记 【教程地址】https://github.com/datawhalechina/joyrl-book 【强化学习库JoyRL】https://github.com/datawhalechina/joyrl/tree/main 【JoyRL开发周报】 https://datawhale.feishu.cn/docx/OM8fdsNl0o5omoxB5nXcyzsInGe…

js中字符串string,遍历json/Object【匹配url、邮箱、电话,版本号,千位分割,判断回文】

目录 正则 合法的URL 邮箱、电话 字符串方法 千位分割&#xff1a;num.slice(render, len).match(/\d{3}/g).join(,) 版本号比较 判断回文 json/Object 遍历 自身属性 for...inhasOwnProperty(key) Object.获取数组(obj)&#xff1a;Object.keys&#xff0c;Object…

ENVI下基于知识决策树提取地表覆盖信息

基于知识的决策树分类是基于遥感影像数据及其他空间数据,通过专家经验总结、简单的数学统计和归纳方法等,获得分类规则并进行遥感分类。分类规则易于理解,分类过程也符合人的认知过程,最大的特点是利用的多源数据。 决策树分类主要的工作是获取规则,本文介绍使用CART算法…

10 个能恢复硬盘丢失文件的数据恢复软件

用于从计算机、外部硬盘驱动器、USB 闪存驱动器、存储卡或其他存储设备恢复丢失、删除或损坏的数据的软件称为数据恢复软件。该软件会在存储设备中搜索丢失或损坏的文件的痕迹&#xff0c;然后再尝试恢复它们。 导致数据丢失或损坏的原因有多种&#xff0c;包括硬件故障、格式…

【论文笔记】《Learning Deconvolution Network for Semantic Segmentation》

重要说明&#xff1a;严格来说&#xff0c;论文所指的反卷积并不是真正的 deconvolution network 。 关于 deconvolution network 的详细介绍&#xff0c;请参考另一篇博客&#xff1a;什么是Deconvolutional Network&#xff1f; 一、参考资料 Learning Deconvolution Netwo…
最新文章