docker stack 部署nginx
===============================================
2018/7/29_第1次修改 ccb_warlock
===============================================
nginx作为市场占有率较高的http和反向代理服务,各种需要用到http和网页服务的项目经常需要用nginx做反代,故通过docker部署nginx也是最近的工作之一,故整理完部署后进行记录。
一、前提条件
- 环境中已经部署了docker swarm(http://www.cnblogs.com/straycats/p/8978135.html)
- 最好也部署了portainer(http://www.cnblogs.com/straycats/p/8978201.html)
- 默认服务器为IP:192.168.12.1
- 默认swarm创建了network:my-net
二、部署nginx
2.1 创建映射的本地目录
mkdir -p /usr/docker-vol/nginx/conf/conf.d
mkdir -p /usr/docker-vol/nginx/logs
mkdir -p /usr/docker-vol/nginx/ssl
2.2 创建配置文件
# 创建nginx.conf
vi /usr/docker-vol/nginx/conf/nginx.conf
# 将nginx.cnf文件上传到/usr/docker-vol/nginx/conf目录下
user nginx;
worker_processes auto;
pid /run/nginx.pid; events {
worker_connections 1024;
} http {
include mime.types;
default_type application/octet-stream;
keepalive_timeout 65; sendfile on;
tcp_nopush on;
gzip on;
# gzip_disable "msie6"; # 指定日志为json格式,键值对的格式
log_format access_log_json '{"user_ip":"$http_x_real_ip","lan_ip":"$remote_addr","log_time":"$time_iso8601","user_req":"$request","http_code":"$status","body_bytes_sents":"$body_bytes_sent","req_time":"$request_time","user_ua":"$http_user_agent"}'; # 限制上传文件的大小(M)
# types_hash_max_size 2048; # include的内容放在log_format之后日志格式的定义才生效
include /etc/nginx/conf.d/*.conf;
2.3 配置反代
# 编辑反代配置文件
vi /usr/docker-vol/nginx/conf/conf.d/www.conf
# 将下面的内容添加到www.conf文件内,wq保存
server {
listen 80;
server_name mydomain.com www.mydomain.com; autoindex on;
autoindex_localtime on;
access_log off;
error_log off; location ^~ /image/ {
client_max_body_size 10m;
proxy_pass http://192.168.12.1:5000/image/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
} location / {
proxy_pass https://192.168.12.1:5001;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
root html;
index index.html index.htm;
}
}
2.4 增加证书及密钥文件
将证书文件和密钥文件放到/usr/docker-vol/nginx/ssl目录下。
2.5 配置nginx-stack.yml
cd
vim nginx-stack.yml
# 编辑nginx-stack.yml,wq保存
version: '3.6'
services: nginx:
image: nginx:1.14.0-alpine
environment:
- TZ=Asia/Shanghai
volumes:
# nginx的配置文件
- /usr/docker-vol/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
- /usr/docker-vol/nginx/conf/conf.d/:/etc/nginx/conf.d/
- /usr/docker-vol/nginx/ssl/:/etc/nginx/ssl/
- /usr/docker-vol/nginx/logs/:/var/log/nginx/
deploy:
replicas: 1
restart_policy:
condition: on-failure
update_config:
parallelism: 1
delay: 10s
monitor: 30s
max_failure_ratio: 0.1
order: start-first
ports:
- 80:80
- 443:443
networks:
- my-net networks:
my-net:
external: true
PS.获取请求真实IP的配置方案
docker service create --name nginx \
--mount type=bind,source=/usr/docker-vol/nginx/conf/nginx.conf,target=/etc/nginx/nginx.conf,readonly=false \
--mount type=bind,source=/usr/docker-vol/nginx/conf/conf.d/,target=/etc/nginx/conf.d/,readonly=false \
--mount type=bind,source=/usr/docker-vol/nginx/ssl,target=/etc/nginx/ssl,readonly=false \
--mount type=bind,source=/usr/docker-vol/nginx/logs/,target=/var/log/nginx/,readonly=false \
-p "mode=host,target=80,published=80" \
-p "mode=host,target=443,published=443" \
--replicas 1 \
--restart-condition any \
--network gm-net \
--update-parallelism 1 \
--update-delay 3s \
--update-monitor 10s \
--update-max-failure-ratio 0.1 \
--update-order stop-first \
--limit-cpu 0.5 \
--limit-memory 300M \
nginx:1.14.0-alpine
参考资料:
1. https://www.cnblogs.com/wwzyy/p/8337965.html
2. http://www.runoob.com/docker/docker-install-nginx.html
3. http://www.ttlsa.com/nginx/use-nginx-proxy/
4. https://blog.csdn.net/bolg_hero/article/details/42105987
docker stack 部署nginx的更多相关文章
- 在Docker下部署Nginx
在Docker下部署Nginx 在Docker下部署Nginx,包括: 部署一个最简单的Nginx,可以通过80端口访问默认的网站 设置记录访问和错误日志的路径 设置静态网站的路径 通过proxy_p ...
- Docker Compose部署 nginx代理Tomcat集群
一.简介 使用Docker镜像部署Nginx代理的多个Tomcat集群: 使用Dockerfile构建nginx镜像 使用Dockerfile构建tomcat镜像 mysql镜像使用docker hu ...
- 庐山真面目之十微服务架构 Net Core 基于 Docker 容器部署 Nginx 集群
庐山真面目之十微服务架构 Net Core 基于 Docker 容器部署 Nginx 集群 一.简介 前面的两篇文章,我们已经介绍了Net Core项目基于Docker容器部署在Linux服 ...
- 阿里云服务器安装Docker并部署nginx、jdk、redis、mysql
阿里云服务器安装Docker并部署nginx.jdk.redis.mysql 一.安装Docker 1.安装Docker的依赖库 yum install -y yum-utils device-map ...
- Linux运维之docker虚拟化部署nginx
一.Docker的概念 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化.容器是完全使用沙箱 ...
- docker stack 部署容器监控方案(cAdvisor、Prometheus、Grafana)
=============================================== 2018/7/8_第1次修改 ccb_warlock === ...
- docker stack 部署 mysql 5.6
=============================================== 2018/7/1_第1次修改 ccb_warlock === ...
- docker stack 部署 filebeat
=============================================== 2018/7/21_第3次修改 ccb_warlock 更新 ...
- docker stack 部署 redis
=============================================== 2019/4/16_第2次修改 ccb_warlock 更新 ...
随机推荐
- 【版本管理】git远程管理
GitHub相关: 第1步:注册github账号,创建SSH Key. 在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件, ...
- python315题
目录 Python基础篇 1:为什么学习Python 2:通过什么途径学习Python 3:谈谈对Python和其他语言的区别 Python的优势: 4:简述解释型和编译型编程语言 5:Python的 ...
- 【转】如何向XML内插入一个字符串片段
转自:http://bbs.csdn.net/topics/190051229 5楼 string filepath = Server.MapPath("你的xml文件"); ...
- 学习Spring Boot:(十)使用hibernate validation完成数据后端校验
前言 后台数据的校验也是开发中比较注重的一点,用来校验数据的正确性,以免一些非法的数据破坏系统,或者进入数据库,造成数据污染,由于数据检验可能应用到很多层面,所以系统对数据校验要求比较严格且追求可变性 ...
- BZOJ 2879 [Noi2012]美食节 | 费用流 动态开点
这道题就是"修车"的数据加强版--但是数据范围扩大了好多,应对方法是"动态开点". 首先先把"所有厨师做的倒数第一道菜"和所有菜连边,然后跑 ...
- BZOJ 2480 && 3239 && 2995 高次不定方程(高次同余方程)
链接 BZOJ 2480 虽然是个三倍经验题(2333),但是只有上面这道(BZOJ2480)有 p = 1 的加强数据,推荐大家做这道. 题解 这是一道BSGS(Baby Step Giant St ...
- HGOI 20181103 题解
problem:把一个可重集分成两个互异的不为空集合,两个集合里面的数相乘的gcd为1(将集合中所有元素的质因数没有交集) solution:显然本题并不是那么容易啊!考场上想了好久.. 其实转化为上 ...
- 【bzoj2877】 Noi2012—魔幻棋盘
http://www.lydsy.com/JudgeOnline/problem.php?id=2877 (题目链接) 题意 一个${n*m}$的矩阵,维护两个操作:给任意子矩阵${+val}$:问某 ...
- 前端学习 -- Css -- 浮动
块元素在文档流中默认垂直排列,所以这个三个div自上至下依次排开,如果希望块元素在页面中水平排列,可以使块元素脱离文档流. 使用float来使元素浮动,从而脱离文档流 可选值: none,默认值,元素 ...
- 《剑指offer》— JavaScript(32)把数组排成最小的数
把数组排成最小的数 题目描述 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个.例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为3213 ...