PageSourceSearch

https://mpolinowski.github.io/assets/js/f7f7e98f.263cc85c.js

js mpolinowski.github.io collected 2026-10-03 09:39:02 UTC 11,768 bytes, 1 lines download raw bytes

1"use strict";(globalThis.webpackChunkmikes_dev_notebook=globalThis.webpackChunkmikes_dev_notebook||[]).push([[4691],{508046(n,r,e){e.r(r),e.d(r,{assets:()=>i,contentTitle:()=>a,default:()=>m,frontMatter:()=>c,metadata:()=>t,toc:()=>l});const t=JSON.parse('{"id":"DevOps/Tomcat/2020-12-26-tomcat10-cluster-with-individual-nodes/index","title":"Tomcat 10 Cluster with individual Node Server","description":"Siem Reap, Cambodia","source":"@site/docs/DevOps/Tomcat/2020-12-26-tomcat10-cluster-with-individual-nodes/index.md","sourceDirName":"DevOps/Tomcat/2020-12-26-tomcat10-cluster-with-individual-nodes","slug":"/DevOps/Tomcat/2020-12-26-tomcat10-cluster-with-individual-nodes/2020-12-26","permalink":"/docs/DevOps/Tomcat/2020-12-26-tomcat10-cluster-with-individual-nodes/2020-12-26","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/docs/DevOps/Tomcat/2020-12-26-tomcat10-cluster-with-individual-nodes/index.md","tags":[{"inline":true,"label":"LINUX","permalink":"/docs/tags/linux"},{"inline":true,"label":"Tomcat","permalink":"/docs/tags/tomcat"},{"inline":true,"label":"Docker","permalink":"/docs/tags/docker"}],"version":"current","sidebarPosition":9060,"frontMatter":{"sidebar_position":9060,"slug":"2020-12-26","title":"Tomcat 10 Cluster with individual Node Server","authors":"mpolinowski","tags":["LINUX","Tomcat","Docker"]}
1,"sidebar":"tutorialSidebar","previous":{"title":"Tomcat","permalink":"/docs/category/tomcat"},"next":{"title":"Tomcat 10 Docker Cluster","permalink":"/docs/DevOps/Tomcat/2020-12-25-tomcat10-docker-cluster/2020-12-25"}}');var o=e(474848),s=e(28453);const c={sidebar_position:9060,slug:"2020-12-26",title:"Tomcat 10 Cluster with individual Node Server",authors:"mpolinowski",tags:["LINUX","Tomcat","Docker"]},a=void 0,i={},l=[{value:"Setting up Minion and Master Nodes with Docker-Compose",id:"setting-up-minion-and-master-nodes-with-docker-compose",level:2},{value:"NGINX Configuration",id:"nginx-configuration",level:3},{value:"default.conf",id:"defaultconf",level:4},{value:"nginx.conf",id:"nginxconf",level:4}];function d(n){const r={a:"a",code:"code",h2:"h2",h3:"h3",h4:"h4",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",ul:"ul",...(0,s.R)(),...n.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(r.p,{children:(0,o.jsx)(r.img,{alt:"Siem Reap, Cambodia",src:e(372582).A+"",width:"1500",height:"706"})}),"\n",(0,o.jsxs)(r.ul,{children:["\n",(0,o.jsxs)(r.li,{children:[(0,o.jsx)(r.a,{href:"#setting-up-minion-and-master-nodes-with-docker-compose",children:"Setting up Minion and Master Nodes with Docker-Compose"}),"\n",(0,o.jsxs)(r.ul,{children:["\n",(0,o.jsxs)(r.li,{children:[(0,o.jsx)(r.a,{href:"#nginx-configuration",children:"NGINX Configuration"}),"\n",(0,o.jsxs)(r.ul,{children:["\n",(0,o.jsx)(r.li,{children:(0,o.jsx)(r.a,{href:"#defaultconf",children:"default.conf"})}),"\n",(0,o.jsx)(r.li,{children:(0,o.jsx)(r.a,{href:"#nginxconf",children:"nginx.conf"})}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,o.jsx)(r.h2,{id:"setting-up-minion-and-master-nodes-with-docker-compose",children:"Setting up Minion and Master Nodes with Docker-Compose"}),"\n",(0,o.jsx)(r.p,{children:(0,o.jsx)(r.strong,{children:"docker-compose.yml"})}),"\n",(0,o.jsx)(r.pre,{children:(0,o.jsx)(r.code,{className:"language-yml",children:'version: "3.8"\r\nservices:\r\n\r\n  tomcatOne:\r\n    container_name: tomcatOne\r\n    image: tomcat:10-jdk11-corretto\r\n    networks:\r\n        - gateway\r\n    restart: unless-stopped\r\n    networks:\r\n        gateway:\r\n            ipv4_address: 172.25.0.10\r\n\r\n    volumes:\r\n    - /opt/tomcat/docker/cluster/tomcat/conf/server.xml:/usr/local/tomcat/conf/server.xml\r\n    - /opt/tomcat/docker/cluster/tomcat/conf/tomcat-users.xml:/usr/local/tomcat/conf/tomcat-users.xml\r\n    - /opt/tomcat/docker/cluster/tomcat/webapps/ROOT_01:/usr/local/tomcat/webapps/ROOT\r\n\r\n  tomcatTwo:\r\n    container_name: tomcatTwo\r\n    image: tomcat:10-jdk11-corretto\r\n    networks:\r\n        - gateway\r\n    restart: unless-stopped\r\n    networks:\r\n        gateway:\r\n            ipv4_address: 172.25.0.20\r\n    volumes:\r\n    - /opt/tomcat/docker/cluster/tomcat/conf/server.xml:/usr/local/tomcat/conf/server.xml\r\n    - /opt/tomcat/docker/cluster/tomcat/conf/tomcat-users.xml:/usr/local/tomcat/conf/tomcat-users.xml\r\n    - /opt/tomcat/docker/cluster/tomcat/webapps/ROOT_02:/usr/local/tomcat/webapps/ROOT\r\n\r\n  tomcatThree:\r\n    container_name: tomcatThree\r\n    image: tomcat:10-jdk11-corretto\r\n    networks:\r\n        - gateway\r\n    restart: unless-stopped\r\n    networks:\r\n        gateway:\r\n            ipv4_address: 172.25.0.30\r\n    volumes:\r\n    - /opt/tomcat/docker/cluster/tomcat/conf/server.xml:/usr/local/tomcat/conf/server.xml\r\n    - /opt/tomcat/docker/cluster/tomcat/conf/tomcat-users.xml:/usr/local/tomcat/conf/tomcat-users.xml\r\n    - /opt/tomcat/docker/cluster/tomcat/webapps/ROOT_03:/usr/local/tomcat/webapps/ROOT\r\n\r\n  ingress:\r\n    image: nginx:stable-alpine\r\n    container_name: ingress\r\n    networks:\r\n        gateway:\r\n            ipv4_address: 172.25.0.5\r\n    ports:\r\n        - "192.168.2.111:443:443"\r\n    restart: unless-stopped\r\n    volumes:\r\n    - /opt/tomcat/docker/cluster/nginx/conf.d:/etc/nginx/conf.d\r\n    - /opt/tomcat/docker/cluster/nginx/ssl:/etc/nginx/ssl\r\n    - /opt/tomcat/docker/cluster/nginx/nginx.conf:/etc/nginx/nginx.conf\r\n    depends_on:\r\n        - tomcatOne\r\n        - tomcatTwo\r\n        - tomcatThree\r\n\r\nnetworks:\r\n  gateway:\r\n    ipam:\r\n      config:\r\n        - subnet: 172.25.0.0/24\n'})}),"\n",(0,o.jsx)(r.h3,{id:"nginx-configuration",children:"NGINX Configuration"}),"\n",(0,o.jsx)(r.h4,{id:"defaultconf",children:"default.conf"}),"\n",(0,o.jsx)(r.p,{children:(0,o.jsx)(r.strong,{children:"Master / Minion1"})}),"\n",(0,o.jsx)(r.pre,{children:(0,o.jsx)(r.code,{className:"language-cfg",children:"##########################################################################\r\n########################## Cluster Ingress ###############################\r\n##########################################################################\r\n\r\n\r\nserver {\r\n    listen 80;\r\n    listen [::]:80;\r\n\r\n    server_name virtual-host1.com;\r\n\r\n    return 301 https://$server_name$request_uri;\r\n}\r\n\r\n\r\nupstream cluster_nodes {\r\n    server virtual-host2.com:443;\r\n    server virtual-host3.com:443;\r\n}\r\n\r\nserver {\r\n    listen      443 ssl http2 default_server;\r\n    listen      [::]:443 ssl http2;\r\n    include     conf.d/self-signed.conf;\r\n    include     conf.d/ssl-params.conf;\r\n    include     conf.d/header.conf;\r\n\r\n    server_name virtual-host1.com;\r\n\r\n    location = / {\r\n        proxy_pass http://cluster_nodes;\r\n    }\r\n\r\n    error_page  404              /404.html;\r\n    error_page  500 502 503 504  /50x.html;\r\n    location = /50x.html {\r\n        root   /usr/share/nginx/html;\r\n    }\r\n}\r\n\r\n\r\n##########################################################################\r\n########################## Tomcat Servlet 1 ##############################\r\n##########################################################################\r\n\r\n\r\nserver {\r\n    listen 80;\r\n\r\n    server_name virtual-host2.com;\r\n\r\n    return 301 https://$server_name$request_uri;\r\n}\r\n\r\n\r\nupstream tc_servlets {\r\n    server tomcatOne:8080;\r\n    server tomcatTwo:8080;\r\n    server tomcatThree:8080;\r\n}\r\n\r\nserver {\r\n    listen      443 ssl http2;\r\n    include     conf.d/self-signed.conf;\r\n    include     conf.d/ssl-params.conf;\r\n    include     conf.d/header.conf;\r\n\r\n    server_name virtual-host2.com;\r\n\r\n    location = / {\r\n        proxy_pass http://tc_servlets;\r\n    }\r\n\r\n    error_page  404              /404.html;\r\n    error_page  500 502 503 504  /50x.html;\r\n    location = /50x.html {\r\n        root   /usr/share/nginx/html;\r\n    }\r\n}\n"})}),"\n",(0,o.jsx)(r.p,{children:(0,o.jsx)(r.strong,{children:"Minion2"})}),"\n",(0,o.jsx)(r.pre,{children:(0,o.jsx)(r.code,{className:"language-cfg",children:"##########################################################################\r\n########################## Tomcat Servlet 2 ##############################\r\n##########################################################################\r\n\r\n\r\nserver {\r\n    listen 80;\r\n\r\n    server_name virtual-host3.com;\r\n\r\n    return 301 https://$server_name$request_uri;\r\n}\r\n\r\n\r\nupstream tc_servlets {\r\n    server tomcatOne:8080;\r\n    server tomcatTwo:8080;\r\n    server tomcatThree:8080;\r\n}\r\n\r\nserver {\r\n    listen      443 ssl http2;\r\n    include     conf.d/self-signed.conf;\r\n    include     conf.d/ssl-params.conf;\r\n    include     conf.d/header.conf;\r\n\r\n    server_name virtual-host3.com;\r\n\r\n    location = / {\r\n        proxy_pass http://tc_servlets;\r\n    }\r\n\r\n    error_page  404              /404.html;\r\n    error_page  500 502 503 504  /50x.html;\r\n    location = /50x.html {\r\n        root   /usr/share/nginx/html;\r\n    }\r\n}\n"})}),"\n",(0,o.jsx)(r.h4,{id:"nginxconf",children:"nginx.conf"}),"\n",(0,o.jsx)(r.pre,{children:(0,o.jsx)(r.code,{className:"language-cfg",children:"user  nginx;\r\nworker_processes  auto;\r\nworker_rlimit_nofile  15000;\r\npid  /var/run/nginx.pid;\r\ninclude /usr/share/nginx/modules/*.conf;\r\n\r\n\r\nevents {\r\n    worker_connections  2048;\r\n    multi_accept on;\r\n    use epoll;\r\n}
1\r\n\r\n\r\nhttp {\r\n    default_type   application/octet-stream;\r\n    # access_log   /var/log/nginx/access.log;\r\n    # activate the server access log only when needed\r\n    access_log     off;\r\n    error_log      /var/log/nginx/error.log;\r\n    # don't display server version on error pages\r\n    server_tokens  off;\r\n    server_names_hash_bucket_size 64;\r\n    include        /etc/nginx/mime.types;\r\n    sendfile       on;\r\n    tcp_nopush     on;\r\n    tcp_nodelay    on;\r\n\r\n    charset utf-8;\r\n    source_charset utf-8;\r\n    charset_types text/xml text/plain text/vnd.wap.wml application/javascript application/rss+xml;\r\n\r\n    include /etc/nginx/conf.d/default.conf;\r\n    include /etc/nginx/conf.d/buffers.conf;\r\n    include /etc/nginx/conf.d/timeouts.conf;\r\n    # Only activate caching in production\r\n    # include /etc/nginx/conf.d/cache.conf;\r\n    include /etc/nginx/conf.d/gzip.conf;\r\n}\n"})}),"\n",(0,o.jsxs)(r.p,{children:["I forwarded the Tomcat service on port ",(0,o.jsx)(r.code,{children:"443"})," so I can now access the sample app under:"]}),"\n",(0,o.jsx)(r.pre,{children:(0,o.jsx)(r.code,{className:"language-bash",children:"https://<My-Server>:443/sample/\n"})}),"\n",(0,o.jsx)(r.p,{children:(0,o.jsx)(r.img,{alt:"Tomcat 10 Docker Cluster",src:e(910800).A+"",width:"785",height:"202"})}),"\n",(0,o.jsx)(r.p,{children:"Repeat these steps on all your minion servers."})]})}function m(n={}){const{wrapper:r}={...(0,s.R)(),...n.components};return r?(0,o.jsx)(r,{...n,children:(0,o.jsx)(d,{...n})}):d(n)}},372582(n,r,e){const t=e.p+"assets/images/photo-kt443t6d_64hdh43hfh6dgjdfhg4_d-dbec03b1535301c8b293ac3087af0dd4.jpg";e.d(r,["A",0,t])},910800(n,r,e){const t=e.p+"assets/images/tomcat10-docker-cluster_01-b5f7c91a1cd0a3ac4c0e5207cd3b73ed.gif";e.d(r,["A",0,t])},28453(n,r,e){e.d(r,{R:()=>c,x:()=>a});var t=e(296540);const o={},s=t.createContext(o);function c(n){const r=t.useContext(s);return t.useMemo(function(){return"function"==typeof n?n(r):{...r,...n}},[r,n])}function a(n){let r;return r=n.disableParentContext?"function"==typeof n.components?n.components(o):n.components||o:c(n.components),t.createElement(s.Provider,{value:r},n.children)}}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.