Files
oneclickvirt.github.io/assets/en_incomplete_webvirtcloud.md.f455fc7f.js
2025-04-25 07:50:01 +00:00

28 lines
30 KiB
JavaScript
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.
import{_ as s,v as a,b as n,R as l}from"./chunks/framework.70afa331.js";const o="/assets/wv1.5ac4a026.png",h=JSON.parse('{"title":"","description":"","frontmatter":{"outline":"deep"},"headers":[],"relativePath":"en/incomplete/webvirtcloud.md","filePath":"en/incomplete/webvirtcloud.md","lastUpdated":1745567371000}'),e={name:"en/incomplete/webvirtcloud.md"},t=l(`<h2 id="webvirtcloud-installation-guide" tabindex="-1">WebVirtCloud Installation Guide <a class="header-anchor" href="#webvirtcloud-installation-guide" aria-label="Permalink to &quot;WebVirtCloud Installation Guide&quot;"></a></h2><p><a href="https://hits.spiritlhl.net" target="_blank" rel="noreferrer"><img src="https://hits.spiritlhl.net/webvirtcloud.svg?action=hit&amp;title=hits&amp;title_bg=%23555555&amp;count_bg=%233aebee&amp;edge_flat=false" alt="hits"></a></p><p>Repository: <a href="https://github.com/oneclickvirt/webvirtcloud" target="_blank" rel="noreferrer">https://github.com/oneclickvirt/webvirtcloud</a></p><h2 id="controller-installation" tabindex="-1">Controller Installation <a class="header-anchor" href="#controller-installation" aria-label="Permalink to &quot;Controller Installation&quot;"></a></h2><h3 id="system-requirements" tabindex="-1">System Requirements <a class="header-anchor" href="#system-requirements" aria-label="Permalink to &quot;System Requirements&quot;"></a></h3><p><strong>Minimum Configuration:</strong></p><ul><li>CPU: 1 core</li><li>Memory: 1 GB RAM</li><li>Disk: 10 GB free space</li><li>Systems: Debian11+, Ubuntu20.04+</li></ul><h3 id="default-login-information" tabindex="-1">Default Login Information <a class="header-anchor" href="#default-login-information" aria-label="Permalink to &quot;Default Login Information&quot;"></a></h3><ul><li>Username: <code>[email protected]</code></li><li>Password: <code>admin</code></li></ul><h3 id="access-urls" tabindex="-1">Access URLs <a class="header-anchor" href="#access-urls" aria-label="Permalink to &quot;Access URLs&quot;"></a></h3><ul><li>Client Panel: <code>https://192-168-0-114.nip.io</code></li><li>Admin Panel: <code>https://192-168-0-114.nip.io/admin</code></li></ul><blockquote><p><strong>Note:</strong> Replace <code>192.168.0.114</code> with your actual public IP address to get the correct access URL.</p></blockquote><h3 id="installation-command" tabindex="-1">Installation Command <a class="header-anchor" href="#installation-command" aria-label="Permalink to &quot;Installation Command&quot;"></a></h3><div class="language-bash"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#FFCB6B;">curl</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">-slk</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">https://raw.githubusercontent.com/oneclickvirt/webvirtcloud/main/scripts/install_webvirt_cloud.sh</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">-o</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">install_webvirt_cloud.sh</span><span style="color:#A6ACCD;"> \\</span></span>
<span class="line"><span style="color:#89DDFF;">&amp;&amp;</span><span style="color:#A6ACCD;"> </span><span style="color:#FFCB6B;">chmod</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">+x</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">install_webvirt_cloud.sh</span><span style="color:#A6ACCD;"> \\</span></span>
<span class="line"><span style="color:#89DDFF;">&amp;&amp;</span><span style="color:#A6ACCD;"> </span><span style="color:#FFCB6B;">bash</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">install_webvirt_cloud.sh</span></span></code></pre></div><h2 id="hypervisor-installation" tabindex="-1">Hypervisor Installation <a class="header-anchor" href="#hypervisor-installation" aria-label="Permalink to &quot;Hypervisor Installation&quot;"></a></h2><blockquote><p><strong>Important:</strong> The Hypervisor and Controller cannot be installed on the same virtual machine; network conflicts will occur.</p></blockquote><h3 id="system-requirements-1" tabindex="-1">System Requirements <a class="header-anchor" href="#system-requirements-1" aria-label="Permalink to &quot;System Requirements&quot;"></a></h3><p><strong>Recommended Configuration:</strong></p><ul><li>CPU: 2 cores</li><li>Memory: 4 GB RAM</li><li>Disk: 40 GB free space</li><li>Systems: AlmaLinux8+RockyLinux8+</li></ul><blockquote><p><strong>Additional Notes:</strong></p><ul><li>Higher specifications are recommended for production use. This minimal setup is only sufficient to run 4 small VMs in a test environment.</li><li>The server recommends using KVM nested virtualization with VM-x/AMD-V/Hyper-V enabled support.</li><li>If <code>VM-x/AMD-V/Hyper-V</code> is not enabled and supported is not a problem, it will automatically switch to QEMU to open a VM using TCG emulation, except that in this case there will be a performance loss.</li><li>The installation uses binary files directly, skipping dependency installation.</li></ul></blockquote><h3 id="environment-testing" tabindex="-1">Environment Testing <a class="header-anchor" href="#environment-testing" aria-label="Permalink to &quot;Environment Testing&quot;"></a></h3><p>To test if your server supports KVM nested virtualization:</p><div class="language-bash"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#FFCB6B;">curl</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">-L</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">https://cdn.spiritlhl.net/https://raw.githubusercontent.com/oneclickvirt/ecs/master/goecs.sh</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">-o</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">goecs.sh</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">&amp;&amp;</span><span style="color:#A6ACCD;"> </span><span style="color:#FFCB6B;">chmod</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">+x</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">goecs.sh</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">&amp;&amp;</span><span style="color:#A6ACCD;"> </span><span style="color:#FFCB6B;">./goecs.sh</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">install</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">&amp;&amp;</span><span style="color:#A6ACCD;"> </span><span style="color:#FFCB6B;">goecs</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">-l=en</span></span></code></pre></div><p>Selecting the hardware single test</p><h3 id="hypervisor-installation-steps" tabindex="-1">Hypervisor Installation Steps <a class="header-anchor" href="#hypervisor-installation-steps" aria-label="Permalink to &quot;Hypervisor Installation Steps&quot;"></a></h3><p>Download the installation script:</p><div class="language-bash"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#FFCB6B;">curl</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">-slk</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">https://raw.githubusercontent.com/oneclickvirt/webvirtcloud/main/scripts/install_hypervisor.sh</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">-o</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">install_hypervisor.sh</span><span style="color:#A6ACCD;"> \\</span></span>
<span class="line"><span style="color:#89DDFF;">&amp;&amp;</span><span style="color:#A6ACCD;"> </span><span style="color:#FFCB6B;">chmod</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">+x</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">install_hypervisor.sh</span></span></code></pre></div><p>Run the installation (replace with your Controller IP):</p><div class="language-bash"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#FFCB6B;">bash</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">install_hypervisor.sh</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">x.x.x.x</span></span></code></pre></div><blockquote><p>Replace <code>x.x.x.x</code> with your Controller&#39;s actual IP address.</p></blockquote><p>Panel node</p><p>After the execution is completed, there will be a prompt that needs to be filled in the Controller panel side of the content. Panel side to fill in the Hostname is the IPV4 address of the current computing node, as well as to fill in the Token to identify the node.</p><h3 id="networkmanager-version-issue" tabindex="-1">NetworkManager Version Issue <a class="header-anchor" href="#networkmanager-version-issue" aria-label="Permalink to &quot;NetworkManager Version Issue&quot;"></a></h3><p>You might see this error during installation:</p><div class="language-"><button title="Copy Code" class="copy"></button><span class="lang"></span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#A6ACCD;">Connection &#39;eth0&#39; (bed050e9-ff49-4665-8112-24ddf2a1cd3c) successfully deleted.</span></span>
<span class="line"><span style="color:#A6ACCD;">Warning: nmcli (1.48.10) and NetworkManager (1.42.2) versions don&#39;t match. Restarting NetworkManager is advised.</span></span>
<span class="line"><span style="color:#A6ACCD;">Error: Failed to add &#39;br-ext&#39; connection: connection.autoconnect-ports: unknown property</span></span></code></pre></div><p><strong>Solution:</strong> Reboot your server, then run the installation command again.</p><h3 id="installation-time-notes" tabindex="-1">Installation Time Notes <a class="header-anchor" href="#installation-time-notes" aria-label="Permalink to &quot;Installation Time Notes&quot;"></a></h3><ul><li>The entire process takes approximately <strong>20-25 minutes</strong>.</li><li>Most time is spent downloading <code>finnix-125.iso</code> to <code>/var/lib/libvirt/isos/finnix-125.iso</code>.</li><li>This download cannot be accelerated; use <code>tmux</code> or <code>screen</code> to prevent interruption.</li></ul><h3 id="adding-compute-node-to-controller-panel" tabindex="-1">Adding Compute Node to Controller Panel <a class="header-anchor" href="#adding-compute-node-to-controller-panel" aria-label="Permalink to &quot;Adding Compute Node to Controller Panel&quot;"></a></h3><p>After installation, a <strong>Token</strong> will be generated for adding the compute node to the Controller:</p><p>Path: <code>Admin Panel &gt; Computers &gt; Add</code></p><h3 id="add-public-ipv4-ports-mapping-for-the-created-virtual-machine" tabindex="-1">Add Public IPV4 Ports Mapping for the Created Virtual Machine <a class="header-anchor" href="#add-public-ipv4-ports-mapping-for-the-created-virtual-machine" aria-label="Permalink to &quot;Add Public IPV4 Ports Mapping for the Created Virtual Machine&quot;"></a></h3><p>Assume your virtual machine appears in the user control panel as:</p><p><img src="`+o+`" alt="wv1"></p><p>And the result of executing <code>ip a | head -n 15</code> on the host machine is:</p><div class="language-shell"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#FFCB6B;">1:</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">lo:</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">&lt;</span><span style="color:#C3E88D;">LOOPBACK,UP,LOWER_U</span><span style="color:#A6ACCD;">P</span><span style="color:#89DDFF;">&gt;</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">mtu</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">65536</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">qdisc</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">noqueue</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">state</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">UNKNOWN</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">group</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">default</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">qlen</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">1000</span></span>
<span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#FFCB6B;">link/loopback</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">00</span><span style="color:#C3E88D;">:00:00:00:00:00</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">brd</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">00</span><span style="color:#C3E88D;">:00:00:00:00:00</span></span>
<span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#FFCB6B;">inet</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">127.0</span><span style="color:#C3E88D;">.0.1/8</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">scope</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">host</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">lo</span></span>
<span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#FFCB6B;">valid_lft</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">forever</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">preferred_lft</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">forever</span></span>
<span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#FFCB6B;">inet6</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">::1/128</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">scope</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">host</span></span>
<span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#FFCB6B;">valid_lft</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">forever</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">preferred_lft</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">forever</span></span>
<span class="line"><span style="color:#FFCB6B;">2:</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">ens3:</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">&lt;</span><span style="color:#C3E88D;">BROADCAST,MULTICAST,UP,LOWER_U</span><span style="color:#A6ACCD;">P</span><span style="color:#89DDFF;">&gt;</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">mtu</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">1500</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">qdisc</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">fq_codel</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">state</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">UP</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">group</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">default</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">qlen</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">1000</span></span>
<span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#FFCB6B;">link/ether</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">52</span><span style="color:#C3E88D;">:54:00:f1:d6:8b</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">brd</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">ff:ff:ff:ff:ff:ff</span></span>
<span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#FFCB6B;">altname</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">enp0s3</span></span>
<span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#FFCB6B;">inet</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">your-public-IPV4-address/associated-subnet-mask</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">scope</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">global</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">noprefixroute</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">ens3</span></span>
<span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#FFCB6B;">valid_lft</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">forever</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">preferred_lft</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">forever</span></span>
<span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#FFCB6B;">inet6</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">2</span><span style="color:#C3E88D;">a0b:4140:4c60::2/48</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">scope</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">global</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">noprefixroute</span></span>
<span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#FFCB6B;">valid_lft</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">forever</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">preferred_lft</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">forever</span></span>
<span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#FFCB6B;">inet6</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">fe80::5054:ff:fef1:d68b/64</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">scope</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">link</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">noprefixroute</span></span>
<span class="line"><span style="color:#A6ACCD;"> </span><span style="color:#FFCB6B;">valid_lft</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">forever</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">preferred_lft</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">forever</span></span></code></pre></div><p>It can be seen that the public IPV4 address is bound to the <code>ens3</code> interface, so the following commands will use <code>ens3</code>.</p><p>To map port 22 of the current virtual machine to port 3322 of the public IPV4 address, run:</p><div class="language-shell"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#676E95;font-style:italic;"># Add a DNAT rule: forward traffic from public port 3322 to local 192.168.33.130:22</span></span>
<span class="line"><span style="color:#FFCB6B;">iptables</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">-t</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">nat</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">-A</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">PREROUTING</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">-i</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">ens3</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">-p</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">tcp</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">--dport</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">3322</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">-j</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">DNAT</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">--to-destination</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">192.168</span><span style="color:#C3E88D;">.33.130:22</span></span>
<span class="line"><span style="color:#676E95;font-style:italic;"># Add a POSTROUTING rule: enable NAT masquerading for proper return traffic</span></span>
<span class="line"><span style="color:#FFCB6B;">iptables</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">-t</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">nat</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">-A</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">POSTROUTING</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">-p</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">tcp</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">-d</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">192.168</span><span style="color:#C3E88D;">.33.130</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">--dport</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">22</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">-j</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">MASQUERADE</span></span>
<span class="line"><span style="color:#676E95;font-style:italic;"># Allow incoming traffic on port 3322 (required if firewalld is enabled)</span></span>
<span class="line"><span style="color:#FFCB6B;">iptables</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">-I</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">INPUT</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">-p</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">tcp</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">--dport</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">3322</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">-j</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">ACCEPT</span></span></code></pre></div><p>Now the internal virtual machine is exposed to the internet and can be accessed remotely.</p><h2 id="troubleshooting" tabindex="-1">Troubleshooting <a class="header-anchor" href="#troubleshooting" aria-label="Permalink to &quot;Troubleshooting&quot;"></a></h2><h3 id="troubleshooting-adding-compute-node" tabindex="-1">Troubleshooting Adding Compute Node <a class="header-anchor" href="#troubleshooting-adding-compute-node" aria-label="Permalink to &quot;Troubleshooting Adding Compute Node&quot;"></a></h3><p>On the Controller node, execute:</p><div class="language-shell"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#FFCB6B;">telnet</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">&lt;</span><span style="color:#C3E88D;">node</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">i</span><span style="color:#A6ACCD;">p</span><span style="color:#89DDFF;">&gt;</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">8884</span></span></code></pre></div><p>On the compute node, execute:</p><div class="language-shell"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#FFCB6B;">systemctl</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">status</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">webvirtcompute</span></span></code></pre></div><div class="language-shell"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#FFCB6B;">systemctl</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">status</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">libvirtd</span></span></code></pre></div><div class="language-shell"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#FFCB6B;">systemctl</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">status</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">prometheus</span></span></code></pre></div><div class="language-shell"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#FFCB6B;">systemctl</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">status</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">prometheus-libvirt-exporter</span></span></code></pre></div><p>If none of the above reveals the issue, then on the Controller node, execute:</p><div class="language-shell"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#FFCB6B;">docker</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">exec</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">-it</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">webvirtcloud-backend</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">/bin/sh</span></span></code></pre></div><div class="language-shell"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#FFCB6B;">vi</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">webvirtcloud/settings/production.py</span></span></code></pre></div><p>Change <code>DEBUG=False</code> to <code>DEBUG=True</code>.</p><p>After saving the file, execute inside the container:</p><div class="language-shell"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#A6ACCD;">UV_PROJECT_ENVIRONMENT</span><span style="color:#89DDFF;">=</span><span style="color:#C3E88D;">/usr/local</span><span style="color:#A6ACCD;"> </span><span style="color:#FFCB6B;">uv</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">sync</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">--dev</span></span></code></pre></div><p>Then <code>exit</code> the container and execute:</p><div class="language-shell"><button title="Copy Code" class="copy"></button><span class="lang">shell</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#FFCB6B;">docker</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">restart</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">webvirtcloud-backend</span></span>
<span class="line"><span style="color:#FFCB6B;">sleep</span><span style="color:#A6ACCD;"> </span><span style="color:#F78C6C;">3</span></span>
<span class="line"><span style="color:#FFCB6B;">docker</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">logs</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">webvirtcloud-backend</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">-f</span></span></code></pre></div><p>Then trigger the error from the frontend; the log will now display the corresponding error in real time.</p><h3 id="docker-containers-do-not-restart-themselves-after-a-controller-reboot" tabindex="-1">Docker containers do not restart themselves after a Controller reboot <a class="header-anchor" href="#docker-containers-do-not-restart-themselves-after-a-controller-reboot" aria-label="Permalink to &quot;Docker containers do not restart themselves after a Controller reboot&quot;"></a></h3><p>If Docker containers don&#39;t auto-restart after a system reboot, run:</p><div class="language-bash"><button title="Copy Code" class="copy"></button><span class="lang">bash</span><pre class="shiki material-theme-palenight"><code><span class="line"><span style="color:#FFCB6B;">docker</span><span style="color:#A6ACCD;"> </span><span style="color:#C3E88D;">start</span><span style="color:#A6ACCD;"> </span><span style="color:#89DDFF;">$(</span><span style="color:#FFCB6B;">docker</span><span style="color:#C3E88D;"> ps -a -q</span><span style="color:#89DDFF;">)</span></span></code></pre></div><h2 id="disadvantages" tabindex="-1">Disadvantages <a class="header-anchor" href="#disadvantages" aria-label="Permalink to &quot;Disadvantages&quot;"></a></h2><p>The VM image is written to death, there is no way to use your own custom image, and there is no way to export it, and the original image does not have password login and ROOT login available.</p><h2 id="thanks" tabindex="-1">Thanks <a class="header-anchor" href="#thanks" aria-label="Permalink to &quot;Thanks&quot;"></a></h2><p><a href="https://webvirt.cloud/" target="_blank" rel="noreferrer">https://webvirt.cloud/</a></p>`,75),p=[t];function r(c,i,C,y,d,A){return a(),n("div",null,p)}const u=s(e,[["render",r]]);export{h as __pageData,u as default};