docker-documentation/general/swag/index.html

688 wiersze
268 KiB
HTML

<!doctype html><html lang=en class=no-js> <head><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=description content="Welcome to the home of the LinuxServer.io documentation!"><meta name=author content=LinuxServer.io><link href=https://docs.linuxserver.io/general/swag/ rel=canonical><link href=../fleet/ rel=prev><link href=../how-to-get-support/ rel=next><link rel=icon href=../../assets/favicon.ico><meta name=generator content="mkdocs-1.5.3, mkdocs-material-9.5.13"><title>SWAG - LinuxServer.io</title><link rel=stylesheet href=../../assets/stylesheets/main.7e359304.min.css><link rel=stylesheet href=../../assets/stylesheets/palette.06af60db.min.css><link rel=preconnect href=https://fonts.gstatic.com crossorigin><link rel=stylesheet href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback"><style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style><script>__md_scope=new URL("../..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script></head> <body dir=ltr data-md-color-scheme=default data-md-color-primary=purple data-md-color-accent=indigo> <input class=md-toggle data-md-toggle=drawer type=checkbox id=__drawer autocomplete=off> <input class=md-toggle data-md-toggle=search type=checkbox id=__search autocomplete=off> <label class=md-overlay for=__drawer></label> <div data-md-component=skip> <a href=#swag class=md-skip> Skip to content </a> </div> <div data-md-component=announce> </div> <header class=md-header data-md-component=header> <nav class="md-header__inner md-grid" aria-label=Header> <a href=../.. title=LinuxServer.io class="md-header__button md-logo" aria-label=LinuxServer.io data-md-component=logo> <img src=../../assets/icon.svg alt=logo> </a> <label class="md-header__button md-icon" for=__drawer> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg> </label> <div class=md-header__title data-md-component=header-title> <div class=md-header__ellipsis> <div class=md-header__topic> <span class=md-ellipsis> LinuxServer.io </span> </div> <div class=md-header__topic data-md-component=header-topic> <span class=md-ellipsis> SWAG </span> </div> </div> </div> <form class=md-header__option data-md-component=palette> <input class=md-option data-md-color-media="(prefers-color-scheme: light)" data-md-color-scheme=default data-md-color-primary=purple data-md-color-accent=indigo aria-label="Switch to dark mode" type=radio name=__palette id=__palette_0> <label class="md-header__button md-icon" title="Switch to dark mode" for=__palette_1 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 8a4 4 0 0 0-4 4 4 4 0 0 0 4 4 4 4 0 0 0 4-4 4 4 0 0 0-4-4m0 10a6 6 0 0 1-6-6 6 6 0 0 1 6-6 6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> <input class=md-option data-md-color-media="(prefers-color-scheme: dark)" data-md-color-scheme=slate data-md-color-primary=purple data-md-color-accent=indigo aria-label="Switch to light mode" type=radio name=__palette id=__palette_1> <label class="md-header__button md-icon" title="Switch to light mode" for=__palette_0 hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M12 18c-.89 0-1.74-.2-2.5-.55C11.56 16.5 13 14.42 13 12c0-2.42-1.44-4.5-3.5-5.45C10.26 6.2 11.11 6 12 6a6 6 0 0 1 6 6 6 6 0 0 1-6 6m8-9.31V4h-4.69L12 .69 8.69 4H4v4.69L.69 12 4 15.31V20h4.69L12 23.31 15.31 20H20v-4.69L23.31 12 20 8.69Z"/></svg> </label> </form> <script>var media,input,key,value,palette=__md_get("__palette");if(palette&&palette.color){"(prefers-color-scheme)"===palette.color.media&&(media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']"),palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent"));for([key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script> <label class="md-header__button md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> </label> <div class=md-search data-md-component=search role=dialog> <label class=md-search__overlay for=__search></label> <div class=md-search__inner role=search> <form class=md-search__form name=search> <input type=text class=md-search__input name=query aria-label=Search placeholder=Search autocapitalize=off autocorrect=off autocomplete=off spellcheck=false data-md-component=search-query required> <label class="md-search__icon md-icon" for=__search> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </label> <nav class=md-search__options aria-label=Search> <a href=javascript:void(0) class="md-search__icon md-icon" title=Share aria-label=Share data-clipboard data-clipboard-text data-md-component=search-share tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M18 16.08c-.76 0-1.44.3-1.96.77L8.91 12.7c.05-.23.09-.46.09-.7 0-.24-.04-.47-.09-.7l7.05-4.11c.54.5 1.25.81 2.04.81a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3c0 .24.04.47.09.7L8.04 9.81C7.5 9.31 6.79 9 6 9a3 3 0 0 0-3 3 3 3 0 0 0 3 3c.79 0 1.5-.31 2.04-.81l7.12 4.15c-.05.21-.08.43-.08.66 0 1.61 1.31 2.91 2.92 2.91 1.61 0 2.92-1.3 2.92-2.91A2.92 2.92 0 0 0 18 16.08Z"/></svg> </a> <button type=reset class="md-search__icon md-icon" title=Clear aria-label=Clear tabindex=-1> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg> </button> </nav> <div class=md-search__suggest data-md-component=search-suggest></div> </form> <div class=md-search__output> <div class=md-search__scrollwrap data-md-scrollfix> <div class=md-search-result data-md-component=search-result> <div class=md-search-result__meta> Initializing search </div> <ol class=md-search-result__list role=presentation></ol> </div> </div> </div> </div> </div> <div class=md-header__source> <a href=https://github.com/linuxserver/docker-documentation title="Go to repository" class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> linuxserver/docker-documentation </div> </a> </div> </nav> </header> <div class=md-container data-md-component=container> <nav class=md-tabs aria-label=Tabs data-md-component=tabs> <div class=md-grid> <ul class=md-tabs__list> <li class=md-tabs__item> <a href=../.. class=md-tabs__link> Introduction </a> </li> <li class="md-tabs__item md-tabs__item--active"> <a href=../container-execution/ class=md-tabs__link> How to </a> </li> <li class=md-tabs__item> <a href=../../images/docker-adguardhome-sync/ class=md-tabs__link> Container Images </a> </li> <li class=md-tabs__item> <a href=../../FAQ/ class=md-tabs__link> Frequently Asked Questions </a> </li> <li class=md-tabs__item> <a href=../../misc/awesome-lsio/ class=md-tabs__link> Misc </a> </li> </ul> </div> </nav> <main class=md-main data-md-component=main> <div class="md-main__inner md-grid"> <div class="md-sidebar md-sidebar--primary" data-md-component=sidebar data-md-type=navigation> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--primary md-nav--lifted" aria-label=Navigation data-md-level=0> <label class=md-nav__title for=__drawer> <a href=../.. title=LinuxServer.io class="md-nav__button md-logo" aria-label=LinuxServer.io data-md-component=logo> <img src=../../assets/icon.svg alt=logo> </a> LinuxServer.io </label> <div class=md-nav__source> <a href=https://github.com/linuxserver/docker-documentation title="Go to repository" class=md-source data-md-component=source> <div class="md-source__icon md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg> </div> <div class=md-source__repository> linuxserver/docker-documentation </div> </a> </div> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../.. class=md-nav__link> <span class=md-ellipsis> Introduction </span> </a> </li> <li class="md-nav__item md-nav__item--active md-nav__item--section md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_2 checked> <label class=md-nav__link for=__nav_2 id=__nav_2_label tabindex> <span class=md-ellipsis> How to </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_2_label aria-expanded=true> <label class=md-nav__title for=__nav_2> <span class="md-nav__icon md-icon"></span> How to </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../container-execution/ class=md-nav__link> <span class=md-ellipsis> Container Execution </span> </a> </li> <li class=md-nav__item> <a href=../containers-101/ class=md-nav__link> <span class=md-ellipsis> Docker Containers: 101 </span> </a> </li> <li class=md-nav__item> <a href=../running-our-containers/ class=md-nav__link> <span class=md-ellipsis> Running LinuxServer Containers </span> </a> </li> <li class=md-nav__item> <a href=../container-customization/ class=md-nav__link> <span class=md-ellipsis> Customizing LinuxServer Containers </span> </a> </li> <li class=md-nav__item> <a href=../docker-compose/ class=md-nav__link> <span class=md-ellipsis> Docker Compose </span> </a> </li> <li class=md-nav__item> <a href=../understanding-puid-and-pgid/ class=md-nav__link> <span class=md-ellipsis> Understanding PUID and PGID </span> </a> </li> <li class=md-nav__item> <a href=../updating-our-containers/ class=md-nav__link> <span class=md-ellipsis> Updating our containers </span> </a> </li> <li class=md-nav__item> <a href=../volumes/ class=md-nav__link> <span class=md-ellipsis> Volumes </span> </a> </li> <li class=md-nav__item> <a href=../fleet/ class=md-nav__link> <span class=md-ellipsis> Fleet </span> </a> </li> <li class="md-nav__item md-nav__item--active"> <input class="md-nav__toggle md-toggle" type=checkbox id=__toc> <label class="md-nav__link md-nav__link--active" for=__toc> <span class=md-ellipsis> SWAG </span> <span class="md-nav__icon md-icon"></span> </label> <a href=./ class="md-nav__link md-nav__link--active"> <span class=md-ellipsis> SWAG </span> </a> <nav class="md-nav md-nav--secondary" aria-label="Table of contents"> <label class=md-nav__title for=__toc> <span class="md-nav__icon md-icon"></span> Table of contents </label> <ul class=md-nav__list data-md-component=toc data-md-scrollfix> <li class=md-nav__item> <a href=#introduction class=md-nav__link> <span class=md-ellipsis> Introduction </span> </a> <nav class=md-nav aria-label=Introduction> <ul class=md-nav__list> <li class=md-nav__item> <a href=#what-are-ssl-certs class=md-nav__link> <span class=md-ellipsis> What are SSL certs? </span> </a> </li> <li class=md-nav__item> <a href=#what-is-lets-encrypt-andor-zerossl class=md-nav__link> <span class=md-ellipsis> What is Let's Encrypt (and/or ZeroSSL)? </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#creating-a-swag-container class=md-nav__link> <span class=md-ellipsis> Creating a SWAG container </span> </a> <nav class=md-nav aria-label="Creating a SWAG container"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#docker-cli class=md-nav__link> <span class=md-ellipsis> docker cli </span> </a> </li> <li class=md-nav__item> <a href=#docker-compose class=md-nav__link> <span class=md-ellipsis> docker-compose </span> </a> </li> <li class=md-nav__item> <a href=#authorization-method class=md-nav__link> <span class=md-ellipsis> Authorization method </span> </a> </li> <li class=md-nav__item> <a href=#cert-provider-lets-encrypt-vs-zerossl class=md-nav__link> <span class=md-ellipsis> Cert Provider (Let's Encrypt vs ZeroSSL) </span> </a> </li> <li class=md-nav__item> <a href=#port-forwards class=md-nav__link> <span class=md-ellipsis> Port forwards </span> </a> </li> <li class=md-nav__item> <a href=#docker-networking class=md-nav__link> <span class=md-ellipsis> Docker networking </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#container-setup-examples class=md-nav__link> <span class=md-ellipsis> Container setup examples </span> </a> <nav class=md-nav aria-label="Container setup examples"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#create-container-via-http-validation class=md-nav__link> <span class=md-ellipsis> Create container via http validation </span> </a> </li> <li class=md-nav__item> <a href=#create-container-via-dns-validation-with-a-wildcard-cert class=md-nav__link> <span class=md-ellipsis> Create container via dns validation with a wildcard cert </span> </a> </li> <li class=md-nav__item> <a href=#create-container-via-duckdns-validation-with-a-wildcard-cert class=md-nav__link> <span class=md-ellipsis> Create container via duckdns validation with a wildcard cert </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#web-hosting-examples class=md-nav__link> <span class=md-ellipsis> Web hosting examples </span> </a> <nav class=md-nav aria-label="Web hosting examples"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#simple-html-web-page-hosting class=md-nav__link> <span class=md-ellipsis> Simple html web page hosting </span> </a> </li> <li class=md-nav__item> <a href=#hosting-a-wordpress-site class=md-nav__link> <span class=md-ellipsis> Hosting a Wordpress site </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#reverse-proxy class=md-nav__link> <span class=md-ellipsis> Reverse Proxy </span> </a> <nav class=md-nav aria-label="Reverse Proxy"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#preset-proxy-confs class=md-nav__link> <span class=md-ellipsis> Preset proxy confs </span> </a> </li> <li class=md-nav__item> <a href=#understanding-the-proxy-conf-structure class=md-nav__link> <span class=md-ellipsis> Understanding the proxy conf structure </span> </a> <nav class=md-nav aria-label="Understanding the proxy conf structure"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#subdomain-proxy-conf class=md-nav__link> <span class=md-ellipsis> Subdomain proxy conf </span> </a> </li> <li class=md-nav__item> <a href=#subfolder-proxy-conf class=md-nav__link> <span class=md-ellipsis> Subfolder proxy conf </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#ombi-subdomain-reverse-proxy-example class=md-nav__link> <span class=md-ellipsis> Ombi subdomain reverse proxy example </span> </a> </li> <li class=md-nav__item> <a href=#nextcloud-subdomain-reverse-proxy-example class=md-nav__link> <span class=md-ellipsis> Nextcloud subdomain reverse proxy example </span> </a> </li> <li class=md-nav__item> <a href=#plex-subfolder-reverse-proxy-example class=md-nav__link> <span class=md-ellipsis> Plex subfolder reverse proxy example </span> </a> </li> <li class=md-nav__item> <a href=#using-heimdall-as-the-home-page-at-domain-root class=md-nav__link> <span class=md-ellipsis> Using Heimdall as the home page at domain root </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#troubleshooting class=md-nav__link> <span class=md-ellipsis> Troubleshooting </span> </a> <nav class=md-nav aria-label=Troubleshooting> <ul class=md-nav__list> <li class=md-nav__item> <a href=#common-errors class=md-nav__link> <span class=md-ellipsis> Common errors </span> </a> <nav class=md-nav aria-label="Common errors"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#404 class=md-nav__link> <span class=md-ellipsis> 404 </span> </a> </li> <li class=md-nav__item> <a href=#502 class=md-nav__link> <span class=md-ellipsis> 502 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#final-thoughts class=md-nav__link> <span class=md-ellipsis> Final Thoughts </span> </a> <nav class=md-nav aria-label="Final Thoughts"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#how-to-request-support class=md-nav__link> <span class=md-ellipsis> How to Request Support </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=../how-to-get-support/ class=md-nav__link> <span class=md-ellipsis> How to get support </span> </a> </li> <li class=md-nav__item> <a href=../split-dns/ class=md-nav__link> <span class=md-ellipsis> Split dns </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3> <label class=md-nav__link for=__nav_3 id=__nav_3_label tabindex=0> <span class=md-ellipsis> Container Images </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_3_label aria-expanded=false> <label class=md-nav__title for=__nav_3> <span class="md-nav__icon md-icon"></span> Container Images </label> <ul class=md-nav__list data-md-scrollfix> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_1> <label class=md-nav__link for=__nav_3_1 id=__nav_3_1_label tabindex=0> <span class=md-ellipsis> Images </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_1_label aria-expanded=false> <label class=md-nav__title for=__nav_3_1> <span class="md-nav__icon md-icon"></span> Images </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../images/docker-adguardhome-sync/ class=md-nav__link> <span class=md-ellipsis> adguardhome-sync </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-airsonic-advanced/ class=md-nav__link> <span class=md-ellipsis> airsonic-advanced </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-altus/ class=md-nav__link> <span class=md-ellipsis> altus </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-apprise-api/ class=md-nav__link> <span class=md-ellipsis> apprise-api </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-ardour/ class=md-nav__link> <span class=md-ellipsis> ardour </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-audacity/ class=md-nav__link> <span class=md-ellipsis> audacity </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-babybuddy/ class=md-nav__link> <span class=md-ellipsis> babybuddy </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-bambustudio/ class=md-nav__link> <span class=md-ellipsis> bambustudio </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-bazarr/ class=md-nav__link> <span class=md-ellipsis> bazarr </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-beets/ class=md-nav__link> <span class=md-ellipsis> beets </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-blender/ class=md-nav__link> <span class=md-ellipsis> blender </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-boinc/ class=md-nav__link> <span class=md-ellipsis> boinc </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-booksonic-air/ class=md-nav__link> <span class=md-ellipsis> booksonic-air </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-bookstack/ class=md-nav__link> <span class=md-ellipsis> bookstack </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-budge/ class=md-nav__link> <span class=md-ellipsis> budge </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-calibre-web/ class=md-nav__link> <span class=md-ellipsis> calibre-web </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-calibre/ class=md-nav__link> <span class=md-ellipsis> calibre </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-calligra/ class=md-nav__link> <span class=md-ellipsis> calligra </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-changedetection.io/ class=md-nav__link> <span class=md-ellipsis> changedetection.io </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-chromium/ class=md-nav__link> <span class=md-ellipsis> chromium </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-code-server/ class=md-nav__link> <span class=md-ellipsis> code-server </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-cops/ class=md-nav__link> <span class=md-ellipsis> cops </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-cura/ class=md-nav__link> <span class=md-ellipsis> cura </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-daapd/ class=md-nav__link> <span class=md-ellipsis> daapd </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-darktable/ class=md-nav__link> <span class=md-ellipsis> darktable </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-davos/ class=md-nav__link> <span class=md-ellipsis> davos </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-ddclient/ class=md-nav__link> <span class=md-ellipsis> ddclient </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-deluge/ class=md-nav__link> <span class=md-ellipsis> deluge </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-digikam/ class=md-nav__link> <span class=md-ellipsis> digikam </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-dillinger/ class=md-nav__link> <span class=md-ellipsis> dillinger </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-diskover/ class=md-nav__link> <span class=md-ellipsis> diskover </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-dokuwiki/ class=md-nav__link> <span class=md-ellipsis> dokuwiki </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-domoticz/ class=md-nav__link> <span class=md-ellipsis> domoticz </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-doplarr/ class=md-nav__link> <span class=md-ellipsis> doplarr </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-doublecommander/ class=md-nav__link> <span class=md-ellipsis> doublecommander </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-duckdns/ class=md-nav__link> <span class=md-ellipsis> duckdns </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-duplicati/ class=md-nav__link> <span class=md-ellipsis> duplicati </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-emby/ class=md-nav__link> <span class=md-ellipsis> emby </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-embystat/ class=md-nav__link> <span class=md-ellipsis> embystat </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-emulatorjs/ class=md-nav__link> <span class=md-ellipsis> emulatorjs </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-endlessh/ class=md-nav__link> <span class=md-ellipsis> endlessh </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-fail2ban/ class=md-nav__link> <span class=md-ellipsis> fail2ban </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-faster-whisper/ class=md-nav__link> <span class=md-ellipsis> faster-whisper </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-feed2toot/ class=md-nav__link> <span class=md-ellipsis> feed2toot </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-ferdium/ class=md-nav__link> <span class=md-ellipsis> ferdium </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-ffmpeg/ class=md-nav__link> <span class=md-ellipsis> ffmpeg </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-filezilla/ class=md-nav__link> <span class=md-ellipsis> filezilla </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-firefox/ class=md-nav__link> <span class=md-ellipsis> firefox </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-fleet/ class=md-nav__link> <span class=md-ellipsis> fleet </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-flexget/ class=md-nav__link> <span class=md-ellipsis> flexget </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-foldingathome/ class=md-nav__link> <span class=md-ellipsis> foldingathome </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-freecad/ class=md-nav__link> <span class=md-ellipsis> freecad </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-freetube/ class=md-nav__link> <span class=md-ellipsis> freetube </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-freshrss/ class=md-nav__link> <span class=md-ellipsis> freshrss </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-gimp/ class=md-nav__link> <span class=md-ellipsis> gimp </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-github-desktop/ class=md-nav__link> <span class=md-ellipsis> github-desktop </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-gitqlient/ class=md-nav__link> <span class=md-ellipsis> gitqlient </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-grav/ class=md-nav__link> <span class=md-ellipsis> grav </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-grocy/ class=md-nav__link> <span class=md-ellipsis> grocy </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-habridge/ class=md-nav__link> <span class=md-ellipsis> habridge </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-headphones/ class=md-nav__link> <span class=md-ellipsis> headphones </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-healthchecks/ class=md-nav__link> <span class=md-ellipsis> healthchecks </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-hedgedoc/ class=md-nav__link> <span class=md-ellipsis> hedgedoc </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-heimdall/ class=md-nav__link> <span class=md-ellipsis> heimdall </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-hishtory-server/ class=md-nav__link> <span class=md-ellipsis> hishtory-server </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-homeassistant/ class=md-nav__link> <span class=md-ellipsis> homeassistant </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-htpcmanager/ class=md-nav__link> <span class=md-ellipsis> htpcmanager </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-inkscape/ class=md-nav__link> <span class=md-ellipsis> inkscape </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-jackett/ class=md-nav__link> <span class=md-ellipsis> jackett </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-jellyfin/ class=md-nav__link> <span class=md-ellipsis> jellyfin </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-kasm/ class=md-nav__link> <span class=md-ellipsis> kasm </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-kavita/ class=md-nav__link> <span class=md-ellipsis> kavita </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-kdenlive/ class=md-nav__link> <span class=md-ellipsis> kdenlive </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-keepassxc/ class=md-nav__link> <span class=md-ellipsis> keepassxc </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-kicad/ class=md-nav__link> <span class=md-ellipsis> kicad </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-kimai/ class=md-nav__link> <span class=md-ellipsis> kimai </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-krita/ class=md-nav__link> <span class=md-ellipsis> krita </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-lazylibrarian/ class=md-nav__link> <span class=md-ellipsis> lazylibrarian </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-ldap-auth/ class=md-nav__link> <span class=md-ellipsis> ldap-auth </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-libreoffice/ class=md-nav__link> <span class=md-ellipsis> libreoffice </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-librespeed/ class=md-nav__link> <span class=md-ellipsis> librespeed </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-librewolf/ class=md-nav__link> <span class=md-ellipsis> librewolf </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-lidarr/ class=md-nav__link> <span class=md-ellipsis> lidarr </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-limnoria/ class=md-nav__link> <span class=md-ellipsis> limnoria </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-lollypop/ class=md-nav__link> <span class=md-ellipsis> lollypop </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-lychee/ class=md-nav__link> <span class=md-ellipsis> lychee </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-mariadb/ class=md-nav__link> <span class=md-ellipsis> mariadb </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-mastodon/ class=md-nav__link> <span class=md-ellipsis> mastodon </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-mediaelch/ class=md-nav__link> <span class=md-ellipsis> mediaelch </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-medusa/ class=md-nav__link> <span class=md-ellipsis> medusa </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-minetest/ class=md-nav__link> <span class=md-ellipsis> minetest </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-minisatip/ class=md-nav__link> <span class=md-ellipsis> minisatip </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-monica/ class=md-nav__link> <span class=md-ellipsis> monica </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-mstream/ class=md-nav__link> <span class=md-ellipsis> mstream </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-mullvad-browser/ class=md-nav__link> <span class=md-ellipsis> mullvad-browser </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-mylar3/ class=md-nav__link> <span class=md-ellipsis> mylar3 </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-mysql-workbench/ class=md-nav__link> <span class=md-ellipsis> mysql-workbench </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-nano-wallet/ class=md-nav__link> <span class=md-ellipsis> nano-wallet </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-nano/ class=md-nav__link> <span class=md-ellipsis> nano </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-netbootxyz/ class=md-nav__link> <span class=md-ellipsis> netbootxyz </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-netbox/ class=md-nav__link> <span class=md-ellipsis> netbox </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-nextcloud/ class=md-nav__link> <span class=md-ellipsis> nextcloud </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-nginx/ class=md-nav__link> <span class=md-ellipsis> nginx </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-ngircd/ class=md-nav__link> <span class=md-ellipsis> ngircd </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-nzbhydra2/ class=md-nav__link> <span class=md-ellipsis> nzbhydra2 </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-obsidian/ class=md-nav__link> <span class=md-ellipsis> obsidian </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-ombi/ class=md-nav__link> <span class=md-ellipsis> ombi </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-openssh-server/ class=md-nav__link> <span class=md-ellipsis> openssh-server </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-openvscode-server/ class=md-nav__link> <span class=md-ellipsis> openvscode-server </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-opera/ class=md-nav__link> <span class=md-ellipsis> opera </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-orcaslicer/ class=md-nav__link> <span class=md-ellipsis> orcaslicer </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-oscam/ class=md-nav__link> <span class=md-ellipsis> oscam </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-overseerr/ class=md-nav__link> <span class=md-ellipsis> overseerr </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-pairdrop/ class=md-nav__link> <span class=md-ellipsis> pairdrop </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-phpmyadmin/ class=md-nav__link> <span class=md-ellipsis> phpmyadmin </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-pidgin/ class=md-nav__link> <span class=md-ellipsis> pidgin </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-piper/ class=md-nav__link> <span class=md-ellipsis> piper </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-piwigo/ class=md-nav__link> <span class=md-ellipsis> piwigo </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-plex-meta-manager/ class=md-nav__link> <span class=md-ellipsis> plex-meta-manager </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-plex/ class=md-nav__link> <span class=md-ellipsis> plex </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-projectsend/ class=md-nav__link> <span class=md-ellipsis> projectsend </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-prowlarr/ class=md-nav__link> <span class=md-ellipsis> prowlarr </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-pwndrop/ class=md-nav__link> <span class=md-ellipsis> pwndrop </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-pydio-cells/ class=md-nav__link> <span class=md-ellipsis> pydio-cells </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-pyload-ng/ class=md-nav__link> <span class=md-ellipsis> pyload-ng </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-pylon/ class=md-nav__link> <span class=md-ellipsis> pylon </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-python/ class=md-nav__link> <span class=md-ellipsis> python </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-qbittorrent/ class=md-nav__link> <span class=md-ellipsis> qbittorrent </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-qdirstat/ class=md-nav__link> <span class=md-ellipsis> qdirstat </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-quassel-core/ class=md-nav__link> <span class=md-ellipsis> quassel-core </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-quassel-web/ class=md-nav__link> <span class=md-ellipsis> quassel-web </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-radarr/ class=md-nav__link> <span class=md-ellipsis> radarr </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-raneto/ class=md-nav__link> <span class=md-ellipsis> raneto </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-rdesktop/ class=md-nav__link> <span class=md-ellipsis> rdesktop </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-readarr/ class=md-nav__link> <span class=md-ellipsis> readarr </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-remmina/ class=md-nav__link> <span class=md-ellipsis> remmina </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-resilio-sync/ class=md-nav__link> <span class=md-ellipsis> resilio-sync </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-rsnapshot/ class=md-nav__link> <span class=md-ellipsis> rsnapshot </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-sabnzbd/ class=md-nav__link> <span class=md-ellipsis> sabnzbd </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-series-troxide/ class=md-nav__link> <span class=md-ellipsis> series-troxide </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-shotcut/ class=md-nav__link> <span class=md-ellipsis> shotcut </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-sickchill/ class=md-nav__link> <span class=md-ellipsis> sickchill </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-sickgear/ class=md-nav__link> <span class=md-ellipsis> sickgear </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-smokeping/ class=md-nav__link> <span class=md-ellipsis> smokeping </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-snapdrop/ class=md-nav__link> <span class=md-ellipsis> snapdrop </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-snipe-it/ class=md-nav__link> <span class=md-ellipsis> snipe-it </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-socket-proxy/ class=md-nav__link> <span class=md-ellipsis> socket-proxy </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-sonarr/ class=md-nav__link> <span class=md-ellipsis> sonarr </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-speedtest-tracker/ class=md-nav__link> <span class=md-ellipsis> speedtest-tracker </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-sqlitebrowser/ class=md-nav__link> <span class=md-ellipsis> sqlitebrowser </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-steamos/ class=md-nav__link> <span class=md-ellipsis> steamos </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-swag/ class=md-nav__link> <span class=md-ellipsis> swag </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-synclounge/ class=md-nav__link> <span class=md-ellipsis> synclounge </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-syncthing/ class=md-nav__link> <span class=md-ellipsis> syncthing </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-syslog-ng/ class=md-nav__link> <span class=md-ellipsis> syslog-ng </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-tautulli/ class=md-nav__link> <span class=md-ellipsis> tautulli </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-thelounge/ class=md-nav__link> <span class=md-ellipsis> thelounge </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-transmission/ class=md-nav__link> <span class=md-ellipsis> transmission </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-tvheadend/ class=md-nav__link> <span class=md-ellipsis> tvheadend </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-ubooquity/ class=md-nav__link> <span class=md-ellipsis> ubooquity </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-unifi-network-application/ class=md-nav__link> <span class=md-ellipsis> unifi-network-application </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-vscodium/ class=md-nav__link> <span class=md-ellipsis> vscodium </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-webcord/ class=md-nav__link> <span class=md-ellipsis> webcord </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-webgrabplus/ class=md-nav__link> <span class=md-ellipsis> webgrabplus </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-webtop/ class=md-nav__link> <span class=md-ellipsis> webtop </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-wikijs/ class=md-nav__link> <span class=md-ellipsis> wikijs </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-wireguard/ class=md-nav__link> <span class=md-ellipsis> wireguard </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-wireshark/ class=md-nav__link> <span class=md-ellipsis> wireshark </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-wps-office/ class=md-nav__link> <span class=md-ellipsis> wps-office </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-xbackbone/ class=md-nav__link> <span class=md-ellipsis> xbackbone </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-your_spotify/ class=md-nav__link> <span class=md-ellipsis> your_spotify </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-znc/ class=md-nav__link> <span class=md-ellipsis> znc </span> </a> </li> <li class=md-nav__item> <a href=../../images/docker-zotero/ class=md-nav__link> <span class=md-ellipsis> zotero </span> </a> </li> </ul> </nav> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_3_2> <label class=md-nav__link for=__nav_3_2 id=__nav_3_2_label tabindex=0> <span class=md-ellipsis> Deprecated Images </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=2 aria-labelledby=__nav_3_2_label aria-expanded=false> <label class=md-nav__title for=__nav_3_2> <span class="md-nav__icon md-icon"></span> Deprecated Images </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../deprecated_images/docker-airsonic/ class=md-nav__link> <span class=md-ellipsis> airsonic </span> </a> </li> <li class=md-nav__item> <a href=../../deprecated_images/docker-baseimage-alpine-python/ class=md-nav__link> <span class=md-ellipsis> baseimage-alpine-python </span> </a> </li> <li class=md-nav__item> <a href=../../deprecated_images/docker-baseimage-cloud9/ class=md-nav__link> <span class=md-ellipsis> baseimage-cloud9 </span> </a> </li> <li class=md-nav__item> <a href=../../deprecated_images/docker-baseimage-guacgui/ class=md-nav__link> <span class=md-ellipsis> baseimage-guacgui </span> </a> </li> <li class=md-nav__item> <a href=../../deprecated_images/docker-baseimage-gui/ class=md-nav__link> <span class=md-ellipsis> baseimage-gui </span> </a> </li> <li class=md-nav__item> <a href=../../deprecated_images/docker-baseimage-mono/ class=md-nav__link> <span class=md-ellipsis> baseimage-mono </span> </a> </li> <li class=md-nav__item> <a href=../../deprecated_images/docker-baseimage-rdesktop-web/ class=md-nav__link> <span class=md-ellipsis> baseimage-rdesktop-web </span> </a> </li> <li class=md-nav__item> <a href=../../deprecated_images/docker-baseimage-rdesktop/ class=md-nav__link> <span class=md-ellipsis> baseimage-rdesktop </span> </a> </li> <li class=md-nav__item> <a href=../../deprecated_images/docker-booksonic/ class=md-nav__link> <span class=md-ellipsis> booksonic </span> </a> </li> <li class=md-nav__item> <a href=../../deprecated_images/docker-cardigann/ class=md-nav__link> <span class=md-ellipsis> cardigann </span> </a> </li> <li class=md-nav__item> <a href=../../deprecated_images/docker-chevereto/ class=md-nav__link> <span class=md-ellipsis> chevereto </span> </a> </li> <li class=md-nav__item> <a href=../../deprecated_images/docker-clarkson/ class=md-nav__link> <span class=md-ellipsis> clarkson </span> </a> </li> <li class=md-nav__item> <a href=../../deprecated_images/docker-cloud9/ class=md-nav__link> <span class=md-ellipsis> cloud9 </span> </a> </li> <li class=md-nav__item> <a href=../../deprecated_images/docker-codiad/ class=md-nav__link> <span class=md-ellipsis> codiad </span> </a> </li> <li class=md-nav__item> <a href=../../deprecated_images/docker-codimd/ class=md-nav__link> <span class=md-ellipsis> codimd </span> </a> </li> <li class=md-nav__item> <a href=../../deprecated_images/docker-couchpotato/ class=md-nav__link> <span class=md-ellipsis> couchpotato </span> </a> </li> <li class=md-nav__item> <a href=../../deprecated_images/docker-dillinger/ class=md-nav__link> <span class=md-ellipsis> dillinger </span> </a> </li> <li class=md-nav__item> <a href=../../deprecated_images/docker-docker-compose/ class=md-nav__link> <span class=md-ellipsis> docker-compose </span> </a> </li> <li class=md-nav__item> <a href=../../deprecated_images/docker-endlessh/ class=md-nav__link> <span class=md-ellipsis> endlessh </span> </a> </li> <li class=md-nav__item> <a href=../../deprecated_images/docker-gazee/ class=md-nav__link> <span class=md-ellipsis> gazee </span> </a> </li> <li class=md-nav__item> <a href=../../deprecated_images/docker-gmail-order-bot/ class=md-nav__link> <span class=md-ellipsis> gmail-order-bot </span> </a> </li> <li class=md-nav__item> <a href=../../deprecated_images/docker-guacd/ class=md-nav__link> <span class=md-ellipsis> guacd </span> </a> </li> <li class=md-nav__item> <a href=../../deprecated_images/docker-hydra/ class=md-nav__link> <span class=md-ellipsis> hydra </span> </a> </li> <li class=md-nav__item> <a href=../../deprecated_images/docker-hydra2/ class=md-nav__link> <span class=md-ellipsis> hydra2 </span> </a> </li> <li class=md-nav__item> <a href=../../deprecated_images/docker-ipfs/ class=md-nav__link> <span class=md-ellipsis> ipfs </span> </a> </li> <li class=md-nav__item> <a href=../../deprecated_images/docker-kanzi/ class=md-nav__link> <span class=md-ellipsis> kanzi </span> </a> </li> <li class=md-nav__item> <a href=../../deprecated_images/docker-letsencrypt/ class=md-nav__link> <span class=md-ellipsis> letsencrypt </span> </a> </li> <li class=md-nav__item> <a href=../../deprecated_images/docker-libresonic/ class=md-nav__link> <span class=md-ellipsis> libresonic </span> </a> </li> <li class=md-nav__item> <a href=../../deprecated_images/docker-musicbrainz/ class=md-nav__link> <span class=md-ellipsis> musicbrainz </span> </a> </li> <li class=md-nav__item> <a href=../../deprecated_images/docker-muximux/ class=md-nav__link> <span class=md-ellipsis> muximux </span> </a> </li> <li class=md-nav__item> <a href=../../deprecated_images/docker-mylar/ class=md-nav__link> <span class=md-ellipsis> mylar </span> </a> </li> <li class=md-nav__item> <a href=../../deprecated_images/docker-nano-discord-bot/ class=md-nav__link> <span class=md-ellipsis> nano-discord-bot </span> </a> </li> <li class=md-nav__item> <a href=../../deprecated_images/docker-nntp2nntp/ class=md-nav__link> <span class=md-ellipsis> nntp2nntp </span> </a> </li> <li class=md-nav__item> <a href=../../deprecated_images/docker-nzbget/ class=md-nav__link> <span class=md-ellipsis> nzbget </span> </a> </li> <li class=md-nav__item> <a href=../../deprecated_images/docker-openvpn-as/ class=md-nav__link> <span class=md-ellipsis> openvpn-as </span> </a> </li> <li class=md-nav__item> <a href=../../deprecated_images/docker-organizr/ class=md-nav__link> <span class=md-ellipsis> organizr </span> </a> </li> <li class=md-nav__item> <a href=../../deprecated_images/docker-paperless-ng/ class=md-nav__link> <span class=md-ellipsis> paperless-ng </span> </a> </li> <li class=md-nav__item> <a href=../../deprecated_images/docker-paperless-ngx/ class=md-nav__link> <span class=md-ellipsis> paperless-ngx </span> </a> </li> <li class=md-nav__item> <a href=../../deprecated_images/docker-papermerge/ class=md-nav__link> <span class=md-ellipsis> papermerge </span> </a> </li> <li class=md-nav__item> <a href=../../deprecated_images/docker-photoshow/ class=md-nav__link> <span class=md-ellipsis> photoshow </span> </a> </li> <li class=md-nav__item> <a href=../../deprecated_images/docker-pixapop/ class=md-nav__link> <span class=md-ellipsis> pixapop </span> </a> </li> <li class=md-nav__item> <a href=../../deprecated_images/docker-pydio/ class=md-nav__link> <span class=md-ellipsis> pydio </span> </a> </li> <li class=md-nav__item> <a href=../../deprecated_images/docker-pyload/ class=md-nav__link> <span class=md-ellipsis> pyload </span> </a> </li> <li class=md-nav__item> <a href=../../deprecated_images/docker-readme-sync/ class=md-nav__link> <span class=md-ellipsis> readme-sync </span> </a> </li> <li class=md-nav__item> <a href=../../deprecated_images/docker-requestrr/ class=md-nav__link> <span class=md-ellipsis> requestrr </span> </a> </li> <li class=md-nav__item> <a href=../../deprecated_images/docker-rutorrent/ class=md-nav__link> <span class=md-ellipsis> rutorrent </span> </a> </li> <li class=md-nav__item> <a href=../../deprecated_images/docker-scrutiny/ class=md-nav__link> <span class=md-ellipsis> scrutiny </span> </a> </li> <li class=md-nav__item> <a href=../../deprecated_images/docker-shout-irc/ class=md-nav__link> <span class=md-ellipsis> shout-irc </span> </a> </li> <li class=md-nav__item> <a href=../../deprecated_images/docker-sickrage/ class=md-nav__link> <span class=md-ellipsis> sickrage </span> </a> </li> <li class=md-nav__item> <a href=../../deprecated_images/docker-taisun/ class=md-nav__link> <span class=md-ellipsis> taisun </span> </a> </li> <li class=md-nav__item> <a href=../../deprecated_images/docker-tester/ class=md-nav__link> <span class=md-ellipsis> tester </span> </a> </li> <li class=md-nav__item> <a href=../../deprecated_images/docker-unifi-controller/ class=md-nav__link> <span class=md-ellipsis> unifi-controller </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=../../FAQ/ class=md-nav__link> <span class=md-ellipsis> Frequently Asked Questions </span> </a> </li> <li class="md-nav__item md-nav__item--nested"> <input class="md-nav__toggle md-toggle " type=checkbox id=__nav_5> <label class=md-nav__link for=__nav_5 id=__nav_5_label tabindex=0> <span class=md-ellipsis> Misc </span> <span class="md-nav__icon md-icon"></span> </label> <nav class=md-nav data-md-level=1 aria-labelledby=__nav_5_label aria-expanded=false> <label class=md-nav__title for=__nav_5> <span class="md-nav__icon md-icon"></span> Misc </label> <ul class=md-nav__list data-md-scrollfix> <li class=md-nav__item> <a href=../../misc/awesome-lsio/ class=md-nav__link> <span class=md-ellipsis> Awesome LSIO </span> </a> </li> <li class=md-nav__item> <a href=../../misc/finances/ class=md-nav__link> <span class=md-ellipsis> Finances </span> </a> </li> <li class=md-nav__item> <a href=../../misc/support-policy/ class=md-nav__link> <span class=md-ellipsis> LinuxServer Support Policy </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class="md-sidebar md-sidebar--secondary" data-md-component=sidebar data-md-type=toc> <div class=md-sidebar__scrollwrap> <div class=md-sidebar__inner> <nav class="md-nav md-nav--secondary" aria-label="Table of contents"> <label class=md-nav__title for=__toc> <span class="md-nav__icon md-icon"></span> Table of contents </label> <ul class=md-nav__list data-md-component=toc data-md-scrollfix> <li class=md-nav__item> <a href=#introduction class=md-nav__link> <span class=md-ellipsis> Introduction </span> </a> <nav class=md-nav aria-label=Introduction> <ul class=md-nav__list> <li class=md-nav__item> <a href=#what-are-ssl-certs class=md-nav__link> <span class=md-ellipsis> What are SSL certs? </span> </a> </li> <li class=md-nav__item> <a href=#what-is-lets-encrypt-andor-zerossl class=md-nav__link> <span class=md-ellipsis> What is Let's Encrypt (and/or ZeroSSL)? </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#creating-a-swag-container class=md-nav__link> <span class=md-ellipsis> Creating a SWAG container </span> </a> <nav class=md-nav aria-label="Creating a SWAG container"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#docker-cli class=md-nav__link> <span class=md-ellipsis> docker cli </span> </a> </li> <li class=md-nav__item> <a href=#docker-compose class=md-nav__link> <span class=md-ellipsis> docker-compose </span> </a> </li> <li class=md-nav__item> <a href=#authorization-method class=md-nav__link> <span class=md-ellipsis> Authorization method </span> </a> </li> <li class=md-nav__item> <a href=#cert-provider-lets-encrypt-vs-zerossl class=md-nav__link> <span class=md-ellipsis> Cert Provider (Let's Encrypt vs ZeroSSL) </span> </a> </li> <li class=md-nav__item> <a href=#port-forwards class=md-nav__link> <span class=md-ellipsis> Port forwards </span> </a> </li> <li class=md-nav__item> <a href=#docker-networking class=md-nav__link> <span class=md-ellipsis> Docker networking </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#container-setup-examples class=md-nav__link> <span class=md-ellipsis> Container setup examples </span> </a> <nav class=md-nav aria-label="Container setup examples"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#create-container-via-http-validation class=md-nav__link> <span class=md-ellipsis> Create container via http validation </span> </a> </li> <li class=md-nav__item> <a href=#create-container-via-dns-validation-with-a-wildcard-cert class=md-nav__link> <span class=md-ellipsis> Create container via dns validation with a wildcard cert </span> </a> </li> <li class=md-nav__item> <a href=#create-container-via-duckdns-validation-with-a-wildcard-cert class=md-nav__link> <span class=md-ellipsis> Create container via duckdns validation with a wildcard cert </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#web-hosting-examples class=md-nav__link> <span class=md-ellipsis> Web hosting examples </span> </a> <nav class=md-nav aria-label="Web hosting examples"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#simple-html-web-page-hosting class=md-nav__link> <span class=md-ellipsis> Simple html web page hosting </span> </a> </li> <li class=md-nav__item> <a href=#hosting-a-wordpress-site class=md-nav__link> <span class=md-ellipsis> Hosting a Wordpress site </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#reverse-proxy class=md-nav__link> <span class=md-ellipsis> Reverse Proxy </span> </a> <nav class=md-nav aria-label="Reverse Proxy"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#preset-proxy-confs class=md-nav__link> <span class=md-ellipsis> Preset proxy confs </span> </a> </li> <li class=md-nav__item> <a href=#understanding-the-proxy-conf-structure class=md-nav__link> <span class=md-ellipsis> Understanding the proxy conf structure </span> </a> <nav class=md-nav aria-label="Understanding the proxy conf structure"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#subdomain-proxy-conf class=md-nav__link> <span class=md-ellipsis> Subdomain proxy conf </span> </a> </li> <li class=md-nav__item> <a href=#subfolder-proxy-conf class=md-nav__link> <span class=md-ellipsis> Subfolder proxy conf </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#ombi-subdomain-reverse-proxy-example class=md-nav__link> <span class=md-ellipsis> Ombi subdomain reverse proxy example </span> </a> </li> <li class=md-nav__item> <a href=#nextcloud-subdomain-reverse-proxy-example class=md-nav__link> <span class=md-ellipsis> Nextcloud subdomain reverse proxy example </span> </a> </li> <li class=md-nav__item> <a href=#plex-subfolder-reverse-proxy-example class=md-nav__link> <span class=md-ellipsis> Plex subfolder reverse proxy example </span> </a> </li> <li class=md-nav__item> <a href=#using-heimdall-as-the-home-page-at-domain-root class=md-nav__link> <span class=md-ellipsis> Using Heimdall as the home page at domain root </span> </a> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#troubleshooting class=md-nav__link> <span class=md-ellipsis> Troubleshooting </span> </a> <nav class=md-nav aria-label=Troubleshooting> <ul class=md-nav__list> <li class=md-nav__item> <a href=#common-errors class=md-nav__link> <span class=md-ellipsis> Common errors </span> </a> <nav class=md-nav aria-label="Common errors"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#404 class=md-nav__link> <span class=md-ellipsis> 404 </span> </a> </li> <li class=md-nav__item> <a href=#502 class=md-nav__link> <span class=md-ellipsis> 502 </span> </a> </li> </ul> </nav> </li> </ul> </nav> </li> <li class=md-nav__item> <a href=#final-thoughts class=md-nav__link> <span class=md-ellipsis> Final Thoughts </span> </a> <nav class=md-nav aria-label="Final Thoughts"> <ul class=md-nav__list> <li class=md-nav__item> <a href=#how-to-request-support class=md-nav__link> <span class=md-ellipsis> How to Request Support </span> </a> </li> </ul> </nav> </li> </ul> </nav> </div> </div> </div> <div class=md-content data-md-component=content> <article class="md-content__inner md-typeset"> <h1 id=swag>SWAG<a class=headerlink href=#swag title="Permanent link">&para;</a></h1> <p>The goal of this guide is to give you ideas on what can be accomplished with the <a href=https://hub.docker.com/r/linuxserver/swag>LinuxServer SWAG docker image</a> and to get you started. We will explain some of the basic concepts and limitations, and then we'll provide you with common examples. If you have further questions, you can ask on <a href=https://discourse.linuxserver.io/ >our forum</a> or join our Discord for conversations: <a href=https://discord.gg/YWrKVTn>https://discord.gg/YWrKVTn</a></p> <h2 id=introduction>Introduction<a class=headerlink href=#introduction title="Permanent link">&para;</a></h2> <h3 id=what-are-ssl-certs>What are SSL certs?<a class=headerlink href=#what-are-ssl-certs title="Permanent link">&para;</a></h3> <p>SSL certs allow users of a service to communicate via encrypted data transmitted up and down. Third party trusted certs also allow users to make sure that the remote service they are connecting to is really who they say they are and not someone else in the middle. When we run a web server for reasons like hosting websites or reverse proxying services on our own domain, we need to set it up with third party trusted ssl certs so client browsers trust it and communicate with it securely. When you connect to a website with a trusted cert, most browsers show a padlock icon next to the address bar to indicate that. Without a trusted cert (ie. with self signed cert) most browsers show warning pages or may block access to the website as the website identity cannot be confirmed via a trusted third party.</p> <h3 id=what-is-lets-encrypt-andor-zerossl>What is Let's Encrypt (and/or ZeroSSL)?<a class=headerlink href=#what-is-lets-encrypt-andor-zerossl title="Permanent link">&para;</a></h3> <p>In the past, the common way to get a trusted ssl cert was to contact one of the providers, send them the relevant info to prove ownership of a domain and pay for the service. Nowadays, with <a href=https://letsencrypt.org/ >Let's Encrypt</a> and <a href=https://zerossl.com/ >ZeroSSL</a>, one can get free certs via automated means.</p> <p>The <a href=https://hub.docker.com/r/linuxserver/swag>SWAG docker image</a>, published and maintained by <a href=https://linuxserver.io>LinuxServer.io</a>, makes setting up a full-fledged web server with auto generated and renewed ssl certs very easy. It is essentially an nginx webserver with php7, fail2ban (intrusion prevention) and Let's Encrypt cert validation built-in. It is just MySQL short of a LEMP stack and therefore is best paired with our <a href=https://hub.docker.com/r/linuxserver/mariadb>MariaDB docker image</a>.</p> <h2 id=creating-a-swag-container>Creating a SWAG container<a class=headerlink href=#creating-a-swag-container title="Permanent link">&para;</a></h2> <p>Most of the initial settings for getting a webserver with ssl certs up are done through the docker run/create or compose yaml parameters. Here's a list of all the settings available including the optional ones. It is safe to remove unnecessary parameters for different scenarios.</p> <h3 id=docker-cli>docker cli<a class=headerlink href=#docker-cli title="Permanent link">&para;</a></h3> <div class="language-shell highlight"><pre><span></span><code><span id=__span-0-1><a id=__codelineno-0-1 name=__codelineno-0-1 href=#__codelineno-0-1></a>docker<span class=w> </span>create<span class=w> </span><span class=se>\</span>
</span><span id=__span-0-2><a id=__codelineno-0-2 name=__codelineno-0-2 href=#__codelineno-0-2></a><span class=w> </span>--name<span class=o>=</span>swag<span class=w> </span><span class=se>\</span>
</span><span id=__span-0-3><a id=__codelineno-0-3 name=__codelineno-0-3 href=#__codelineno-0-3></a><span class=w> </span>--cap-add<span class=o>=</span>NET_ADMIN<span class=w> </span><span class=se>\</span>
</span><span id=__span-0-4><a id=__codelineno-0-4 name=__codelineno-0-4 href=#__codelineno-0-4></a><span class=w> </span>-e<span class=w> </span><span class=nv>PUID</span><span class=o>=</span><span class=m>1000</span><span class=w> </span><span class=se>\</span>
</span><span id=__span-0-5><a id=__codelineno-0-5 name=__codelineno-0-5 href=#__codelineno-0-5></a><span class=w> </span>-e<span class=w> </span><span class=nv>PGID</span><span class=o>=</span><span class=m>1000</span><span class=w> </span><span class=se>\</span>
</span><span id=__span-0-6><a id=__codelineno-0-6 name=__codelineno-0-6 href=#__codelineno-0-6></a><span class=w> </span>-e<span class=w> </span><span class=nv>TZ</span><span class=o>=</span>Europe/London<span class=w> </span><span class=se>\</span>
</span><span id=__span-0-7><a id=__codelineno-0-7 name=__codelineno-0-7 href=#__codelineno-0-7></a><span class=w> </span>-e<span class=w> </span><span class=nv>URL</span><span class=o>=</span>yourdomain.url<span class=w> </span><span class=se>\</span>
</span><span id=__span-0-8><a id=__codelineno-0-8 name=__codelineno-0-8 href=#__codelineno-0-8></a><span class=w> </span>-e<span class=w> </span><span class=nv>SUBDOMAINS</span><span class=o>=</span>www,<span class=w> </span><span class=se>\</span>
</span><span id=__span-0-9><a id=__codelineno-0-9 name=__codelineno-0-9 href=#__codelineno-0-9></a><span class=w> </span>-e<span class=w> </span><span class=nv>VALIDATION</span><span class=o>=</span>http<span class=w> </span><span class=se>\</span>
</span><span id=__span-0-10><a id=__codelineno-0-10 name=__codelineno-0-10 href=#__codelineno-0-10></a><span class=w> </span>-e<span class=w> </span><span class=nv>CERTPROVIDER</span><span class=o>=</span><span class=w> </span><span class=sb>`</span><span class=c1>#optional` \</span>
</span><span id=__span-0-11><a id=__codelineno-0-11 name=__codelineno-0-11 href=#__codelineno-0-11></a><span class=w> </span>-e<span class=w> </span><span class=nv>DNSPLUGIN</span><span class=o>=</span>cloudflare<span class=w> </span><span class=sb>`</span><span class=c1>#optional` \</span>
</span><span id=__span-0-12><a id=__codelineno-0-12 name=__codelineno-0-12 href=#__codelineno-0-12></a><span class=w> </span>-e<span class=w> </span><span class=nv>DUCKDNSTOKEN</span><span class=o>=</span>&lt;token&gt;<span class=w> </span><span class=sb>`</span><span class=c1>#optional` \</span>
</span><span id=__span-0-13><a id=__codelineno-0-13 name=__codelineno-0-13 href=#__codelineno-0-13></a><span class=w> </span>-e<span class=w> </span><span class=nv>EMAIL</span><span class=o>=</span>&lt;e-mail&gt;<span class=w> </span><span class=sb>`</span><span class=c1>#optional` \</span>
</span><span id=__span-0-14><a id=__codelineno-0-14 name=__codelineno-0-14 href=#__codelineno-0-14></a><span class=w> </span>-e<span class=w> </span><span class=nv>ONLY_SUBDOMAINS</span><span class=o>=</span><span class=nb>false</span><span class=w> </span><span class=sb>`</span><span class=c1>#optional` \</span>
</span><span id=__span-0-15><a id=__codelineno-0-15 name=__codelineno-0-15 href=#__codelineno-0-15></a><span class=w> </span>-e<span class=w> </span><span class=nv>EXTRA_DOMAINS</span><span class=o>=</span>&lt;extradomains&gt;<span class=w> </span><span class=sb>`</span><span class=c1>#optional` \</span>
</span><span id=__span-0-16><a id=__codelineno-0-16 name=__codelineno-0-16 href=#__codelineno-0-16></a><span class=w> </span>-e<span class=w> </span><span class=nv>STAGING</span><span class=o>=</span><span class=nb>false</span><span class=w> </span><span class=sb>`</span><span class=c1>#optional` \</span>
</span><span id=__span-0-17><a id=__codelineno-0-17 name=__codelineno-0-17 href=#__codelineno-0-17></a><span class=w> </span>-p<span class=w> </span><span class=m>443</span>:443<span class=w> </span><span class=se>\</span>
</span><span id=__span-0-18><a id=__codelineno-0-18 name=__codelineno-0-18 href=#__codelineno-0-18></a><span class=w> </span>-p<span class=w> </span><span class=m>80</span>:80<span class=w> </span><span class=sb>`</span><span class=c1>#optional` \</span>
</span><span id=__span-0-19><a id=__codelineno-0-19 name=__codelineno-0-19 href=#__codelineno-0-19></a><span class=w> </span>-v<span class=w> </span>&lt;/path/to/appdata/config&gt;:/config<span class=w> </span><span class=se>\</span>
</span><span id=__span-0-20><a id=__codelineno-0-20 name=__codelineno-0-20 href=#__codelineno-0-20></a><span class=w> </span>--restart<span class=w> </span>unless-stopped<span class=w> </span><span class=se>\</span>
</span><span id=__span-0-21><a id=__codelineno-0-21 name=__codelineno-0-21 href=#__codelineno-0-21></a><span class=w> </span>lscr.io/linuxserver/swag
</span></code></pre></div> <h3 id=docker-compose>docker-compose<a class=headerlink href=#docker-compose title="Permanent link">&para;</a></h3> <p>Compatible with docker-compose v2 schemas.</p> <div class="language-yaml highlight"><pre><span></span><code><span id=__span-1-1><a id=__codelineno-1-1 name=__codelineno-1-1 href=#__codelineno-1-1></a><span class=nn>---</span>
</span><span id=__span-1-2><a id=__codelineno-1-2 name=__codelineno-1-2 href=#__codelineno-1-2></a><span class=nt>version</span><span class=p>:</span><span class=w> </span><span class=s>&quot;2.1&quot;</span>
</span><span id=__span-1-3><a id=__codelineno-1-3 name=__codelineno-1-3 href=#__codelineno-1-3></a><span class=nt>services</span><span class=p>:</span>
</span><span id=__span-1-4><a id=__codelineno-1-4 name=__codelineno-1-4 href=#__codelineno-1-4></a><span class=w> </span><span class=nt>swag</span><span class=p>:</span>
</span><span id=__span-1-5><a id=__codelineno-1-5 name=__codelineno-1-5 href=#__codelineno-1-5></a><span class=w> </span><span class=nt>image</span><span class=p>:</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">lscr.io/linuxserver/swag</span>
</span><span id=__span-1-6><a id=__codelineno-1-6 name=__codelineno-1-6 href=#__codelineno-1-6></a><span class=w> </span><span class=nt>container_name</span><span class=p>:</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">swag</span>
</span><span id=__span-1-7><a id=__codelineno-1-7 name=__codelineno-1-7 href=#__codelineno-1-7></a><span class=w> </span><span class=nt>cap_add</span><span class=p>:</span>
</span><span id=__span-1-8><a id=__codelineno-1-8 name=__codelineno-1-8 href=#__codelineno-1-8></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">NET_ADMIN</span>
</span><span id=__span-1-9><a id=__codelineno-1-9 name=__codelineno-1-9 href=#__codelineno-1-9></a><span class=w> </span><span class=nt>environment</span><span class=p>:</span>
</span><span id=__span-1-10><a id=__codelineno-1-10 name=__codelineno-1-10 href=#__codelineno-1-10></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">PUID=1000</span>
</span><span id=__span-1-11><a id=__codelineno-1-11 name=__codelineno-1-11 href=#__codelineno-1-11></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">PGID=1000</span>
</span><span id=__span-1-12><a id=__codelineno-1-12 name=__codelineno-1-12 href=#__codelineno-1-12></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">TZ=Europe/London</span>
</span><span id=__span-1-13><a id=__codelineno-1-13 name=__codelineno-1-13 href=#__codelineno-1-13></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">URL=yourdomain.url</span>
</span><span id=__span-1-14><a id=__codelineno-1-14 name=__codelineno-1-14 href=#__codelineno-1-14></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">SUBDOMAINS=www,</span>
</span><span id=__span-1-15><a id=__codelineno-1-15 name=__codelineno-1-15 href=#__codelineno-1-15></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">VALIDATION=http</span>
</span><span id=__span-1-16><a id=__codelineno-1-16 name=__codelineno-1-16 href=#__codelineno-1-16></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">CERTPROVIDER=</span><span class=w> </span><span class=c1>#optional</span>
</span><span id=__span-1-17><a id=__codelineno-1-17 name=__codelineno-1-17 href=#__codelineno-1-17></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">DNSPLUGIN=cloudflare</span><span class=w> </span><span class=c1>#optional</span>
</span><span id=__span-1-18><a id=__codelineno-1-18 name=__codelineno-1-18 href=#__codelineno-1-18></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">DUCKDNSTOKEN=&lt;token&gt;</span><span class=w> </span><span class=c1>#optional</span>
</span><span id=__span-1-19><a id=__codelineno-1-19 name=__codelineno-1-19 href=#__codelineno-1-19></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">EMAIL=&lt;e-mail&gt;</span><span class=w> </span><span class=c1>#optional</span>
</span><span id=__span-1-20><a id=__codelineno-1-20 name=__codelineno-1-20 href=#__codelineno-1-20></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">ONLY_SUBDOMAINS=false</span><span class=w> </span><span class=c1>#optional</span>
</span><span id=__span-1-21><a id=__codelineno-1-21 name=__codelineno-1-21 href=#__codelineno-1-21></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">EXTRA_DOMAINS=&lt;extradomains&gt;</span><span class=w> </span><span class=c1>#optional</span>
</span><span id=__span-1-22><a id=__codelineno-1-22 name=__codelineno-1-22 href=#__codelineno-1-22></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">STAGING=false</span><span class=w> </span><span class=c1>#optional</span>
</span><span id=__span-1-23><a id=__codelineno-1-23 name=__codelineno-1-23 href=#__codelineno-1-23></a><span class=w> </span><span class=nt>volumes</span><span class=p>:</span>
</span><span id=__span-1-24><a id=__codelineno-1-24 name=__codelineno-1-24 href=#__codelineno-1-24></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">&lt;/path/to/appdata/config&gt;:/config</span>
</span><span id=__span-1-25><a id=__codelineno-1-25 name=__codelineno-1-25 href=#__codelineno-1-25></a><span class=w> </span><span class=nt>ports</span><span class=p>:</span>
</span><span id=__span-1-26><a id=__codelineno-1-26 name=__codelineno-1-26 href=#__codelineno-1-26></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">443:443</span>
</span><span id=__span-1-27><a id=__codelineno-1-27 name=__codelineno-1-27 href=#__codelineno-1-27></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">80:80</span><span class=w> </span><span class=c1>#optional</span>
</span><span id=__span-1-28><a id=__codelineno-1-28 name=__codelineno-1-28 href=#__codelineno-1-28></a><span class=w> </span><span class=nt>restart</span><span class=p>:</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">unless-stopped</span>
</span></code></pre></div> <h3 id=authorization-method>Authorization method<a class=headerlink href=#authorization-method title="Permanent link">&para;</a></h3> <p>Our image currently supports three different methods to validate domain ownership:</p> <ul> <li><strong>http:</strong><ul> <li>Let's Encrypt (acme) server connects to domain on port 80</li> <li>Can be owned domain or a dynamic dns address</li> </ul> </li> <li><strong>dns:</strong><ul> <li>Let's Encrypt (acme) server connects to dns provider</li> <li>Api credentials and settings entered into <code>ini</code> files under <code>/config/dns-conf/</code></li> <li>Supports wildcard certs</li> <li>Need to have own domain name (non-free)</li> </ul> </li> <li><strong>duckdns:</strong><ul> <li>Let's Encrypt (acme) server connects to DuckDNS</li> <li>Supports wildcard certs (only for the sub-subdomains)</li> <li>No need for own domain (free)</li> </ul> </li> </ul> <p>The validation is performed when the container is started for the first time. Nginx won't be up until ssl certs are successfully generated.</p> <p>The certs are valid for 90 days. The container will check the cert expiration status every night and if they are to expire within 30 days, it will attempt to auto-renew. If your certs are about to expire in less than 30 days, check the logs under <code>/config/log/letsencrypt</code> to see why the auto-renewals failed.</p> <h3 id=cert-provider-lets-encrypt-vs-zerossl>Cert Provider (Let's Encrypt vs ZeroSSL)<a class=headerlink href=#cert-provider-lets-encrypt-vs-zerossl title="Permanent link">&para;</a></h3> <p>As of January 2021, SWAG supports getting certs validated by either <a href=https://letsencrypt.org/ >Let's Encrypt</a> or <a href=https://zerossl.com/ >ZeroSSL</a>. Both services use the <a href=https://en.wikipedia.org/wiki/Automated_Certificate_Management_Environment>ACME protocol</a> as the underlying method to validate ownership. Our Certbot client in the SWAG image is ACME compliant and therefore supports both services.</p> <p>Although very similar, ZeroSSL does (at the time of writing) have a couple of advantages over Let's Encrypt:</p> <ul> <li>ZeroSSL provides unlimited certs via ACME and has no rate limits or throttling (it's quite common for new users to get throttled by Let's Encrypt due to multiple unsuccessful attempts to validate)</li> <li>ZeroSSL provides a web interface that allows users to list and manage the certs they have received</li> </ul> <p>SWAG currently defaults to Let's Encrypt as the cert provider so as not to break existing installs, however users can override that behavior by setting the environment variable <code>CERTPROVIDER=zerossl</code> to retrieve a cert from ZeroSSL instead. The only gotcha is that ZeroSSL requires the <code>EMAIL</code> env var to be set so the certs can be tied to a ZeroSSL account for management over their web interface.</p> <h3 id=port-forwards>Port forwards<a class=headerlink href=#port-forwards title="Permanent link">&para;</a></h3> <p>Port 443 mapping is required for access through <code>https://domain.com</code>. However, you don't necessarily need to have it listen on port 443 on the host server. All that is needed is to have port 443 on the router (wan) somehow forward to port 443 inside the container, while it can go through a different port on the host.</p> <p>For instance, it is ok to have port 443 on router (wan) forward to port 444 on the host, and then map port 444 to port 443 in docker run/create or compose yml.</p> <p>Port 80 forwarding is required for <code>http</code> validation only. Same rule as above applies, and it's OK to go from 80 on the router to 81 on the host, mapped to 80 in the container.</p> <h3 id=docker-networking>Docker networking<a class=headerlink href=#docker-networking title="Permanent link">&para;</a></h3> <p>SWAG container happily runs with bridge networking. However, the default bridge network in docker does not allow containers to connect each other via container names used as dns hostnames. Therefore, it is recommended to first create a <a href=https://docs.docker.com/network/bridge/ >user defined bridge network</a> and attach the containers to that network.</p> <p>If you are using docker-compose, and your services are on the same yaml, you do not need to do this, because docker-compose automatically creates a user defined bridge network and attaches each container to it as long as no other networking option is defined in their config.</p> <p>For the below examples, we will use a network named <code>lsio</code>. We can create it via <code>docker network create lsio</code>. After that, any container that is created with <code>--net=lsio</code> can ping each other by container name as dns hostname.</p> <div class="admonition info"> <p class=admonition-title>Info</p> <p>Keep in mind that dns hostnames are meant to be case-insensitive, however container names are case-sensitive. For container names to be used as dns hostnames in nginx, they should be all lowercase as nginx will convert them to all lowercase before trying to resolve.</p> </div> <h2 id=container-setup-examples>Container setup examples<a class=headerlink href=#container-setup-examples title="Permanent link">&para;</a></h2> <h3 id=create-container-via-http-validation>Create container via http validation<a class=headerlink href=#create-container-via-http-validation title="Permanent link">&para;</a></h3> <p>Let's assume our domain name is <code>linuxserver-test.com</code> and we would like our cert to also cover <code>www.linuxserver-test.com</code> and <code>ombi.linuxserver-test.com</code>. On the router, forward ports <code>80</code> and <code>443</code> to your host server. On your dns provider (if using your own domain), create an <code>A</code> record for the main domain and point it to your server IP (wan). Also create CNAMES for <code>www</code> and <code>ombi</code> and point them to the <code>A</code> record for the domain.</p> <p>With docker cli, we'll first create a user defined bridge network if we haven't already <code>docker network create lsio</code>, and then create the container:</p> <div class="language-shell highlight"><pre><span></span><code><span id=__span-2-1><a id=__codelineno-2-1 name=__codelineno-2-1 href=#__codelineno-2-1></a>docker<span class=w> </span>create<span class=w> </span><span class=se>\</span>
</span><span id=__span-2-2><a id=__codelineno-2-2 name=__codelineno-2-2 href=#__codelineno-2-2></a><span class=w> </span>--name<span class=o>=</span>swag<span class=w> </span><span class=se>\</span>
</span><span id=__span-2-3><a id=__codelineno-2-3 name=__codelineno-2-3 href=#__codelineno-2-3></a><span class=w> </span>--cap-add<span class=o>=</span>NET_ADMIN<span class=w> </span><span class=se>\</span>
</span><span id=__span-2-4><a id=__codelineno-2-4 name=__codelineno-2-4 href=#__codelineno-2-4></a><span class=w> </span>--net<span class=o>=</span>lsio<span class=w> </span><span class=se>\</span>
</span><span id=__span-2-5><a id=__codelineno-2-5 name=__codelineno-2-5 href=#__codelineno-2-5></a><span class=w> </span>-e<span class=w> </span><span class=nv>PUID</span><span class=o>=</span><span class=m>1000</span><span class=w> </span><span class=se>\</span>
</span><span id=__span-2-6><a id=__codelineno-2-6 name=__codelineno-2-6 href=#__codelineno-2-6></a><span class=w> </span>-e<span class=w> </span><span class=nv>PGID</span><span class=o>=</span><span class=m>1000</span><span class=w> </span><span class=se>\</span>
</span><span id=__span-2-7><a id=__codelineno-2-7 name=__codelineno-2-7 href=#__codelineno-2-7></a><span class=w> </span>-e<span class=w> </span><span class=nv>TZ</span><span class=o>=</span>Europe/London<span class=w> </span><span class=se>\</span>
</span><span id=__span-2-8><a id=__codelineno-2-8 name=__codelineno-2-8 href=#__codelineno-2-8></a><span class=w> </span>-e<span class=w> </span><span class=nv>URL</span><span class=o>=</span>linuxserver-test.com<span class=w> </span><span class=se>\</span>
</span><span id=__span-2-9><a id=__codelineno-2-9 name=__codelineno-2-9 href=#__codelineno-2-9></a><span class=w> </span>-e<span class=w> </span><span class=nv>SUBDOMAINS</span><span class=o>=</span>www,ombi<span class=w> </span><span class=se>\</span>
</span><span id=__span-2-10><a id=__codelineno-2-10 name=__codelineno-2-10 href=#__codelineno-2-10></a><span class=w> </span>-e<span class=w> </span><span class=nv>VALIDATION</span><span class=o>=</span>http<span class=w> </span><span class=se>\</span>
</span><span id=__span-2-11><a id=__codelineno-2-11 name=__codelineno-2-11 href=#__codelineno-2-11></a><span class=w> </span>-p<span class=w> </span><span class=m>443</span>:443<span class=w> </span><span class=se>\</span>
</span><span id=__span-2-12><a id=__codelineno-2-12 name=__codelineno-2-12 href=#__codelineno-2-12></a><span class=w> </span>-p<span class=w> </span><span class=m>80</span>:80<span class=w> </span><span class=se>\</span>
</span><span id=__span-2-13><a id=__codelineno-2-13 name=__codelineno-2-13 href=#__codelineno-2-13></a><span class=w> </span>-v<span class=w> </span>/home/aptalca/appdata/swag:/config<span class=w> </span><span class=se>\</span>
</span><span id=__span-2-14><a id=__codelineno-2-14 name=__codelineno-2-14 href=#__codelineno-2-14></a><span class=w> </span>--restart<span class=w> </span>unless-stopped<span class=w> </span><span class=se>\</span>
</span><span id=__span-2-15><a id=__codelineno-2-15 name=__codelineno-2-15 href=#__codelineno-2-15></a><span class=w> </span>lscr.io/linuxserver/swag
</span></code></pre></div> <p>Once created, we do <code>docker start swag</code> to start it.</p> <p>With docker compose, we can use the following yml:</p> <div class="language-yaml highlight"><pre><span></span><code><span id=__span-3-1><a id=__codelineno-3-1 name=__codelineno-3-1 href=#__codelineno-3-1></a><span class=nn>---</span>
</span><span id=__span-3-2><a id=__codelineno-3-2 name=__codelineno-3-2 href=#__codelineno-3-2></a><span class=nt>version</span><span class=p>:</span><span class=w> </span><span class=s>&quot;2.1&quot;</span>
</span><span id=__span-3-3><a id=__codelineno-3-3 name=__codelineno-3-3 href=#__codelineno-3-3></a><span class=nt>services</span><span class=p>:</span>
</span><span id=__span-3-4><a id=__codelineno-3-4 name=__codelineno-3-4 href=#__codelineno-3-4></a><span class=w> </span><span class=nt>swag</span><span class=p>:</span>
</span><span id=__span-3-5><a id=__codelineno-3-5 name=__codelineno-3-5 href=#__codelineno-3-5></a><span class=w> </span><span class=nt>image</span><span class=p>:</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">lscr.io/linuxserver/swag</span>
</span><span id=__span-3-6><a id=__codelineno-3-6 name=__codelineno-3-6 href=#__codelineno-3-6></a><span class=w> </span><span class=nt>container_name</span><span class=p>:</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">swag</span>
</span><span id=__span-3-7><a id=__codelineno-3-7 name=__codelineno-3-7 href=#__codelineno-3-7></a><span class=w> </span><span class=nt>cap_add</span><span class=p>:</span>
</span><span id=__span-3-8><a id=__codelineno-3-8 name=__codelineno-3-8 href=#__codelineno-3-8></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">NET_ADMIN</span>
</span><span id=__span-3-9><a id=__codelineno-3-9 name=__codelineno-3-9 href=#__codelineno-3-9></a><span class=w> </span><span class=nt>environment</span><span class=p>:</span>
</span><span id=__span-3-10><a id=__codelineno-3-10 name=__codelineno-3-10 href=#__codelineno-3-10></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">PUID=1000</span>
</span><span id=__span-3-11><a id=__codelineno-3-11 name=__codelineno-3-11 href=#__codelineno-3-11></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">PGID=1000</span>
</span><span id=__span-3-12><a id=__codelineno-3-12 name=__codelineno-3-12 href=#__codelineno-3-12></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">TZ=Europe/London</span>
</span><span id=__span-3-13><a id=__codelineno-3-13 name=__codelineno-3-13 href=#__codelineno-3-13></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">URL=linuxserver-test.com</span>
</span><span id=__span-3-14><a id=__codelineno-3-14 name=__codelineno-3-14 href=#__codelineno-3-14></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">SUBDOMAINS=www,ombi</span>
</span><span id=__span-3-15><a id=__codelineno-3-15 name=__codelineno-3-15 href=#__codelineno-3-15></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">VALIDATION=http</span>
</span><span id=__span-3-16><a id=__codelineno-3-16 name=__codelineno-3-16 href=#__codelineno-3-16></a><span class=w> </span><span class=nt>volumes</span><span class=p>:</span>
</span><span id=__span-3-17><a id=__codelineno-3-17 name=__codelineno-3-17 href=#__codelineno-3-17></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">/home/aptalca/appdata/swag:/config</span>
</span><span id=__span-3-18><a id=__codelineno-3-18 name=__codelineno-3-18 href=#__codelineno-3-18></a><span class=w> </span><span class=nt>ports</span><span class=p>:</span>
</span><span id=__span-3-19><a id=__codelineno-3-19 name=__codelineno-3-19 href=#__codelineno-3-19></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">443:443</span>
</span><span id=__span-3-20><a id=__codelineno-3-20 name=__codelineno-3-20 href=#__codelineno-3-20></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">80:80</span>
</span><span id=__span-3-21><a id=__codelineno-3-21 name=__codelineno-3-21 href=#__codelineno-3-21></a><span class=w> </span><span class=nt>restart</span><span class=p>:</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">unless-stopped</span>
</span></code></pre></div> <p>We can fire up the container with <code>docker-compose up -d</code></p> <p>After the container is started, we'll watch the logs with <code>docker logs swag -f</code>. After some initial initialization, we will see the validation steps. After all the steps, it should print <code>Server ready</code> in the logs.</p> <p>Now we can browse to <code>https://www.linuxserver-test.com</code> and we'll see the default landing page displayed.</p> <h3 id=create-container-via-dns-validation-with-a-wildcard-cert>Create container via dns validation with a wildcard cert<a class=headerlink href=#create-container-via-dns-validation-with-a-wildcard-cert title="Permanent link">&para;</a></h3> <p>Let's assume our domain name is <code>linuxserver-test.com</code> and we would like our cert to also cover <code>www.linuxserver-test.com</code>, <code>ombi.linuxserver-test.com</code> and any other subdomain possible. On the router, we'll forward port <code>443</code> to our host server (Port 80 forwarding is optional).</p> <p>We'll need to make sure that we are using a dns provider that is supported by this image. Currently the following dns plugins are supported: <code>cloudflare</code>, <code>cloudxns</code>, <code>digitalocean</code>, <code>dnsimple</code>, <code>dnsmadeeasy</code>, <code>google</code>, <code>luadns</code>, <code>nsone</code>, <code>ovh</code>, <code>rfc2136</code>, <code>route53</code>, and many others (see the <a href=https://github.com/linuxserver/docker-swag/tree/master/root/defaults/dns-conf>docker-swag repo</a> for an up to date list). Your dns provider by default is the provider of your domain name and if they are not supported, it is very easy to switch to a different dns provider. <a href=https://www.cloudflare.com/ >Cloudflare</a> is recommended due to being free and reliable. To switch to Cloudflare, you can register for a free account and follow their steps to point the nameservers to Cloudflare. The rest of the instructions assume that we are using the cloudflare dns plugin.</p> <p>On our dns provider, we'll create an <code>A</code> record for the main domain and point it to our server IP (wan). We'll also create a CNAME for <code>*</code> and point it to the <code>A</code> record for the domain. On Cloudflare, we'll click on the orange cloud to turn it grey so that it is dns only and not cached/proxied by Cloudflare, which would add more complexities.</p> <p>Now, let's get the container set up.</p> <p>With docker cli, we'll first create a user defined bridge network if we haven't already <code>docker network create lsio</code>, and then create the container:</p> <div class="language-shell highlight"><pre><span></span><code><span id=__span-4-1><a id=__codelineno-4-1 name=__codelineno-4-1 href=#__codelineno-4-1></a>docker<span class=w> </span>create<span class=w> </span><span class=se>\</span>
</span><span id=__span-4-2><a id=__codelineno-4-2 name=__codelineno-4-2 href=#__codelineno-4-2></a><span class=w> </span>--name<span class=o>=</span>swag<span class=w> </span><span class=se>\</span>
</span><span id=__span-4-3><a id=__codelineno-4-3 name=__codelineno-4-3 href=#__codelineno-4-3></a><span class=w> </span>--cap-add<span class=o>=</span>NET_ADMIN<span class=w> </span><span class=se>\</span>
</span><span id=__span-4-4><a id=__codelineno-4-4 name=__codelineno-4-4 href=#__codelineno-4-4></a><span class=w> </span>--net<span class=o>=</span>lsio<span class=w> </span><span class=se>\</span>
</span><span id=__span-4-5><a id=__codelineno-4-5 name=__codelineno-4-5 href=#__codelineno-4-5></a><span class=w> </span>-e<span class=w> </span><span class=nv>PUID</span><span class=o>=</span><span class=m>1000</span><span class=w> </span><span class=se>\</span>
</span><span id=__span-4-6><a id=__codelineno-4-6 name=__codelineno-4-6 href=#__codelineno-4-6></a><span class=w> </span>-e<span class=w> </span><span class=nv>PGID</span><span class=o>=</span><span class=m>1000</span><span class=w> </span><span class=se>\</span>
</span><span id=__span-4-7><a id=__codelineno-4-7 name=__codelineno-4-7 href=#__codelineno-4-7></a><span class=w> </span>-e<span class=w> </span><span class=nv>TZ</span><span class=o>=</span>Europe/London<span class=w> </span><span class=se>\</span>
</span><span id=__span-4-8><a id=__codelineno-4-8 name=__codelineno-4-8 href=#__codelineno-4-8></a><span class=w> </span>-e<span class=w> </span><span class=nv>URL</span><span class=o>=</span>linuxserver-test.com<span class=w> </span><span class=se>\</span>
</span><span id=__span-4-9><a id=__codelineno-4-9 name=__codelineno-4-9 href=#__codelineno-4-9></a><span class=w> </span>-e<span class=w> </span><span class=nv>SUBDOMAINS</span><span class=o>=</span>wildcard<span class=w> </span><span class=se>\</span>
</span><span id=__span-4-10><a id=__codelineno-4-10 name=__codelineno-4-10 href=#__codelineno-4-10></a><span class=w> </span>-e<span class=w> </span><span class=nv>VALIDATION</span><span class=o>=</span>dns<span class=w> </span><span class=se>\</span>
</span><span id=__span-4-11><a id=__codelineno-4-11 name=__codelineno-4-11 href=#__codelineno-4-11></a><span class=w> </span>-e<span class=w> </span><span class=nv>DNSPLUGIN</span><span class=o>=</span>cloudflare<span class=w> </span><span class=se>\</span>
</span><span id=__span-4-12><a id=__codelineno-4-12 name=__codelineno-4-12 href=#__codelineno-4-12></a><span class=w> </span>-p<span class=w> </span><span class=m>443</span>:443<span class=w> </span><span class=se>\</span>
</span><span id=__span-4-13><a id=__codelineno-4-13 name=__codelineno-4-13 href=#__codelineno-4-13></a><span class=w> </span>-p<span class=w> </span><span class=m>80</span>:80<span class=w> </span><span class=se>\</span>
</span><span id=__span-4-14><a id=__codelineno-4-14 name=__codelineno-4-14 href=#__codelineno-4-14></a><span class=w> </span>-v<span class=w> </span>/home/aptalca/appdata/swag:/config<span class=w> </span><span class=se>\</span>
</span><span id=__span-4-15><a id=__codelineno-4-15 name=__codelineno-4-15 href=#__codelineno-4-15></a><span class=w> </span>--restart<span class=w> </span>unless-stopped<span class=w> </span><span class=se>\</span>
</span><span id=__span-4-16><a id=__codelineno-4-16 name=__codelineno-4-16 href=#__codelineno-4-16></a><span class=w> </span>lscr.io/linuxserver/swag
</span></code></pre></div> <p>And we start the container via <code>docker start swag</code></p> <p>With docker compose, we'll use:</p> <div class="language-yaml highlight"><pre><span></span><code><span id=__span-5-1><a id=__codelineno-5-1 name=__codelineno-5-1 href=#__codelineno-5-1></a><span class=nn>---</span>
</span><span id=__span-5-2><a id=__codelineno-5-2 name=__codelineno-5-2 href=#__codelineno-5-2></a><span class=nt>version</span><span class=p>:</span><span class=w> </span><span class=s>&quot;2.1&quot;</span>
</span><span id=__span-5-3><a id=__codelineno-5-3 name=__codelineno-5-3 href=#__codelineno-5-3></a><span class=nt>services</span><span class=p>:</span>
</span><span id=__span-5-4><a id=__codelineno-5-4 name=__codelineno-5-4 href=#__codelineno-5-4></a><span class=w> </span><span class=nt>swag</span><span class=p>:</span>
</span><span id=__span-5-5><a id=__codelineno-5-5 name=__codelineno-5-5 href=#__codelineno-5-5></a><span class=w> </span><span class=nt>image</span><span class=p>:</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">lscr.io/linuxserver/swag</span>
</span><span id=__span-5-6><a id=__codelineno-5-6 name=__codelineno-5-6 href=#__codelineno-5-6></a><span class=w> </span><span class=nt>container_name</span><span class=p>:</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">swag</span>
</span><span id=__span-5-7><a id=__codelineno-5-7 name=__codelineno-5-7 href=#__codelineno-5-7></a><span class=w> </span><span class=nt>cap_add</span><span class=p>:</span>
</span><span id=__span-5-8><a id=__codelineno-5-8 name=__codelineno-5-8 href=#__codelineno-5-8></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">NET_ADMIN</span>
</span><span id=__span-5-9><a id=__codelineno-5-9 name=__codelineno-5-9 href=#__codelineno-5-9></a><span class=w> </span><span class=nt>environment</span><span class=p>:</span>
</span><span id=__span-5-10><a id=__codelineno-5-10 name=__codelineno-5-10 href=#__codelineno-5-10></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">PUID=1000</span>
</span><span id=__span-5-11><a id=__codelineno-5-11 name=__codelineno-5-11 href=#__codelineno-5-11></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">PGID=1000</span>
</span><span id=__span-5-12><a id=__codelineno-5-12 name=__codelineno-5-12 href=#__codelineno-5-12></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">TZ=Europe/London</span>
</span><span id=__span-5-13><a id=__codelineno-5-13 name=__codelineno-5-13 href=#__codelineno-5-13></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">URL=linuxserver-test.com</span>
</span><span id=__span-5-14><a id=__codelineno-5-14 name=__codelineno-5-14 href=#__codelineno-5-14></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">SUBDOMAINS=wildcard</span>
</span><span id=__span-5-15><a id=__codelineno-5-15 name=__codelineno-5-15 href=#__codelineno-5-15></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">VALIDATION=dns</span>
</span><span id=__span-5-16><a id=__codelineno-5-16 name=__codelineno-5-16 href=#__codelineno-5-16></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">DNSPLUGIN=cloudflare</span>
</span><span id=__span-5-17><a id=__codelineno-5-17 name=__codelineno-5-17 href=#__codelineno-5-17></a><span class=w> </span><span class=nt>volumes</span><span class=p>:</span>
</span><span id=__span-5-18><a id=__codelineno-5-18 name=__codelineno-5-18 href=#__codelineno-5-18></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">/home/aptalca/appdata/swag:/config</span>
</span><span id=__span-5-19><a id=__codelineno-5-19 name=__codelineno-5-19 href=#__codelineno-5-19></a><span class=w> </span><span class=nt>ports</span><span class=p>:</span>
</span><span id=__span-5-20><a id=__codelineno-5-20 name=__codelineno-5-20 href=#__codelineno-5-20></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">443:443</span>
</span><span id=__span-5-21><a id=__codelineno-5-21 name=__codelineno-5-21 href=#__codelineno-5-21></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">80:80</span>
</span><span id=__span-5-22><a id=__codelineno-5-22 name=__codelineno-5-22 href=#__codelineno-5-22></a><span class=w> </span><span class=nt>restart</span><span class=p>:</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">unless-stopped</span>
</span></code></pre></div> <p>Then we'll fire up the container via <code>docker-compose up -d</code></p> <p>After the container is started, we'll watch the logs with <code>docker logs swag -f</code>. After some init steps, we'll notice that the container will give an error during validation due to wrong credentials. That's because we didn't enter the correct credentials for the Cloudflare API yet. We can browse to the location <code>/config/dns-conf</code> which is mapped from the host location (according to above settings) <code>/home/aptalca/appdata/swag/dns-conf/</code> and edit the correct ini file for our dns provider. For Cloudflare, we'll enter our API token. The API token can be created by going to My Profile-&gt;API Tokens and creating a token with the Edit DNS permission on the DNS zones for which you wish to request certificates. In the cloudflare.ini comment out the <code>dns_cloudflare_email</code> and <code>dns_cloudflare_api_key</code> values, then uncomment <code>dns_cloudflare_api_token</code> and add your API token against it.</p> <p>Once we enter the credentials into the ini file, we'll restart the docker container via <code>docker restart swag</code> and again watch the logs. After successful validation, we should see the notice <code>Server ready</code> and our webserver should be up and accessible at <code>https://www.linuxserver-test.com</code>.</p> <h3 id=create-container-via-duckdns-validation-with-a-wildcard-cert>Create container via duckdns validation with a wildcard cert<a class=headerlink href=#create-container-via-duckdns-validation-with-a-wildcard-cert title="Permanent link">&para;</a></h3> <p>We will first need to get a subdomain from <a href=https://duckdns.org>DuckDNS</a>. Let's assume we get <code>linuxserver-test</code> so our url will be <code>linuxserver-test.duckdns.org</code>. Then we'll need to make sure that the subdomain points to our server IP (wan) on the DuckDNS website. We can always use our <a href=https://hub.docker.com/r/linuxserver/duckdns>DuckDNS docker image</a> to keep the IP up to date. Don't forget to get the token for your account from DuckDNS. On the router, we'll forward port <code>443</code> to our host server (Port 80 forward is optional).</p> <p>Now, let's get the container set up.</p> <p>With docker cli, we'll first create a user defined bridge network if we haven't already <code>docker network create lsio</code>, and then create the container:</p> <div class="language-shell highlight"><pre><span></span><code><span id=__span-6-1><a id=__codelineno-6-1 name=__codelineno-6-1 href=#__codelineno-6-1></a>docker<span class=w> </span>create<span class=w> </span><span class=se>\</span>
</span><span id=__span-6-2><a id=__codelineno-6-2 name=__codelineno-6-2 href=#__codelineno-6-2></a><span class=w> </span>--name<span class=o>=</span>swag<span class=w> </span><span class=se>\</span>
</span><span id=__span-6-3><a id=__codelineno-6-3 name=__codelineno-6-3 href=#__codelineno-6-3></a><span class=w> </span>--cap-add<span class=o>=</span>NET_ADMIN<span class=w> </span><span class=se>\</span>
</span><span id=__span-6-4><a id=__codelineno-6-4 name=__codelineno-6-4 href=#__codelineno-6-4></a><span class=w> </span>--net<span class=o>=</span>lsio<span class=w> </span><span class=se>\</span>
</span><span id=__span-6-5><a id=__codelineno-6-5 name=__codelineno-6-5 href=#__codelineno-6-5></a><span class=w> </span>-e<span class=w> </span><span class=nv>PUID</span><span class=o>=</span><span class=m>1000</span><span class=w> </span><span class=se>\</span>
</span><span id=__span-6-6><a id=__codelineno-6-6 name=__codelineno-6-6 href=#__codelineno-6-6></a><span class=w> </span>-e<span class=w> </span><span class=nv>PGID</span><span class=o>=</span><span class=m>1000</span><span class=w> </span><span class=se>\</span>
</span><span id=__span-6-7><a id=__codelineno-6-7 name=__codelineno-6-7 href=#__codelineno-6-7></a><span class=w> </span>-e<span class=w> </span><span class=nv>TZ</span><span class=o>=</span>Europe/London<span class=w> </span><span class=se>\</span>
</span><span id=__span-6-8><a id=__codelineno-6-8 name=__codelineno-6-8 href=#__codelineno-6-8></a><span class=w> </span>-e<span class=w> </span><span class=nv>URL</span><span class=o>=</span>linuxserver-test.duckdns.org<span class=w> </span><span class=se>\</span>
</span><span id=__span-6-9><a id=__codelineno-6-9 name=__codelineno-6-9 href=#__codelineno-6-9></a><span class=w> </span>-e<span class=w> </span><span class=nv>SUBDOMAINS</span><span class=o>=</span>wildcard<span class=w> </span><span class=se>\</span>
</span><span id=__span-6-10><a id=__codelineno-6-10 name=__codelineno-6-10 href=#__codelineno-6-10></a><span class=w> </span>-e<span class=w> </span><span class=nv>VALIDATION</span><span class=o>=</span>duckdns<span class=w> </span><span class=se>\</span>
</span><span id=__span-6-11><a id=__codelineno-6-11 name=__codelineno-6-11 href=#__codelineno-6-11></a><span class=w> </span>-e<span class=w> </span><span class=nv>DUCKDNSTOKEN</span><span class=o>=</span>97654867496t0877648659765854<span class=w> </span><span class=se>\</span>
</span><span id=__span-6-12><a id=__codelineno-6-12 name=__codelineno-6-12 href=#__codelineno-6-12></a><span class=w> </span>-p<span class=w> </span><span class=m>443</span>:443<span class=w> </span><span class=se>\</span>
</span><span id=__span-6-13><a id=__codelineno-6-13 name=__codelineno-6-13 href=#__codelineno-6-13></a><span class=w> </span>-p<span class=w> </span><span class=m>80</span>:80<span class=w> </span><span class=se>\</span>
</span><span id=__span-6-14><a id=__codelineno-6-14 name=__codelineno-6-14 href=#__codelineno-6-14></a><span class=w> </span>-v<span class=w> </span>/home/aptalca/appdata/swag:/config<span class=w> </span><span class=se>\</span>
</span><span id=__span-6-15><a id=__codelineno-6-15 name=__codelineno-6-15 href=#__codelineno-6-15></a><span class=w> </span>--restart<span class=w> </span>unless-stopped<span class=w> </span><span class=se>\</span>
</span><span id=__span-6-16><a id=__codelineno-6-16 name=__codelineno-6-16 href=#__codelineno-6-16></a><span class=w> </span>lscr.io/linuxserver/swag
</span></code></pre></div> <p>And we start the container via <code>docker start swag</code></p> <p>With docker compose, we'll use:</p> <div class="language-yaml highlight"><pre><span></span><code><span id=__span-7-1><a id=__codelineno-7-1 name=__codelineno-7-1 href=#__codelineno-7-1></a><span class=nn>---</span>
</span><span id=__span-7-2><a id=__codelineno-7-2 name=__codelineno-7-2 href=#__codelineno-7-2></a><span class=nt>version</span><span class=p>:</span><span class=w> </span><span class=s>&quot;2.1&quot;</span>
</span><span id=__span-7-3><a id=__codelineno-7-3 name=__codelineno-7-3 href=#__codelineno-7-3></a><span class=nt>services</span><span class=p>:</span>
</span><span id=__span-7-4><a id=__codelineno-7-4 name=__codelineno-7-4 href=#__codelineno-7-4></a><span class=w> </span><span class=nt>swag</span><span class=p>:</span>
</span><span id=__span-7-5><a id=__codelineno-7-5 name=__codelineno-7-5 href=#__codelineno-7-5></a><span class=w> </span><span class=nt>image</span><span class=p>:</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">lscr.io/linuxserver/swag</span>
</span><span id=__span-7-6><a id=__codelineno-7-6 name=__codelineno-7-6 href=#__codelineno-7-6></a><span class=w> </span><span class=nt>container_name</span><span class=p>:</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">swag</span>
</span><span id=__span-7-7><a id=__codelineno-7-7 name=__codelineno-7-7 href=#__codelineno-7-7></a><span class=w> </span><span class=nt>cap_add</span><span class=p>:</span>
</span><span id=__span-7-8><a id=__codelineno-7-8 name=__codelineno-7-8 href=#__codelineno-7-8></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">NET_ADMIN</span>
</span><span id=__span-7-9><a id=__codelineno-7-9 name=__codelineno-7-9 href=#__codelineno-7-9></a><span class=w> </span><span class=nt>environment</span><span class=p>:</span>
</span><span id=__span-7-10><a id=__codelineno-7-10 name=__codelineno-7-10 href=#__codelineno-7-10></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">PUID=1000</span>
</span><span id=__span-7-11><a id=__codelineno-7-11 name=__codelineno-7-11 href=#__codelineno-7-11></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">PGID=1000</span>
</span><span id=__span-7-12><a id=__codelineno-7-12 name=__codelineno-7-12 href=#__codelineno-7-12></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">TZ=Europe/London</span>
</span><span id=__span-7-13><a id=__codelineno-7-13 name=__codelineno-7-13 href=#__codelineno-7-13></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">URL=linuxserver-test.duckdns.org</span>
</span><span id=__span-7-14><a id=__codelineno-7-14 name=__codelineno-7-14 href=#__codelineno-7-14></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">SUBDOMAINS=wildcard</span>
</span><span id=__span-7-15><a id=__codelineno-7-15 name=__codelineno-7-15 href=#__codelineno-7-15></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">VALIDATION=duckdns</span>
</span><span id=__span-7-16><a id=__codelineno-7-16 name=__codelineno-7-16 href=#__codelineno-7-16></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">DUCKDNSTOKEN=97654867496t0877648659765854</span>
</span><span id=__span-7-17><a id=__codelineno-7-17 name=__codelineno-7-17 href=#__codelineno-7-17></a><span class=w> </span><span class=nt>volumes</span><span class=p>:</span>
</span><span id=__span-7-18><a id=__codelineno-7-18 name=__codelineno-7-18 href=#__codelineno-7-18></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">/home/aptalca/appdata/swag:/config</span>
</span><span id=__span-7-19><a id=__codelineno-7-19 name=__codelineno-7-19 href=#__codelineno-7-19></a><span class=w> </span><span class=nt>ports</span><span class=p>:</span>
</span><span id=__span-7-20><a id=__codelineno-7-20 name=__codelineno-7-20 href=#__codelineno-7-20></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">443:443</span>
</span><span id=__span-7-21><a id=__codelineno-7-21 name=__codelineno-7-21 href=#__codelineno-7-21></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">80:80</span>
</span><span id=__span-7-22><a id=__codelineno-7-22 name=__codelineno-7-22 href=#__codelineno-7-22></a><span class=w> </span><span class=nt>restart</span><span class=p>:</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">unless-stopped</span>
</span></code></pre></div> <p>Then we'll fire up the container via <code>docker-compose up -d</code></p> <p>After the container is started, we'll watch the logs with <code>docker logs swag -f</code>. We'll see some initialization and then we will see the validation steps. After all the steps, it should print <code>Server ready</code> in the logs.</p> <p>Now we can access the webserver by browsing to <code>https://www.linuxserver-test.duckdns.org</code>.</p> <div class="admonition warning"> <p class=admonition-title>Warning</p> <p>Due to a DuckDNS limitation, our cert only covers the wildcard subdomains, but it doesn't cover the main url. So if we try to access <code>https://linuxserver-test.duckdns.org</code>, we'll see a browser warning about an invalid ssl cert. But accessing it through the <code>www</code> (or <code>ombi</code> or any other) subdomain should work fine.</p> </div> <h2 id=web-hosting-examples>Web hosting examples<a class=headerlink href=#web-hosting-examples title="Permanent link">&para;</a></h2> <h3 id=simple-html-web-page-hosting>Simple html web page hosting<a class=headerlink href=#simple-html-web-page-hosting title="Permanent link">&para;</a></h3> <p>Once we have a working container, we can drop our web documents in and modify the nginx config files to set up our webserver.</p> <p>All the necessary files are under <code>/config</code> which is mapped from the host location (set by above examples) <code>/home/aptalca/appdata/swag</code>.</p> <p>We can drop all of our web/html files into <code>/config/www</code>.</p> <p>The main site config nginx uses can be found at <code>/config/nginx/site-confs/default</code>. Don't delete this file, as it will be regenerated on container restart, but feel free to modify as needed. By default, it is listening on port 443, and the root folder is set to <code>/config/www</code>, so if you drop a <code>page1.html</code> into that location, it will be accessible at <code>https://linuxserver-test.com/page1.html</code>.</p> <p>To enable listening on port 80 and automatically redirecting to port 443 for enforcing ssl, uncomment the lines at the top of the <code>default</code> site config so it reads:</p> <div class="language-nginx highlight"><pre><span></span><code><span id=__span-8-1><a id=__codelineno-8-1 name=__codelineno-8-1 href=#__codelineno-8-1></a><span class=c1># redirect all traffic to https</span>
</span><span id=__span-8-2><a id=__codelineno-8-2 name=__codelineno-8-2 href=#__codelineno-8-2></a><span class=k>server</span><span class=w> </span><span class=p>{</span>
</span><span id=__span-8-3><a id=__codelineno-8-3 name=__codelineno-8-3 href=#__codelineno-8-3></a><span class=w> </span><span class=kn>listen</span><span class=w> </span><span class=mi>80</span><span class=p>;</span>
</span><span id=__span-8-4><a id=__codelineno-8-4 name=__codelineno-8-4 href=#__codelineno-8-4></a><span class=w> </span><span class=kn>listen</span><span class=w> </span><span class=s>[::]:80</span><span class=p>;</span>
</span><span id=__span-8-5><a id=__codelineno-8-5 name=__codelineno-8-5 href=#__codelineno-8-5></a><span class=w> </span><span class=kn>server_name</span><span class=w> </span><span class=s>_</span><span class=p>;</span>
</span><span id=__span-8-6><a id=__codelineno-8-6 name=__codelineno-8-6 href=#__codelineno-8-6></a><span class=w> </span><span class=kn>return</span><span class=w> </span><span class=mi>301</span><span class=w> </span><span class=s>https://</span><span class=nv>$host$request_uri</span><span class=p>;</span>
</span><span id=__span-8-7><a id=__codelineno-8-7 name=__codelineno-8-7 href=#__codelineno-8-7></a><span class=p>}</span>
</span></code></pre></div> <p>After any changes to the config files, simply restart the container via <code>docker restart swag</code> to reload the nginx config.</p> <h3 id=hosting-a-wordpress-site>Hosting a Wordpress site<a class=headerlink href=#hosting-a-wordpress-site title="Permanent link">&para;</a></h3> <p>Wordpress requires a mysql database. For that, we'll use the <a href=https://hub.docker.com/r/linuxserver/mariadb>linuxserver MariaDB docker image</a>.</p> <p>Here's a docker compose stack to get both containers set up. For this exercise, we'll utilize the cloudflare dns plugin for Let's Encrypt validation, but you can use any other method to set it up as described <a href=#container-setup-examples>in this linked section</a>:</p> <div class="language-yaml highlight"><pre><span></span><code><span id=__span-9-1><a id=__codelineno-9-1 name=__codelineno-9-1 href=#__codelineno-9-1></a><span class=nn>---</span>
</span><span id=__span-9-2><a id=__codelineno-9-2 name=__codelineno-9-2 href=#__codelineno-9-2></a><span class=nt>version</span><span class=p>:</span><span class=w> </span><span class=s>&quot;2.1&quot;</span>
</span><span id=__span-9-3><a id=__codelineno-9-3 name=__codelineno-9-3 href=#__codelineno-9-3></a><span class=nt>services</span><span class=p>:</span>
</span><span id=__span-9-4><a id=__codelineno-9-4 name=__codelineno-9-4 href=#__codelineno-9-4></a><span class=w> </span><span class=nt>mariadb</span><span class=p>:</span>
</span><span id=__span-9-5><a id=__codelineno-9-5 name=__codelineno-9-5 href=#__codelineno-9-5></a><span class=w> </span><span class=nt>image</span><span class=p>:</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">lscr.io/linuxserver/mariadb</span>
</span><span id=__span-9-6><a id=__codelineno-9-6 name=__codelineno-9-6 href=#__codelineno-9-6></a><span class=w> </span><span class=nt>container_name</span><span class=p>:</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">mariadb</span>
</span><span id=__span-9-7><a id=__codelineno-9-7 name=__codelineno-9-7 href=#__codelineno-9-7></a><span class=w> </span><span class=nt>environment</span><span class=p>:</span>
</span><span id=__span-9-8><a id=__codelineno-9-8 name=__codelineno-9-8 href=#__codelineno-9-8></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">PUID=1000</span>
</span><span id=__span-9-9><a id=__codelineno-9-9 name=__codelineno-9-9 href=#__codelineno-9-9></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">PGID=1000</span>
</span><span id=__span-9-10><a id=__codelineno-9-10 name=__codelineno-9-10 href=#__codelineno-9-10></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">MYSQL_ROOT_PASSWORD=mariadbpassword</span>
</span><span id=__span-9-11><a id=__codelineno-9-11 name=__codelineno-9-11 href=#__codelineno-9-11></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">TZ=Europe/London</span>
</span><span id=__span-9-12><a id=__codelineno-9-12 name=__codelineno-9-12 href=#__codelineno-9-12></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">MYSQL_DATABASE=WP_database</span>
</span><span id=__span-9-13><a id=__codelineno-9-13 name=__codelineno-9-13 href=#__codelineno-9-13></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">MYSQL_USER=WP_dbuser</span>
</span><span id=__span-9-14><a id=__codelineno-9-14 name=__codelineno-9-14 href=#__codelineno-9-14></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">MYSQL_PASSWORD=WP_dbpassword</span>
</span><span id=__span-9-15><a id=__codelineno-9-15 name=__codelineno-9-15 href=#__codelineno-9-15></a><span class=w> </span><span class=nt>volumes</span><span class=p>:</span>
</span><span id=__span-9-16><a id=__codelineno-9-16 name=__codelineno-9-16 href=#__codelineno-9-16></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">/home/aptalca/appdata/mariadb:/config</span>
</span><span id=__span-9-17><a id=__codelineno-9-17 name=__codelineno-9-17 href=#__codelineno-9-17></a><span class=w> </span><span class=nt>restart</span><span class=p>:</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">unless-stopped</span>
</span><span id=__span-9-18><a id=__codelineno-9-18 name=__codelineno-9-18 href=#__codelineno-9-18></a><span class=w> </span><span class=nt>swag</span><span class=p>:</span>
</span><span id=__span-9-19><a id=__codelineno-9-19 name=__codelineno-9-19 href=#__codelineno-9-19></a><span class=w> </span><span class=nt>image</span><span class=p>:</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">lscr.io/linuxserver/swag</span>
</span><span id=__span-9-20><a id=__codelineno-9-20 name=__codelineno-9-20 href=#__codelineno-9-20></a><span class=w> </span><span class=nt>container_name</span><span class=p>:</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">swag</span>
</span><span id=__span-9-21><a id=__codelineno-9-21 name=__codelineno-9-21 href=#__codelineno-9-21></a><span class=w> </span><span class=nt>cap_add</span><span class=p>:</span>
</span><span id=__span-9-22><a id=__codelineno-9-22 name=__codelineno-9-22 href=#__codelineno-9-22></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">NET_ADMIN</span>
</span><span id=__span-9-23><a id=__codelineno-9-23 name=__codelineno-9-23 href=#__codelineno-9-23></a><span class=w> </span><span class=nt>environment</span><span class=p>:</span>
</span><span id=__span-9-24><a id=__codelineno-9-24 name=__codelineno-9-24 href=#__codelineno-9-24></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">PUID=1000</span>
</span><span id=__span-9-25><a id=__codelineno-9-25 name=__codelineno-9-25 href=#__codelineno-9-25></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">PGID=1000</span>
</span><span id=__span-9-26><a id=__codelineno-9-26 name=__codelineno-9-26 href=#__codelineno-9-26></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">TZ=Europe/London</span>
</span><span id=__span-9-27><a id=__codelineno-9-27 name=__codelineno-9-27 href=#__codelineno-9-27></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">URL=linuxserver-test.com</span>
</span><span id=__span-9-28><a id=__codelineno-9-28 name=__codelineno-9-28 href=#__codelineno-9-28></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">SUBDOMAINS=wildcard</span>
</span><span id=__span-9-29><a id=__codelineno-9-29 name=__codelineno-9-29 href=#__codelineno-9-29></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">VALIDATION=dns</span>
</span><span id=__span-9-30><a id=__codelineno-9-30 name=__codelineno-9-30 href=#__codelineno-9-30></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">DNSPLUGIN=cloudflare</span>
</span><span id=__span-9-31><a id=__codelineno-9-31 name=__codelineno-9-31 href=#__codelineno-9-31></a><span class=w> </span><span class=nt>volumes</span><span class=p>:</span>
</span><span id=__span-9-32><a id=__codelineno-9-32 name=__codelineno-9-32 href=#__codelineno-9-32></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">/home/aptalca/appdata/swag:/config</span>
</span><span id=__span-9-33><a id=__codelineno-9-33 name=__codelineno-9-33 href=#__codelineno-9-33></a><span class=w> </span><span class=nt>ports</span><span class=p>:</span>
</span><span id=__span-9-34><a id=__codelineno-9-34 name=__codelineno-9-34 href=#__codelineno-9-34></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">443:443</span>
</span><span id=__span-9-35><a id=__codelineno-9-35 name=__codelineno-9-35 href=#__codelineno-9-35></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">80:80</span>
</span><span id=__span-9-36><a id=__codelineno-9-36 name=__codelineno-9-36 href=#__codelineno-9-36></a><span class=w> </span><span class=nt>depends_on</span><span class=p>:</span>
</span><span id=__span-9-37><a id=__codelineno-9-37 name=__codelineno-9-37 href=#__codelineno-9-37></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">mariadb</span>
</span><span id=__span-9-38><a id=__codelineno-9-38 name=__codelineno-9-38 href=#__codelineno-9-38></a><span class=w> </span><span class=nt>restart</span><span class=p>:</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">unless-stopped</span>
</span></code></pre></div> <p>And here are the docker cli versions (make sure you already created the lsio network <a href=#docker-networking>as described above</a>: Mariadb:</p> <div class="language-shell highlight"><pre><span></span><code><span id=__span-10-1><a id=__codelineno-10-1 name=__codelineno-10-1 href=#__codelineno-10-1></a>docker<span class=w> </span>create<span class=w> </span><span class=se>\</span>
</span><span id=__span-10-2><a id=__codelineno-10-2 name=__codelineno-10-2 href=#__codelineno-10-2></a><span class=w> </span>--name<span class=o>=</span>mariadb<span class=w> </span><span class=se>\</span>
</span><span id=__span-10-3><a id=__codelineno-10-3 name=__codelineno-10-3 href=#__codelineno-10-3></a><span class=w> </span>--net<span class=o>=</span>lsio<span class=w> </span><span class=se>\</span>
</span><span id=__span-10-4><a id=__codelineno-10-4 name=__codelineno-10-4 href=#__codelineno-10-4></a><span class=w> </span>-e<span class=w> </span><span class=nv>PUID</span><span class=o>=</span><span class=m>1000</span><span class=w> </span><span class=se>\</span>
</span><span id=__span-10-5><a id=__codelineno-10-5 name=__codelineno-10-5 href=#__codelineno-10-5></a><span class=w> </span>-e<span class=w> </span><span class=nv>PGID</span><span class=o>=</span><span class=m>1000</span><span class=w> </span><span class=se>\</span>
</span><span id=__span-10-6><a id=__codelineno-10-6 name=__codelineno-10-6 href=#__codelineno-10-6></a><span class=w> </span>-e<span class=w> </span><span class=nv>MYSQL_ROOT_PASSWORD</span><span class=o>=</span>mariadbpassword<span class=w> </span><span class=se>\</span>
</span><span id=__span-10-7><a id=__codelineno-10-7 name=__codelineno-10-7 href=#__codelineno-10-7></a><span class=w> </span>-e<span class=w> </span><span class=nv>TZ</span><span class=o>=</span>Europe/London<span class=w> </span><span class=se>\</span>
</span><span id=__span-10-8><a id=__codelineno-10-8 name=__codelineno-10-8 href=#__codelineno-10-8></a><span class=w> </span>-e<span class=w> </span><span class=nv>MYSQL_DATABASE</span><span class=o>=</span>WP_database<span class=w> </span><span class=se>\</span>
</span><span id=__span-10-9><a id=__codelineno-10-9 name=__codelineno-10-9 href=#__codelineno-10-9></a><span class=w> </span>-e<span class=w> </span><span class=nv>MYSQL_USER</span><span class=o>=</span>WP_dbuser<span class=w> </span><span class=se>\</span>
</span><span id=__span-10-10><a id=__codelineno-10-10 name=__codelineno-10-10 href=#__codelineno-10-10></a><span class=w> </span>-e<span class=w> </span><span class=nv>MYSQL_PASSWORD</span><span class=o>=</span>WP_dbpassword<span class=w> </span><span class=se>\</span>
</span><span id=__span-10-11><a id=__codelineno-10-11 name=__codelineno-10-11 href=#__codelineno-10-11></a><span class=w> </span>-v<span class=w> </span>/home/aptalca/appdata/mariadb:/config<span class=w> </span><span class=se>\</span>
</span><span id=__span-10-12><a id=__codelineno-10-12 name=__codelineno-10-12 href=#__codelineno-10-12></a><span class=w> </span>--restart<span class=w> </span>unless-stopped<span class=w> </span><span class=se>\</span>
</span><span id=__span-10-13><a id=__codelineno-10-13 name=__codelineno-10-13 href=#__codelineno-10-13></a><span class=w> </span>lscr.io/linuxserver/mariadb
</span></code></pre></div> <p>SWAG:</p> <div class="language-shell highlight"><pre><span></span><code><span id=__span-11-1><a id=__codelineno-11-1 name=__codelineno-11-1 href=#__codelineno-11-1></a>docker<span class=w> </span>create<span class=w> </span><span class=se>\</span>
</span><span id=__span-11-2><a id=__codelineno-11-2 name=__codelineno-11-2 href=#__codelineno-11-2></a><span class=w> </span>--name<span class=o>=</span>swag<span class=w> </span><span class=se>\</span>
</span><span id=__span-11-3><a id=__codelineno-11-3 name=__codelineno-11-3 href=#__codelineno-11-3></a><span class=w> </span>--cap-add<span class=o>=</span>NET_ADMIN<span class=w> </span><span class=se>\</span>
</span><span id=__span-11-4><a id=__codelineno-11-4 name=__codelineno-11-4 href=#__codelineno-11-4></a><span class=w> </span>--net<span class=o>=</span>lsio<span class=w> </span><span class=se>\</span>
</span><span id=__span-11-5><a id=__codelineno-11-5 name=__codelineno-11-5 href=#__codelineno-11-5></a><span class=w> </span>-e<span class=w> </span><span class=nv>PUID</span><span class=o>=</span><span class=m>1000</span><span class=w> </span><span class=se>\</span>
</span><span id=__span-11-6><a id=__codelineno-11-6 name=__codelineno-11-6 href=#__codelineno-11-6></a><span class=w> </span>-e<span class=w> </span><span class=nv>PGID</span><span class=o>=</span><span class=m>1000</span><span class=w> </span><span class=se>\</span>
</span><span id=__span-11-7><a id=__codelineno-11-7 name=__codelineno-11-7 href=#__codelineno-11-7></a><span class=w> </span>-e<span class=w> </span><span class=nv>TZ</span><span class=o>=</span>Europe/London<span class=w> </span><span class=se>\</span>
</span><span id=__span-11-8><a id=__codelineno-11-8 name=__codelineno-11-8 href=#__codelineno-11-8></a><span class=w> </span>-e<span class=w> </span><span class=nv>URL</span><span class=o>=</span>linuxserver-test.com<span class=w> </span><span class=se>\</span>
</span><span id=__span-11-9><a id=__codelineno-11-9 name=__codelineno-11-9 href=#__codelineno-11-9></a><span class=w> </span>-e<span class=w> </span><span class=nv>SUBDOMAINS</span><span class=o>=</span>wildcard<span class=w> </span><span class=se>\</span>
</span><span id=__span-11-10><a id=__codelineno-11-10 name=__codelineno-11-10 href=#__codelineno-11-10></a><span class=w> </span>-e<span class=w> </span><span class=nv>VALIDATION</span><span class=o>=</span>dns<span class=w> </span><span class=se>\</span>
</span><span id=__span-11-11><a id=__codelineno-11-11 name=__codelineno-11-11 href=#__codelineno-11-11></a><span class=w> </span>-e<span class=w> </span><span class=nv>DNSPLUGIN</span><span class=o>=</span>cloudflare<span class=w> </span><span class=se>\</span>
</span><span id=__span-11-12><a id=__codelineno-11-12 name=__codelineno-11-12 href=#__codelineno-11-12></a><span class=w> </span>-p<span class=w> </span><span class=m>443</span>:443<span class=w> </span><span class=se>\</span>
</span><span id=__span-11-13><a id=__codelineno-11-13 name=__codelineno-11-13 href=#__codelineno-11-13></a><span class=w> </span>-p<span class=w> </span><span class=m>80</span>:80<span class=w> </span><span class=se>\</span>
</span><span id=__span-11-14><a id=__codelineno-11-14 name=__codelineno-11-14 href=#__codelineno-11-14></a><span class=w> </span>-v<span class=w> </span>/home/aptalca/appdata/swag:/config<span class=w> </span><span class=se>\</span>
</span><span id=__span-11-15><a id=__codelineno-11-15 name=__codelineno-11-15 href=#__codelineno-11-15></a><span class=w> </span>--restart<span class=w> </span>unless-stopped<span class=w> </span><span class=se>\</span>
</span><span id=__span-11-16><a id=__codelineno-11-16 name=__codelineno-11-16 href=#__codelineno-11-16></a><span class=w> </span>lscr.io/linuxserver/swag
</span></code></pre></div> <p>Once the SWAG container is set up with ssl certs and the webserver is up, we'll download the latest Wordpress and untar it into our www folder:</p> <div class="language-shell highlight"><pre><span></span><code><span id=__span-12-1><a id=__codelineno-12-1 name=__codelineno-12-1 href=#__codelineno-12-1></a>wget<span class=w> </span>https://wordpress.org/latest.tar.gz
</span><span id=__span-12-2><a id=__codelineno-12-2 name=__codelineno-12-2 href=#__codelineno-12-2></a>tar<span class=w> </span>xvf<span class=w> </span>latest.tar.gz<span class=w> </span>-C<span class=w> </span>/home/aptalca/appdata/swag/www/
</span><span id=__span-12-3><a id=__codelineno-12-3 name=__codelineno-12-3 href=#__codelineno-12-3></a>rm<span class=w> </span>latest.tar.gz
</span></code></pre></div> <p>Now that we have all the Wordpress files under the container's <code>/config/www/wordpress</code> folder, we'll need to make some adjustments to the nginx configurations.</p> <ul> <li>Find the line in <code>/config/nginx/site-confs/default</code> that reads <code>root /config/www;</code> and change it to <code>root /config/www/wordpress;</code></li> <li>Find the line in <code>/config/nginx/site-confs/default</code> that reads <code>try_files $uri $uri/ /index.html /index.php$is_args$args =404;</code> and change it to <code>try_files $uri $uri/ /index.html /index.php$is_args$args;</code></li> </ul> <p>Alternatively, if you need to run multiple instances of Wordpress, you can leave <code>/config/nginx/site-confs/default</code> entirely unchanged and create new <code>site-confs</code> for each instance of Wordpress. The new <code>site-confs</code> will be slimmed down copies of <code>/config/nginx/site-confs/default</code>. This assumes you will run each instance on a separate subdomain. If you would prefer to have each Wordpress site on a different top level domain, be sure to add each domain to the <code>EXTRA_DOMAINS</code> environment variable.</p> <p>Ex: <code>/config/nginx/site-confs/myfirstsubdomain.linuxserver-test.com.conf</code></p> <div class="language-nginx highlight"><pre><span></span><code><span id=__span-13-1><a id=__codelineno-13-1 name=__codelineno-13-1 href=#__codelineno-13-1></a><span class=k>server</span><span class=w> </span><span class=p>{</span>
</span><span id=__span-13-2><a id=__codelineno-13-2 name=__codelineno-13-2 href=#__codelineno-13-2></a><span class=w> </span><span class=kn>listen</span><span class=w> </span><span class=mi>443</span><span class=w> </span><span class=s>ssl</span><span class=w> </span><span class=s>http2</span><span class=p>;</span><span class=w> </span><span class=c1># REMOVED default_server</span>
</span><span id=__span-13-3><a id=__codelineno-13-3 name=__codelineno-13-3 href=#__codelineno-13-3></a><span class=w> </span><span class=kn>listen</span><span class=w> </span><span class=s>[::]:443</span><span class=w> </span><span class=s>ssl</span><span class=w> </span><span class=s>http2</span><span class=p>;</span><span class=w> </span><span class=c1># REMOVED default_server</span>
</span><span id=__span-13-4><a id=__codelineno-13-4 name=__codelineno-13-4 href=#__codelineno-13-4></a>
</span><span id=__span-13-5><a id=__codelineno-13-5 name=__codelineno-13-5 href=#__codelineno-13-5></a><span class=w> </span><span class=kn>server_name</span><span class=w> </span><span class=s>myfirstsubdomain.linuxserver-test.com</span><span class=p>;</span><span class=w> </span><span class=c1># PUT YOUR DOMAIN HERE</span>
</span><span id=__span-13-6><a id=__codelineno-13-6 name=__codelineno-13-6 href=#__codelineno-13-6></a>
</span><span id=__span-13-7><a id=__codelineno-13-7 name=__codelineno-13-7 href=#__codelineno-13-7></a><span class=w> </span><span class=kn>include</span><span class=w> </span><span class=s>/config/nginx/ssl.conf</span><span class=p>;</span>
</span><span id=__span-13-8><a id=__codelineno-13-8 name=__codelineno-13-8 href=#__codelineno-13-8></a>
</span><span id=__span-13-9><a id=__codelineno-13-9 name=__codelineno-13-9 href=#__codelineno-13-9></a><span class=w> </span><span class=kn>root</span><span class=w> </span><span class=s>/config/sites/myfirstsubdomain.linuxserver-test.com/www</span><span class=p>;</span><span class=w> </span><span class=c1># CREATE THIS DIRECTORY STRUCTURE AND PUT WORDPRESS FILES HERE</span>
</span><span id=__span-13-10><a id=__codelineno-13-10 name=__codelineno-13-10 href=#__codelineno-13-10></a><span class=w> </span><span class=kn>index</span><span class=w> </span><span class=s>index.html</span><span class=w> </span><span class=s>index.htm</span><span class=w> </span><span class=s>index.php</span><span class=p>;</span>
</span><span id=__span-13-11><a id=__codelineno-13-11 name=__codelineno-13-11 href=#__codelineno-13-11></a>
</span><span id=__span-13-12><a id=__codelineno-13-12 name=__codelineno-13-12 href=#__codelineno-13-12></a><span class=w> </span><span class=kn>location</span><span class=w> </span><span class=s>/</span><span class=w> </span><span class=p>{</span>
</span><span id=__span-13-13><a id=__codelineno-13-13 name=__codelineno-13-13 href=#__codelineno-13-13></a><span class=w> </span><span class=kn>try_files</span><span class=w> </span><span class=nv>$uri</span><span class=w> </span><span class=nv>$uri/</span><span class=w> </span><span class=s>/index.html</span><span class=w> </span><span class=s>/index.php</span><span class=nv>$is_args$args</span><span class=p>;</span><span class=w> </span><span class=c1># REMOVED =404</span>
</span><span id=__span-13-14><a id=__codelineno-13-14 name=__codelineno-13-14 href=#__codelineno-13-14></a><span class=w> </span><span class=p>}</span>
</span><span id=__span-13-15><a id=__codelineno-13-15 name=__codelineno-13-15 href=#__codelineno-13-15></a>
</span><span id=__span-13-16><a id=__codelineno-13-16 name=__codelineno-13-16 href=#__codelineno-13-16></a><span class=w> </span><span class=kn>location</span><span class=w> </span><span class=p>~</span><span class=w> </span><span class=sr>^(.+\.php)(.*)$</span><span class=w> </span><span class=p>{</span>
</span><span id=__span-13-17><a id=__codelineno-13-17 name=__codelineno-13-17 href=#__codelineno-13-17></a><span class=w> </span><span class=kn>fastcgi_split_path_info</span><span class=w> </span><span class=s>^(.+\.php)(.*)</span>$<span class=p>;</span>
</span><span id=__span-13-18><a id=__codelineno-13-18 name=__codelineno-13-18 href=#__codelineno-13-18></a><span class=w> </span><span class=kn>fastcgi_pass</span><span class=w> </span><span class=n>127.0.0.1</span><span class=p>:</span><span class=mi>9000</span><span class=p>;</span>
</span><span id=__span-13-19><a id=__codelineno-13-19 name=__codelineno-13-19 href=#__codelineno-13-19></a><span class=w> </span><span class=kn>fastcgi_index</span><span class=w> </span><span class=s>index.php</span><span class=p>;</span>
</span><span id=__span-13-20><a id=__codelineno-13-20 name=__codelineno-13-20 href=#__codelineno-13-20></a><span class=w> </span><span class=kn>include</span><span class=w> </span><span class=s>/etc/nginx/fastcgi_params</span><span class=p>;</span>
</span><span id=__span-13-21><a id=__codelineno-13-21 name=__codelineno-13-21 href=#__codelineno-13-21></a><span class=w> </span><span class=p>}</span>
</span><span id=__span-13-22><a id=__codelineno-13-22 name=__codelineno-13-22 href=#__codelineno-13-22></a>
</span><span id=__span-13-23><a id=__codelineno-13-23 name=__codelineno-13-23 href=#__codelineno-13-23></a><span class=w> </span><span class=c1># deny access to .htaccess/.htpasswd files</span>
</span><span id=__span-13-24><a id=__codelineno-13-24 name=__codelineno-13-24 href=#__codelineno-13-24></a><span class=w> </span><span class=kn>location</span><span class=w> </span><span class=p>~</span><span class=w> </span><span class=sr>/\.ht</span><span class=w> </span><span class=p>{</span>
</span><span id=__span-13-25><a id=__codelineno-13-25 name=__codelineno-13-25 href=#__codelineno-13-25></a><span class=w> </span><span class=kn>deny</span><span class=w> </span><span class=s>all</span><span class=p>;</span>
</span><span id=__span-13-26><a id=__codelineno-13-26 name=__codelineno-13-26 href=#__codelineno-13-26></a><span class=w> </span><span class=p>}</span>
</span><span id=__span-13-27><a id=__codelineno-13-27 name=__codelineno-13-27 href=#__codelineno-13-27></a><span class=p>}</span>
</span></code></pre></div> <p><code>/config/nginx/site-confs/mysecondsubdomain.linuxserver-test.com.conf</code></p> <div class="language-nginx highlight"><pre><span></span><code><span id=__span-14-1><a id=__codelineno-14-1 name=__codelineno-14-1 href=#__codelineno-14-1></a><span class=k>server</span><span class=w> </span><span class=p>{</span>
</span><span id=__span-14-2><a id=__codelineno-14-2 name=__codelineno-14-2 href=#__codelineno-14-2></a><span class=w> </span><span class=kn>listen</span><span class=w> </span><span class=mi>443</span><span class=w> </span><span class=s>ssl</span><span class=w> </span><span class=s>http2</span><span class=p>;</span><span class=w> </span><span class=c1># REMOVED default_server</span>
</span><span id=__span-14-3><a id=__codelineno-14-3 name=__codelineno-14-3 href=#__codelineno-14-3></a><span class=w> </span><span class=kn>listen</span><span class=w> </span><span class=s>[::]:443</span><span class=w> </span><span class=s>ssl</span><span class=w> </span><span class=s>http2</span><span class=p>;</span><span class=w> </span><span class=c1># REMOVED default_server</span>
</span><span id=__span-14-4><a id=__codelineno-14-4 name=__codelineno-14-4 href=#__codelineno-14-4></a>
</span><span id=__span-14-5><a id=__codelineno-14-5 name=__codelineno-14-5 href=#__codelineno-14-5></a><span class=w> </span><span class=kn>server_name</span><span class=w> </span><span class=s>mysecondsubdomain.linuxserver-test.com</span><span class=p>;</span><span class=w> </span><span class=c1># PUT YOUR DOMAIN HERE</span>
</span><span id=__span-14-6><a id=__codelineno-14-6 name=__codelineno-14-6 href=#__codelineno-14-6></a>
</span><span id=__span-14-7><a id=__codelineno-14-7 name=__codelineno-14-7 href=#__codelineno-14-7></a><span class=w> </span><span class=kn>include</span><span class=w> </span><span class=s>/config/nginx/ssl.conf</span><span class=p>;</span>
</span><span id=__span-14-8><a id=__codelineno-14-8 name=__codelineno-14-8 href=#__codelineno-14-8></a>
</span><span id=__span-14-9><a id=__codelineno-14-9 name=__codelineno-14-9 href=#__codelineno-14-9></a><span class=w> </span><span class=kn>root</span><span class=w> </span><span class=s>/config/sites/mysecondsubdomain.linuxserver-test.com/www</span><span class=p>;</span><span class=w> </span><span class=c1># CREATE THIS DIRECTORY STRUCTURE AND PUT WORDPRESS FILES HERE</span>
</span><span id=__span-14-10><a id=__codelineno-14-10 name=__codelineno-14-10 href=#__codelineno-14-10></a><span class=w> </span><span class=kn>index</span><span class=w> </span><span class=s>index.html</span><span class=w> </span><span class=s>index.htm</span><span class=w> </span><span class=s>index.php</span><span class=p>;</span>
</span><span id=__span-14-11><a id=__codelineno-14-11 name=__codelineno-14-11 href=#__codelineno-14-11></a>
</span><span id=__span-14-12><a id=__codelineno-14-12 name=__codelineno-14-12 href=#__codelineno-14-12></a><span class=w> </span><span class=kn>location</span><span class=w> </span><span class=s>/</span><span class=w> </span><span class=p>{</span>
</span><span id=__span-14-13><a id=__codelineno-14-13 name=__codelineno-14-13 href=#__codelineno-14-13></a><span class=w> </span><span class=kn>try_files</span><span class=w> </span><span class=nv>$uri</span><span class=w> </span><span class=nv>$uri/</span><span class=w> </span><span class=s>/index.html</span><span class=w> </span><span class=s>/index.php</span><span class=nv>$is_args$args</span><span class=p>;</span><span class=w> </span><span class=c1># REMOVED =404</span>
</span><span id=__span-14-14><a id=__codelineno-14-14 name=__codelineno-14-14 href=#__codelineno-14-14></a><span class=w> </span><span class=p>}</span>
</span><span id=__span-14-15><a id=__codelineno-14-15 name=__codelineno-14-15 href=#__codelineno-14-15></a>
</span><span id=__span-14-16><a id=__codelineno-14-16 name=__codelineno-14-16 href=#__codelineno-14-16></a><span class=w> </span><span class=kn>location</span><span class=w> </span><span class=p>~</span><span class=w> </span><span class=sr>^(.+\.php)(.*)$</span><span class=w> </span><span class=p>{</span>
</span><span id=__span-14-17><a id=__codelineno-14-17 name=__codelineno-14-17 href=#__codelineno-14-17></a><span class=w> </span><span class=kn>fastcgi_split_path_info</span><span class=w> </span><span class=s>^(.+\.php)(.*)</span>$<span class=p>;</span>
</span><span id=__span-14-18><a id=__codelineno-14-18 name=__codelineno-14-18 href=#__codelineno-14-18></a><span class=w> </span><span class=kn>fastcgi_pass</span><span class=w> </span><span class=n>127.0.0.1</span><span class=p>:</span><span class=mi>9000</span><span class=p>;</span>
</span><span id=__span-14-19><a id=__codelineno-14-19 name=__codelineno-14-19 href=#__codelineno-14-19></a><span class=w> </span><span class=kn>fastcgi_index</span><span class=w> </span><span class=s>index.php</span><span class=p>;</span>
</span><span id=__span-14-20><a id=__codelineno-14-20 name=__codelineno-14-20 href=#__codelineno-14-20></a><span class=w> </span><span class=kn>include</span><span class=w> </span><span class=s>/etc/nginx/fastcgi_params</span><span class=p>;</span>
</span><span id=__span-14-21><a id=__codelineno-14-21 name=__codelineno-14-21 href=#__codelineno-14-21></a><span class=w> </span><span class=p>}</span>
</span><span id=__span-14-22><a id=__codelineno-14-22 name=__codelineno-14-22 href=#__codelineno-14-22></a>
</span><span id=__span-14-23><a id=__codelineno-14-23 name=__codelineno-14-23 href=#__codelineno-14-23></a><span class=w> </span><span class=c1># deny access to .htaccess/.htpasswd files</span>
</span><span id=__span-14-24><a id=__codelineno-14-24 name=__codelineno-14-24 href=#__codelineno-14-24></a><span class=w> </span><span class=kn>location</span><span class=w> </span><span class=p>~</span><span class=w> </span><span class=sr>/\.ht</span><span class=w> </span><span class=p>{</span>
</span><span id=__span-14-25><a id=__codelineno-14-25 name=__codelineno-14-25 href=#__codelineno-14-25></a><span class=w> </span><span class=kn>deny</span><span class=w> </span><span class=s>all</span><span class=p>;</span>
</span><span id=__span-14-26><a id=__codelineno-14-26 name=__codelineno-14-26 href=#__codelineno-14-26></a><span class=w> </span><span class=p>}</span>
</span><span id=__span-14-27><a id=__codelineno-14-27 name=__codelineno-14-27 href=#__codelineno-14-27></a><span class=p>}</span>
</span></code></pre></div> <p>Now that you have completed changing your nginx configurations you need to restart the SWAG container.</p> <p>Now we should be able to access our Wordpress config page at <code>https://linuxserver-test.com/wp-admin/install.php</code>. We'll go ahead and enter <code>mariadb</code> as the <code>Database Host</code> address (we are using the container name as the dns hostname since both containers are in the same user defined bridge network), and also enter the Database Name, user and password we used in the mariadb config above (<code>WP_database</code>, <code>WP_dbuser</code> and <code>WP_dbpassword</code>).</p> <p>Once we go through the rest of the install steps, our Wordpress instance should be fully set up and available at <code>https://linuxserver-test.com</code>.</p> <p>If you would like to have <code>http</code> requests on port 80 enabled and auto redirected to <code>https</code> on port 443, uncomment the relevant lines at the top of the default site config to read:</p> <div class="language-nginx highlight"><pre><span></span><code><span id=__span-15-1><a id=__codelineno-15-1 name=__codelineno-15-1 href=#__codelineno-15-1></a><span class=c1># redirect all traffic to https</span>
</span><span id=__span-15-2><a id=__codelineno-15-2 name=__codelineno-15-2 href=#__codelineno-15-2></a><span class=k>server</span><span class=w> </span><span class=p>{</span>
</span><span id=__span-15-3><a id=__codelineno-15-3 name=__codelineno-15-3 href=#__codelineno-15-3></a><span class=w> </span><span class=kn>listen</span><span class=w> </span><span class=mi>80</span><span class=p>;</span>
</span><span id=__span-15-4><a id=__codelineno-15-4 name=__codelineno-15-4 href=#__codelineno-15-4></a><span class=w> </span><span class=kn>listen</span><span class=w> </span><span class=s>[::]:80</span><span class=p>;</span>
</span><span id=__span-15-5><a id=__codelineno-15-5 name=__codelineno-15-5 href=#__codelineno-15-5></a><span class=w> </span><span class=kn>server_name</span><span class=w> </span><span class=s>_</span><span class=p>;</span>
</span><span id=__span-15-6><a id=__codelineno-15-6 name=__codelineno-15-6 href=#__codelineno-15-6></a><span class=w> </span><span class=kn>return</span><span class=w> </span><span class=mi>301</span><span class=w> </span><span class=s>https://</span><span class=nv>$host$request_uri</span><span class=p>;</span>
</span><span id=__span-15-7><a id=__codelineno-15-7 name=__codelineno-15-7 href=#__codelineno-15-7></a><span class=p>}</span>
</span></code></pre></div> <h2 id=reverse-proxy>Reverse Proxy<a class=headerlink href=#reverse-proxy title="Permanent link">&para;</a></h2> <p>A reverse proxy is a type of proxy server that retrieves resources on behalf of a client from one or more servers. These resources are then returned to the client as if they originated from the Web server itself (Shamelessly borrowed from <a href=https://blog.linuxserver.io/2017/11/28/how-to-setup-a-reverse-proxy-with-letsencrypt-ssl-for-all-your-docker-apps/#whatisareverseproxy>another post on our blog</a>).</p> <p><img alt=reverseproxy src=https://www.linuxserver.io/user/pages/content/images/2019/04/reverseproxy.png></p> <p>In this case, a user or a client browser can connect to our SWAG container via https on port 443, request a service such as Ombi, then our SWAG container connects to the ombi container, retrieves the data and passes it on to the client via https with our trusted cert. The connection to ombi is local and does not need to be encrypted, but all communication between our SWAG container and the client browser will be encrypted.</p> <h3 id=preset-proxy-confs>Preset proxy confs<a class=headerlink href=#preset-proxy-confs title="Permanent link">&para;</a></h3> <p>Our SWAG image comes with a list of preset reverse proxy confs for popular apps and services. They are <a href=https://github.com/linuxserver/reverse-proxy-confs>hosted on Github</a> and are pulled into the <code>/config/nginx/proxy-confs</code> folder as inactive sample files. To activate, one must rename a conf file to remove <code>.sample</code> from the filename and restart the SWAG container. Any proxy conf file in that folder with a name that matches <code>*.subdomain.conf</code> or <code>*.subfolder.conf</code> will be loaded in nginx during container start.</p> <p>Most proxy confs work without any modification, but some may require other changes. All the required changes are listed at the top of each proxy conf. The conf files use container names to reach other containers and therefore the proxied containers should be named the same as listed in our documentation for each container.</p> <p>The conf files also require that the SWAG container is in the same user defined bridge network as the other container so they can reach each other via container name as dns hostnames. Make sure you follow the instructions listed above in the <a href=#docker-networking>Docker networking section</a>.</p> <h3 id=understanding-the-proxy-conf-structure>Understanding the proxy conf structure<a class=headerlink href=#understanding-the-proxy-conf-structure title="Permanent link">&para;</a></h3> <h4 id=subdomain-proxy-conf>Subdomain proxy conf<a class=headerlink href=#subdomain-proxy-conf title="Permanent link">&para;</a></h4> <p>Here's the preset proxy conf for Heimdall as a subdomain (ie. <code>https://heimdall.linuxserver-test.com</code>):</p> <div class="language-nginx highlight"><pre><span></span><code><span id=__span-16-1><a id=__codelineno-16-1 name=__codelineno-16-1 href=#__codelineno-16-1></a><span class=c1># make sure that your dns has a cname set for heimdall</span>
</span><span id=__span-16-2><a id=__codelineno-16-2 name=__codelineno-16-2 href=#__codelineno-16-2></a>
</span><span id=__span-16-3><a id=__codelineno-16-3 name=__codelineno-16-3 href=#__codelineno-16-3></a><span class=k>server</span><span class=w> </span><span class=p>{</span>
</span><span id=__span-16-4><a id=__codelineno-16-4 name=__codelineno-16-4 href=#__codelineno-16-4></a><span class=w> </span><span class=kn>listen</span><span class=w> </span><span class=mi>443</span><span class=w> </span><span class=s>ssl</span><span class=p>;</span>
</span><span id=__span-16-5><a id=__codelineno-16-5 name=__codelineno-16-5 href=#__codelineno-16-5></a><span class=w> </span><span class=kn>listen</span><span class=w> </span><span class=s>[::]:443</span><span class=w> </span><span class=s>ssl</span><span class=p>;</span>
</span><span id=__span-16-6><a id=__codelineno-16-6 name=__codelineno-16-6 href=#__codelineno-16-6></a>
</span><span id=__span-16-7><a id=__codelineno-16-7 name=__codelineno-16-7 href=#__codelineno-16-7></a><span class=w> </span><span class=kn>server_name</span><span class=w> </span><span class=s>heimdall.*</span><span class=p>;</span>
</span><span id=__span-16-8><a id=__codelineno-16-8 name=__codelineno-16-8 href=#__codelineno-16-8></a>
</span><span id=__span-16-9><a id=__codelineno-16-9 name=__codelineno-16-9 href=#__codelineno-16-9></a><span class=w> </span><span class=kn>include</span><span class=w> </span><span class=s>/config/nginx/ssl.conf</span><span class=p>;</span>
</span><span id=__span-16-10><a id=__codelineno-16-10 name=__codelineno-16-10 href=#__codelineno-16-10></a>
</span><span id=__span-16-11><a id=__codelineno-16-11 name=__codelineno-16-11 href=#__codelineno-16-11></a><span class=w> </span><span class=kn>client_max_body_size</span><span class=w> </span><span class=mi>0</span><span class=p>;</span>
</span><span id=__span-16-12><a id=__codelineno-16-12 name=__codelineno-16-12 href=#__codelineno-16-12></a>
</span><span id=__span-16-13><a id=__codelineno-16-13 name=__codelineno-16-13 href=#__codelineno-16-13></a><span class=w> </span><span class=c1># enable for ldap auth, fill in ldap details in ldap.conf</span>
</span><span id=__span-16-14><a id=__codelineno-16-14 name=__codelineno-16-14 href=#__codelineno-16-14></a><span class=w> </span><span class=c1>#include /config/nginx/ldap.conf;</span>
</span><span id=__span-16-15><a id=__codelineno-16-15 name=__codelineno-16-15 href=#__codelineno-16-15></a>
</span><span id=__span-16-16><a id=__codelineno-16-16 name=__codelineno-16-16 href=#__codelineno-16-16></a><span class=w> </span><span class=c1># enable for Authelia</span>
</span><span id=__span-16-17><a id=__codelineno-16-17 name=__codelineno-16-17 href=#__codelineno-16-17></a><span class=w> </span><span class=c1>#include /config/nginx/authelia-server.conf;</span>
</span><span id=__span-16-18><a id=__codelineno-16-18 name=__codelineno-16-18 href=#__codelineno-16-18></a>
</span><span id=__span-16-19><a id=__codelineno-16-19 name=__codelineno-16-19 href=#__codelineno-16-19></a><span class=w> </span><span class=kn>location</span><span class=w> </span><span class=s>/</span><span class=w> </span><span class=p>{</span>
</span><span id=__span-16-20><a id=__codelineno-16-20 name=__codelineno-16-20 href=#__codelineno-16-20></a><span class=w> </span><span class=c1># enable the next two lines for http auth</span>
</span><span id=__span-16-21><a id=__codelineno-16-21 name=__codelineno-16-21 href=#__codelineno-16-21></a><span class=w> </span><span class=c1>#auth_basic &quot;Restricted&quot;;</span>
</span><span id=__span-16-22><a id=__codelineno-16-22 name=__codelineno-16-22 href=#__codelineno-16-22></a><span class=w> </span><span class=c1>#auth_basic_user_file /config/nginx/.htpasswd;</span>
</span><span id=__span-16-23><a id=__codelineno-16-23 name=__codelineno-16-23 href=#__codelineno-16-23></a>
</span><span id=__span-16-24><a id=__codelineno-16-24 name=__codelineno-16-24 href=#__codelineno-16-24></a><span class=w> </span><span class=c1># enable the next two lines for ldap auth</span>
</span><span id=__span-16-25><a id=__codelineno-16-25 name=__codelineno-16-25 href=#__codelineno-16-25></a><span class=w> </span><span class=c1>#auth_request /auth;</span>
</span><span id=__span-16-26><a id=__codelineno-16-26 name=__codelineno-16-26 href=#__codelineno-16-26></a><span class=w> </span><span class=c1>#error_page 401 =200 /ldaplogin;</span>
</span><span id=__span-16-27><a id=__codelineno-16-27 name=__codelineno-16-27 href=#__codelineno-16-27></a>
</span><span id=__span-16-28><a id=__codelineno-16-28 name=__codelineno-16-28 href=#__codelineno-16-28></a><span class=w> </span><span class=c1># enable for Authelia</span>
</span><span id=__span-16-29><a id=__codelineno-16-29 name=__codelineno-16-29 href=#__codelineno-16-29></a><span class=w> </span><span class=c1>#include /config/nginx/authelia-location.conf;</span>
</span><span id=__span-16-30><a id=__codelineno-16-30 name=__codelineno-16-30 href=#__codelineno-16-30></a>
</span><span id=__span-16-31><a id=__codelineno-16-31 name=__codelineno-16-31 href=#__codelineno-16-31></a><span class=w> </span><span class=kn>include</span><span class=w> </span><span class=s>/config/nginx/proxy.conf</span><span class=p>;</span>
</span><span id=__span-16-32><a id=__codelineno-16-32 name=__codelineno-16-32 href=#__codelineno-16-32></a><span class=w> </span><span class=kn>resolver</span><span class=w> </span><span class=mi>127</span><span class=s>.0.0.11</span><span class=w> </span><span class=s>valid=30s</span><span class=p>;</span>
</span><span id=__span-16-33><a id=__codelineno-16-33 name=__codelineno-16-33 href=#__codelineno-16-33></a><span class=w> </span><span class=kn>set</span><span class=w> </span><span class=nv>$upstream_app</span><span class=w> </span><span class=s>heimdall</span><span class=p>;</span>
</span><span id=__span-16-34><a id=__codelineno-16-34 name=__codelineno-16-34 href=#__codelineno-16-34></a><span class=w> </span><span class=kn>set</span><span class=w> </span><span class=nv>$upstream_port</span><span class=w> </span><span class=mi>443</span><span class=p>;</span>
</span><span id=__span-16-35><a id=__codelineno-16-35 name=__codelineno-16-35 href=#__codelineno-16-35></a><span class=w> </span><span class=kn>set</span><span class=w> </span><span class=nv>$upstream_proto</span><span class=w> </span><span class=s>https</span><span class=p>;</span>
</span><span id=__span-16-36><a id=__codelineno-16-36 name=__codelineno-16-36 href=#__codelineno-16-36></a><span class=w> </span><span class=kn>proxy_pass</span><span class=w> </span><span class=nv>$upstream_proto://$upstream_app:$upstream_port</span><span class=p>;</span>
</span><span id=__span-16-37><a id=__codelineno-16-37 name=__codelineno-16-37 href=#__codelineno-16-37></a>
</span><span id=__span-16-38><a id=__codelineno-16-38 name=__codelineno-16-38 href=#__codelineno-16-38></a><span class=w> </span><span class=p>}</span>
</span><span id=__span-16-39><a id=__codelineno-16-39 name=__codelineno-16-39 href=#__codelineno-16-39></a><span class=p>}</span>
</span></code></pre></div> <p>Let's dissect this conf to look at what each directive or block does.</p> <div class="language-nginx highlight"><pre><span></span><code><span id=__span-17-1><a id=__codelineno-17-1 name=__codelineno-17-1 href=#__codelineno-17-1></a><span class=k>server</span><span class=w> </span><span class=p>{</span>
</span><span id=__span-17-2><a id=__codelineno-17-2 name=__codelineno-17-2 href=#__codelineno-17-2></a><span class=p>}</span>
</span></code></pre></div> <p>This is our server block. Whenever nginx gets a request from a client, it determines which server block should be processed based on the destination server name, port and other relevant info, and the matching server block determines how nginx handles and responds to the request.</p> <div class="language-nginx highlight"><pre><span></span><code><span id=__span-18-1><a id=__codelineno-18-1 name=__codelineno-18-1 href=#__codelineno-18-1></a><span class=w> </span><span class=k>listen</span><span class=w> </span><span class=mi>443</span><span class=w> </span><span class=s>ssl</span><span class=p>;</span>
</span><span id=__span-18-2><a id=__codelineno-18-2 name=__codelineno-18-2 href=#__codelineno-18-2></a><span class=w> </span><span class=k>listen</span><span class=w> </span><span class=s>[::]:443</span><span class=w> </span><span class=s>ssl</span><span class=p>;</span>
</span></code></pre></div> <p>This means that only requests coming to port 443 will match this server block.</p> <div class="language-nginx highlight"><pre><span></span><code><span id=__span-19-1><a id=__codelineno-19-1 name=__codelineno-19-1 href=#__codelineno-19-1></a><span class=w> </span><span class=k>server_name</span><span class=w> </span><span class=s>heimdall.*</span><span class=p>;</span>
</span></code></pre></div> <p>Only destination addresses that match <code>heimdall.*</code> will match this server block.</p> <div class="language-nginx highlight"><pre><span></span><code><span id=__span-20-1><a id=__codelineno-20-1 name=__codelineno-20-1 href=#__codelineno-20-1></a><span class=w> </span><span class=k>include</span><span class=w> </span><span class=n>/config/nginx/ssl.conf</span>;
</span></code></pre></div> <p>This directive injects the contents of our ssl.conf file here, which contains all ssl related settings (cert location, ciphers used, etc.).</p> <div class="language-nginx highlight"><pre><span></span><code><span id=__span-21-1><a id=__codelineno-21-1 name=__codelineno-21-1 href=#__codelineno-21-1></a><span class=w> </span><span class=k>client_max_body_size</span><span class=w> </span><span class=mi>0</span><span class=p>;</span>
</span></code></pre></div> <p>Removes the size limitation on uploads (default 1MB).</p> <div class="language-nginx highlight"><pre><span></span><code><span id=__span-22-1><a id=__codelineno-22-1 name=__codelineno-22-1 href=#__codelineno-22-1></a><span class=w> </span><span class=c1># enable for ldap auth, fill in ldap details in ldap.conf</span>
</span><span id=__span-22-2><a id=__codelineno-22-2 name=__codelineno-22-2 href=#__codelineno-22-2></a><span class=w> </span><span class=c1>#include /config/nginx/ldap.conf;</span>
</span></code></pre></div> <p>Commented out (disabled) by default. When enabled, it will inject the contents of ldap.conf, necessary settings for LDAP auth.</p> <div class="language-nginx highlight"><pre><span></span><code><span id=__span-23-1><a id=__codelineno-23-1 name=__codelineno-23-1 href=#__codelineno-23-1></a><span class=w> </span><span class=c1># enable for Authelia</span>
</span><span id=__span-23-2><a id=__codelineno-23-2 name=__codelineno-23-2 href=#__codelineno-23-2></a><span class=w> </span><span class=c1>#include /config/nginx/authelia-server.conf;</span>
</span></code></pre></div> <p>Commented out (disabled) by default. When enabled, it will inject the contents of authelia-server.conf, necessary settings for Authelia integration.</p> <div class="language-nginx highlight"><pre><span></span><code><span id=__span-24-1><a id=__codelineno-24-1 name=__codelineno-24-1 href=#__codelineno-24-1></a><span class=w> </span><span class=k>location</span><span class=w> </span><span class=s>/</span><span class=w> </span><span class=p>{</span>
</span><span id=__span-24-2><a id=__codelineno-24-2 name=__codelineno-24-2 href=#__codelineno-24-2></a><span class=w> </span><span class=p>}</span>
</span></code></pre></div> <p>Location blocks are used for subfolders or paths. After a server block is matched, nginx will look at the subfolder or path requested to match one of the location blocks inside the selected server block. This particular block in our example is for <code>/</code> so it will match any subfolder or path at this address.</p> <div class="language-nginx highlight"><pre><span></span><code><span id=__span-25-1><a id=__codelineno-25-1 name=__codelineno-25-1 href=#__codelineno-25-1></a><span class=w> </span><span class=c1># enable the next two lines for http auth</span>
</span><span id=__span-25-2><a id=__codelineno-25-2 name=__codelineno-25-2 href=#__codelineno-25-2></a><span class=w> </span><span class=c1>#auth_basic &quot;Restricted&quot;;</span>
</span><span id=__span-25-3><a id=__codelineno-25-3 name=__codelineno-25-3 href=#__codelineno-25-3></a><span class=w> </span><span class=c1>#auth_basic_user_file /config/nginx/.htpasswd;</span>
</span></code></pre></div> <p>Commented out (disabled) by default. When enabled, it will use <code>.htpasswd</code> to perform user/pass authentication before allowing access.</p> <div class="language-nginx highlight"><pre><span></span><code><span id=__span-26-1><a id=__codelineno-26-1 name=__codelineno-26-1 href=#__codelineno-26-1></a><span class=w> </span><span class=c1># enable the next two lines for ldap auth</span>
</span><span id=__span-26-2><a id=__codelineno-26-2 name=__codelineno-26-2 href=#__codelineno-26-2></a><span class=w> </span><span class=c1>#auth_request /auth;</span>
</span><span id=__span-26-3><a id=__codelineno-26-3 name=__codelineno-26-3 href=#__codelineno-26-3></a><span class=w> </span><span class=c1>#error_page 401 =200 /login;</span>
</span></code></pre></div> <p>Commented out (disabled) by default. When enabled, it will use LDAP authentication before allowing access.</p> <div class="language-nginx highlight"><pre><span></span><code><span id=__span-27-1><a id=__codelineno-27-1 name=__codelineno-27-1 href=#__codelineno-27-1></a><span class=w> </span><span class=c1># enable for Authelia</span>
</span><span id=__span-27-2><a id=__codelineno-27-2 name=__codelineno-27-2 href=#__codelineno-27-2></a><span class=w> </span><span class=c1>#include /config/nginx/authelia-location.conf;</span>
</span></code></pre></div> <p>Commented out (disabled) by default. When enabled, it will use Authelia authentication before allowing access.</p> <div class="language-nginx highlight"><pre><span></span><code><span id=__span-28-1><a id=__codelineno-28-1 name=__codelineno-28-1 href=#__codelineno-28-1></a><span class=w> </span><span class=k>include</span><span class=w> </span><span class=n>/config/nginx/proxy.conf</span>;
</span></code></pre></div> <p>Injects the contents of proxy.conf, which contains various directives and headers that are common for proxied connections.</p> <div class="language-nginx highlight"><pre><span></span><code><span id=__span-29-1><a id=__codelineno-29-1 name=__codelineno-29-1 href=#__codelineno-29-1></a><span class=w> </span><span class=k>resolver</span><span class=w> </span><span class=mi>127</span><span class=s>.0.0.11</span><span class=w> </span><span class=s>valid=30s</span><span class=p>;</span>
</span></code></pre></div> <p>Tells nginx to use the docker dns to resolve the IP address when the container name is used as address in the next line.</p> <div class="language-nginx highlight"><pre><span></span><code><span id=__span-30-1><a id=__codelineno-30-1 name=__codelineno-30-1 href=#__codelineno-30-1></a><span class=w> </span><span class=k>set</span><span class=w> </span><span class=nv>$upstream_app</span><span class=w> </span><span class=s>heimdall</span><span class=p>;</span>
</span><span id=__span-30-2><a id=__codelineno-30-2 name=__codelineno-30-2 href=#__codelineno-30-2></a><span class=w> </span><span class=k>set</span><span class=w> </span><span class=nv>$upstream_port</span><span class=w> </span><span class=mi>443</span><span class=p>;</span>
</span><span id=__span-30-3><a id=__codelineno-30-3 name=__codelineno-30-3 href=#__codelineno-30-3></a><span class=w> </span><span class=k>set</span><span class=w> </span><span class=nv>$upstream_proto</span><span class=w> </span><span class=s>https</span><span class=p>;</span>
</span><span id=__span-30-4><a id=__codelineno-30-4 name=__codelineno-30-4 href=#__codelineno-30-4></a><span class=w> </span><span class=k>proxy_pass</span><span class=w> </span><span class=nv>$upstream_proto://$upstream_app:$upstream_port</span><span class=p>;</span>
</span></code></pre></div> <p>This is a bit of a tricky part. Normally, we could just put in the directive <code>proxy_pass https://heimdall:443;</code> and expect nginx to connect to Heimdall via its container name used as a dns hostname. Although it works for the most part, nginx has an annoying habit. During start, nginx checks all dns hostnames used in proxy_pass statements and if any one of them is not accessible, it refuses to start. We really don't want a stopped proxied container to prevent our webserver from starting up, so we use a trick.</p> <p>If the proxy_pass statement contains a <code>variable</code> instead of a <code>dns hostname</code>, nginx doesn't check whether it's accessible or not during start. So here we are setting 3 variables, one named <code>upstream_app</code> with the value of <code>heimdall</code>, one named <code>$upstream_port</code>, with the value of the internal heimdall port <code>443</code>, and one named <code>$upstream_proto</code> with the value set to <code>https</code>. We we use these variables as the address in the proxy_pass directive. That way, if the heimdall container is down for any reason, nginx can still start. When using a variable instead of hostname, we also have to set the resolver to docker dns in the previous line.</p> <p>If the proxied container is not in the same user defined bridge network as SWAG (could be on a remote host, could be using host networking or macvlan), we can change the value of <code>$upstream_app</code> to an IP address instead: <code>set $upstream_app 192.168.1.10;</code></p> <h4 id=subfolder-proxy-conf>Subfolder proxy conf<a class=headerlink href=#subfolder-proxy-conf title="Permanent link">&para;</a></h4> <p>Here's the preset proxy conf for mytinytodo via a subfolder</p> <div class="language-nginx highlight"><pre><span></span><code><span id=__span-31-1><a id=__codelineno-31-1 name=__codelineno-31-1 href=#__codelineno-31-1></a><span class=c1># works with https://github.com/breakall/mytinytodo-docker</span>
</span><span id=__span-31-2><a id=__codelineno-31-2 name=__codelineno-31-2 href=#__codelineno-31-2></a><span class=c1># set the mtt_url to &#39;https://your.domain.com/todo/&#39; in db/config.php</span>
</span><span id=__span-31-3><a id=__codelineno-31-3 name=__codelineno-31-3 href=#__codelineno-31-3></a>
</span><span id=__span-31-4><a id=__codelineno-31-4 name=__codelineno-31-4 href=#__codelineno-31-4></a><span class=k>location</span><span class=w> </span><span class=s>/todo</span><span class=w> </span><span class=p>{</span>
</span><span id=__span-31-5><a id=__codelineno-31-5 name=__codelineno-31-5 href=#__codelineno-31-5></a><span class=w> </span><span class=kn>return</span><span class=w> </span><span class=mi>301</span><span class=w> </span><span class=nv>$scheme://$host/todo/</span><span class=p>;</span>
</span><span id=__span-31-6><a id=__codelineno-31-6 name=__codelineno-31-6 href=#__codelineno-31-6></a><span class=p>}</span>
</span><span id=__span-31-7><a id=__codelineno-31-7 name=__codelineno-31-7 href=#__codelineno-31-7></a><span class=k>location</span><span class=w> </span><span class=s>^~</span><span class=w> </span><span class=s>/todo/</span><span class=w> </span><span class=p>{</span>
</span><span id=__span-31-8><a id=__codelineno-31-8 name=__codelineno-31-8 href=#__codelineno-31-8></a>
</span><span id=__span-31-9><a id=__codelineno-31-9 name=__codelineno-31-9 href=#__codelineno-31-9></a><span class=w> </span><span class=c1># enable the next two lines for http auth</span>
</span><span id=__span-31-10><a id=__codelineno-31-10 name=__codelineno-31-10 href=#__codelineno-31-10></a><span class=w> </span><span class=c1>#auth_basic &quot;Restricted&quot;;</span>
</span><span id=__span-31-11><a id=__codelineno-31-11 name=__codelineno-31-11 href=#__codelineno-31-11></a><span class=w> </span><span class=c1>#auth_basic_user_file /config/nginx/.htpasswd;</span>
</span><span id=__span-31-12><a id=__codelineno-31-12 name=__codelineno-31-12 href=#__codelineno-31-12></a>
</span><span id=__span-31-13><a id=__codelineno-31-13 name=__codelineno-31-13 href=#__codelineno-31-13></a><span class=w> </span><span class=c1># enable the next two lines for ldap auth, also customize and enable ldap.conf in the default conf</span>
</span><span id=__span-31-14><a id=__codelineno-31-14 name=__codelineno-31-14 href=#__codelineno-31-14></a><span class=w> </span><span class=c1>#auth_request /auth;</span>
</span><span id=__span-31-15><a id=__codelineno-31-15 name=__codelineno-31-15 href=#__codelineno-31-15></a><span class=w> </span><span class=c1>#error_page 401 =200 /ldaplogin;</span>
</span><span id=__span-31-16><a id=__codelineno-31-16 name=__codelineno-31-16 href=#__codelineno-31-16></a>
</span><span id=__span-31-17><a id=__codelineno-31-17 name=__codelineno-31-17 href=#__codelineno-31-17></a><span class=w> </span><span class=c1># enable for Authelia, also enable authelia-server.conf in the default site config</span>
</span><span id=__span-31-18><a id=__codelineno-31-18 name=__codelineno-31-18 href=#__codelineno-31-18></a><span class=w> </span><span class=c1>#include /config/nginx/authelia-location.conf;</span>
</span><span id=__span-31-19><a id=__codelineno-31-19 name=__codelineno-31-19 href=#__codelineno-31-19></a>
</span><span id=__span-31-20><a id=__codelineno-31-20 name=__codelineno-31-20 href=#__codelineno-31-20></a><span class=w> </span><span class=kn>include</span><span class=w> </span><span class=s>/config/nginx/proxy.conf</span><span class=p>;</span>
</span><span id=__span-31-21><a id=__codelineno-31-21 name=__codelineno-31-21 href=#__codelineno-31-21></a><span class=w> </span><span class=kn>resolver</span><span class=w> </span><span class=mi>127</span><span class=s>.0.0.11</span><span class=w> </span><span class=s>valid=30s</span><span class=p>;</span>
</span><span id=__span-31-22><a id=__codelineno-31-22 name=__codelineno-31-22 href=#__codelineno-31-22></a><span class=w> </span><span class=kn>set</span><span class=w> </span><span class=nv>$upstream_app</span><span class=w> </span><span class=s>mytinytodo</span><span class=p>;</span>
</span><span id=__span-31-23><a id=__codelineno-31-23 name=__codelineno-31-23 href=#__codelineno-31-23></a><span class=w> </span><span class=kn>set</span><span class=w> </span><span class=nv>$upstream_port</span><span class=w> </span><span class=mi>80</span><span class=p>;</span>
</span><span id=__span-31-24><a id=__codelineno-31-24 name=__codelineno-31-24 href=#__codelineno-31-24></a><span class=w> </span><span class=kn>set</span><span class=w> </span><span class=nv>$upstream_proto</span><span class=w> </span><span class=s>http</span><span class=p>;</span>
</span><span id=__span-31-25><a id=__codelineno-31-25 name=__codelineno-31-25 href=#__codelineno-31-25></a><span class=w> </span><span class=kn>proxy_pass</span><span class=w> </span><span class=nv>$upstream_proto://$upstream_app:$upstream_port/</span><span class=p>;</span>
</span><span id=__span-31-26><a id=__codelineno-31-26 name=__codelineno-31-26 href=#__codelineno-31-26></a><span class=p>}</span>
</span></code></pre></div> <p>Unlike the subdomain proxy confs, here we do not have a server block. That is because all of the subfolder proxy confs get injected into the main server block of our root domain defined in the default site conf. So here we are only defining the location block for our specific subfolders.</p> <p>Many of the elements are the same as the subdomain ones, so for those you can refer to the previous section. Let's take a look at some of the differences.</p> <div class="language-nginx highlight"><pre><span></span><code><span id=__span-32-1><a id=__codelineno-32-1 name=__codelineno-32-1 href=#__codelineno-32-1></a><span class=c1># works with https://github.com/breakall/mytinytodo-docker</span>
</span><span id=__span-32-2><a id=__codelineno-32-2 name=__codelineno-32-2 href=#__codelineno-32-2></a><span class=c1># set the mtt_url to &#39;https://your.domain.com/todo/&#39; in db/config.php</span>
</span></code></pre></div> <p>These are the instructions to get the tinytodo container ready to work with our reverse proxy.</p> <div class="language-nginx highlight"><pre><span></span><code><span id=__span-33-1><a id=__codelineno-33-1 name=__codelineno-33-1 href=#__codelineno-33-1></a><span class=k>location</span><span class=w> </span><span class=s>^~</span><span class=w> </span><span class=s>/todo</span><span class=w> </span><span class=p>{</span>
</span><span id=__span-33-2><a id=__codelineno-33-2 name=__codelineno-33-2 href=#__codelineno-33-2></a><span class=w> </span><span class=kn>return</span><span class=w> </span><span class=mi>301</span><span class=w> </span><span class=nv>$scheme://$host/todo/</span><span class=p>;</span>
</span><span id=__span-33-3><a id=__codelineno-33-3 name=__codelineno-33-3 href=#__codelineno-33-3></a><span class=p>}</span>
</span></code></pre></div> <p>Redirects requests for <code>https://linuxserver-test.com/todo</code> to <code>https://linuxserver-test.com/todo/</code> (added forward slash at the end).</p> <div class="language-nginx highlight"><pre><span></span><code><span id=__span-34-1><a id=__codelineno-34-1 name=__codelineno-34-1 href=#__codelineno-34-1></a><span class=k>location</span><span class=w> </span><span class=s>^~</span><span class=w> </span><span class=s>/todo/</span><span class=w> </span><span class=p>{</span>
</span><span id=__span-34-2><a id=__codelineno-34-2 name=__codelineno-34-2 href=#__codelineno-34-2></a><span class=p>}</span>
</span></code></pre></div> <p>Any requests sent to nginx where the destination starts with <code>https://linuxserver-test.com/todo/</code> will match this location block.</p> <div class="language-nginx highlight"><pre><span></span><code><span id=__span-35-1><a id=__codelineno-35-1 name=__codelineno-35-1 href=#__codelineno-35-1></a><span class=w> </span><span class=k>set</span><span class=w> </span><span class=nv>$upstream_app</span><span class=w> </span><span class=s>mytinytodo</span><span class=p>;</span>
</span><span id=__span-35-2><a id=__codelineno-35-2 name=__codelineno-35-2 href=#__codelineno-35-2></a><span class=w> </span><span class=k>set</span><span class=w> </span><span class=nv>$upstream_port</span><span class=w> </span><span class=mi>80</span><span class=p>;</span>
</span><span id=__span-35-3><a id=__codelineno-35-3 name=__codelineno-35-3 href=#__codelineno-35-3></a><span class=w> </span><span class=k>set</span><span class=w> </span><span class=nv>$upstream_proto</span><span class=w> </span><span class=s>http</span><span class=p>;</span>
</span><span id=__span-35-4><a id=__codelineno-35-4 name=__codelineno-35-4 href=#__codelineno-35-4></a><span class=w> </span><span class=k>proxy_pass</span><span class=w> </span><span class=nv>$upstream_proto://$upstream_app:$upstream_port/</span><span class=p>;</span>
</span></code></pre></div> <p>Same as the previous example, we set a variable <code>$upstream_app</code> with the value <code>mytinytodo</code> and tell nginx to use the variable as the address. Keep in mind that the port listed here is the container port because nginx is connecting to this container directly via the docker network. So if our mytinytodo container has a port mapping of <code>-p 8080:80</code>, we still set <code>$upstream_port</code> variable to <code>80</code>.</p> <div class="admonition info"> <p class=admonition-title>Info</p> <p>Nginx has an interesting behavior displayed here. Even though we define <code>http://$upstream_mytinytodo:80/</code> as the address nginx should proxy, nginx actually connects to <code>http://$upstream_mytinytodo:80/todo</code>. Whenever we use a variable as part of the proxy_pass url, nginx automatically appends the defined <code>location</code> (in this case <code>/todo</code>) to the end of the proxy_pass url before it connects. If we include the subfolder, nginx will try to connect to <code>http://$upstream_mytinytodo:80/todo/todo</code> and will fail.</p> </div> <h3 id=ombi-subdomain-reverse-proxy-example>Ombi subdomain reverse proxy example<a class=headerlink href=#ombi-subdomain-reverse-proxy-example title="Permanent link">&para;</a></h3> <p>In this example, we will reverse proxy Ombi at the address <code>https://ombi.linuxserver-test.com</code>.</p> <p>First let's make sure that we have a CNAME for <code>ombi</code> set up on our dns provider (a wildcard CNAME <code>*</code> will also cover this) and it is pointing to our <code>A</code> record that points to our server IP. If we are using the docker cli method, we also need to create the user defined bridge network (here named <code>lsio</code>) <a href=#docker-networking>as described above</a>. We also need to make sure that port 443 on our router is forwarded to the correct port on our server.</p> <p>Here's a docker compose stack we can use to set up both containers:</p> <div class="language-yaml highlight"><pre><span></span><code><span id=__span-36-1><a id=__codelineno-36-1 name=__codelineno-36-1 href=#__codelineno-36-1></a><span class=nn>---</span>
</span><span id=__span-36-2><a id=__codelineno-36-2 name=__codelineno-36-2 href=#__codelineno-36-2></a><span class=nt>version</span><span class=p>:</span><span class=w> </span><span class=s>&quot;2.1&quot;</span>
</span><span id=__span-36-3><a id=__codelineno-36-3 name=__codelineno-36-3 href=#__codelineno-36-3></a><span class=nt>services</span><span class=p>:</span>
</span><span id=__span-36-4><a id=__codelineno-36-4 name=__codelineno-36-4 href=#__codelineno-36-4></a><span class=w> </span><span class=nt>ombi</span><span class=p>:</span>
</span><span id=__span-36-5><a id=__codelineno-36-5 name=__codelineno-36-5 href=#__codelineno-36-5></a><span class=w> </span><span class=nt>image</span><span class=p>:</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">lscr.io/linuxserver/ombi</span>
</span><span id=__span-36-6><a id=__codelineno-36-6 name=__codelineno-36-6 href=#__codelineno-36-6></a><span class=w> </span><span class=nt>container_name</span><span class=p>:</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">ombi</span>
</span><span id=__span-36-7><a id=__codelineno-36-7 name=__codelineno-36-7 href=#__codelineno-36-7></a><span class=w> </span><span class=nt>environment</span><span class=p>:</span>
</span><span id=__span-36-8><a id=__codelineno-36-8 name=__codelineno-36-8 href=#__codelineno-36-8></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">PUID=1000</span>
</span><span id=__span-36-9><a id=__codelineno-36-9 name=__codelineno-36-9 href=#__codelineno-36-9></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">PGID=1000</span>
</span><span id=__span-36-10><a id=__codelineno-36-10 name=__codelineno-36-10 href=#__codelineno-36-10></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">TZ=Europe/London</span>
</span><span id=__span-36-11><a id=__codelineno-36-11 name=__codelineno-36-11 href=#__codelineno-36-11></a><span class=w> </span><span class=nt>volumes</span><span class=p>:</span>
</span><span id=__span-36-12><a id=__codelineno-36-12 name=__codelineno-36-12 href=#__codelineno-36-12></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">/home/aptalca/appdata/ombi:/config</span>
</span><span id=__span-36-13><a id=__codelineno-36-13 name=__codelineno-36-13 href=#__codelineno-36-13></a><span class=w> </span><span class=nt>ports</span><span class=p>:</span>
</span><span id=__span-36-14><a id=__codelineno-36-14 name=__codelineno-36-14 href=#__codelineno-36-14></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">3579:3579</span>
</span><span id=__span-36-15><a id=__codelineno-36-15 name=__codelineno-36-15 href=#__codelineno-36-15></a><span class=w> </span><span class=nt>restart</span><span class=p>:</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">unless-stopped</span>
</span><span id=__span-36-16><a id=__codelineno-36-16 name=__codelineno-36-16 href=#__codelineno-36-16></a><span class=w> </span><span class=nt>swag</span><span class=p>:</span>
</span><span id=__span-36-17><a id=__codelineno-36-17 name=__codelineno-36-17 href=#__codelineno-36-17></a><span class=w> </span><span class=nt>image</span><span class=p>:</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">lscr.io/linuxserver/swag</span>
</span><span id=__span-36-18><a id=__codelineno-36-18 name=__codelineno-36-18 href=#__codelineno-36-18></a><span class=w> </span><span class=nt>container_name</span><span class=p>:</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">swag</span>
</span><span id=__span-36-19><a id=__codelineno-36-19 name=__codelineno-36-19 href=#__codelineno-36-19></a><span class=w> </span><span class=nt>cap_add</span><span class=p>:</span>
</span><span id=__span-36-20><a id=__codelineno-36-20 name=__codelineno-36-20 href=#__codelineno-36-20></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">NET_ADMIN</span>
</span><span id=__span-36-21><a id=__codelineno-36-21 name=__codelineno-36-21 href=#__codelineno-36-21></a><span class=w> </span><span class=nt>environment</span><span class=p>:</span>
</span><span id=__span-36-22><a id=__codelineno-36-22 name=__codelineno-36-22 href=#__codelineno-36-22></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">PUID=1000</span>
</span><span id=__span-36-23><a id=__codelineno-36-23 name=__codelineno-36-23 href=#__codelineno-36-23></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">PGID=1000</span>
</span><span id=__span-36-24><a id=__codelineno-36-24 name=__codelineno-36-24 href=#__codelineno-36-24></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">TZ=Europe/London</span>
</span><span id=__span-36-25><a id=__codelineno-36-25 name=__codelineno-36-25 href=#__codelineno-36-25></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">URL=linuxserver-test.com</span>
</span><span id=__span-36-26><a id=__codelineno-36-26 name=__codelineno-36-26 href=#__codelineno-36-26></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">SUBDOMAINS=wildcard</span>
</span><span id=__span-36-27><a id=__codelineno-36-27 name=__codelineno-36-27 href=#__codelineno-36-27></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">VALIDATION=dns</span>
</span><span id=__span-36-28><a id=__codelineno-36-28 name=__codelineno-36-28 href=#__codelineno-36-28></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">DNSPLUGIN=cloudflare</span>
</span><span id=__span-36-29><a id=__codelineno-36-29 name=__codelineno-36-29 href=#__codelineno-36-29></a><span class=w> </span><span class=nt>volumes</span><span class=p>:</span>
</span><span id=__span-36-30><a id=__codelineno-36-30 name=__codelineno-36-30 href=#__codelineno-36-30></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">/home/aptalca/appdata/swag:/config</span>
</span><span id=__span-36-31><a id=__codelineno-36-31 name=__codelineno-36-31 href=#__codelineno-36-31></a><span class=w> </span><span class=nt>ports</span><span class=p>:</span>
</span><span id=__span-36-32><a id=__codelineno-36-32 name=__codelineno-36-32 href=#__codelineno-36-32></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">443:443</span>
</span><span id=__span-36-33><a id=__codelineno-36-33 name=__codelineno-36-33 href=#__codelineno-36-33></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">80:80</span>
</span><span id=__span-36-34><a id=__codelineno-36-34 name=__codelineno-36-34 href=#__codelineno-36-34></a><span class=w> </span><span class=nt>restart</span><span class=p>:</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">unless-stopped</span>
</span></code></pre></div> <p>And here are the docker cli versions: Ombi:</p> <div class="language-shell highlight"><pre><span></span><code><span id=__span-37-1><a id=__codelineno-37-1 name=__codelineno-37-1 href=#__codelineno-37-1></a>docker<span class=w> </span>create<span class=w> </span><span class=se>\</span>
</span><span id=__span-37-2><a id=__codelineno-37-2 name=__codelineno-37-2 href=#__codelineno-37-2></a><span class=w> </span>--name<span class=o>=</span>ombi<span class=w> </span><span class=se>\</span>
</span><span id=__span-37-3><a id=__codelineno-37-3 name=__codelineno-37-3 href=#__codelineno-37-3></a><span class=w> </span>--net<span class=o>=</span>lsio<span class=w> </span><span class=se>\</span>
</span><span id=__span-37-4><a id=__codelineno-37-4 name=__codelineno-37-4 href=#__codelineno-37-4></a><span class=w> </span>-e<span class=w> </span><span class=nv>PUID</span><span class=o>=</span><span class=m>1000</span><span class=w> </span><span class=se>\</span>
</span><span id=__span-37-5><a id=__codelineno-37-5 name=__codelineno-37-5 href=#__codelineno-37-5></a><span class=w> </span>-e<span class=w> </span><span class=nv>PGID</span><span class=o>=</span><span class=m>1000</span><span class=w> </span><span class=se>\</span>
</span><span id=__span-37-6><a id=__codelineno-37-6 name=__codelineno-37-6 href=#__codelineno-37-6></a><span class=w> </span>-e<span class=w> </span><span class=nv>TZ</span><span class=o>=</span>Europe/London<span class=w> </span><span class=se>\</span>
</span><span id=__span-37-7><a id=__codelineno-37-7 name=__codelineno-37-7 href=#__codelineno-37-7></a><span class=w> </span>-p<span class=w> </span><span class=m>3579</span>:3579<span class=w> </span><span class=se>\</span>
</span><span id=__span-37-8><a id=__codelineno-37-8 name=__codelineno-37-8 href=#__codelineno-37-8></a><span class=w> </span>-v<span class=w> </span>/home/aptalca/appdata/ombi:/config<span class=w> </span><span class=se>\</span>
</span><span id=__span-37-9><a id=__codelineno-37-9 name=__codelineno-37-9 href=#__codelineno-37-9></a><span class=w> </span>--restart<span class=w> </span>unless-stopped<span class=w> </span><span class=se>\</span>
</span><span id=__span-37-10><a id=__codelineno-37-10 name=__codelineno-37-10 href=#__codelineno-37-10></a><span class=w> </span>lscr.io/linuxserver/ombi
</span></code></pre></div> <p>SWAG:</p> <div class="language-shell highlight"><pre><span></span><code><span id=__span-38-1><a id=__codelineno-38-1 name=__codelineno-38-1 href=#__codelineno-38-1></a>docker<span class=w> </span>create<span class=w> </span><span class=se>\</span>
</span><span id=__span-38-2><a id=__codelineno-38-2 name=__codelineno-38-2 href=#__codelineno-38-2></a><span class=w> </span>--name<span class=o>=</span>swag<span class=w> </span><span class=se>\</span>
</span><span id=__span-38-3><a id=__codelineno-38-3 name=__codelineno-38-3 href=#__codelineno-38-3></a><span class=w> </span>--cap-add<span class=o>=</span>NET_ADMIN<span class=w> </span><span class=se>\</span>
</span><span id=__span-38-4><a id=__codelineno-38-4 name=__codelineno-38-4 href=#__codelineno-38-4></a><span class=w> </span>--net<span class=o>=</span>lsio<span class=w> </span><span class=se>\</span>
</span><span id=__span-38-5><a id=__codelineno-38-5 name=__codelineno-38-5 href=#__codelineno-38-5></a><span class=w> </span>-e<span class=w> </span><span class=nv>PUID</span><span class=o>=</span><span class=m>1000</span><span class=w> </span><span class=se>\</span>
</span><span id=__span-38-6><a id=__codelineno-38-6 name=__codelineno-38-6 href=#__codelineno-38-6></a><span class=w> </span>-e<span class=w> </span><span class=nv>PGID</span><span class=o>=</span><span class=m>1000</span><span class=w> </span><span class=se>\</span>
</span><span id=__span-38-7><a id=__codelineno-38-7 name=__codelineno-38-7 href=#__codelineno-38-7></a><span class=w> </span>-e<span class=w> </span><span class=nv>TZ</span><span class=o>=</span>Europe/London<span class=w> </span><span class=se>\</span>
</span><span id=__span-38-8><a id=__codelineno-38-8 name=__codelineno-38-8 href=#__codelineno-38-8></a><span class=w> </span>-e<span class=w> </span><span class=nv>URL</span><span class=o>=</span>linuxserver-test.com<span class=w> </span><span class=se>\</span>
</span><span id=__span-38-9><a id=__codelineno-38-9 name=__codelineno-38-9 href=#__codelineno-38-9></a><span class=w> </span>-e<span class=w> </span><span class=nv>SUBDOMAINS</span><span class=o>=</span>wildcard<span class=w> </span><span class=se>\</span>
</span><span id=__span-38-10><a id=__codelineno-38-10 name=__codelineno-38-10 href=#__codelineno-38-10></a><span class=w> </span>-e<span class=w> </span><span class=nv>VALIDATION</span><span class=o>=</span>dns<span class=w> </span><span class=se>\</span>
</span><span id=__span-38-11><a id=__codelineno-38-11 name=__codelineno-38-11 href=#__codelineno-38-11></a><span class=w> </span>-e<span class=w> </span><span class=nv>DNSPLUGIN</span><span class=o>=</span>cloudflare<span class=w> </span><span class=se>\</span>
</span><span id=__span-38-12><a id=__codelineno-38-12 name=__codelineno-38-12 href=#__codelineno-38-12></a><span class=w> </span>-p<span class=w> </span><span class=m>443</span>:443<span class=w> </span><span class=se>\</span>
</span><span id=__span-38-13><a id=__codelineno-38-13 name=__codelineno-38-13 href=#__codelineno-38-13></a><span class=w> </span>-p<span class=w> </span><span class=m>80</span>:80<span class=w> </span><span class=se>\</span>
</span><span id=__span-38-14><a id=__codelineno-38-14 name=__codelineno-38-14 href=#__codelineno-38-14></a><span class=w> </span>-v<span class=w> </span>/home/aptalca/appdata/swag:/config<span class=w> </span><span class=se>\</span>
</span><span id=__span-38-15><a id=__codelineno-38-15 name=__codelineno-38-15 href=#__codelineno-38-15></a><span class=w> </span>--restart<span class=w> </span>unless-stopped<span class=w> </span><span class=se>\</span>
</span><span id=__span-38-16><a id=__codelineno-38-16 name=__codelineno-38-16 href=#__codelineno-38-16></a><span class=w> </span>lscr.io/linuxserver/swag
</span></code></pre></div> <p>Once our containers up and running (and we confirm we can reach the placeholder page at <code>https://linuxserver-test.com</code>), we simply rename the file <code>ombi.subdomain.conf.sample</code> under <code>/config/nginx/proxy-confs/</code> to <code>ombi.subdomain.conf</code> and we restart the SWAG container. Now when we browser to <code>https://ombi.linuxserver-test.com</code> we should see the Ombi gui.</p> <h3 id=nextcloud-subdomain-reverse-proxy-example>Nextcloud subdomain reverse proxy example<a class=headerlink href=#nextcloud-subdomain-reverse-proxy-example title="Permanent link">&para;</a></h3> <p>Nextcloud is a bit trickier because the app has various security measures built-in, forcing us to configure certain options manually.</p> <p>As with the other examples, let's make sure that we have a CNAME for <code>nextcloud</code> set up on our dns provider (a wildcard CNAME <code>*</code> will also cover this) and it is pointing to our <code>A</code> record that points to our server IP. If we are using the docker cli method, we also need to create the user defined bridge network (here named <code>lsio</code>) <a href=#docker-networking>as described above</a>. For DuckDNS, we do not need to create CNAMES, as all sub-subdomains automatically point to the same IP as our custom subdomain, but we need to make sure that it is the correct IP address for our server. We also need to make sure that port 443 on our router is forwarded to the correct port on our server.</p> <p>In this example we'll use the duckdns wildcard cert, but you can use any Let's Encrypt validation you like <a href=#container-setup-examples>as described above</a></p> <p>Here's a docker compose stack to set up our SWAG, nextcloud and mariadb containers:</p> <div class="language-yaml highlight"><pre><span></span><code><span id=__span-39-1><a id=__codelineno-39-1 name=__codelineno-39-1 href=#__codelineno-39-1></a><span class=nn>---</span>
</span><span id=__span-39-2><a id=__codelineno-39-2 name=__codelineno-39-2 href=#__codelineno-39-2></a><span class=nt>version</span><span class=p>:</span><span class=w> </span><span class=s>&quot;2.1&quot;</span>
</span><span id=__span-39-3><a id=__codelineno-39-3 name=__codelineno-39-3 href=#__codelineno-39-3></a><span class=nt>services</span><span class=p>:</span>
</span><span id=__span-39-4><a id=__codelineno-39-4 name=__codelineno-39-4 href=#__codelineno-39-4></a><span class=w> </span><span class=nt>nextcloud</span><span class=p>:</span>
</span><span id=__span-39-5><a id=__codelineno-39-5 name=__codelineno-39-5 href=#__codelineno-39-5></a><span class=w> </span><span class=nt>image</span><span class=p>:</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">lscr.io/linuxserver/nextcloud</span>
</span><span id=__span-39-6><a id=__codelineno-39-6 name=__codelineno-39-6 href=#__codelineno-39-6></a><span class=w> </span><span class=nt>container_name</span><span class=p>:</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">nextcloud</span>
</span><span id=__span-39-7><a id=__codelineno-39-7 name=__codelineno-39-7 href=#__codelineno-39-7></a><span class=w> </span><span class=nt>environment</span><span class=p>:</span>
</span><span id=__span-39-8><a id=__codelineno-39-8 name=__codelineno-39-8 href=#__codelineno-39-8></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">PUID=1000</span>
</span><span id=__span-39-9><a id=__codelineno-39-9 name=__codelineno-39-9 href=#__codelineno-39-9></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">PGID=1000</span>
</span><span id=__span-39-10><a id=__codelineno-39-10 name=__codelineno-39-10 href=#__codelineno-39-10></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">TZ=Europe/London</span>
</span><span id=__span-39-11><a id=__codelineno-39-11 name=__codelineno-39-11 href=#__codelineno-39-11></a><span class=w> </span><span class=nt>volumes</span><span class=p>:</span>
</span><span id=__span-39-12><a id=__codelineno-39-12 name=__codelineno-39-12 href=#__codelineno-39-12></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">/home/aptalca/appdata/nextcloud/config:/config</span>
</span><span id=__span-39-13><a id=__codelineno-39-13 name=__codelineno-39-13 href=#__codelineno-39-13></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">/home/aptalca/appdata/nextcloud/data:/data</span>
</span><span id=__span-39-14><a id=__codelineno-39-14 name=__codelineno-39-14 href=#__codelineno-39-14></a><span class=w> </span><span class=nt>depends_on</span><span class=p>:</span>
</span><span id=__span-39-15><a id=__codelineno-39-15 name=__codelineno-39-15 href=#__codelineno-39-15></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">mariadb</span>
</span><span id=__span-39-16><a id=__codelineno-39-16 name=__codelineno-39-16 href=#__codelineno-39-16></a><span class=w> </span><span class=nt>restart</span><span class=p>:</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">unless-stopped</span>
</span><span id=__span-39-17><a id=__codelineno-39-17 name=__codelineno-39-17 href=#__codelineno-39-17></a><span class=w> </span><span class=nt>mariadb</span><span class=p>:</span>
</span><span id=__span-39-18><a id=__codelineno-39-18 name=__codelineno-39-18 href=#__codelineno-39-18></a><span class=w> </span><span class=nt>image</span><span class=p>:</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">lscr.io/linuxserver/mariadb</span>
</span><span id=__span-39-19><a id=__codelineno-39-19 name=__codelineno-39-19 href=#__codelineno-39-19></a><span class=w> </span><span class=nt>container_name</span><span class=p>:</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">mariadb</span>
</span><span id=__span-39-20><a id=__codelineno-39-20 name=__codelineno-39-20 href=#__codelineno-39-20></a><span class=w> </span><span class=nt>environment</span><span class=p>:</span>
</span><span id=__span-39-21><a id=__codelineno-39-21 name=__codelineno-39-21 href=#__codelineno-39-21></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">PUID=1000</span>
</span><span id=__span-39-22><a id=__codelineno-39-22 name=__codelineno-39-22 href=#__codelineno-39-22></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">PGID=1000</span>
</span><span id=__span-39-23><a id=__codelineno-39-23 name=__codelineno-39-23 href=#__codelineno-39-23></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">MYSQL_ROOT_PASSWORD=mariadbpassword</span>
</span><span id=__span-39-24><a id=__codelineno-39-24 name=__codelineno-39-24 href=#__codelineno-39-24></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">TZ=Europe/London</span>
</span><span id=__span-39-25><a id=__codelineno-39-25 name=__codelineno-39-25 href=#__codelineno-39-25></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">MYSQL_DATABASE=nextcloud</span>
</span><span id=__span-39-26><a id=__codelineno-39-26 name=__codelineno-39-26 href=#__codelineno-39-26></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">MYSQL_USER=ncuser</span>
</span><span id=__span-39-27><a id=__codelineno-39-27 name=__codelineno-39-27 href=#__codelineno-39-27></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">MYSQL_PASSWORD=ncpassword</span>
</span><span id=__span-39-28><a id=__codelineno-39-28 name=__codelineno-39-28 href=#__codelineno-39-28></a><span class=w> </span><span class=nt>volumes</span><span class=p>:</span>
</span><span id=__span-39-29><a id=__codelineno-39-29 name=__codelineno-39-29 href=#__codelineno-39-29></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">/home/aptalca/appdata/mariadb:/config</span>
</span><span id=__span-39-30><a id=__codelineno-39-30 name=__codelineno-39-30 href=#__codelineno-39-30></a><span class=w> </span><span class=nt>restart</span><span class=p>:</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">unless-stopped</span>
</span><span id=__span-39-31><a id=__codelineno-39-31 name=__codelineno-39-31 href=#__codelineno-39-31></a><span class=w> </span><span class=nt>swag</span><span class=p>:</span>
</span><span id=__span-39-32><a id=__codelineno-39-32 name=__codelineno-39-32 href=#__codelineno-39-32></a><span class=w> </span><span class=nt>image</span><span class=p>:</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">lscr.io/linuxserver/swag</span>
</span><span id=__span-39-33><a id=__codelineno-39-33 name=__codelineno-39-33 href=#__codelineno-39-33></a><span class=w> </span><span class=nt>container_name</span><span class=p>:</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">swag</span>
</span><span id=__span-39-34><a id=__codelineno-39-34 name=__codelineno-39-34 href=#__codelineno-39-34></a><span class=w> </span><span class=nt>cap_add</span><span class=p>:</span>
</span><span id=__span-39-35><a id=__codelineno-39-35 name=__codelineno-39-35 href=#__codelineno-39-35></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">NET_ADMIN</span>
</span><span id=__span-39-36><a id=__codelineno-39-36 name=__codelineno-39-36 href=#__codelineno-39-36></a><span class=w> </span><span class=nt>environment</span><span class=p>:</span>
</span><span id=__span-39-37><a id=__codelineno-39-37 name=__codelineno-39-37 href=#__codelineno-39-37></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">PUID=1000</span>
</span><span id=__span-39-38><a id=__codelineno-39-38 name=__codelineno-39-38 href=#__codelineno-39-38></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">PGID=1000</span>
</span><span id=__span-39-39><a id=__codelineno-39-39 name=__codelineno-39-39 href=#__codelineno-39-39></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">TZ=Europe/London</span>
</span><span id=__span-39-40><a id=__codelineno-39-40 name=__codelineno-39-40 href=#__codelineno-39-40></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">URL=linuxserver-test.duckdns.org</span>
</span><span id=__span-39-41><a id=__codelineno-39-41 name=__codelineno-39-41 href=#__codelineno-39-41></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">SUBDOMAINS=wildcard</span>
</span><span id=__span-39-42><a id=__codelineno-39-42 name=__codelineno-39-42 href=#__codelineno-39-42></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">VALIDATION=duckdns</span>
</span><span id=__span-39-43><a id=__codelineno-39-43 name=__codelineno-39-43 href=#__codelineno-39-43></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">DUCKDNSTOKEN=97654867496t0877648659765854</span>
</span><span id=__span-39-44><a id=__codelineno-39-44 name=__codelineno-39-44 href=#__codelineno-39-44></a><span class=w> </span><span class=nt>volumes</span><span class=p>:</span>
</span><span id=__span-39-45><a id=__codelineno-39-45 name=__codelineno-39-45 href=#__codelineno-39-45></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">/home/aptalca/appdata/swag:/config</span>
</span><span id=__span-39-46><a id=__codelineno-39-46 name=__codelineno-39-46 href=#__codelineno-39-46></a><span class=w> </span><span class=nt>ports</span><span class=p>:</span>
</span><span id=__span-39-47><a id=__codelineno-39-47 name=__codelineno-39-47 href=#__codelineno-39-47></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">443:443</span>
</span><span id=__span-39-48><a id=__codelineno-39-48 name=__codelineno-39-48 href=#__codelineno-39-48></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">80:80</span>
</span><span id=__span-39-49><a id=__codelineno-39-49 name=__codelineno-39-49 href=#__codelineno-39-49></a><span class=w> </span><span class=nt>restart</span><span class=p>:</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">unless-stopped</span>
</span></code></pre></div> <p>And here are the docker cli versions: Nextcloud:</p> <div class="language-shell highlight"><pre><span></span><code><span id=__span-40-1><a id=__codelineno-40-1 name=__codelineno-40-1 href=#__codelineno-40-1></a>docker<span class=w> </span>create<span class=w> </span><span class=se>\</span>
</span><span id=__span-40-2><a id=__codelineno-40-2 name=__codelineno-40-2 href=#__codelineno-40-2></a><span class=w> </span>--name<span class=o>=</span>nextcloud<span class=w> </span><span class=se>\</span>
</span><span id=__span-40-3><a id=__codelineno-40-3 name=__codelineno-40-3 href=#__codelineno-40-3></a><span class=w> </span>--net<span class=o>=</span>lsio
</span><span id=__span-40-4><a id=__codelineno-40-4 name=__codelineno-40-4 href=#__codelineno-40-4></a><span class=w> </span>-e<span class=w> </span><span class=nv>PUID</span><span class=o>=</span><span class=m>1000</span><span class=w> </span><span class=se>\</span>
</span><span id=__span-40-5><a id=__codelineno-40-5 name=__codelineno-40-5 href=#__codelineno-40-5></a><span class=w> </span>-e<span class=w> </span><span class=nv>PGID</span><span class=o>=</span><span class=m>1000</span><span class=w> </span><span class=se>\</span>
</span><span id=__span-40-6><a id=__codelineno-40-6 name=__codelineno-40-6 href=#__codelineno-40-6></a><span class=w> </span>-e<span class=w> </span><span class=nv>TZ</span><span class=o>=</span>Europe/London<span class=w> </span><span class=se>\</span>
</span><span id=__span-40-7><a id=__codelineno-40-7 name=__codelineno-40-7 href=#__codelineno-40-7></a><span class=w> </span>-v<span class=w> </span>/home/aptalca/appdata/nextcloud/config:/config<span class=w> </span><span class=se>\</span>
</span><span id=__span-40-8><a id=__codelineno-40-8 name=__codelineno-40-8 href=#__codelineno-40-8></a><span class=w> </span>-v<span class=w> </span>/home/aptalca/appdata/nextcloud/data:/data<span class=w> </span><span class=se>\</span>
</span><span id=__span-40-9><a id=__codelineno-40-9 name=__codelineno-40-9 href=#__codelineno-40-9></a><span class=w> </span>--restart<span class=w> </span>unless-stopped<span class=w> </span><span class=se>\</span>
</span><span id=__span-40-10><a id=__codelineno-40-10 name=__codelineno-40-10 href=#__codelineno-40-10></a><span class=w> </span>lscr.io/linuxserver/nextcloud
</span></code></pre></div> <p>Mariadb:</p> <div class="language-shell highlight"><pre><span></span><code><span id=__span-41-1><a id=__codelineno-41-1 name=__codelineno-41-1 href=#__codelineno-41-1></a>docker<span class=w> </span>create<span class=w> </span><span class=se>\</span>
</span><span id=__span-41-2><a id=__codelineno-41-2 name=__codelineno-41-2 href=#__codelineno-41-2></a><span class=w> </span>--name<span class=o>=</span>mariadb<span class=w> </span><span class=se>\</span>
</span><span id=__span-41-3><a id=__codelineno-41-3 name=__codelineno-41-3 href=#__codelineno-41-3></a><span class=w> </span>--net<span class=o>=</span>lsio<span class=w> </span><span class=se>\</span>
</span><span id=__span-41-4><a id=__codelineno-41-4 name=__codelineno-41-4 href=#__codelineno-41-4></a><span class=w> </span>-e<span class=w> </span><span class=nv>PUID</span><span class=o>=</span><span class=m>1000</span><span class=w> </span><span class=se>\</span>
</span><span id=__span-41-5><a id=__codelineno-41-5 name=__codelineno-41-5 href=#__codelineno-41-5></a><span class=w> </span>-e<span class=w> </span><span class=nv>PGID</span><span class=o>=</span><span class=m>1000</span><span class=w> </span><span class=se>\</span>
</span><span id=__span-41-6><a id=__codelineno-41-6 name=__codelineno-41-6 href=#__codelineno-41-6></a><span class=w> </span>-e<span class=w> </span><span class=nv>MYSQL_ROOT_PASSWORD</span><span class=o>=</span>mariadbpassword<span class=w> </span><span class=se>\</span>
</span><span id=__span-41-7><a id=__codelineno-41-7 name=__codelineno-41-7 href=#__codelineno-41-7></a><span class=w> </span>-e<span class=w> </span><span class=nv>TZ</span><span class=o>=</span>Europe/London<span class=w> </span><span class=se>\</span>
</span><span id=__span-41-8><a id=__codelineno-41-8 name=__codelineno-41-8 href=#__codelineno-41-8></a><span class=w> </span>-e<span class=w> </span><span class=nv>MYSQL_DATABASE</span><span class=o>=</span>nextcloud<span class=w> </span><span class=se>\</span>
</span><span id=__span-41-9><a id=__codelineno-41-9 name=__codelineno-41-9 href=#__codelineno-41-9></a><span class=w> </span>-e<span class=w> </span><span class=nv>MYSQL_USER</span><span class=o>=</span>ncuser<span class=w> </span><span class=se>\</span>
</span><span id=__span-41-10><a id=__codelineno-41-10 name=__codelineno-41-10 href=#__codelineno-41-10></a><span class=w> </span>-e<span class=w> </span><span class=nv>MYSQL_PASSWORD</span><span class=o>=</span>ncpassword<span class=w> </span><span class=se>\</span>
</span><span id=__span-41-11><a id=__codelineno-41-11 name=__codelineno-41-11 href=#__codelineno-41-11></a><span class=w> </span>-v<span class=w> </span>/home/aptalca/appdata/mariadb:/config<span class=w> </span><span class=se>\</span>
</span><span id=__span-41-12><a id=__codelineno-41-12 name=__codelineno-41-12 href=#__codelineno-41-12></a><span class=w> </span>--restart<span class=w> </span>unless-stopped<span class=w> </span><span class=se>\</span>
</span><span id=__span-41-13><a id=__codelineno-41-13 name=__codelineno-41-13 href=#__codelineno-41-13></a><span class=w> </span>lscr.io/linuxserver/mariadb
</span></code></pre></div> <p>SWAG:</p> <div class="language-shell highlight"><pre><span></span><code><span id=__span-42-1><a id=__codelineno-42-1 name=__codelineno-42-1 href=#__codelineno-42-1></a>docker<span class=w> </span>create<span class=w> </span><span class=se>\</span>
</span><span id=__span-42-2><a id=__codelineno-42-2 name=__codelineno-42-2 href=#__codelineno-42-2></a><span class=w> </span>--name<span class=o>=</span>swag<span class=w> </span><span class=se>\</span>
</span><span id=__span-42-3><a id=__codelineno-42-3 name=__codelineno-42-3 href=#__codelineno-42-3></a><span class=w> </span>--cap-add<span class=o>=</span>NET_ADMIN<span class=w> </span><span class=se>\</span>
</span><span id=__span-42-4><a id=__codelineno-42-4 name=__codelineno-42-4 href=#__codelineno-42-4></a><span class=w> </span>--net<span class=o>=</span>lsio<span class=w> </span><span class=se>\</span>
</span><span id=__span-42-5><a id=__codelineno-42-5 name=__codelineno-42-5 href=#__codelineno-42-5></a><span class=w> </span>-e<span class=w> </span><span class=nv>PUID</span><span class=o>=</span><span class=m>1000</span><span class=w> </span><span class=se>\</span>
</span><span id=__span-42-6><a id=__codelineno-42-6 name=__codelineno-42-6 href=#__codelineno-42-6></a><span class=w> </span>-e<span class=w> </span><span class=nv>PGID</span><span class=o>=</span><span class=m>1000</span><span class=w> </span><span class=se>\</span>
</span><span id=__span-42-7><a id=__codelineno-42-7 name=__codelineno-42-7 href=#__codelineno-42-7></a><span class=w> </span>-e<span class=w> </span><span class=nv>TZ</span><span class=o>=</span>Europe/London<span class=w> </span><span class=se>\</span>
</span><span id=__span-42-8><a id=__codelineno-42-8 name=__codelineno-42-8 href=#__codelineno-42-8></a><span class=w> </span>-e<span class=w> </span><span class=nv>URL</span><span class=o>=</span>linuxserver-test.duckdns.org<span class=w> </span><span class=se>\</span>
</span><span id=__span-42-9><a id=__codelineno-42-9 name=__codelineno-42-9 href=#__codelineno-42-9></a><span class=w> </span>-e<span class=w> </span><span class=nv>SUBDOMAINS</span><span class=o>=</span>wildcard<span class=w> </span><span class=se>\</span>
</span><span id=__span-42-10><a id=__codelineno-42-10 name=__codelineno-42-10 href=#__codelineno-42-10></a><span class=w> </span>-e<span class=w> </span><span class=nv>VALIDATION</span><span class=o>=</span>duckdns<span class=w> </span><span class=se>\</span>
</span><span id=__span-42-11><a id=__codelineno-42-11 name=__codelineno-42-11 href=#__codelineno-42-11></a><span class=w> </span>-e<span class=w> </span><span class=nv>DUCKDNSTOKEN</span><span class=o>=</span>97654867496t0877648659765854<span class=w> </span><span class=se>\</span>
</span><span id=__span-42-12><a id=__codelineno-42-12 name=__codelineno-42-12 href=#__codelineno-42-12></a><span class=w> </span>-p<span class=w> </span><span class=m>443</span>:443<span class=w> </span><span class=se>\</span>
</span><span id=__span-42-13><a id=__codelineno-42-13 name=__codelineno-42-13 href=#__codelineno-42-13></a><span class=w> </span>-p<span class=w> </span><span class=m>80</span>:80<span class=w> </span><span class=se>\</span>
</span><span id=__span-42-14><a id=__codelineno-42-14 name=__codelineno-42-14 href=#__codelineno-42-14></a><span class=w> </span>-v<span class=w> </span>/home/aptalca/appdata/swag:/config<span class=w> </span><span class=se>\</span>
</span><span id=__span-42-15><a id=__codelineno-42-15 name=__codelineno-42-15 href=#__codelineno-42-15></a><span class=w> </span>--restart<span class=w> </span>unless-stopped<span class=w> </span><span class=se>\</span>
</span><span id=__span-42-16><a id=__codelineno-42-16 name=__codelineno-42-16 href=#__codelineno-42-16></a><span class=w> </span>lscr.io/linuxserver/swag
</span></code></pre></div> <p>Now we find the file named <code>nextcloud.subdomain.conf.sample</code> under SWAG's <code>/config/nginx/proxy-confs</code> folder and rename it to <code>nextcloud.subdomain.conf</code>, then restart the SWAG container.</p> <p>If this is the first time we are accessing Nextcloud (we've never accessed it locally before), we can simply navigate to <code>https://nextcloud.linuxserver-test.duckdns.org</code> and we should see the Nextcloud set up page. We'll fill out the info, use the mariadb user <code>ncuser</code> and the password we selected in the environment variable (<code>ncpassword</code> in the above example) and we'll use <code>mariadb</code> as the Database Host address (container name as dns hostname).</p> <p><img alt=Screenshot-2019-04-14-at-18.35.02---Edited src=https://www.linuxserver.io/user/pages/content/images/2019/04/Screenshot-2019-04-14-at-18.35.02---Edited.png></p> <p>We should then be able to go through the intro slides and then see the Nextcloud dashboard with our shiny padlock icon next to the address bar.</p> <p><img alt=Screenshot-2019-04-14-at-18.40.45---Edited src=https://www.linuxserver.io/user/pages/content/images/2019/04/Screenshot-2019-04-14-at-18.40.45---Edited.png></p> <p>If this is an existing Nextcloud instance, or we set it up locally via the host IP address and local port, Nextcloud will reject proxied connections. In that case, we have to follow the instructions at the top of the <code>nextcloud.subdomain.conf</code> file:</p> <div class="language-nginx highlight"><pre><span></span><code><span id=__span-43-1><a id=__codelineno-43-1 name=__codelineno-43-1 href=#__codelineno-43-1></a><span class=c1># assuming this container is called &quot;swag&quot;, edit your nextcloud container&#39;s config</span>
</span><span id=__span-43-2><a id=__codelineno-43-2 name=__codelineno-43-2 href=#__codelineno-43-2></a><span class=c1># located at /config/www/nextcloud/config/config.php and add the following lines before the &quot;);&quot;:</span>
</span><span id=__span-43-3><a id=__codelineno-43-3 name=__codelineno-43-3 href=#__codelineno-43-3></a><span class=c1># &#39;trusted_proxies&#39; =&gt; [&#39;swag&#39;],</span>
</span><span id=__span-43-4><a id=__codelineno-43-4 name=__codelineno-43-4 href=#__codelineno-43-4></a><span class=c1># &#39;overwrite.cli.url&#39; =&gt; &#39;https://nextcloud.your-domain.com/&#39;,</span>
</span><span id=__span-43-5><a id=__codelineno-43-5 name=__codelineno-43-5 href=#__codelineno-43-5></a><span class=c1># &#39;overwritehost&#39; =&gt; &#39;nextcloud.your-domain.com&#39;,</span>
</span><span id=__span-43-6><a id=__codelineno-43-6 name=__codelineno-43-6 href=#__codelineno-43-6></a><span class=c1># &#39;overwriteprotocol&#39; =&gt; &#39;https&#39;,</span>
</span><span id=__span-43-7><a id=__codelineno-43-7 name=__codelineno-43-7 href=#__codelineno-43-7></a><span class=c1>#</span>
</span><span id=__span-43-8><a id=__codelineno-43-8 name=__codelineno-43-8 href=#__codelineno-43-8></a><span class=c1># Also don&#39;t forget to add your domain name to the trusted domains array. It should look somewhat like this:</span>
</span><span id=__span-43-9><a id=__codelineno-43-9 name=__codelineno-43-9 href=#__codelineno-43-9></a><span class=c1># array (</span>
</span><span id=__span-43-10><a id=__codelineno-43-10 name=__codelineno-43-10 href=#__codelineno-43-10></a><span class=c1># 0 =&gt; &#39;192.168.0.1:444&#39;, # This line may look different on your setup, don&#39;t modify it.</span>
</span><span id=__span-43-11><a id=__codelineno-43-11 name=__codelineno-43-11 href=#__codelineno-43-11></a><span class=c1># 1 =&gt; &#39;nextcloud.your-domain.com&#39;,</span>
</span><span id=__span-43-12><a id=__codelineno-43-12 name=__codelineno-43-12 href=#__codelineno-43-12></a><span class=c1># ),</span>
</span></code></pre></div> <p>These settings will tell Nextcloud to respond to queries where the destination address is our domain name.</p> <blockquote> <p>If you followed the above directions to set it up for the first time, you only need to add the line <code>'trusted_proxies' =&gt; ['swag'],</code>, otherwise nextcloud 16+ shows a warning about incorrect reverse proxy settings. By default, HSTS is disabled in SWAG config, because it is a bit of a sledgehammer that prevents loading of any http assets on the entire domain. You can enable it in SWAG's <code>ssl.conf</code>.</p> </blockquote> <h3 id=plex-subfolder-reverse-proxy-example>Plex subfolder reverse proxy example<a class=headerlink href=#plex-subfolder-reverse-proxy-example title="Permanent link">&para;</a></h3> <p>In this example, we will set up Plex as a subfolder so it will be accessible at <code>https://linuxserver-test.com/plex</code>. We will initially set up Plex with host networking through its local IP and will connect to it from the same subnet. If we are on a different subnet, or if using a bridge network, we can use the <code>PLEX_CLAIM</code> variable to automatically claim the server with our plex account.</p> <p>Once the Plex server is set up, it is safe to switch it to bridge networking from host.</p> <p>Here's a docker compose stack we can use to set up both containers:</p> <div class="language-yaml highlight"><pre><span></span><code><span id=__span-44-1><a id=__codelineno-44-1 name=__codelineno-44-1 href=#__codelineno-44-1></a><span class=nn>---</span>
</span><span id=__span-44-2><a id=__codelineno-44-2 name=__codelineno-44-2 href=#__codelineno-44-2></a><span class=nt>version</span><span class=p>:</span><span class=w> </span><span class=s>&quot;2.1&quot;</span>
</span><span id=__span-44-3><a id=__codelineno-44-3 name=__codelineno-44-3 href=#__codelineno-44-3></a><span class=nt>services</span><span class=p>:</span>
</span><span id=__span-44-4><a id=__codelineno-44-4 name=__codelineno-44-4 href=#__codelineno-44-4></a><span class=w> </span><span class=nt>plex</span><span class=p>:</span>
</span><span id=__span-44-5><a id=__codelineno-44-5 name=__codelineno-44-5 href=#__codelineno-44-5></a><span class=w> </span><span class=nt>image</span><span class=p>:</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">lscr.io/linuxserver/plex</span>
</span><span id=__span-44-6><a id=__codelineno-44-6 name=__codelineno-44-6 href=#__codelineno-44-6></a><span class=w> </span><span class=nt>container_name</span><span class=p>:</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">plex</span>
</span><span id=__span-44-7><a id=__codelineno-44-7 name=__codelineno-44-7 href=#__codelineno-44-7></a><span class=w> </span><span class=nt>network_mode</span><span class=p>:</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">host</span>
</span><span id=__span-44-8><a id=__codelineno-44-8 name=__codelineno-44-8 href=#__codelineno-44-8></a><span class=w> </span><span class=nt>environment</span><span class=p>:</span>
</span><span id=__span-44-9><a id=__codelineno-44-9 name=__codelineno-44-9 href=#__codelineno-44-9></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">PUID=1000</span>
</span><span id=__span-44-10><a id=__codelineno-44-10 name=__codelineno-44-10 href=#__codelineno-44-10></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">PGID=1000</span>
</span><span id=__span-44-11><a id=__codelineno-44-11 name=__codelineno-44-11 href=#__codelineno-44-11></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">VERSION=docker</span>
</span><span id=__span-44-12><a id=__codelineno-44-12 name=__codelineno-44-12 href=#__codelineno-44-12></a><span class=w> </span><span class=nt>volumes</span><span class=p>:</span>
</span><span id=__span-44-13><a id=__codelineno-44-13 name=__codelineno-44-13 href=#__codelineno-44-13></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">/home/aptalca/appdata/plex:/config</span>
</span><span id=__span-44-14><a id=__codelineno-44-14 name=__codelineno-44-14 href=#__codelineno-44-14></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">/home/aptalca/tvshows:/data/tvshows</span>
</span><span id=__span-44-15><a id=__codelineno-44-15 name=__codelineno-44-15 href=#__codelineno-44-15></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">/home/aptalca/movies:/data/movies</span>
</span><span id=__span-44-16><a id=__codelineno-44-16 name=__codelineno-44-16 href=#__codelineno-44-16></a><span class=w> </span><span class=nt>restart</span><span class=p>:</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">unless-stopped</span>
</span><span id=__span-44-17><a id=__codelineno-44-17 name=__codelineno-44-17 href=#__codelineno-44-17></a><span class=w> </span><span class=nt>swag</span><span class=p>:</span>
</span><span id=__span-44-18><a id=__codelineno-44-18 name=__codelineno-44-18 href=#__codelineno-44-18></a><span class=w> </span><span class=nt>image</span><span class=p>:</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">lscr.io/linuxserver/swag</span>
</span><span id=__span-44-19><a id=__codelineno-44-19 name=__codelineno-44-19 href=#__codelineno-44-19></a><span class=w> </span><span class=nt>container_name</span><span class=p>:</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">swag</span>
</span><span id=__span-44-20><a id=__codelineno-44-20 name=__codelineno-44-20 href=#__codelineno-44-20></a><span class=w> </span><span class=nt>cap_add</span><span class=p>:</span>
</span><span id=__span-44-21><a id=__codelineno-44-21 name=__codelineno-44-21 href=#__codelineno-44-21></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">NET_ADMIN</span>
</span><span id=__span-44-22><a id=__codelineno-44-22 name=__codelineno-44-22 href=#__codelineno-44-22></a><span class=w> </span><span class=nt>environment</span><span class=p>:</span>
</span><span id=__span-44-23><a id=__codelineno-44-23 name=__codelineno-44-23 href=#__codelineno-44-23></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">PUID=1000</span>
</span><span id=__span-44-24><a id=__codelineno-44-24 name=__codelineno-44-24 href=#__codelineno-44-24></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">PGID=1000</span>
</span><span id=__span-44-25><a id=__codelineno-44-25 name=__codelineno-44-25 href=#__codelineno-44-25></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">TZ=Europe/London</span>
</span><span id=__span-44-26><a id=__codelineno-44-26 name=__codelineno-44-26 href=#__codelineno-44-26></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">URL=linuxserver-test.com</span>
</span><span id=__span-44-27><a id=__codelineno-44-27 name=__codelineno-44-27 href=#__codelineno-44-27></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">SUBDOMAINS=wildcard</span>
</span><span id=__span-44-28><a id=__codelineno-44-28 name=__codelineno-44-28 href=#__codelineno-44-28></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">VALIDATION=dns</span>
</span><span id=__span-44-29><a id=__codelineno-44-29 name=__codelineno-44-29 href=#__codelineno-44-29></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">DNSPLUGIN=cloudflare</span>
</span><span id=__span-44-30><a id=__codelineno-44-30 name=__codelineno-44-30 href=#__codelineno-44-30></a><span class=w> </span><span class=nt>volumes</span><span class=p>:</span>
</span><span id=__span-44-31><a id=__codelineno-44-31 name=__codelineno-44-31 href=#__codelineno-44-31></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">/home/aptalca/appdata/swag:/config</span>
</span><span id=__span-44-32><a id=__codelineno-44-32 name=__codelineno-44-32 href=#__codelineno-44-32></a><span class=w> </span><span class=nt>ports</span><span class=p>:</span>
</span><span id=__span-44-33><a id=__codelineno-44-33 name=__codelineno-44-33 href=#__codelineno-44-33></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">443:443</span>
</span><span id=__span-44-34><a id=__codelineno-44-34 name=__codelineno-44-34 href=#__codelineno-44-34></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">80:80</span>
</span><span id=__span-44-35><a id=__codelineno-44-35 name=__codelineno-44-35 href=#__codelineno-44-35></a><span class=w> </span><span class=nt>restart</span><span class=p>:</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">unless-stopped</span>
</span></code></pre></div> <p>Here are the docker cli versions: Plex:</p> <div class="language-shell highlight"><pre><span></span><code><span id=__span-45-1><a id=__codelineno-45-1 name=__codelineno-45-1 href=#__codelineno-45-1></a>docker<span class=w> </span>create<span class=w> </span><span class=se>\</span>
</span><span id=__span-45-2><a id=__codelineno-45-2 name=__codelineno-45-2 href=#__codelineno-45-2></a><span class=w> </span>--name<span class=o>=</span>plex<span class=w> </span><span class=se>\</span>
</span><span id=__span-45-3><a id=__codelineno-45-3 name=__codelineno-45-3 href=#__codelineno-45-3></a><span class=w> </span>--net<span class=o>=</span>host<span class=w> </span><span class=se>\</span>
</span><span id=__span-45-4><a id=__codelineno-45-4 name=__codelineno-45-4 href=#__codelineno-45-4></a><span class=w> </span>-e<span class=w> </span><span class=nv>PUID</span><span class=o>=</span><span class=m>1000</span><span class=w> </span><span class=se>\</span>
</span><span id=__span-45-5><a id=__codelineno-45-5 name=__codelineno-45-5 href=#__codelineno-45-5></a><span class=w> </span>-e<span class=w> </span><span class=nv>PGID</span><span class=o>=</span><span class=m>1000</span><span class=w> </span><span class=se>\</span>
</span><span id=__span-45-6><a id=__codelineno-45-6 name=__codelineno-45-6 href=#__codelineno-45-6></a><span class=w> </span>-e<span class=w> </span><span class=nv>VERSION</span><span class=o>=</span>docker<span class=w> </span><span class=se>\</span>
</span><span id=__span-45-7><a id=__codelineno-45-7 name=__codelineno-45-7 href=#__codelineno-45-7></a><span class=w> </span>-v<span class=w> </span>/home/aptalca/appdata/plex:/config<span class=w> </span><span class=se>\</span>
</span><span id=__span-45-8><a id=__codelineno-45-8 name=__codelineno-45-8 href=#__codelineno-45-8></a><span class=w> </span>-v<span class=w> </span>/home/aptalca/tvshows:/data/tvshows<span class=w> </span><span class=se>\</span>
</span><span id=__span-45-9><a id=__codelineno-45-9 name=__codelineno-45-9 href=#__codelineno-45-9></a><span class=w> </span>-v<span class=w> </span>/home/aptalca/movies:/data/movies<span class=w> </span><span class=se>\</span>
</span><span id=__span-45-10><a id=__codelineno-45-10 name=__codelineno-45-10 href=#__codelineno-45-10></a><span class=w> </span>--restart<span class=w> </span>unless-stopped<span class=w> </span><span class=se>\</span>
</span><span id=__span-45-11><a id=__codelineno-45-11 name=__codelineno-45-11 href=#__codelineno-45-11></a><span class=w> </span>lscr.io/linuxserver/plex
</span></code></pre></div> <p>SWAG:</p> <div class="language-shell highlight"><pre><span></span><code><span id=__span-46-1><a id=__codelineno-46-1 name=__codelineno-46-1 href=#__codelineno-46-1></a>docker<span class=w> </span>create<span class=w> </span><span class=se>\</span>
</span><span id=__span-46-2><a id=__codelineno-46-2 name=__codelineno-46-2 href=#__codelineno-46-2></a><span class=w> </span>--name<span class=o>=</span>swag<span class=w> </span><span class=se>\</span>
</span><span id=__span-46-3><a id=__codelineno-46-3 name=__codelineno-46-3 href=#__codelineno-46-3></a><span class=w> </span>--cap-add<span class=o>=</span>NET_ADMIN<span class=w> </span><span class=se>\</span>
</span><span id=__span-46-4><a id=__codelineno-46-4 name=__codelineno-46-4 href=#__codelineno-46-4></a><span class=w> </span>--net<span class=o>=</span>lsio<span class=w> </span><span class=se>\</span>
</span><span id=__span-46-5><a id=__codelineno-46-5 name=__codelineno-46-5 href=#__codelineno-46-5></a><span class=w> </span>-e<span class=w> </span><span class=nv>PUID</span><span class=o>=</span><span class=m>1000</span><span class=w> </span><span class=se>\</span>
</span><span id=__span-46-6><a id=__codelineno-46-6 name=__codelineno-46-6 href=#__codelineno-46-6></a><span class=w> </span>-e<span class=w> </span><span class=nv>PGID</span><span class=o>=</span><span class=m>1000</span><span class=w> </span><span class=se>\</span>
</span><span id=__span-46-7><a id=__codelineno-46-7 name=__codelineno-46-7 href=#__codelineno-46-7></a><span class=w> </span>-e<span class=w> </span><span class=nv>TZ</span><span class=o>=</span>Europe/London<span class=w> </span><span class=se>\</span>
</span><span id=__span-46-8><a id=__codelineno-46-8 name=__codelineno-46-8 href=#__codelineno-46-8></a><span class=w> </span>-e<span class=w> </span><span class=nv>URL</span><span class=o>=</span>linuxserver-test.com<span class=w> </span><span class=se>\</span>
</span><span id=__span-46-9><a id=__codelineno-46-9 name=__codelineno-46-9 href=#__codelineno-46-9></a><span class=w> </span>-e<span class=w> </span><span class=nv>SUBDOMAINS</span><span class=o>=</span>wildcard<span class=w> </span><span class=se>\</span>
</span><span id=__span-46-10><a id=__codelineno-46-10 name=__codelineno-46-10 href=#__codelineno-46-10></a><span class=w> </span>-e<span class=w> </span><span class=nv>VALIDATION</span><span class=o>=</span>dns<span class=w> </span><span class=se>\</span>
</span><span id=__span-46-11><a id=__codelineno-46-11 name=__codelineno-46-11 href=#__codelineno-46-11></a><span class=w> </span>-e<span class=w> </span><span class=nv>DNSPLUGIN</span><span class=o>=</span>cloudflare<span class=w> </span><span class=se>\</span>
</span><span id=__span-46-12><a id=__codelineno-46-12 name=__codelineno-46-12 href=#__codelineno-46-12></a><span class=w> </span>-p<span class=w> </span><span class=m>443</span>:443<span class=w> </span><span class=se>\</span>
</span><span id=__span-46-13><a id=__codelineno-46-13 name=__codelineno-46-13 href=#__codelineno-46-13></a><span class=w> </span>-p<span class=w> </span><span class=m>80</span>:80<span class=w> </span><span class=se>\</span>
</span><span id=__span-46-14><a id=__codelineno-46-14 name=__codelineno-46-14 href=#__codelineno-46-14></a><span class=w> </span>-v<span class=w> </span>/home/aptalca/appdata/swag:/config<span class=w> </span><span class=se>\</span>
</span><span id=__span-46-15><a id=__codelineno-46-15 name=__codelineno-46-15 href=#__codelineno-46-15></a><span class=w> </span>--restart<span class=w> </span>unless-stopped<span class=w> </span><span class=se>\</span>
</span><span id=__span-46-16><a id=__codelineno-46-16 name=__codelineno-46-16 href=#__codelineno-46-16></a><span class=w> </span>lscr.io/linuxserver/swag
</span></code></pre></div> <p>Once the containers are set up, we browse to <code>http://LOCALSERVERIP:32400/web</code> and set up our Plex server with our Plex account. Then we can find the file named <code>plex.subfolder.conf.sample</code> under our SWAG container's <code>/config/nginx/proxy-confs</code> folder and rename it to <code>plex.subfolder.conf</code>.</p> <p>If we are using bridge networking for our plex container, we can restart the SWAG container and we should be able to access Plex at <code>https://linuxserver-test.com/plex</code>.</p> <p>If we are using host networking for our plex container, we will also have to make one modification to the <code>plex.subfolder.conf</code>. We need to find the line that reads <code>proxy_pass http://$upstream_plex:32400;</code> and replace <code>$upstream_plex</code> with our Plex server's local IP address (ie. <code>proxy_pass http://192.168.1.10:32400;</code>). Then we can restart SWAG and access Plex at <code>https://linuxserver-test.com/plex</code>.</p> <p>If we want Plex to always use our domain to connect (including in mobile apps), we can add our url <code>https://linuxserver-test.com/plex</code> into the <code>Custom server access URLs</code> in Plex server settings. After that, it is OK to turn off remote access in Plex server settings and remove the port forwarding port 32400. After that, all connections to our Plex server will go through SWAG reverse proxy over port 443.</p> <h3 id=using-heimdall-as-the-home-page-at-domain-root>Using Heimdall as the home page at domain root<a class=headerlink href=#using-heimdall-as-the-home-page-at-domain-root title="Permanent link">&para;</a></h3> <p>In this example, we will set Heimdall as our homepage at domain root so when we navigate to <code>https://linuxserver-test.com</code> we will reach Heimdall.</p> <p>As before, we need to make sure port 443 is properly forwarded to our server. We also need to make sure that if we are using the docker cli method, we need to create a user defined bridge network <a href=#docker-networking>as defined above</a>.</p> <p>Here's a docker compose stack we can use to set up both containers:</p> <div class="language-yaml highlight"><pre><span></span><code><span id=__span-47-1><a id=__codelineno-47-1 name=__codelineno-47-1 href=#__codelineno-47-1></a><span class=nn>---</span>
</span><span id=__span-47-2><a id=__codelineno-47-2 name=__codelineno-47-2 href=#__codelineno-47-2></a><span class=nt>version</span><span class=p>:</span><span class=w> </span><span class=s>&quot;2.1&quot;</span>
</span><span id=__span-47-3><a id=__codelineno-47-3 name=__codelineno-47-3 href=#__codelineno-47-3></a><span class=nt>services</span><span class=p>:</span>
</span><span id=__span-47-4><a id=__codelineno-47-4 name=__codelineno-47-4 href=#__codelineno-47-4></a><span class=w> </span><span class=nt>heimdall</span><span class=p>:</span>
</span><span id=__span-47-5><a id=__codelineno-47-5 name=__codelineno-47-5 href=#__codelineno-47-5></a><span class=w> </span><span class=nt>image</span><span class=p>:</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">lscr.io/linuxserver/heimdall</span>
</span><span id=__span-47-6><a id=__codelineno-47-6 name=__codelineno-47-6 href=#__codelineno-47-6></a><span class=w> </span><span class=nt>container_name</span><span class=p>:</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">heimdall</span>
</span><span id=__span-47-7><a id=__codelineno-47-7 name=__codelineno-47-7 href=#__codelineno-47-7></a><span class=w> </span><span class=nt>environment</span><span class=p>:</span>
</span><span id=__span-47-8><a id=__codelineno-47-8 name=__codelineno-47-8 href=#__codelineno-47-8></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">PUID=1000</span>
</span><span id=__span-47-9><a id=__codelineno-47-9 name=__codelineno-47-9 href=#__codelineno-47-9></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">PGID=1000</span>
</span><span id=__span-47-10><a id=__codelineno-47-10 name=__codelineno-47-10 href=#__codelineno-47-10></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">TZ=Europe/London</span>
</span><span id=__span-47-11><a id=__codelineno-47-11 name=__codelineno-47-11 href=#__codelineno-47-11></a><span class=w> </span><span class=nt>volumes</span><span class=p>:</span>
</span><span id=__span-47-12><a id=__codelineno-47-12 name=__codelineno-47-12 href=#__codelineno-47-12></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">/home/aptalca/appdata/heimdall:/config</span>
</span><span id=__span-47-13><a id=__codelineno-47-13 name=__codelineno-47-13 href=#__codelineno-47-13></a><span class=w> </span><span class=nt>restart</span><span class=p>:</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">unless-stopped</span>
</span><span id=__span-47-14><a id=__codelineno-47-14 name=__codelineno-47-14 href=#__codelineno-47-14></a><span class=w> </span><span class=nt>swag</span><span class=p>:</span>
</span><span id=__span-47-15><a id=__codelineno-47-15 name=__codelineno-47-15 href=#__codelineno-47-15></a><span class=w> </span><span class=nt>image</span><span class=p>:</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">lscr.io/linuxserver/swag</span>
</span><span id=__span-47-16><a id=__codelineno-47-16 name=__codelineno-47-16 href=#__codelineno-47-16></a><span class=w> </span><span class=nt>container_name</span><span class=p>:</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">swag</span>
</span><span id=__span-47-17><a id=__codelineno-47-17 name=__codelineno-47-17 href=#__codelineno-47-17></a><span class=w> </span><span class=nt>cap_add</span><span class=p>:</span>
</span><span id=__span-47-18><a id=__codelineno-47-18 name=__codelineno-47-18 href=#__codelineno-47-18></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">NET_ADMIN</span>
</span><span id=__span-47-19><a id=__codelineno-47-19 name=__codelineno-47-19 href=#__codelineno-47-19></a><span class=w> </span><span class=nt>environment</span><span class=p>:</span>
</span><span id=__span-47-20><a id=__codelineno-47-20 name=__codelineno-47-20 href=#__codelineno-47-20></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">PUID=1000</span>
</span><span id=__span-47-21><a id=__codelineno-47-21 name=__codelineno-47-21 href=#__codelineno-47-21></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">PGID=1000</span>
</span><span id=__span-47-22><a id=__codelineno-47-22 name=__codelineno-47-22 href=#__codelineno-47-22></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">TZ=Europe/London</span>
</span><span id=__span-47-23><a id=__codelineno-47-23 name=__codelineno-47-23 href=#__codelineno-47-23></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">URL=linuxserver-test.com</span>
</span><span id=__span-47-24><a id=__codelineno-47-24 name=__codelineno-47-24 href=#__codelineno-47-24></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">SUBDOMAINS=wildcard</span>
</span><span id=__span-47-25><a id=__codelineno-47-25 name=__codelineno-47-25 href=#__codelineno-47-25></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">VALIDATION=dns</span>
</span><span id=__span-47-26><a id=__codelineno-47-26 name=__codelineno-47-26 href=#__codelineno-47-26></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">DNSPLUGIN=cloudflare</span>
</span><span id=__span-47-27><a id=__codelineno-47-27 name=__codelineno-47-27 href=#__codelineno-47-27></a><span class=w> </span><span class=nt>volumes</span><span class=p>:</span>
</span><span id=__span-47-28><a id=__codelineno-47-28 name=__codelineno-47-28 href=#__codelineno-47-28></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">/home/aptalca/appdata/swag:/config</span>
</span><span id=__span-47-29><a id=__codelineno-47-29 name=__codelineno-47-29 href=#__codelineno-47-29></a><span class=w> </span><span class=nt>ports</span><span class=p>:</span>
</span><span id=__span-47-30><a id=__codelineno-47-30 name=__codelineno-47-30 href=#__codelineno-47-30></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">443:443</span>
</span><span id=__span-47-31><a id=__codelineno-47-31 name=__codelineno-47-31 href=#__codelineno-47-31></a><span class=w> </span><span class="p p-Indicator">-</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">80:80</span>
</span><span id=__span-47-32><a id=__codelineno-47-32 name=__codelineno-47-32 href=#__codelineno-47-32></a><span class=w> </span><span class=nt>restart</span><span class=p>:</span><span class=w> </span><span class="l l-Scalar l-Scalar-Plain">unless-stopped</span>
</span></code></pre></div> <p>Here are the docker cli versions: Heimdall:</p> <div class="language-shell highlight"><pre><span></span><code><span id=__span-48-1><a id=__codelineno-48-1 name=__codelineno-48-1 href=#__codelineno-48-1></a>docker<span class=w> </span>create<span class=w> </span><span class=se>\</span>
</span><span id=__span-48-2><a id=__codelineno-48-2 name=__codelineno-48-2 href=#__codelineno-48-2></a><span class=w> </span>--name<span class=o>=</span>heimdall<span class=w> </span><span class=se>\</span>
</span><span id=__span-48-3><a id=__codelineno-48-3 name=__codelineno-48-3 href=#__codelineno-48-3></a><span class=w> </span>--net<span class=o>=</span>lsio<span class=w> </span><span class=se>\</span>
</span><span id=__span-48-4><a id=__codelineno-48-4 name=__codelineno-48-4 href=#__codelineno-48-4></a><span class=w> </span>-e<span class=w> </span><span class=nv>PUID</span><span class=o>=</span><span class=m>1000</span><span class=w> </span><span class=se>\</span>
</span><span id=__span-48-5><a id=__codelineno-48-5 name=__codelineno-48-5 href=#__codelineno-48-5></a><span class=w> </span>-e<span class=w> </span><span class=nv>PGID</span><span class=o>=</span><span class=m>1000</span><span class=w> </span><span class=se>\</span>
</span><span id=__span-48-6><a id=__codelineno-48-6 name=__codelineno-48-6 href=#__codelineno-48-6></a><span class=w> </span>-e<span class=w> </span><span class=nv>TZ</span><span class=o>=</span>Europe/London<span class=w> </span><span class=se>\</span>
</span><span id=__span-48-7><a id=__codelineno-48-7 name=__codelineno-48-7 href=#__codelineno-48-7></a><span class=w> </span>-v<span class=w> </span>/home/aptalca/appdata/heimdall:/config<span class=w> </span><span class=se>\</span>
</span><span id=__span-48-8><a id=__codelineno-48-8 name=__codelineno-48-8 href=#__codelineno-48-8></a><span class=w> </span>--restart<span class=w> </span>unless-stopped<span class=w> </span><span class=se>\</span>
</span><span id=__span-48-9><a id=__codelineno-48-9 name=__codelineno-48-9 href=#__codelineno-48-9></a><span class=w> </span>lscr.io/linuxserver/heimdall
</span></code></pre></div> <p>SWAG:</p> <div class="language-shell highlight"><pre><span></span><code><span id=__span-49-1><a id=__codelineno-49-1 name=__codelineno-49-1 href=#__codelineno-49-1></a>docker<span class=w> </span>create<span class=w> </span><span class=se>\</span>
</span><span id=__span-49-2><a id=__codelineno-49-2 name=__codelineno-49-2 href=#__codelineno-49-2></a><span class=w> </span>--name<span class=o>=</span>swag<span class=w> </span><span class=se>\</span>
</span><span id=__span-49-3><a id=__codelineno-49-3 name=__codelineno-49-3 href=#__codelineno-49-3></a><span class=w> </span>--cap-add<span class=o>=</span>NET_ADMIN<span class=w> </span><span class=se>\</span>
</span><span id=__span-49-4><a id=__codelineno-49-4 name=__codelineno-49-4 href=#__codelineno-49-4></a><span class=w> </span>--net<span class=o>=</span>lsio<span class=w> </span><span class=se>\</span>
</span><span id=__span-49-5><a id=__codelineno-49-5 name=__codelineno-49-5 href=#__codelineno-49-5></a><span class=w> </span>-e<span class=w> </span><span class=nv>PUID</span><span class=o>=</span><span class=m>1000</span><span class=w> </span><span class=se>\</span>
</span><span id=__span-49-6><a id=__codelineno-49-6 name=__codelineno-49-6 href=#__codelineno-49-6></a><span class=w> </span>-e<span class=w> </span><span class=nv>PGID</span><span class=o>=</span><span class=m>1000</span><span class=w> </span><span class=se>\</span>
</span><span id=__span-49-7><a id=__codelineno-49-7 name=__codelineno-49-7 href=#__codelineno-49-7></a><span class=w> </span>-e<span class=w> </span><span class=nv>TZ</span><span class=o>=</span>Europe/London<span class=w> </span><span class=se>\</span>
</span><span id=__span-49-8><a id=__codelineno-49-8 name=__codelineno-49-8 href=#__codelineno-49-8></a><span class=w> </span>-e<span class=w> </span><span class=nv>URL</span><span class=o>=</span>linuxserver-test.com<span class=w> </span><span class=se>\</span>
</span><span id=__span-49-9><a id=__codelineno-49-9 name=__codelineno-49-9 href=#__codelineno-49-9></a><span class=w> </span>-e<span class=w> </span><span class=nv>SUBDOMAINS</span><span class=o>=</span>wildcard<span class=w> </span><span class=se>\</span>
</span><span id=__span-49-10><a id=__codelineno-49-10 name=__codelineno-49-10 href=#__codelineno-49-10></a><span class=w> </span>-e<span class=w> </span><span class=nv>VALIDATION</span><span class=o>=</span>dns<span class=w> </span><span class=se>\</span>
</span><span id=__span-49-11><a id=__codelineno-49-11 name=__codelineno-49-11 href=#__codelineno-49-11></a><span class=w> </span>-e<span class=w> </span><span class=nv>DNSPLUGIN</span><span class=o>=</span>cloudflare<span class=w> </span><span class=se>\</span>
</span><span id=__span-49-12><a id=__codelineno-49-12 name=__codelineno-49-12 href=#__codelineno-49-12></a><span class=w> </span>-p<span class=w> </span><span class=m>443</span>:443<span class=w> </span><span class=se>\</span>
</span><span id=__span-49-13><a id=__codelineno-49-13 name=__codelineno-49-13 href=#__codelineno-49-13></a><span class=w> </span>-p<span class=w> </span><span class=m>80</span>:80<span class=w> </span><span class=se>\</span>
</span><span id=__span-49-14><a id=__codelineno-49-14 name=__codelineno-49-14 href=#__codelineno-49-14></a><span class=w> </span>-v<span class=w> </span>/home/aptalca/appdata/swag:/config<span class=w> </span><span class=se>\</span>
</span><span id=__span-49-15><a id=__codelineno-49-15 name=__codelineno-49-15 href=#__codelineno-49-15></a><span class=w> </span>--restart<span class=w> </span>unless-stopped<span class=w> </span><span class=se>\</span>
</span><span id=__span-49-16><a id=__codelineno-49-16 name=__codelineno-49-16 href=#__codelineno-49-16></a><span class=w> </span>lscr.io/linuxserver/swag
</span></code></pre></div> <p>Once the containers are set up, we'll find the file named <code>heimdall.subfolder.conf.sample</code> under SWAG's <code>/config/nginx/proxy-confs</code> folder and rename it to <code>heimdall.subfolder.conf</code>. If we look inside that conf file, we'll see that it is set to use <code>location / {</code>, which will cause an issue because there is already a location defined for <code>/</code> inside the default site config for SWAG. So we need to edit the default site config at <code>/config/nginx/site-confs/default</code> and comment out the location block for <code>/</code> inside our main server block so it reads:</p> <div class="language-nginx highlight"><pre><span></span><code><span id=__span-50-1><a id=__codelineno-50-1 name=__codelineno-50-1 href=#__codelineno-50-1></a><span class=w> </span><span class=c1>#location / {</span>
</span><span id=__span-50-2><a id=__codelineno-50-2 name=__codelineno-50-2 href=#__codelineno-50-2></a><span class=w> </span><span class=c1># try_files $uri $uri/ /index.html /index.php?$args =404;</span>
</span><span id=__span-50-3><a id=__codelineno-50-3 name=__codelineno-50-3 href=#__codelineno-50-3></a><span class=w> </span><span class=c1>#}</span>
</span></code></pre></div> <p>That way, nginx will use the <code>/</code> location block from our heimdall proxy conf instead.</p> <p>After that, when we navigate to <code>https://linuxserver-test.com</code>, we'll see the Heimdall interface.</p> <p>If we want to password protect our new homepage, we can run the following on the host command line to create a new <code>.htpasswd</code> file: <code>docker exec -it swag htpasswd -c /config/nginx/.htpasswd anyusername</code>. After which, we can activate authentication by editing the <code>heimdall.subfolder.conf</code> file to uncomment the relevant lines so it reads:</p> <div class="language-nginx highlight"><pre><span></span><code><span id=__span-51-1><a id=__codelineno-51-1 name=__codelineno-51-1 href=#__codelineno-51-1></a><span class=w> </span><span class=c1># enable the next two lines for http auth</span>
</span><span id=__span-51-2><a id=__codelineno-51-2 name=__codelineno-51-2 href=#__codelineno-51-2></a><span class=w> </span><span class=k>auth_basic</span><span class=w> </span><span class=s>&quot;Restricted&quot;</span><span class=p>;</span>
</span><span id=__span-51-3><a id=__codelineno-51-3 name=__codelineno-51-3 href=#__codelineno-51-3></a><span class=w> </span><span class=k>auth_basic_user_file</span><span class=w> </span><span class=s>/config/nginx/.htpasswd</span><span class=p>;</span>
</span></code></pre></div> <h2 id=troubleshooting>Troubleshooting<a class=headerlink href=#troubleshooting title="Permanent link">&para;</a></h2> <p>We wrote a blogpost for the deprecated letsencrypt image diving into troubleshooting issues regarding dns and port-forwards, which still is a very good resource: <a href=https://blog.linuxserver.io/2019/07/10/troubleshooting-letsencrypt-image-port-mapping-and-forwarding/ >blog.linuxserver.io</a></p> <h3 id=common-errors>Common errors<a class=headerlink href=#common-errors title="Permanent link">&para;</a></h3> <h4 id=404>404<a class=headerlink href=#404 title="Permanent link">&para;</a></h4> <p>This error simply means that the resource was not found. Commonly happening when you try to access a subfolder that is not enabled.</p> <h4 id=502>502<a class=headerlink href=#502 title="Permanent link">&para;</a></h4> <p>This error means that nginx can't talk to the application. There is a few common reasons for this:</p> <ul> <li> <p>The application and SWAG is not on the same custom docker network</p> <p>Further up we talk about how to set up <a href=#docker-networking>Docker networking</a>, however there are some other common traps</p> </li> <li> <p>The container name does not match the application name.</p> <p>Covered in the section for <a href=#understanding-the-proxy-conf-structure>Understanding the proxy conf structure</a></p> </li> <li> <p>You manually changed the port.</p> <p>Also covered in the section for <a href=#understanding-the-proxy-conf-structure>Understanding the proxy conf structure</a></p> </li> <li> <p>The container originally ran with host networking, or the default bridge.</p> <p>In most cases the contents of <code>/config/nginx/resolver.conf;</code> should be <code>...resolver 127.0.0.11 valid=30s;</code>, if this is not the case, you can:</p> <ul> <li>Delete it, and restart the container to have it regenerate</li> <li>Manually set the content(we wont override it)</li> </ul> </li> </ul> <h2 id=final-thoughts>Final Thoughts<a class=headerlink href=#final-thoughts title="Permanent link">&para;</a></h2> <p>This image can be used in many different scenarios as it is a full fledged web server with some bells and whistles added. The above examples should be enough to get you started. For more information, please refer to the official documentation on either <a href=https://github.com/linuxserver/docker-swag/blob/master/README.md>Github</a> or <a href=https://hub.docker.com/r/linuxserver/swag>Docker Hub</a>. If you have questions or issues, or want to discuss and share ideas, feel free to visit our discord: <a href=https://discord.gg/YWrKVTn>https://discord.gg/YWrKVTn</a></p> <h3 id=how-to-request-support>How to Request Support<a class=headerlink href=#how-to-request-support title="Permanent link">&para;</a></h3> <p>As you can see in this article, there are many different configurations, therefore we need to understand your exact setup before we can provide support. If you encounter a bug and confirm that it's a bug, please report it on <a href=https://github.com/linuxserver/docker-swag>our github thread</a>. If you need help with setting it up, <a href=https://discord.gg/YWrKVTn>join our discord</a> and upload the following info to a service like pastebin and post the link:</p> <ul> <li>Docker run/create or compose yml you used</li> <li>Full docker log (<code>docker logs swag</code>)</li> <li>Any relevant conf files (default, nginx.conf or specific proxy conf)</li> </ul> <aside class=md-source-file> <span class=md-source-file__fact> <span class=md-icon title="Last update"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M21 13.1c-.1 0-.3.1-.4.2l-1 1 2.1 2.1 1-1c.2-.2.2-.6 0-.8l-1.3-1.3c-.1-.1-.2-.2-.4-.2m-1.9 1.8-6.1 6V23h2.1l6.1-6.1-2.1-2M12.5 7v5.2l4 2.4-1 1L11 13V7h1.5M11 21.9c-5.1-.5-9-4.8-9-9.9C2 6.5 6.5 2 12 2c5.3 0 9.6 4.1 10 9.3-.3-.1-.6-.2-1-.2s-.7.1-1 .2C19.6 7.2 16.2 4 12 4c-4.4 0-8 3.6-8 8 0 4.1 3.1 7.5 7.1 7.9l-.1.2v1.8Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-date">November 17, 2023</span> </span> <span class=md-source-file__fact> <span class=md-icon title=Created> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M14.47 15.08 11 13V7h1.5v5.25l3.08 1.83c-.41.28-.79.62-1.11 1m-1.39 4.84c-.36.05-.71.08-1.08.08-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8c0 .37-.03.72-.08 1.08.69.1 1.33.32 1.92.64.1-.56.16-1.13.16-1.72 0-5.5-4.5-10-10-10S2 6.5 2 12s4.47 10 10 10c.59 0 1.16-.06 1.72-.16-.32-.59-.54-1.23-.64-1.92M18 15v3h-3v2h3v3h2v-3h3v-2h-3v-3h-2Z"/></svg> </span> <span class="git-revision-date-localized-plugin git-revision-date-localized-plugin-date">August 15, 2020</span> </span> </aside> </article> </div> <script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script> </div> <button type=button class="md-top md-icon" data-md-component=top hidden> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12Z"/></svg> Back to top </button> </main> <footer class=md-footer> <nav class="md-footer__inner md-grid" aria-label=Footer> <a href=../fleet/ class="md-footer__link md-footer__link--prev" aria-label="Previous: Fleet"> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg> </div> <div class=md-footer__title> <span class=md-footer__direction> Previous </span> <div class=md-ellipsis> Fleet </div> </div> </a> <a href=../how-to-get-support/ class="md-footer__link md-footer__link--next" aria-label="Next: How to get support"> <div class=md-footer__title> <span class=md-footer__direction> Next </span> <div class=md-ellipsis> How to get support </div> </div> <div class="md-footer__button md-icon"> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 24 24"><path d="M4 11v2h12l-5.5 5.5 1.42 1.42L19.84 12l-7.92-7.92L10.5 5.5 16 11H4Z"/></svg> </div> </a> </nav> <div class="md-footer-meta md-typeset"> <div class="md-footer-meta__inner md-grid"> <div class=md-copyright> <div class=md-copyright__highlight> Copyright &copy; 2024 LinuxServer.io </div> Made with <a href=https://squidfunk.github.io/mkdocs-material/ target=_blank rel=noopener> Material for MkDocs </a> </div> <div class=md-social> <a href=https://linuxserver.io target=_blank rel=noopener title=linuxserver.io class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 640 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="m181.5 197.1 12.9 6.4c5.9 3 12.4 4.5 19.1 4.5 23.5 0 42.6-19.1 42.6-42.6V144c0-35.3-28.7-64-64-64H128c-35.3 0-64 28.7-64 64v21.4c0 23.5 19.1 42.6 42.6 42.6 6.6 0 13.1-1.5 19.1-4.5l12.9-6.4 8.4-4.2-11.9-7.9c-4.5-3-7.1-8-7.1-13.3V168c0-13.3 10.7-24 24-24h16c13.3 0 24 10.7 24 24v3.7c0 5.3-2.7 10.3-7.1 13.3l-11.8 7.9 8.4 4.2zm-8.6 49.4L160 240l-12.9 6.4c-12.6 6.3-26.5 9.6-40.5 9.6-3.6 0-7.1-.2-10.6-.6v.6c0 35.3 28.7 64 64 64h64c17.7 0 32 14.3 32 32s-14.3 32-32 32h160v-64c0-23.7 12.9-44.4 32-55.4 9.4-5.4 20.3-8.6 32-8.6v-16c0-26.5 21.5-48 48-48 8.8 0 16 7.2 16 16v96c0 8.8 7.2 16 16 16s16-7.2 16-16v-99.7c0-48.2-30.8-91-76.6-106.3l-8.5-2.8c-8-2.7-12.6-11.1-10.4-19.3s10.3-13.2 18.6-11.6l19.9 4c89 17.8 153 95.9 153 186.6v1.1c0 123.7-100.3 224-224 224H255.4C132 480 32 380 32 256.6V216.8c-10.1-14.6-16-32.3-16-51.4V142.6C6.7 139.3 0 130.5 0 120c0-13.3 10.7-24 24-24h2.8c18-37.8 56.5-64 101.2-64h64c44.7 0 83.2 26.2 101.2 64h2.8c13.3 0 24 10.7 24 24 0 10.5-6.7 19.3-16 22.6V165.4c0 1.4 0 2.8-.1 4.3 12-6.2 25.7-9.6 40.1-9.6h8c17.7 0 32 14.3 32 32s-14.3 32-32 32h-8c-13.3 0-24 10.7-24 24v8h56.4c-15.2 17-24.4 39.4-24.4 64h-32c-42.3 0-78.2-27.4-91-65.3-5.1.9-10.3 1.3-15.6 1.3-14.1 0-27.9-3.3-40.5-9.6zM96 128a16 16 0 1 1 0 32 16 16 0 1 1 0-32zm112 16a16 16 0 1 1 32 0 16 16 0 1 1-32 0z"/></svg> </a> <a href=https://discord.gg/YWrKVTn target=_blank rel=noopener title=discord.gg class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 640 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M524.531 69.836a1.5 1.5 0 0 0-.764-.7A485.065 485.065 0 0 0 404.081 32.03a1.816 1.816 0 0 0-1.923.91 337.461 337.461 0 0 0-14.9 30.6 447.848 447.848 0 0 0-134.426 0 309.541 309.541 0 0 0-15.135-30.6 1.89 1.89 0 0 0-1.924-.91 483.689 483.689 0 0 0-119.688 37.107 1.712 1.712 0 0 0-.788.676C39.068 183.651 18.186 294.69 28.43 404.354a2.016 2.016 0 0 0 .765 1.375 487.666 487.666 0 0 0 146.825 74.189 1.9 1.9 0 0 0 2.063-.676A348.2 348.2 0 0 0 208.12 430.4a1.86 1.86 0 0 0-1.019-2.588 321.173 321.173 0 0 1-45.868-21.853 1.885 1.885 0 0 1-.185-3.126 251.047 251.047 0 0 0 9.109-7.137 1.819 1.819 0 0 1 1.9-.256c96.229 43.917 200.41 43.917 295.5 0a1.812 1.812 0 0 1 1.924.233 234.533 234.533 0 0 0 9.132 7.16 1.884 1.884 0 0 1-.162 3.126 301.407 301.407 0 0 1-45.89 21.83 1.875 1.875 0 0 0-1 2.611 391.055 391.055 0 0 0 30.014 48.815 1.864 1.864 0 0 0 2.063.7A486.048 486.048 0 0 0 610.7 405.729a1.882 1.882 0 0 0 .765-1.352c12.264-126.783-20.532-236.912-86.934-334.541ZM222.491 337.58c-28.972 0-52.844-26.587-52.844-59.239s23.409-59.241 52.844-59.241c29.665 0 53.306 26.82 52.843 59.239 0 32.654-23.41 59.241-52.843 59.241Zm195.38 0c-28.971 0-52.843-26.587-52.843-59.239s23.409-59.241 52.843-59.241c29.667 0 53.307 26.82 52.844 59.239 0 32.654-23.177 59.241-52.844 59.241Z"/></svg> </a> <a href=https://discourse.linuxserver.io target=_blank rel=noopener title=discourse.linuxserver.io class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M225.9 32C103.3 32 0 130.5 0 252.1 0 256 .1 480 .1 480l225.8-.2c122.7 0 222.1-102.3 222.1-223.9C448 134.3 348.6 32 225.9 32zM224 384c-19.4 0-37.9-4.3-54.4-12.1L88.5 392l22.9-75c-9.8-18.1-15.4-38.9-15.4-61 0-70.7 57.3-128 128-128s128 57.3 128 128-57.3 128-128 128z"/></svg> </a> <a href=https://github.com/linuxserver target=_blank rel=noopener title=github.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 496 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6zm-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3zm44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9zM244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8zM97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1zm-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7zm32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1zm-11.4-14.7c-1.6 1-1.6 3.6 0 5.9 1.6 2.3 4.3 3.3 5.6 2.3 1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2z"/></svg> </a> <a href=https://gitlab.com/linuxserver.io target=_blank rel=noopener title=gitlab.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 512 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="m503.5 204.6-.7-1.8-69.7-181.78c-1.4-3.57-3.9-6.59-7.2-8.64-2.4-1.55-5.1-2.515-8-2.81-2.9-.295-5.7.083-8.4 1.11-2.7 1.02-5.1 2.66-7.1 4.78-1.9 2.12-3.3 4.67-4.1 7.44l-47 144H160.8l-47.1-144c-.8-2.77-2.2-5.31-4.1-7.43-2-2.12-4.4-3.75-7.1-4.77a18.1 18.1 0 0 0-8.38-1.113 18.4 18.4 0 0 0-8.04 2.793 18.09 18.09 0 0 0-7.16 8.64L9.267 202.8l-.724 1.8a129.57 129.57 0 0 0-3.52 82c7.747 26.9 24.047 50.7 46.447 67.6l.27.2.59.4 105.97 79.5 52.6 39.7 32 24.2c3.7 1.9 8.3 4.3 13 4.3 4.7 0 9.3-2.4 13-4.3l32-24.2 52.6-39.7 106.7-79.9.3-.3c22.4-16.9 38.7-40.6 45.6-67.5 8.6-27 7.4-55.8-2.6-82z"/></svg> </a> <a href=https://www.facebook.com/linuxserver.io target=_blank rel=noopener title=www.facebook.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 512 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M512 256C512 114.6 397.4 0 256 0S0 114.6 0 256c0 120 82.7 220.8 194.2 248.5V334.2h-52.8V256h52.8v-33.7c0-87.1 39.4-127.5 125-127.5 16.2 0 44.2 3.2 55.7 6.4V172c-6-.6-16.5-1-29.6-1-42 0-58.2 15.9-58.2 57.2V256h83.6l-14.4 78.2H287v175.9C413.8 494.8 512 386.9 512 256z"/></svg> </a> <a href=https://mastodon.linuxserver.io/@linuxserver target=_blank rel="noopener me" title=mastodon.linuxserver.io class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 448 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M433 179.11c0-97.2-63.71-125.7-63.71-125.7-62.52-28.7-228.56-28.4-290.48 0 0 0-63.72 28.5-63.72 125.7 0 115.7-6.6 259.4 105.63 289.1 40.51 10.7 75.32 13 103.33 11.4 50.81-2.8 79.32-18.1 79.32-18.1l-1.7-36.9s-36.31 11.4-77.12 10.1c-40.41-1.4-83-4.4-89.63-54a102.54 102.54 0 0 1-.9-13.9c85.63 20.9 158.65 9.1 178.75 6.7 56.12-6.7 105-41.3 111.23-72.9 9.8-49.8 9-121.5 9-121.5zm-75.12 125.2h-46.63v-114.2c0-49.7-64-51.6-64 6.9v62.5h-46.33V197c0-58.5-64-56.6-64-6.9v114.2H90.19c0-122.1-5.2-147.9 18.41-175 25.9-28.9 79.82-30.8 103.83 6.1l11.6 19.5 11.6-19.5c24.11-37.1 78.12-34.8 103.83-6.1 23.71 27.3 18.4 53 18.4 175z"/></svg> </a> <a href=https://twitter.com/linuxserverio target=_blank rel=noopener title=twitter.com class=md-social__link> <svg xmlns=http://www.w3.org/2000/svg viewbox="0 0 512 512"><!-- Font Awesome Free 6.5.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M459.37 151.716c.325 4.548.325 9.097.325 13.645 0 138.72-105.583 298.558-298.558 298.558-59.452 0-114.68-17.219-161.137-47.106 8.447.974 16.568 1.299 25.34 1.299 49.055 0 94.213-16.568 130.274-44.832-46.132-.975-84.792-31.188-98.112-72.772 6.498.974 12.995 1.624 19.818 1.624 9.421 0 18.843-1.3 27.614-3.573-48.081-9.747-84.143-51.98-84.143-102.985v-1.299c13.969 7.797 30.214 12.67 47.431 13.319-28.264-18.843-46.781-51.005-46.781-87.391 0-19.492 5.197-37.36 14.294-52.954 51.655 63.675 129.3 105.258 216.365 109.807-1.624-7.797-2.599-15.918-2.599-24.04 0-57.828 46.782-104.934 104.934-104.934 30.213 0 57.502 12.67 76.67 33.137 23.715-4.548 46.456-13.32 66.599-25.34-7.798 24.366-24.366 44.833-46.132 57.827 21.117-2.273 41.584-8.122 60.426-16.243-14.292 20.791-32.161 39.308-52.628 54.253z"/></svg> </a> </div> </div> </div> </footer> </div> <div class=md-dialog data-md-component=dialog> <div class="md-dialog__inner md-typeset"></div> </div> <script id=__config type=application/json>{"base": "../..", "features": ["content.code.copy", "navigation.footer", "navigation.instant", "navigation.tabs", "navigation.top", "navigation.tracking", "search.highlight", "search.share", "search.suggest", "toc.follow"], "search": "../../assets/javascripts/workers/search.b8dbb3d2.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script> <script src=../../assets/javascripts/bundle.c8d2eff1.min.js></script> <script src=https://unpkg.com/tablesort@5.3.0/dist/tablesort.min.js></script> <script src=../../javascripts/tablesort.js></script> </body> </html>