nginx+docker+ssl部署一个https网站
学期末,学习了 docker 这个技术,发现很方便,通过一段时间的折腾,自己对于 linux 操作系统越发的“熟悉”起来了,打算重置自己的云服务器(因为之前太乱了),各种软件都往服务器里面塞,实际上服务器也没什么服务,仅仅有一个自己的博客网站,很多都是不必要的。所以计划进行一次“大扫除”。
准备工作
既然是真实部署上线的东西,就需要准备购买:域名、ssl 证书、云服务器。
这里我使用的是阿里云的 ecs,安装的操作系统是 ubuntu,因为博主对 ubuntu 比较熟悉。
域名备案、ssl 证书购买请自行查看阿里云官方文档。
docker 安装
1 | 下载并执行使用阿里云镜像源的安装脚本 |
安装完 docker 之后在终端输入 docker info
看到如下信息,说明已经安装成功了。
nginx 镜像
通常来说,拉取镜像的速度大概率会很慢,除非你的服务器在国外。但也无妨,可以配置加速镜像。
先看看有没有 daemon.json 文件。
我这边已经有了,这个文件主要是 docker 的一些配置。更多的请查看 docker 的官网。
这个文件里面目前我只配置了镜像加速的地址,如下:
1 | {"registry-mirrors": ["https://docker.1ms.run"]} |
镜像拉取并启动容器
现在拉取一个 nginx 镜像就行了。在终端输入docker pull nginx:latest
然后启动一个 nginx 容器
1 | docker run -d -p 80:80 --name nginx nginx:latest |
这里得确保容器的 STATUS 是 up
状态
这个时候如果不出意外的话,访问服务器 ip
就能看到一个 nginx 的欢迎页面了。如果一直在转圈圈,去阿里云控制台的 ecs 的管理界面,把端口给打开。
btw,后续你要在服务器上面对外暴露服务也是要在这里打开的。
nginx 数据卷设置
数据当然需要备份,为了方便后续的日志监控、数据迁移。
先创建我们的 docker 容器数据卷
1 | mkdir -p /root/data/nginx/conf # nginx配置文件 |
为了方便后续数据卷的挂载,先从默认的 nginx 容器里面拷贝出一些东西。
1 | docker cp nginx:/etc/nginx/nginx.conf /root/data/nginx/conf #nginx主配置文件 |
一些说明
**nginx.conf**
** 文件**:是 Nginx 的主配置文件,它负责定义 Nginx 服务器的全局设置和核心配置。这些设置影响着整个 Nginx 服务的基本运行环境,包括用户、工作进程数、错误日志路径、事件处理模型等。它是 Nginx 启动时首先加载的配置文件,为整个服务器奠定了基础。**conf.d**
** 文件夹下的配置文件**:主要用于存放虚拟主机(Virtual Host)的配置或者特定功能模块的配置。这些配置文件可以根据不同的业务需求、域名或者功能进行拆分,使得配置更加模块化和易于管理。
**nginx.conf**
文件适合配置一些服务器通用的配置。
ssl 证书下载
购买证书之后,在阿里云控制台这个地方进行 ssl 证书公钥与私钥的下载,这里下载完了之后会得到一个压缩包。可以直接将压缩包扔到服务器上面的文件夹里面。这个文件夹前文是已经创建好了的。
博主这边使用 scp 进行上传。
1 | scp 证书相关.zip user@host:/root/ssl_license #替换成自己的 |
上传之后使用 unzip
进行解压就行了。
解压之后会得到类似这样的两个文件。
.pem
是公钥文件。.key
是私钥,注意私钥文件不要对外暴露。
nginx 配置文件编写
在启动容器之前,我们还需要配置我们的 nginx 配置文件。不编写我们的网站默认是没有装配有 ssl 证书的。
1 | vim /roor/data/nginx/conf/conf.d/default.conf #编辑配置文件 |
博主的配置文件,仅供参考,具体配置还要按自己的来。
1 | server { |
docker-compose.yml 文件编写
因为涉及到很多数据卷,并且方便后期迁移与扩展维护,这里建议使用容器编排。这里最后配置是将容器的时间与宿主机同步,不然默认使用的是 0 时区
的时间,否则后续查看、统计的时候日志记录出现时间错乱。
1 | services: |
启动容器
相关工作都做完了,现在可以启动容器了。
1 | 切换到docker-compose.yml文件所在的目录 |
验证
访问
现在网站就可以以 https
的方式进行访问了。
日志查看
总结
综合了 docker
和 nginx
、linux
的基础知识,很多流程都省略掉了,域名审核什么的。如果遇到什么问题,欢迎交流。