快速上手!使用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证书的配置,感谢您的观看,有帮助就多多三连吧~

原文地址:https://blog.csdn.net/qq_35716689/article/details/135833403

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


linux常用进程通信方式包括管道(pipe)、有名管道(FIFO)、信号(signal)、消息队列、共享内存、信号量、套接字(socket)。管道用于具有亲缘关系的进程间通信,有名管道的每个管道具有名字,使没有亲缘关系的进程间也可以通信。信号是比较复杂的通信方式,用于通知接受进程有某种事件发生,除
Linux性能观测工具按类别可分为系统级别和进程级别,系统级别对整个系统的性能做统计,而进程级别则具体到进程,为每个进程维护统计信息。

按实现原理分,可分为基于计数器和跟踪以及剖析。含义如下:

计数器:内核维护的统计数据,通常为无符号整型,用于对发生的事件计数,比如,网络包接收计数器,磁
本文详细介绍了curl命令基础和高级用法,包括跳过https的证书验证,详细追踪整个交互过程,可用于调用网络后端接口,诊断http和https网络服务故障。
本文包含作者工作中常用到的一些命令,用于诊断网络、磁盘占满、fd泄漏等问题。命令包括ping、fping、tcpdump、lsof、netstat、/proc/$pid/fd、du、grep、traceroute、dig。
linux的平均负载表示运行态和就绪态及不可中断状态(正在io)的进程数目,用uptime查看到负载很高,既有可能是CPU利用率高,也可能是大量在等待io的进程导致,用mpstat查看每个CPU的使用情况,查看CPU的使用率或者CPU花在等待io的时间,接着用pidstat定位具体的进程
CPU上下文频繁切换会导致系统性能下降,切换分为进程切换、线程切换及中断切换,进程切换的开销较大,除了需要保存寄存器和程序计数器中的值还需保存全局变量、栈等到内存中,以便下次运行恢复,而同一进程中的线程切换开销会小很多,只需更新寄存器和线程独有的栈,共享资源如打开的文件、全局变量等无需切换,当硬件中
1.top命令 作用:该命令可以按CPU使用.内存使用和执行时间对任务进行排序,常用来监控系统中占用CPU或内存较高的程序及CPU和内存的负载。 默认视图: 当想看系统负载时,可观察汇总的%CPU中的us用户进程和sy系统进程是否占用CPU很高,相加接近100%就说明占用很高了,有些程序可能得不到及
文章浏览阅读1.8k次,点赞63次,收藏54次。Linux下的目录权限!!!粘滞位!!!超详解!!!
文章浏览阅读1.6k次,点赞44次,收藏38次。关于Qt的安装、Windows、Linux、MacBook_mack book 安装qt
本文介绍了使用shell脚本编写一个 Hello
文章浏览阅读1.5k次,点赞37次,收藏43次。【Linux】初识Linux——了解操作系统的发展历史以及初次体验Linux编程环境
文章浏览阅读3k次,点赞34次,收藏156次。Linux超详细笔记,个人学习时很认真的记录的,觉得好的麻烦点个赞。
文章浏览阅读6.8k次,点赞109次,收藏114次。【Linux】 OpenSSH_9.3p1 升级到 OpenSSH_9.5p1(亲测无问题,建议收藏)_openssh_9.5p1
文章浏览阅读3.5k次,点赞93次,收藏78次。初识Linux中的线程,理解线程的各种概念,理解进程地址空间中的页表转换,介绍pthread线程库并理解线程库!
文章浏览阅读863次。出现此问题为Linux文件权限问题,解决方案为回到引擎目录执行命令。输入用户密码后运行./UnrealEditor。_increasing per-process limit of core file size to infinity.
文章浏览阅读2.9k次。使用文本编辑器:打开CSV文件,并使用文本编辑器(如Notepad++、Sublime Text、Visual Studio Code等)来查看文件的字符编码格式。通常在编辑器的底部状态栏或设置中可以找到当前编码的显示。请注意,上述方法并非绝对准确,特别是当文件没有明确的编码标识时。因此,如果你发现CSV文件在不同的工具或方法中显示不同的编码格式,可能需要进行进一步的分析和判断,或者尝试使用不同的编码转换方法。该命令将输出文件的MIME类型和编码信息。使用命令行工具:在命令行中,你可以使用。_shell读取csv文件逐行处理
本文介绍了如何在Linux系统中升级gcc版本,以便更好地支持C++11及以上版本的新特性。通过升级gcc,可以提升编译器的功能和性能,获得更好的开发体验。详细的步骤和方法请参考原文链接。
文章浏览阅读4.4k次,点赞6次,收藏19次。Mosquitto是一个开源的MQTT消息代理服务器。MQTT是一个轻量级的、基于发布/订阅模式的消息传输协议。 mosquitto的安装使用比较简单,可以方便的来进行一些测试。_linux mosquitto
文章浏览阅读7.2k次,点赞2次,收藏12次。Linux中,用于根目录下有一个.ssh目录,保存了ssh相关的key和一些记录文件。_~/.ssh/
文章浏览阅读4.5k次,点赞5次,收藏18次。首先需要安装 snmp ,使用下面的命令进行安装安装完毕之后,使用下面的命令查看是否安装成功当命令行显示如图即为安装成功。_snmp工具