快速上手!使用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 rgzip_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;#支持IPV6listen  [::]: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 rgzip_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.mzph.cn/news/650517.shtml

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

相关文章

【学网攻】 第(9)节 -- 路由器使用以及原理

系列文章目录 目录 系列文章目录 文章目录 前言 一、路由器是什么? 二、实验 1.引入 总结 文章目录 【学网攻】 第(1)节 -- 认识网络【学网攻】 第(2)节 -- 交换机认识及使用【学网攻】 第(3)节 -- 交换机配置聚合端口【学网攻】 第(4)节 -- 交换机划分Vlan…

微信小程序(十三)生命周期-更新应用提醒

注释很详细,直接上代码 上一篇 新增内容: 1.onLaunch用法 2.onShow用法 3.onHide用法 4.应用更新API的调用模板 源码: App({//小程序初始化时触发,全局只触发一次onLaunch(option) {//可以获取场景值和启动参数,eg.opt…

【java面试】常见问题(超详细)

目录 一、java常见问题JDK和JRE的区别是什么?Java中的String类是可变的还是不可变的?Java中的equals方法和hashCode方法有什么关系?Java中什么是重载【Overloading】?什么是覆盖【Overriding】?它们有什么区别&#xf…

深入理解STM32中断处理机制

深入理解STM32中断及其使用方法(基于HAL库) STM32微控制器作为一款强大的嵌入式系统芯片,在各种应用中都需要使用中断来实现实时响应和处理各种事件。本文将深入讨论STM32中断的概念、HAL库的中断处理机制以及如何在STM32CubeMX中配置和使用…

【昕宝爸爸小模块】什么是POI,为什么它会导致内存溢出?

➡️博客首页 https://blog.csdn.net/Java_Yangxiaoyuan 欢迎优秀的你👍点赞、🗂️收藏、加❤️关注哦。 本文章CSDN首发,欢迎转载,要注明出处哦! 先感谢优秀的你能认真的看完本文&…

时间编程相关的API

1》time -- 获取日历时间 日历时间&#xff1a;1970年1月1日距离现在的秒数 #include <time.h> time_t time(time_t *timer): 获取当前的系统时间&#xff0c;并以time_t类型返回。 2》将日历时间转化为本地时间 localtime #include <time.h> struct tm *localtim…

【CentOS】Linux 文件权限与权限修改

目录 1、Linux 中的文件属性 2、如何修改文件属性与权限 3、目录权限与文件权限的区别 4、Linux 中的文件扩展名 用户与用户组是Linux文件权限的重要组成部分。 首先&#xff0c;一定要明确用户与用户组的概念&#xff1a; Linux 一般将文件可读写的身份分为三个类别&#…

亚马逊测评,完善的自养号系统需要具备哪些要求

在亚马逊等跨境电商平台的严格审查下&#xff0c;许多卖家和买家都遭到了封号。这些封号事件对依赖线上销售的小型卖家造成了巨大的冲击。我们发现大部分账号被封的原因在于底层环境搭建不当。 无论是在亚马逊还是其他跨境电商平台&#xff0c;如ebay、速卖通、虾皮、Lazada等…

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

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

顶顶通呼叫中心中间件利用自动外呼进入机器人的压力测试配置流程

文章目录 前言呼入进入机器人配置流程创建线路创建线路组呼入配置 创建自动外呼任务1. 实现“一端放音&#xff0c;另一端进入机器人”操作创建拨号方案—“模拟放音”呼叫路由—“internal”启用拨号方案—“模拟放音”队列外呼配置 2. 实现“两端都进入机器人”操作队列外呼配…

线扫相机使用教程

一.线扫相机的采集原理 在现有的工业 2D 相机中&#xff0c;主要有两种类型的相机&#xff0c;面阵相机和线扫相机。这两种相机有其 各自的特点。 面阵相机&#xff1a;主要用于采集较小尺寸的产品&#xff0c;特别是长度方向较小的产品。其采集原理是通过 单次或多次曝光&…

Docker容器操作 Docker创建并运行Nginx、Redis

容器操作的命令如图&#xff1a; 容器命令 # 创建并运行一个容器&#xff0c;运行成功后会返回容器id docker run# 暂停&#xff0c;将容器挂起&#xff0c;内存暂存&#xff0c;CPU不再执行 docker pause # 恢复运行&#xff0c;内存恢复&#xff0c;CPU恢复 docker unpause#…

【深度学习】sdxl中的 tokenizer tokenizer_2 区别

代码仓库&#xff1a; https://huggingface.co/stabilityai/stable-diffusion-xl-base-1.0/tree/main 截图&#xff1a; 为什么有两个分词器 tokenizer 和 tokenizer_2&#xff1f; 在仔细阅读这些代码后&#xff0c;我们了解到 tokenizer_2 主要是用于 refiner 模型的。 #…

12000 份发财红包封面免费送

发财红包封面又来啦 寓意新年加薪发财 两个红包封面&#xff0c;各6000份&#xff0c;共12000份 剩余额度全打光&#xff0c;够诚意吧 附送原图&#xff08;阿里通义万相生成&#xff09; 祝大家 春节快乐&#xff0c;新年涨薪发财 龙年行大运&#xff0c;万事皆如愿 使用说明 …

微信小程序(十七)自定义组件生命周期(根据状态栏自适配)

注释很详细&#xff0c;直接上代码 上一篇 新增内容&#xff1a; 1.获取手机状态栏的高度 2.验证attached可以修改数据 3.动态绑定样式数值 源码&#xff1a; myNav.js Component({lifetimes:{//相当于vue的created,因为无法更新数据被打入冷宫created(){},//相当于vue的mount…

Redis学习——入门篇④

Redis学习——入门篇④ 6. Redis集群&#xff08;cluster&#xff09;6.1 Redis集群是什么&#xff0c;能干什么6.2 Redis集群的槽位-分片6.2.1 槽位6.2.2 分片6.2.3 优点 6.3 slot槽位映射 分区&#xff0c;一般业界有 3 种解决方案6.3.1 哈希取余分区算法6.3.1.1 哈希取余分区…

JVM篇:垃圾回收

如何判断对象可以被回收 Java中对象能否被回收&#xff0c;是根据兑现是否被引用来决定的。如果对象被引用了&#xff0c;说明该对象还在使用&#xff0c;不允许被回收 main栈帧中demo变量存储着Demo实例对象的地址&#xff0c;与Demo实例对象建立了连接关系此时Demo实例对象可…

wsl下安装ros2问题: Unable to locate package ros-humble-desktop 解决方案

❗ 问题 在wsl&#xff08;Ubuntu 22.04版本&#xff09;下安装ros的过程中&#xff0c;在执行命令 $ sudo apt install ros-humble-desktop一直弹出报错&#xff1a;Unable to locate package ros-humble-desktop 前面设置编码和添加源的过程中一直没有出现其他问题&#…

游泳耳机入耳式好,还是骨传导好?游泳听音乐最好的耳机推荐

在游泳馆或海边&#xff0c;热爱游泳的人们在水中尽情畅游&#xff0c;享受着清凉的水流和游动的乐趣。为了让游泳体验更上一层楼&#xff0c;戴上专为游泳设计的耳机成为不可或缺的一环。游泳耳机不仅防水&#xff0c;还能让你在畅游的同时&#xff0c;尽情享受高质量的音乐&a…

Android Studio离线开发环境搭建

Android Studio离线开发环境搭建 1.下载离线和解压包2.创建工程3.创建虚拟机tips 1.下载离线和解压包 下载地址 百度网盘&#xff1a;https://pan.baidu.com/s/1XBPESFOB79EMBqOhFTX7eQ?pwdx2ek 天翼网盘&#xff1a;https://cloud.189.cn/web/share?code6BJZf2uUFJ3a&#…