Nginx 使用 docker 部署
2023年2月2日...大约 2 分钟
前段时间服务器到期,重新迁移博客,安装 nginx 时使用了 docker 部署,预期配置合适之后将容器打包成镜像,下次再部署时直接拉取运行即可。使用了 docker-compose
基础配置
version: '3.1'
services:
nginx:
restart: always
# 使用的镜像
image: nginx
# 容器名字
container_name: nginx
# 端口映射
ports:
- 80:80
- 443:443
# 数据挂载
volumes:
- /service/nginx/conf:/etc/nginx/conf.d
- /service/nginx/html:/usr/share/nginx/html
- /service/nginx/logs:/var/log/nginx
要注意的是宿主机的文件会被挂载到容器内,像 nginx 配置这些就要注意使用的路径,应当是容器内的路径,这块着实给我困扰了一段时间,nginx 配置文件示例:
server {
listen 443 ssl;
server_name code.jjdxb.top;
charset utf-8;
access_log /var/log/nginx/code_jjdxb_top.access.log;
error_log /var/log/nginx/code_jjdxb_top.error.log;
include conf.d/ssl.configure;
location / {
try_files $uri $uri/ /index.html;
root /usr/share/nginx/html/code/;
index index.html index.htm;
}
}
相关的命令如下
docker pull nginx # 拉取 nginx 镜像
docker-compose up -d # 根据 docker-compose.yml 运行容器
docker ps # 查看当前正在运行的容器
docker exec -it nginx bash # 使用 bash 的方式进入到 nginx 容器中
docker exec -it nginx nginx -t # nginx 检查配置(前提是要进入容器将 nginx 设置为全局命令)
docker exec -it nginx nginx -s reload # nginx 重载
ssl
进入到 nginx 容器中,按照 给网站增加ssl证书 安装 acme 脚本,并生成&安装证书。然后将这个运行中的容器打包成镜像,下次就可以使用这个镜像部署了
nginx 反向代理
这几天在弄一个 artalk 的评论系统,这个也是 docker 部署的,然后我不想将端口暴露在外部,只想通过域名及反向代理的方式访问,在配置反向代理的时候,按照以前的思路使用 proxy_pass http://127.0.0.1:8080/;
结果并不能生效。后来想在容器内运行的时候 127.0.0.1 指向的是容器内部的环境,并不是宿主机的,但是 8080 端口已经被占用不能再分配给 nginx 容器。通过 docker network inspect bridge
命令查看 docker 的网关信息,使用网关地址取代 127.0.0.1 即可成功实现反代。
小结
也可能我的理解是错的,毕竟我确实不是很懂这个,如果你发现我的描述有误,希望可以帮助我指正,不胜感激