Files
OpenSign/docs/self-host/guides/azure-vm-setup/index.html
T

90 lines
41 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!doctype html>
<html lang="en" dir="ltr" class="docs-wrapper plugin-docs plugin-id-default docs-version-current docs-doc-page docs-doc-id-self-host/guides/azure-vm-setup" data-has-hydrated="false">
<head>
<meta charset="UTF-8">
<meta name="generator" content="Docusaurus v3.9.2">
<title data-rh="true">OpenSign Deployment Guide on Azure VM via command-line | OpenSign™</title><meta data-rh="true" name="viewport" content="width=device-width,initial-scale=1"><meta data-rh="true" name="twitter:card" content="summary_large_image"><meta data-rh="true" property="og:image" content="https://docs.opensignlabs.com/img/docusaurus-social-card.png"><meta data-rh="true" name="twitter:image" content="https://docs.opensignlabs.com/img/docusaurus-social-card.png"><meta data-rh="true" property="og:url" content="https://docs.opensignlabs.com/docs/self-host/guides/azure-vm-setup"><meta data-rh="true" property="og:locale" content="en"><meta data-rh="true" name="docusaurus_locale" content="en"><meta data-rh="true" name="docsearch:language" content="en"><meta data-rh="true" name="docusaurus_version" content="current"><meta data-rh="true" name="docusaurus_tag" content="docs-default-current"><meta data-rh="true" name="docsearch:version" content="current"><meta data-rh="true" name="docsearch:docusaurus_tag" content="docs-default-current"><meta data-rh="true" property="og:title" content="OpenSign Deployment Guide on Azure VM via command-line | OpenSign™"><meta data-rh="true" name="description" content="🧱 Prerequisites"><meta data-rh="true" property="og:description" content="🧱 Prerequisites"><link data-rh="true" rel="icon" href="/img/favicon.ico"><link data-rh="true" rel="canonical" href="https://docs.opensignlabs.com/docs/self-host/guides/azure-vm-setup"><link data-rh="true" rel="alternate" href="https://docs.opensignlabs.com/docs/self-host/guides/azure-vm-setup" hreflang="en"><link data-rh="true" rel="alternate" href="https://docs.opensignlabs.com/docs/self-host/guides/azure-vm-setup" hreflang="x-default"><script data-rh="true" type="application/ld+json">{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Guides","item":"https://docs.opensignlabs.com/docs/category/guides"},{"@type":"ListItem","position":2,"name":"OpenSign Deployment Guide on Azure VM via command-line","item":"https://docs.opensignlabs.com/docs/self-host/guides/azure-vm-setup"}]}</script><link rel="alternate" type="application/rss+xml" href="/blog/rss.xml" title="OpenSign™ RSS Feed">
<link rel="alternate" type="application/atom+xml" href="/blog/atom.xml" title="OpenSign™ Atom Feed"><link rel="stylesheet" href="/assets/css/styles.03fa8acf.css">
<script src="/assets/js/runtime~main.9e610c3a.js" defer="defer"></script>
<script src="/assets/js/main.62d29b20.js" defer="defer"></script>
</head>
<body class="navigation-with-keyboard">
<svg style="display: none;"><defs>
<symbol id="theme-svg-external-link" viewBox="0 0 24 24"><path fill="currentColor" d="M21 13v10h-21v-19h12v2h-10v15h17v-8h2zm3-12h-10.988l4.035 4-6.977 7.07 2.828 2.828 6.977-7.07 4.125 4.172v-11z"/></symbol>
</defs></svg>
<script>!function(){var t=function(){try{return new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}}()||function(){try{return window.localStorage.getItem("theme")}catch(t){}}();document.documentElement.setAttribute("data-theme",t||"light"),document.documentElement.setAttribute("data-theme-choice",t||"light")}(),function(){try{const a=new URLSearchParams(window.location.search).entries();for(var[t,e]of a)if(t.startsWith("docusaurus-data-")){var n=t.replace("docusaurus-data-","data-");document.documentElement.setAttribute(n,e)}}catch(t){}}(),document.documentElement.setAttribute("data-announcement-bar-initially-dismissed",function(){try{return"true"===localStorage.getItem("docusaurus.announcement.dismiss")}catch(t){}return!1}())</script><div id="__docusaurus"><div role="region" aria-label="Skip to main content"><a class="skipToContent_fXgn" href="#__docusaurus_skipToContent_fallback">Skip to main content</a></div><div class="theme-announcement-bar announcementBar_mb4j" style="background-color:#cae4fa;color:#091E42" role="banner"><div class="content_knG7 announcementBarContent_xLdY">Help use spread the word - ⭐ OpenSign on <a target="_blank" rel="noopener" href="https://github.com/opensignlabs/opensign">GitHub</a></div></div><nav aria-label="Main" class="theme-layout-navbar navbar navbar--fixed-top"><div class="navbar__inner"><div class="theme-layout-navbar-left navbar__items"><button aria-label="Toggle navigation bar" aria-expanded="false" class="navbar__toggle clean-btn" type="button"><svg width="30" height="30" viewBox="0 0 30 30" aria-hidden="true"><path stroke="currentColor" stroke-linecap="round" stroke-miterlimit="10" stroke-width="2" d="M4 7h22M4 15h22M4 23h22"></path></svg></button><a class="navbar__brand" href="/"><div class="navbar__logo"><img src="/img/logo.png" alt="OpenSign™ Logo" class="themedComponent_mlkZ themedComponent--light_NVdE"><img src="/img/logo.png" alt="OpenSign™ Logo" class="themedComponent_mlkZ themedComponent--dark_xIcU"></div><b class="navbar__title text--truncate">OpenSign™</b></a><a class="navbar__item navbar__link" href="/docs/help/intro">Help</a><a class="navbar__item navbar__link" href="/docs/API-docs/v1.1">APIs</a><a class="navbar__item navbar__link" href="/docs/contribute/CODE_OF_CONDUCT">Contribute</a><a href="https://www.opensignlabs.com/plans-pricing" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">Cloud Pricing<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a><a aria-current="page" class="navbar__item navbar__link navbar__link--active" href="/docs/self-host/intro">Self-host</a></div><div class="theme-layout-navbar-right navbar__items navbar__items--right"><a href="https://github.com/opensignlabs/opensign" target="_blank" rel="noopener noreferrer" class="navbar__item navbar__link">GitHub<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a><div class="toggle_vylO colorModeToggle_DEke"><button class="clean-btn toggleButton_gllP toggleButtonDisabled_aARS" type="button" disabled="" title="system mode" aria-label="Switch between dark and light mode (currently system mode)"><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_g3eP lightToggleIcon_pyhR"><path fill="currentColor" d="M12,9c1.65,0,3,1.35,3,3s-1.35,3-3,3s-3-1.35-3-3S10.35,9,12,9 M12,7c-2.76,0-5,2.24-5,5s2.24,5,5,5s5-2.24,5-5 S14.76,7,12,7L12,7z M2,13l2,0c0.55,0,1-0.45,1-1s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S1.45,13,2,13z M20,13l2,0c0.55,0,1-0.45,1-1 s-0.45-1-1-1l-2,0c-0.55,0-1,0.45-1,1S19.45,13,20,13z M11,2v2c0,0.55,0.45,1,1,1s1-0.45,1-1V2c0-0.55-0.45-1-1-1S11,1.45,11,2z M11,20v2c0,0.55,0.45,1,1,1s1-0.45,1-1v-2c0-0.55-0.45-1-1-1C11.45,19,11,19.45,11,20z M5.99,4.58c-0.39-0.39-1.03-0.39-1.41,0 c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0s0.39-1.03,0-1.41L5.99,4.58z M18.36,16.95 c-0.39-0.39-1.03-0.39-1.41,0c-0.39,0.39-0.39,1.03,0,1.41l1.06,1.06c0.39,0.39,1.03,0.39,1.41,0c0.39-0.39,0.39-1.03,0-1.41 L18.36,16.95z M19.42,5.99c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06c-0.39,0.39-0.39,1.03,0,1.41 s1.03,0.39,1.41,0L19.42,5.99z M7.05,18.36c0.39-0.39,0.39-1.03,0-1.41c-0.39-0.39-1.03-0.39-1.41,0l-1.06,1.06 c-0.39,0.39-0.39,1.03,0,1.41s1.03,0.39,1.41,0L7.05,18.36z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_g3eP darkToggleIcon_wfgR"><path fill="currentColor" d="M9.37,5.51C9.19,6.15,9.1,6.82,9.1,7.5c0,4.08,3.32,7.4,7.4,7.4c0.68,0,1.35-0.09,1.99-0.27C17.45,17.19,14.93,19,12,19 c-3.86,0-7-3.14-7-7C5,9.07,6.81,6.55,9.37,5.51z M12,3c-4.97,0-9,4.03-9,9s4.03,9,9,9s9-4.03,9-9c0-0.46-0.04-0.92-0.1-1.36 c-0.98,1.37-2.58,2.26-4.4,2.26c-2.98,0-5.4-2.42-5.4-5.4c0-1.81,0.89-3.42,2.26-4.4C12.92,3.04,12.46,3,12,3L12,3z"></path></svg><svg viewBox="0 0 24 24" width="24" height="24" aria-hidden="true" class="toggleIcon_g3eP systemToggleIcon_QzmC"><path fill="currentColor" d="m12 21c4.971 0 9-4.029 9-9s-4.029-9-9-9-9 4.029-9 9 4.029 9 9 9zm4.95-13.95c1.313 1.313 2.05 3.093 2.05 4.95s-0.738 3.637-2.05 4.95c-1.313 1.313-3.093 2.05-4.95 2.05v-14c1.857 0 3.637 0.737 4.95 2.05z"></path></svg></button></div><div class="navbarSearchContainer_Bca1"></div></div></div><div role="presentation" class="navbar-sidebar__backdrop"></div></nav><div id="__docusaurus_skipToContent_fallback" class="theme-layout-main main-wrapper mainWrapper_z2l0"><div class="docsWrapper_hBAB"><button aria-label="Scroll back to top" class="clean-btn theme-back-to-top-button backToTopButton_sjWU" type="button"></button><div class="docRoot_UBD9"><aside class="theme-doc-sidebar-container docSidebarContainer_YfHR"><div class="sidebarViewport_aRkj"><div class="sidebar_njMd"><nav aria-label="Docs sidebar" class="menu thin-scrollbar menu_SIkG menuWithAnnouncementBar_GW3s"><ul class="theme-doc-sidebar-menu menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-1 menu__list-item"><a class="menu__link" href="/docs/self-host/intro"><span title="Self-Hosting OpenSign" class="linkLabel_WmDU">Self-Hosting OpenSign</span></a></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="categoryLink_byQd menu__link menu__link--sublist" href="/docs/category/docker"><span title="Docker" class="categoryLinkLabel_W154">Docker</span></a><button aria-label="Expand sidebar category &#x27;Docker&#x27;" aria-expanded="false" type="button" class="clean-btn menu__caret"></button></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="categoryLink_byQd menu__link menu__link--sublist" href="/docs/category/cloud-storage"><span title="Cloud Storage" class="categoryLinkLabel_W154">Cloud Storage</span></a><button aria-label="Expand sidebar category &#x27;Cloud Storage&#x27;" aria-expanded="false" type="button" class="clean-btn menu__caret"></button></div></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item"><div class="menu__list-item-collapsible"><a class="categoryLink_byQd menu__link menu__link--sublist menu__link--active" href="/docs/category/guides"><span title="Guides" class="categoryLinkLabel_W154">Guides</span></a><button aria-label="Collapse sidebar category &#x27;Guides&#x27;" aria-expanded="true" type="button" class="clean-btn menu__caret"></button></div><ul class="menu__list"><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link menu__link--active" aria-current="page" tabindex="0" href="/docs/self-host/guides/azure-vm-setup"><span title="OpenSign Deployment Guide on Azure VM via command-line" class="linkLabel_WmDU">OpenSign Deployment Guide on Azure VM via command-line</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/self-host/guides/env-variables"><span title="ENV variables which are used to setup OpenSign™ with Docker on Localhost" class="linkLabel_WmDU">ENV variables which are used to setup OpenSign™ with Docker on Localhost</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/self-host/guides/how-to-generate-self-signed-document-signing-certificate"><span title="How to generate self-signed document signing certificate?" class="linkLabel_WmDU">How to generate self-signed document signing certificate?</span></a></li><li class="theme-doc-sidebar-item-link theme-doc-sidebar-item-link-level-2 menu__list-item"><a class="menu__link" tabindex="0" href="/docs/self-host/guides/upgrade-to-v2.1.0"><span title="How to upgrade self-hosted OpenSign to v2.1.0?" class="linkLabel_WmDU">How to upgrade self-hosted OpenSign to v2.1.0?</span></a></li></ul></li><li class="theme-doc-sidebar-item-category theme-doc-sidebar-item-category-level-1 menu__list-item menu__list-item--collapsed"><div class="menu__list-item-collapsible"><a class="categoryLink_byQd menu__link menu__link--sublist menu__link--sublist-caret" role="button" aria-expanded="false" href="/docs/self-host/One-click-Install/DigitalOcean"><span title="One-click-Install" class="categoryLinkLabel_W154">One-click-Install</span></a></div></li></ul></nav></div></div></aside><main class="docMainContainer_TBSr"><div class="container padding-top--md padding-bottom--lg"><div class="row"><div class="col docItemCol_xLCN"><div class="docItemContainer_jfFK"><article><nav class="theme-doc-breadcrumbs breadcrumbsContainer_Z_bl" aria-label="Breadcrumbs"><ul class="breadcrumbs"><li class="breadcrumbs__item"><a aria-label="Home page" class="breadcrumbs__link" href="/"><svg viewBox="0 0 24 24" class="breadcrumbHomeIcon_YNFT"><path d="M10 19v-5h4v5c0 .55.45 1 1 1h3c.55 0 1-.45 1-1v-7h1.7c.46 0 .68-.57.33-.87L12.67 3.6c-.38-.34-.96-.34-1.34 0l-8.36 7.53c-.34.3-.13.87.33.87H5v7c0 .55.45 1 1 1h3c.55 0 1-.45 1-1z" fill="currentColor"></path></svg></a></li><li class="breadcrumbs__item"><a class="breadcrumbs__link" href="/docs/category/guides"><span>Guides</span></a></li><li class="breadcrumbs__item breadcrumbs__item--active"><span class="breadcrumbs__link">OpenSign Deployment Guide on Azure VM via command-line</span></li></ul></nav><div class="tocCollapsible_ETCw theme-doc-toc-mobile tocMobile_ITEo"><button type="button" class="clean-btn tocCollapsibleButton_TO0P">On this page</button></div><div class="theme-doc-markdown markdown"><div class="row"><div class="col col--12 markdown"><header><h1>🚀 OpenSign Deployment Guide on Azure VM (Frontend + Backend + MongoDB + Caddy)</h1></header>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="-prerequisites">🧱 Prerequisites<a href="#-prerequisites" class="hash-link" aria-label="Direct link to 🧱 Prerequisites" title="Direct link to 🧱 Prerequisites" translate="no"></a></h2>
<ul>
<li class="">Azure CLI installed</li>
<li class="">A domain you control (e.g., <code>yourdomain.com</code>)</li>
<li class="">Subdomain pointing to your VM (e.g., <code>opensign.yourdomain.com</code>)</li>
<li class="">SSH access</li>
</ul>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="-step-1-create-an-azure-vm">🔧 Step 1: Create an Azure VM<a href="#-step-1-create-an-azure-vm" class="hash-link" aria-label="Direct link to 🔧 Step 1: Create an Azure VM" title="Direct link to 🔧 Step 1: Create an Azure VM" translate="no"></a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="11-create-resource-group">1.1 Create Resource Group<a href="#11-create-resource-group" class="hash-link" aria-label="Direct link to 1.1 Create Resource Group" title="Direct link to 1.1 Create Resource Group" translate="no"></a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">az group create --name OpenSignRG --location eastus</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="12-create-ubuntu-vm">1.2 Create Ubuntu VM<a href="#12-create-ubuntu-vm" class="hash-link" aria-label="Direct link to 1.2 Create Ubuntu VM" title="Direct link to 1.2 Create Ubuntu VM" translate="no"></a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">az vm create \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> --resource-group OpenSignRG \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> --name opensign-vm \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> --image Ubuntu2404 \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> --admin-username azureuser \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> --generate-ssh-keys \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> --size Standard_B1ms</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="13-get-vm-ip">1.3 Get VM IP<a href="#13-get-vm-ip" class="hash-link" aria-label="Direct link to 1.3 Get VM IP" title="Direct link to 1.3 Get VM IP" translate="no"></a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">az vm list-ip-addresses --name opensign-vm --resource-group OpenSignRG --output table</span><br></span></code></pre></div></div>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="-step-2-open-required-ports">🔐 Step 2: Open Required Ports<a href="#-step-2-open-required-ports" class="hash-link" aria-label="Direct link to 🔐 Step 2: Open Required Ports" title="Direct link to 🔐 Step 2: Open Required Ports" translate="no"></a></h2>
<p>Azures default port-opening approach conflicts if you use the same priorities. So instead, <strong>add rules with increasing priorities</strong> manually:</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="21-get-nsg-name">2.1 Get NSG name<a href="#21-get-nsg-name" class="hash-link" aria-label="Direct link to 2.1 Get NSG name" title="Direct link to 2.1 Get NSG name" translate="no"></a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">az network nsg list --resource-group OpenSignRG --query &quot;[].name&quot;</span><br></span></code></pre></div></div>
<p>Assume its <code>opensign-vmNSG</code>. Then:</p>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="22-add-inbound-port-rules">2.2 Add inbound port rules<a href="#22-add-inbound-port-rules" class="hash-link" aria-label="Direct link to 2.2 Add inbound port rules" title="Direct link to 2.2 Add inbound port rules" translate="no"></a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">az network nsg rule create \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> --resource-group OpenSignRG \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> --nsg-name opensign-vmNSG \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> --name Allow-HTTP \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> --priority 1001 \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> --direction Inbound \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> --protocol Tcp \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> --access Allow \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> --destination-port-ranges 80</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">az network nsg rule create \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> --resource-group OpenSignRG \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> --nsg-name opensign-vmNSG \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> --name Allow-HTTPS \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> --priority 1002 \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> --direction Inbound \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> --protocol Tcp \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> --access Allow \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> --destination-port-ranges 443</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">az network nsg rule create \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> --resource-group OpenSignRG \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> --nsg-name opensign-vmNSG \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> --name Allow-Caddy-Internal \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> --priority 1003 \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> --direction Inbound \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> --protocol Tcp \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> --access Allow \</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"> --destination-port-ranges 3001</span><br></span></code></pre></div></div>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="-step-3-point-domain-to-vm">🌍 Step 3: Point Domain to VM<a href="#-step-3-point-domain-to-vm" class="hash-link" aria-label="Direct link to 🌍 Step 3: Point Domain to VM" title="Direct link to 🌍 Step 3: Point Domain to VM" translate="no"></a></h2>
<p>In your DNS provider (e.g., GoDaddy, Cloudflare):</p>
<ul>
<li class="">Add an <strong>A record</strong>:<!-- -->
<ul>
<li class="">Name: <code>opensign</code></li>
<li class="">Value: <code>&lt;your VM public IP&gt;</code></li>
<li class="">TTL: 1 min or Auto</li>
</ul>
</li>
</ul>
<p>Let it propagate (~510 mins).</p>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="-step-4-ssh-into-the-vm">📦 Step 4: SSH into the VM<a href="#-step-4-ssh-into-the-vm" class="hash-link" aria-label="Direct link to 📦 Step 4: SSH into the VM" title="Direct link to 📦 Step 4: SSH into the VM" translate="no"></a></h2>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">ssh azureuser@&lt;your-vm-ip&gt;</span><br></span></code></pre></div></div>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="-step-5-install-docker--compose-v2">🐳 Step 5: Install Docker + Compose V2<a href="#-step-5-install-docker--compose-v2" class="hash-link" aria-label="Direct link to 🐳 Step 5: Install Docker + Compose V2" title="Direct link to 🐳 Step 5: Install Docker + Compose V2" translate="no"></a></h2>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">sudo apt update &amp;&amp; sudo apt install docker.io -y</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"># Install Compose V2 (CLI plugin)</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">mkdir -p ~/.docker/cli-plugins/</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">curl -SL https://github.com/docker/compose/releases/download/v2.24.5/docker-compose-linux-x86_64 -o ~/.docker/cli-plugins/docker-compose</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">chmod +x ~/.docker/cli-plugins/docker-compose</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"># Enable Docker</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">sudo systemctl enable docker</span><br></span></code></pre></div></div>
<p>Verify:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">docker compose version</span><br></span></code></pre></div></div>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="-step-6-set-up-project-and-volumes">📁 Step 6: Set Up Project and Volumes<a href="#-step-6-set-up-project-and-volumes" class="hash-link" aria-label="Direct link to 📁 Step 6: Set Up Project and Volumes" title="Direct link to 📁 Step 6: Set Up Project and Volumes" translate="no"></a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="61-create-a-working-directory">6.1 Create a working directory<a href="#61-create-a-working-directory" class="hash-link" aria-label="Direct link to 6.1 Create a working directory" title="Direct link to 6.1 Create a working directory" translate="no"></a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">mkdir opensign &amp;&amp; cd opensign</span><br></span></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="62-download-files">6.2 Download files<a href="#62-download-files" class="hash-link" aria-label="Direct link to 6.2 Download files" title="Direct link to 6.2 Download files" translate="no"></a></h3>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">export HOST_URL=https://opensign.yourdomain.com</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">curl -O https://raw.githubusercontent.com/OpenSignLabs/OpenSign/main/docker-compose.yml</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">curl -O https://raw.githubusercontent.com/OpenSignLabs/OpenSign/main/Caddyfile</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">curl -O https://raw.githubusercontent.com/OpenSignLabs/OpenSign/main/.env.local_dev</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">mv .env.local_dev .env.prod</span><br></span></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="make-sure-that-you-update-the-smtp-settings-by-editing-the-envprod-file-in-order-to-receive-emails">Make sure that you update the SMTP settings by editing the .env.prod file in order to receive emails.<a href="#make-sure-that-you-update-the-smtp-settings-by-editing-the-envprod-file-in-order-to-receive-emails" class="hash-link" aria-label="Direct link to Make sure that you update the SMTP settings by editing the .env.prod file in order to receive emails." title="Direct link to Make sure that you update the SMTP settings by editing the .env.prod file in order to receive emails." translate="no"></a></h2>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="-step-7-start-the-stack">⚙️ Step 7: Start the Stack<a href="#-step-7-start-the-stack" class="hash-link" aria-label="Direct link to ⚙️ Step 7: Start the Stack" title="Direct link to ⚙️ Step 7: Start the Stack" translate="no"></a></h2>
<p>Now boot the containers using Compose V2:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">docker compose up -d --force-recreate</span><br></span></code></pre></div></div>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="-step-8-verify-everything">✅ Step 8: Verify Everything<a href="#-step-8-verify-everything" class="hash-link" aria-label="Direct link to ✅ Step 8: Verify Everything" title="Direct link to ✅ Step 8: Verify Everything" translate="no"></a></h2>
<ul>
<li class=""><code>https://opensign.yourdomain.com</code> loads the app with HTTPS</li>
<li class="">Caddy fetched SSL certs automatically</li>
<li class="">Backend routes work at <code>/api/*</code></li>
<li class="">MongoDB persists data</li>
<li class="">Uploaded files persist via <code>opensign-files</code> volume</li>
</ul>
<p>Test:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">docker exec -it OpenSignServer-container ls /usr/src/app/files</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">docker volume inspect opensign-files</span><br></span></code></pre></div></div>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="-step-9-auto-start-on-reboot-optional">📦 Step 9: Auto-start on Reboot (optional)<a href="#-step-9-auto-start-on-reboot-optional" class="hash-link" aria-label="Direct link to 📦 Step 9: Auto-start on Reboot (optional)" title="Direct link to 📦 Step 9: Auto-start on Reboot (optional)" translate="no"></a></h2>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">crontab -e</span><br></span></code></pre></div></div>
<p>Add:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">@reboot cd /home/azureuser/opensign &amp;&amp; docker compose up -d</span><br></span></code></pre></div></div>
<hr>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="-backups-optional">🔄 Backups (optional)<a href="#-backups-optional" class="hash-link" aria-label="Direct link to 🔄 Backups (optional)" title="Direct link to 🔄 Backups (optional)" translate="no"></a></h2>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain"># Backup MongoDB volume</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">docker run --rm -v opensign_data-volume:/data -v $(pwd):/backup ubuntu tar czvf /backup/mongo-backup.tar.gz /data</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"># Backup OpenSign files</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">docker run --rm -v opensign_opensign-files:/data -v $(pwd):/backup ubuntu tar czvf /backup/files-backup.tar.gz /data</span><br></span></code></pre></div></div></div></div></div><div class="row"><div class="col col--12"><footer class="theme-doc-footer docusaurus-mt-lg"><div class="row margin-top--sm theme-doc-footer-edit-meta-row"><div class="col noPrint_WFHX"><a href="https://github.com/opensignlabs/opensign/tree/feat-docs/docs/docs/self-host/guides/azure-vm-setup.md" target="_blank" rel="noopener noreferrer" class="theme-edit-this-page"><svg fill="currentColor" height="20" width="20" viewBox="0 0 40 40" class="iconEdit_Z9Sw" aria-hidden="true"><g><path d="m34.5 11.7l-3 3.1-6.3-6.3 3.1-3q0.5-0.5 1.2-0.5t1.1 0.5l3.9 3.9q0.5 0.4 0.5 1.1t-0.5 1.2z m-29.5 17.1l18.4-18.5 6.3 6.3-18.4 18.4h-6.3v-6.2z"></path></g></svg>Edit this page</a></div><div class="col lastUpdated_JAkA"></div></div></footer></div></div></article><div class="row"><div class="col col--12"><nav class="docusaurus-mt-lg pagination-nav" aria-label="Docs pages"><a class="pagination-nav__link pagination-nav__link--prev" href="/docs/category/guides"><div class="pagination-nav__sublabel">Previous</div><div class="pagination-nav__label">Guides</div></a><a class="pagination-nav__link pagination-nav__link--next" href="/docs/self-host/guides/env-variables"><div class="pagination-nav__sublabel">Next</div><div class="pagination-nav__label">ENV variables which are used to setup OpenSign™ with Docker on Localhost</div></a></nav></div></div></div></div><div class="col col--3"><div class="tableOfContents_bqdL thin-scrollbar theme-doc-toc-desktop"><ul class="table-of-contents table-of-contents__left-border"><li><a href="#-prerequisites" class="table-of-contents__link toc-highlight">🧱 Prerequisites</a></li><li><a href="#-step-1-create-an-azure-vm" class="table-of-contents__link toc-highlight">🔧 Step 1: Create an Azure VM</a><ul><li><a href="#11-create-resource-group" class="table-of-contents__link toc-highlight">1.1 Create Resource Group</a></li><li><a href="#12-create-ubuntu-vm" class="table-of-contents__link toc-highlight">1.2 Create Ubuntu VM</a></li><li><a href="#13-get-vm-ip" class="table-of-contents__link toc-highlight">1.3 Get VM IP</a></li></ul></li><li><a href="#-step-2-open-required-ports" class="table-of-contents__link toc-highlight">🔐 Step 2: Open Required Ports</a><ul><li><a href="#21-get-nsg-name" class="table-of-contents__link toc-highlight">2.1 Get NSG name</a></li><li><a href="#22-add-inbound-port-rules" class="table-of-contents__link toc-highlight">2.2 Add inbound port rules</a></li></ul></li><li><a href="#-step-3-point-domain-to-vm" class="table-of-contents__link toc-highlight">🌍 Step 3: Point Domain to VM</a></li><li><a href="#-step-4-ssh-into-the-vm" class="table-of-contents__link toc-highlight">📦 Step 4: SSH into the VM</a></li><li><a href="#-step-5-install-docker--compose-v2" class="table-of-contents__link toc-highlight">🐳 Step 5: Install Docker + Compose V2</a></li><li><a href="#-step-6-set-up-project-and-volumes" class="table-of-contents__link toc-highlight">📁 Step 6: Set Up Project and Volumes</a><ul><li><a href="#61-create-a-working-directory" class="table-of-contents__link toc-highlight">6.1 Create a working directory</a></li><li><a href="#62-download-files" class="table-of-contents__link toc-highlight">6.2 Download files</a></li></ul></li><li><a href="#make-sure-that-you-update-the-smtp-settings-by-editing-the-envprod-file-in-order-to-receive-emails" class="table-of-contents__link toc-highlight">Make sure that you update the SMTP settings by editing the .env.prod file in order to receive emails.</a></li><li><a href="#-step-7-start-the-stack" class="table-of-contents__link toc-highlight">⚙️ Step 7: Start the Stack</a></li><li><a href="#-step-8-verify-everything" class="table-of-contents__link toc-highlight">✅ Step 8: Verify Everything</a></li><li><a href="#-step-9-auto-start-on-reboot-optional" class="table-of-contents__link toc-highlight">📦 Step 9: Auto-start on Reboot (optional)</a></li><li><a href="#-backups-optional" class="table-of-contents__link toc-highlight">🔄 Backups (optional)</a></li></ul></div></div></div></div></main></div></div></div><footer class="theme-layout-footer footer footer--dark"><div class="container container-fluid"><div class="row footer__links"><div class="theme-layout-footer-column col footer__col"><div class="footer__title">Docs</div><ul class="footer__items clean-list"><li class="footer__item"><a class="footer__link-item" href="/docs/help/intro">Help</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/API-docs/v1.1">APIs</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/contribute/intro">Contribute</a></li><li class="footer__item"><a class="footer__link-item" href="/docs/self-host/intro">Self-host</a></li></ul></div><div class="theme-layout-footer-column col footer__col"><div class="footer__title">Community</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://discord.com/invite/xe9TDuyAyj" target="_blank" rel="noopener noreferrer" class="footer__link-item">Discord<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li><li class="footer__item"><a href="https://www.linkedin.com/company/opensign%E2%84%A2/" target="_blank" rel="noopener noreferrer" class="footer__link-item">LinkedIn<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li><li class="footer__item"><a href="https://www.twitter.com/opensignhq" target="_blank" rel="noopener noreferrer" class="footer__link-item">Twitter<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li><li class="footer__item"><a href="https://www.facebook.com/profile.php?id=61551030403669" target="_blank" rel="noopener noreferrer" class="footer__link-item">Facebook<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li></ul></div><div class="theme-layout-footer-column col footer__col"><div class="footer__title">More</div><ul class="footer__items clean-list"><li class="footer__item"><a href="https://www.opensignlabs.com" target="_blank" rel="noopener noreferrer" class="footer__link-item">Official Website<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li><li class="footer__item"><a href="https://github.com/opensignlabs/opensign" target="_blank" rel="noopener noreferrer" class="footer__link-item">GitHub<svg width="13.5" height="13.5" aria-label="(opens in new tab)" class="iconExternalLink_nPIU"><use href="#theme-svg-external-link"></use></svg></a></li></ul></div></div><div class="footer__bottom text--center"><div class="footer__copyright">Copyright © 2026 OpenSign™. <br>The best Open Source DocuSign alternative.</div></div></div></footer></div>
</body>
</html>