<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title><![CDATA[Post4VPS Forum | Free VPS Provider - Tutorials]]></title>
		<link>https://post4vps.com/</link>
		<description><![CDATA[Post4VPS Forum | Free VPS Provider - https://post4vps.com]]></description>
		<pubDate>Wed, 06 May 2026 07:35:30 +0000</pubDate>
		<generator>MyBB</generator>
		<item>
			<title><![CDATA[Container-based Virtualization: The Big Picture]]></title>
			<link>https://post4vps.com/Thread-Container-based-Virtualization-The-Big-Picture</link>
			<pubDate>Thu, 08 Jul 2021 14:34:31 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://post4vps.com/member.php?action=profile&uid=1026">fChk</a>]]></dc:creator>
			<guid isPermaLink="false">https://post4vps.com/Thread-Container-based-Virtualization-The-Big-Picture</guid>
			<description><![CDATA[To answer the <a href="https://post4vps.com/Thread-How-to-create-Docker-s-container-and-enter-its-shell-Basic-container-for-any-usage?pid=42295#pid42295" target="_blank" rel="noopener" class="mycode_url">question asked in this post of mine</a>, ie the 'where Docker containers fit in the big <span style="font-style: italic;" class="mycode_i">Container-based Virtualization</span> picture, an overview of the whole field is warranted and -as usual with me- this is done in its historical context. So, this thread is about <span style="text-decoration: underline;" class="mycode_u">setting the broad historical context of Containers technologies</span>, highlighting the milestones events occurring in the path towards the kick-starting of <span style="font-weight: bold;" class="mycode_b">the LXC project</span> in 2008, which led to the Docker project, open-sourced in 2013, which was foundational in setting the industry standard for 'containerized application' and all the tooling that goes with it.<br />
-------------------------------------<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Container-based virtualization</span> (ie <span style="font-style: italic;" class="mycode_i">OS virtualization</span>), as contrasted to the <span style="font-weight: bold;" class="mycode_b">hypervisor-based</span> or <span style="font-weight: bold;" class="mycode_b">VM-based virtualization</span> (ie <span style="font-style: italic;" class="mycode_i">machine/hardware virtualization</span>), has been a hot subject in the IT world for more than a decade now. <br />
<br />
The following table (*) gives a direct comparison between VMs and containers:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>Virtual Machines (VMs)                   | Containers<br />
--------------------------------------------------------------------------------------<br />
Represents hardware-level virtualization     Represents OS-level virtualization<br />
Heavyweight                                  Lightweight<br />
Slow provisioning                            Real-time provisioning and scalability<br />
Limited performance                          Native performance<br />
Fully isolated thus more secure              Process-level isolation thus less secure</code></div></div>(*)- The code tag is used here to maintain the table formatting.<br />
<br />
<span style="font-size: x-large;" class="mycode_size">1- Containerization technologies</span><br />
Containers are an old concept. Below is a summary list for the milestones and evolution of the concept which culminated in the split between <span style="font-style: italic;" class="mycode_i">system containers</span> and the more popular <span style="font-style: italic;" class="mycode_i">application containers</span> championed by Docker Inc. since 2013 and their standardization in the OCI specification in 2015:<ul class="mycode_list"><li>For decades, UNIX systems have had the <span style="text-decoration: underline;" class="mycode_u"><span style="font-style: italic;" class="mycode_i">chroot</span> command</span> that provides a simple form of <span style="text-decoration: underline;" class="mycode_u">filesystem isolation</span>.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">The FreeBSD jail</span>: since 1998, FreeBSD has had the <span style="text-decoration: underline;" class="mycode_u">jail utility</span>, which extended chroot sandboxing to processes.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Solaris Zones</span> offered a complete containerization technology around 2001 but was limited to the Solaris OS for the x86 and SPARC systems. <br />
</li>
<li>In 2001, Parrallels Inc released the commercial <span style="font-weight: bold;" class="mycode_b">Virtuozzo container technology for Linux</span> and later open sourced the core technology as <span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u">OpenVZ</span></span> in 2005. <br />
</li>
<li>In 2006, Google Inc. started the <a href="https://en.wikipedia.org/wiki/Cgroups" target="_blank" rel="noopener" class="mycode_url">development of <span style="font-style: italic;" class="mycode_i">CGroups</span> for the Linux kernel</a> and began switching its infrastructure to containers. <br />
</li>
<li>In 2007, Linux kernel 2.6.24 released with support for cgroups v1 (Control groups.)<br />
</li>
<li>In 2008, <span style="font-weight: bold;" class="mycode_b">The Linux Containers (<span style="text-decoration: underline;" class="mycode_u">LXC</span>) project</span> started and brought together <span style="text-decoration: underline;" class="mycode_u">CGroups</span>, <span style="text-decoration: underline;" class="mycode_u">kernel namespaces</span>, and <span style="text-decoration: underline;" class="mycode_u">chroot technology</span> (among others) to provide a complete containerization solution in Linux systems.<br />
&gt; LXC is a project centered around a C-based library, liblxc which allows for the creation of containers of any type from userspace. It also provides a set of tools (lxc-*) that allows interacting with that C library and offers a raw low level user interface. This is why it it remained only useful for system engineers with the required know-how.<br />
</li>
<li>In late 2014, Canonical launched L<img src="https://post4vps.com/images/emoji/XD.png" alt="XD" title="XD" class="smilie smilie_32" /> project which is a REST API written in Go around LXC and creates a system daemon that apps can access locally using a Unix socket, or over the network via HTTPS. The goal being the democratization of system containers by lowering the entry-level for non-specialists.<br />
</li>
<li>In 2016, Canonical released <span style="text-decoration: underline;" class="mycode_u">L<img src="https://post4vps.com/images/emoji/XD.png" alt="XD" title="XD" class="smilie smilie_32" /></span>, which is its own container manager that focuses on system containers and which uses liblxc through go-lxc.<br />
</li>
</ul>
<br />
Among the Containerization technologies listed above, <span style="text-decoration: underline;" class="mycode_u">LXC</span> (for LinuX Containers) is the one that interests us in this thread as it's the original implementation from which all kinds of other Linux containers implementations derive, including <span style="text-decoration: underline;" class="mycode_u">Docker containers</span>. It indeed represents an operating-system-level virtualization environment (VE) for running multiple isolated Linux systems (containers) on a single Linux machine. These <span style="font-weight: bold;" class="mycode_b">Linux containers are basically made of three Linux kernel primitives</span>:<ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u">Linux namespaces</span></span> which defines what a process can see<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u">CGroups</span></span> which set the resources a process can use<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u">A rootfs</span></span><br />
</li>
</ul>
More on this later when we'll be discussing the role of the so-called '<span style="font-style: italic;" class="mycode_i">low-level container runtimes</span>', like lxc, runc, crun etc..<br />
<br />
Another interesting observation that can be made from the Containerization technologies listed above (ie Solaris Zones, Virtuozzo’s OpenVZ, FreeBSD jails and L<img src="https://post4vps.com/images/emoji/XD.png" alt="XD" title="XD" class="smilie smilie_32" />/LXC containers) is that they are all designed primarily as a way to containerize a complete OS rather than just a single app, which means that they are all <span style="font-style: italic;" class="mycode_i"><span style="text-decoration: underline;" class="mycode_u">system containers</span></span>.<br />
<br />
Next post will be about the transition to the '<span style="text-decoration: underline;" class="mycode_u">application containers</span>' with the release of Docker as an open-source project in 2013.<br />
<br />
<span style="font-size: x-large;" class="mycode_size">2- From System Containers to Application Containers</span>]]></description>
			<content:encoded><![CDATA[To answer the <a href="https://post4vps.com/Thread-How-to-create-Docker-s-container-and-enter-its-shell-Basic-container-for-any-usage?pid=42295#pid42295" target="_blank" rel="noopener" class="mycode_url">question asked in this post of mine</a>, ie the 'where Docker containers fit in the big <span style="font-style: italic;" class="mycode_i">Container-based Virtualization</span> picture, an overview of the whole field is warranted and -as usual with me- this is done in its historical context. So, this thread is about <span style="text-decoration: underline;" class="mycode_u">setting the broad historical context of Containers technologies</span>, highlighting the milestones events occurring in the path towards the kick-starting of <span style="font-weight: bold;" class="mycode_b">the LXC project</span> in 2008, which led to the Docker project, open-sourced in 2013, which was foundational in setting the industry standard for 'containerized application' and all the tooling that goes with it.<br />
-------------------------------------<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Container-based virtualization</span> (ie <span style="font-style: italic;" class="mycode_i">OS virtualization</span>), as contrasted to the <span style="font-weight: bold;" class="mycode_b">hypervisor-based</span> or <span style="font-weight: bold;" class="mycode_b">VM-based virtualization</span> (ie <span style="font-style: italic;" class="mycode_i">machine/hardware virtualization</span>), has been a hot subject in the IT world for more than a decade now. <br />
<br />
The following table (*) gives a direct comparison between VMs and containers:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>Virtual Machines (VMs)                   | Containers<br />
--------------------------------------------------------------------------------------<br />
Represents hardware-level virtualization     Represents OS-level virtualization<br />
Heavyweight                                  Lightweight<br />
Slow provisioning                            Real-time provisioning and scalability<br />
Limited performance                          Native performance<br />
Fully isolated thus more secure              Process-level isolation thus less secure</code></div></div>(*)- The code tag is used here to maintain the table formatting.<br />
<br />
<span style="font-size: x-large;" class="mycode_size">1- Containerization technologies</span><br />
Containers are an old concept. Below is a summary list for the milestones and evolution of the concept which culminated in the split between <span style="font-style: italic;" class="mycode_i">system containers</span> and the more popular <span style="font-style: italic;" class="mycode_i">application containers</span> championed by Docker Inc. since 2013 and their standardization in the OCI specification in 2015:<ul class="mycode_list"><li>For decades, UNIX systems have had the <span style="text-decoration: underline;" class="mycode_u"><span style="font-style: italic;" class="mycode_i">chroot</span> command</span> that provides a simple form of <span style="text-decoration: underline;" class="mycode_u">filesystem isolation</span>.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">The FreeBSD jail</span>: since 1998, FreeBSD has had the <span style="text-decoration: underline;" class="mycode_u">jail utility</span>, which extended chroot sandboxing to processes.<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Solaris Zones</span> offered a complete containerization technology around 2001 but was limited to the Solaris OS for the x86 and SPARC systems. <br />
</li>
<li>In 2001, Parrallels Inc released the commercial <span style="font-weight: bold;" class="mycode_b">Virtuozzo container technology for Linux</span> and later open sourced the core technology as <span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u">OpenVZ</span></span> in 2005. <br />
</li>
<li>In 2006, Google Inc. started the <a href="https://en.wikipedia.org/wiki/Cgroups" target="_blank" rel="noopener" class="mycode_url">development of <span style="font-style: italic;" class="mycode_i">CGroups</span> for the Linux kernel</a> and began switching its infrastructure to containers. <br />
</li>
<li>In 2007, Linux kernel 2.6.24 released with support for cgroups v1 (Control groups.)<br />
</li>
<li>In 2008, <span style="font-weight: bold;" class="mycode_b">The Linux Containers (<span style="text-decoration: underline;" class="mycode_u">LXC</span>) project</span> started and brought together <span style="text-decoration: underline;" class="mycode_u">CGroups</span>, <span style="text-decoration: underline;" class="mycode_u">kernel namespaces</span>, and <span style="text-decoration: underline;" class="mycode_u">chroot technology</span> (among others) to provide a complete containerization solution in Linux systems.<br />
&gt; LXC is a project centered around a C-based library, liblxc which allows for the creation of containers of any type from userspace. It also provides a set of tools (lxc-*) that allows interacting with that C library and offers a raw low level user interface. This is why it it remained only useful for system engineers with the required know-how.<br />
</li>
<li>In late 2014, Canonical launched L<img src="https://post4vps.com/images/emoji/XD.png" alt="XD" title="XD" class="smilie smilie_32" /> project which is a REST API written in Go around LXC and creates a system daemon that apps can access locally using a Unix socket, or over the network via HTTPS. The goal being the democratization of system containers by lowering the entry-level for non-specialists.<br />
</li>
<li>In 2016, Canonical released <span style="text-decoration: underline;" class="mycode_u">L<img src="https://post4vps.com/images/emoji/XD.png" alt="XD" title="XD" class="smilie smilie_32" /></span>, which is its own container manager that focuses on system containers and which uses liblxc through go-lxc.<br />
</li>
</ul>
<br />
Among the Containerization technologies listed above, <span style="text-decoration: underline;" class="mycode_u">LXC</span> (for LinuX Containers) is the one that interests us in this thread as it's the original implementation from which all kinds of other Linux containers implementations derive, including <span style="text-decoration: underline;" class="mycode_u">Docker containers</span>. It indeed represents an operating-system-level virtualization environment (VE) for running multiple isolated Linux systems (containers) on a single Linux machine. These <span style="font-weight: bold;" class="mycode_b">Linux containers are basically made of three Linux kernel primitives</span>:<ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u">Linux namespaces</span></span> which defines what a process can see<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u">CGroups</span></span> which set the resources a process can use<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u">A rootfs</span></span><br />
</li>
</ul>
More on this later when we'll be discussing the role of the so-called '<span style="font-style: italic;" class="mycode_i">low-level container runtimes</span>', like lxc, runc, crun etc..<br />
<br />
Another interesting observation that can be made from the Containerization technologies listed above (ie Solaris Zones, Virtuozzo’s OpenVZ, FreeBSD jails and L<img src="https://post4vps.com/images/emoji/XD.png" alt="XD" title="XD" class="smilie smilie_32" />/LXC containers) is that they are all designed primarily as a way to containerize a complete OS rather than just a single app, which means that they are all <span style="font-style: italic;" class="mycode_i"><span style="text-decoration: underline;" class="mycode_u">system containers</span></span>.<br />
<br />
Next post will be about the transition to the '<span style="text-decoration: underline;" class="mycode_u">application containers</span>' with the release of Docker as an open-source project in 2013.<br />
<br />
<span style="font-size: x-large;" class="mycode_size">2- From System Containers to Application Containers</span>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Easy phpMyAdmin Installation On Linux]]></title>
			<link>https://post4vps.com/Thread-Easy-phpMyAdmin-Installation-On-Linux</link>
			<pubDate>Wed, 26 May 2021 16:45:16 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://post4vps.com/member.php?action=profile&uid=26">Mashiro</a>]]></dc:creator>
			<guid isPermaLink="false">https://post4vps.com/Thread-Easy-phpMyAdmin-Installation-On-Linux</guid>
			<description><![CDATA[<div style="text-align: center;" class="mycode_align"><span style="font-size: xx-large;" class="mycode_size"><span style="color: royalblue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">Easy phpMyAdmin Installation On Linux</span></span></span><br />
<img src="https://i.imgur.com/tkpP9Xw.png" loading="lazy"  alt="[Image: tkpP9Xw.png]" class="mycode_img" /></div>
<br />
<br />
<div style="text-align: justify;" class="mycode_align">Howdy Post4VPS!<br />
<br />
Welcome to another <a href="https://post4vps.com/Thread-Host-Your-Own-WP-Blog-Debian-10-Nginx-PHP-8-MariaDB?pid=41679#pid41679" target="_blank" rel="noopener" class="mycode_url">Post4VPS user request</a> based tutorial for the command-line installation of software and applications on Linux servers. In this guide I will teach you how to easily install the phpMyAdmin web application on your Linux based server with a web server, PHP and a MySQL based database server. If you want to know how to install a web server with PHP and MariaDB you can take a look at the following instructions: <a href="https://post4vps.com/Thread-Host-Your-Own-WP-Blog-Debian-10-Nginx-PHP-8-MariaDB" target="_blank" rel="noopener" class="mycode_url">Host Your Own WP Blog Using Debian 10, Nginx, PHP 8 &amp; MariaDB</a>. A small additional information: phpMyAdmin is a web application that is meant to be downloaded, unzipped and used after a bit of configuration. Therefore I highly recommend to install it from the official source and always use the latest available version. Don't rely on the phpMyAdmin software packages that you can install via package managers in Linux distributions! This way wou will have the latest phpMyAdmin and thus will lower the risk of opening security holes in your web hosting stack. Also keep in mind to always update to the latest phpMyAdmin version afterwards! <br />
<br />
This tutorial will NOT cover the following points: a) how to install and configure a web server like Apache or Nginx, b) how to install and configure PHP (e.g. PHP 8) and c) how to install and configure a MySQL database server like MariaDB. You can use the previously linked guide to learn how to do that based on Nginx, PHP 8 and MariaDB. Other kind of setups using different web servers and / or database servers can be found in this forum or all around the web. Additionally this tutorial will not include steps that may help you to secure your phpMyAdmin installation. This is due to different web servers offering different ways to secure it. This subject alone would be worth a dedicated standalone tutorial (in my opinion at least).<br />
<br />
Below is the setup I'm going to use during this tutorial:<ul class="mycode_list"><li>Intel Pentium N4200 4x 2.4 GHz<br />
</li>
<li>4 GB DDR4 2400 MHz RAM<br />
</li>
<li>64 GB eMMC Flash Storage<br />
</li>
<li>Debian "Buster" 10 64 Bit<br />
</li>
<li>Nginx Stable 1.20<br />
</li>
<li>PHP 8.0<br />
</li>
<li>MariaDB 10.5<br />
</li>
</ul>
<br />
This is the very same server that I used when I created the previous guide that I linked above. It serves well as an example system to perform a phpMyAdmin installation to make the management of databases easier. Although you may know that I'm not a big of of any kind of control panels, I admin that I'm happily using phpMyAdmin when necessary to quickly create users, databases or perform other operations like database optimization or backups. However, I strongly recommend to secure any phpMyAdmin installation by mainly limiting access to it to a certain set of IP addresses (and as mentioned before: always keep it up-to-date!).<br />
<hr class="mycode_hr" />
<br />
<br />
Before we start with the main parts of the guide I have some additional information for you.<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Easy is not very easy</span><br />
- In the past the installation of phpMyAdmin basically used to be very easy. It was mainly: a) download the latest version, unzip the latest version and c) adjust a little part of the configuration file. After this three main steps it was basically ready to go. New security measures introduced by MySQL and thus MySQL based database servers require some more work now. The main necessity is the creation of a dedicated database user with full administration rights that can be used in phpMyAdmin for any administrative operations. Earlier it was possible to simply use the root user but this has been disabled to increase security.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Different web hosting stacks require different phpMyAdmin versions</span><br />
- Certain parts of web hosting stacks such as the PHP version and MySQL server version dictate which phpMyAdmin version you can use or rather said need to use to have a working instance of phpMyAdmin running. So be careful here and watch out what kind of software versions you are using and which phpMyAdmin version you need. I will only mention it this time and no other time during the whole tutorial. Example if you have PHP 8.0 and MySQL 5.5 or MariaDB you need to get the latest stable version 5.1.0 of phpMyAdmin. The older but still supported version (security fixes only) 4.9.7 will not work with PHP 8.0. <br />
- PHP 7.1 and newer and MySQL/MariaDB 5.5 and newer -&gt; phpMyAdmin 5.1.0. <br />
- PHP 5.5 to 7.4 and MySQL/MariaDB 5.5 and newer -&gt; phpMyAdmin 4.9.7.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">No phpMyAdmin software packages from Linux distribution package managers</span><br />
- As mentioned before we will not be using phpMyAdmin software packages that can be installed by package managers coming with Linux distributions like apt, yum or similar. Most are out of date and are only tailored to web hosting stack software version that are also available by default through the package managers on the Linux distributions. As easy as that would make it to install phpMyAdmin it's simply not the right way where you will learn how to install it yourself and it most likely will not compatible with different web hosting stacks (e.g. might only work with Apache installed by the package manager but will not work with Nginx).<br />
<hr class="mycode_hr" />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Prerequisites</span><br />
<br />
First we will install a few necessary tools via apt. To do that first connect to your server and login (best would be to login as root or a user with sudo access as you will need administrative permissions to run some of the commands).<br />
<br />
Run the following command in your terminal as root or a user with sudo access (remember to add sudo before the command) to install the necessary tools:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>apt-get install wget nano ca-certificates tar gzip -y</code></div></div><br />
The command will install the CLI downloader "wget", the CLI text editor "nano", the TLS CA certificate base (to download from HTTPS links without certificate errors) and the archive management tool tar + gzip for tar and gunzip archives. <br />
<hr class="mycode_hr" />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">phpMyAdmin MySQL Administration User</span><br />
<br />
Next step before the phpMyAdmin installation is the creation of the necessary MySQL administration user that you can use in phpMyAdmin instead of the MySQL root user.<br />
<br />
Start the MySQL CLI management console as the MySQL root user:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>mysql -u root -p</code></div></div>(Enter your MySQL root password when prompted.)<br />
<br />
Create a new user that will become the administrator:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>CREATE USER 'pmaadmin'@'localhost' IDENTIFIED BY 'mypassword123';</code></div></div>(I'll use pmaadmin as the username. Remember to adjust it to your liking and also set your own password instead of mypassword123.)<br />
<br />
Grant all permissions to all databases and also special permission to the new user:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>GRANT ALL PRIVILEGES ON *.* TO 'pmaadmin'@'localhost' WITH GRANT OPTION;</code></div></div><br />
Reload all user privileges:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>FLUSH PRIVILEGES;</code></div></div><br />
Exit the MySQL CLI tool:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>exit</code></div></div>(Remember to adjust the username to yours!)<br />
<br />
You now have a MySQL user that basically has a lot of power over the database server. It is like the MySQL root user. You will use this use to login in phpMyAdmin when you need to create a new user/database or do other administrative tasks.<br />
<hr class="mycode_hr" />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">phpMyAdmin Installation</span><br />
<br />
Now we can finally perform the phpMyAdmin installation.<br />
<br />
Change your directory to the folder containing your website (where you want to install phpMyAdmin):<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>cd /var/www/hiddenrefuge.eu.org</code></div></div>(Adjust the path to your own website on your own web hosting stack.)<br />
<br />
Download the latest version that is compatible with your web hosting stack. You can get the download links on <a href="https://www.phpmyadmin.net/downloads/" target="_blank" rel="noopener" class="mycode_url">this page</a>. Take the download link for the archive file ending with tar.gz.<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>wget https://files.phpmyadmin.net/phpMyAdmin/5.1.0/phpMyAdmin-5.1.0-all-languages.tar.gz</code></div></div>(Here you would use the link for the correct and latest version.)<br />
<br />
Extract the downloaded phpMyAdmin archive:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>tar -zxvf phpMyAdmin-5.1.0-all-languages.tar.gz</code></div></div>(Here you should use the file name of the version you downloaded.)<br />
<br />
You will now have a folder called like the archive name (without .tar.gz). Rename this folder to a easier to remember name:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>mv phpMyAdmin-5.1.0-all-languages sqlmgmt</code></div></div>(Here you should use the folder name of your version and your new wish name for the folder. Make it something not so obvious to prevent bots trying to look for phpMyAdmin - so AVOID calling the folder pma or phpmyadmin/phpMyAdmin!)<br />
<br />
You can now remove the downloaded tar.gz archive:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>rm -rf phpMyAdmin-5.1.0-all-languages.tar.gz</code></div></div>(Here you should use the file name of the version you downloaded.)<br />
<br />
Set correct ownership/permissions for the phpMyAdmin folder:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>chown -R nginx:nginx /var/www/hiddenrefuge.eu.org/sqlmgmt</code></div></div>(Here you should adjust the user and group to the one you use for the web server and PHP processes. Additionally remember to adjust the path to your phpMyAdmin folder.)<br />
<br />
To verify that you can access phpMyAdmin and it works (not displaying any kind of errors or something) should open the phpMyAdmin instance on your website in a web browser. <br />
<br />
You should see this page:<br />
<img src="https://i.imgur.com/pBApgyV.png" loading="lazy"  alt="[Image: pBApgyV.png]" class="mycode_img" /><br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">phpMyAdmin Configuration</span><br />
<br />
After the phpMyAdmin installation it is necessary to configure a few things or else you will not be able to use phpMyAdmin properly.<br />
<br />
Change directory in to your phpMyAdmin folder:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>cd /var/www/hiddenrefuge.eu.org/sqlmgmt</code></div></div>(Adjust the path to your phpMyAdmin installation.)<br />
<br />
Rename the sample configuration file to the main configuration file name:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>mv config.sample.inc.php config.inc.php</code></div></div><br />
Open the configuration file with nano:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>nano /var/www/hiddenrefuge.eu.org/sqlmgmt/config.inc.php</code></div></div>(Adjust the path to your phpMyAdmin installation.)<br />
<br />
Go to <a href="https://phpsolved.com/phpmyadmin-blowfish-secret-generator/" target="_blank" rel="noopener" class="mycode_url">this page</a> and generate yourself a new blowfish secret.<br />
<br />
Inside your configuration file replace <br />
<blockquote class="mycode_quote"><cite>Quote:</cite>&#36;cfg['blowfish_secret'] = ''; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */</blockquote>
<br />
With the new configuration line with your blowfish secret from the page, e.g.:<br />
<blockquote class="mycode_quote"><cite>Quote:</cite>&#36;cfg['blowfish_secret'] = 'MN66UsUnxf,uVql{Dt1uzCE[cnE5M6Rb';</blockquote>
(Don't use the blowfish secret from the example above! Get your own from the page that I linked to above.)<br />
<br />
Save the file with CTRL + O and ENTER. Exit the nano text editor with CTRL + X.<br />
<br />
This is about it in terms of the configuration of phpMyAdmin.<br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">Getting started with phpMyAdmin</span><br />
<br />
Now navigate to your phpMyAdmin installation on your website via web browser and try to login with the user that you created during the phpMyAdmin MySQL Administration User setup step.<br />
<br />
<img src="https://i.imgur.com/m39NtjU.png" loading="lazy"  alt="[Image: m39NtjU.png]" class="mycode_img" /><br />
<br />
If everything went well you should be in and it should look like this:<br />
<img src="https://i.imgur.com/kGhTppC.png" loading="lazy"  alt="[Image: kGhTppC.png]" class="mycode_img" /><br />
<br />
Do you see the warning message at the bottom of the screenshot? You need to do a little something to fix this issue.<br />
<br />
Go to <a href="http://hiddenrefuge.eu.org/sqlmgmt/index.php?route=/check-relations" target="_blank" rel="noopener" class="mycode_url">http://hiddenrefuge.eu.org/sqlmgmt/index...-relations</a> in your web browser. Remember to adjust the part before "index.php?route=/check-relations" to the web address of your phpMyAdmin installation.<br />
<br />
You will see the error below:<br />
<img src="https://i.imgur.com/MGIommv.png8" loading="lazy"  alt="[Image: MGIommv.png8]" class="mycode_img" /><br />
<br />
To fix this click on the blue "Create" link. This will generate a databse called phpmyadmin where phpMyAdmin will store its own configuration changes and settings.<br />
<br />
After that you can go back to the main page of phpMyAdmin and the warning message should be gone.<br />
<br />
<br />
That's all folks! You now have installed phpMyAdmin. To update it you would simply download the latest version and overwrite all files. The configuration files config.inc.php will remain unchanged. After overwritting the files you also have to set the ownership/permission again. You would basically simply repeat the phpMyAdmin Installation part with a newer version.<br />
</div>]]></description>
			<content:encoded><![CDATA[<div style="text-align: center;" class="mycode_align"><span style="font-size: xx-large;" class="mycode_size"><span style="color: royalblue;" class="mycode_color"><span style="font-weight: bold;" class="mycode_b">Easy phpMyAdmin Installation On Linux</span></span></span><br />
<img src="https://i.imgur.com/tkpP9Xw.png" loading="lazy"  alt="[Image: tkpP9Xw.png]" class="mycode_img" /></div>
<br />
<br />
<div style="text-align: justify;" class="mycode_align">Howdy Post4VPS!<br />
<br />
Welcome to another <a href="https://post4vps.com/Thread-Host-Your-Own-WP-Blog-Debian-10-Nginx-PHP-8-MariaDB?pid=41679#pid41679" target="_blank" rel="noopener" class="mycode_url">Post4VPS user request</a> based tutorial for the command-line installation of software and applications on Linux servers. In this guide I will teach you how to easily install the phpMyAdmin web application on your Linux based server with a web server, PHP and a MySQL based database server. If you want to know how to install a web server with PHP and MariaDB you can take a look at the following instructions: <a href="https://post4vps.com/Thread-Host-Your-Own-WP-Blog-Debian-10-Nginx-PHP-8-MariaDB" target="_blank" rel="noopener" class="mycode_url">Host Your Own WP Blog Using Debian 10, Nginx, PHP 8 &amp; MariaDB</a>. A small additional information: phpMyAdmin is a web application that is meant to be downloaded, unzipped and used after a bit of configuration. Therefore I highly recommend to install it from the official source and always use the latest available version. Don't rely on the phpMyAdmin software packages that you can install via package managers in Linux distributions! This way wou will have the latest phpMyAdmin and thus will lower the risk of opening security holes in your web hosting stack. Also keep in mind to always update to the latest phpMyAdmin version afterwards! <br />
<br />
This tutorial will NOT cover the following points: a) how to install and configure a web server like Apache or Nginx, b) how to install and configure PHP (e.g. PHP 8) and c) how to install and configure a MySQL database server like MariaDB. You can use the previously linked guide to learn how to do that based on Nginx, PHP 8 and MariaDB. Other kind of setups using different web servers and / or database servers can be found in this forum or all around the web. Additionally this tutorial will not include steps that may help you to secure your phpMyAdmin installation. This is due to different web servers offering different ways to secure it. This subject alone would be worth a dedicated standalone tutorial (in my opinion at least).<br />
<br />
Below is the setup I'm going to use during this tutorial:<ul class="mycode_list"><li>Intel Pentium N4200 4x 2.4 GHz<br />
</li>
<li>4 GB DDR4 2400 MHz RAM<br />
</li>
<li>64 GB eMMC Flash Storage<br />
</li>
<li>Debian "Buster" 10 64 Bit<br />
</li>
<li>Nginx Stable 1.20<br />
</li>
<li>PHP 8.0<br />
</li>
<li>MariaDB 10.5<br />
</li>
</ul>
<br />
This is the very same server that I used when I created the previous guide that I linked above. It serves well as an example system to perform a phpMyAdmin installation to make the management of databases easier. Although you may know that I'm not a big of of any kind of control panels, I admin that I'm happily using phpMyAdmin when necessary to quickly create users, databases or perform other operations like database optimization or backups. However, I strongly recommend to secure any phpMyAdmin installation by mainly limiting access to it to a certain set of IP addresses (and as mentioned before: always keep it up-to-date!).<br />
<hr class="mycode_hr" />
<br />
<br />
Before we start with the main parts of the guide I have some additional information for you.<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Easy is not very easy</span><br />
- In the past the installation of phpMyAdmin basically used to be very easy. It was mainly: a) download the latest version, unzip the latest version and c) adjust a little part of the configuration file. After this three main steps it was basically ready to go. New security measures introduced by MySQL and thus MySQL based database servers require some more work now. The main necessity is the creation of a dedicated database user with full administration rights that can be used in phpMyAdmin for any administrative operations. Earlier it was possible to simply use the root user but this has been disabled to increase security.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Different web hosting stacks require different phpMyAdmin versions</span><br />
- Certain parts of web hosting stacks such as the PHP version and MySQL server version dictate which phpMyAdmin version you can use or rather said need to use to have a working instance of phpMyAdmin running. So be careful here and watch out what kind of software versions you are using and which phpMyAdmin version you need. I will only mention it this time and no other time during the whole tutorial. Example if you have PHP 8.0 and MySQL 5.5 or MariaDB you need to get the latest stable version 5.1.0 of phpMyAdmin. The older but still supported version (security fixes only) 4.9.7 will not work with PHP 8.0. <br />
- PHP 7.1 and newer and MySQL/MariaDB 5.5 and newer -&gt; phpMyAdmin 5.1.0. <br />
- PHP 5.5 to 7.4 and MySQL/MariaDB 5.5 and newer -&gt; phpMyAdmin 4.9.7.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">No phpMyAdmin software packages from Linux distribution package managers</span><br />
- As mentioned before we will not be using phpMyAdmin software packages that can be installed by package managers coming with Linux distributions like apt, yum or similar. Most are out of date and are only tailored to web hosting stack software version that are also available by default through the package managers on the Linux distributions. As easy as that would make it to install phpMyAdmin it's simply not the right way where you will learn how to install it yourself and it most likely will not compatible with different web hosting stacks (e.g. might only work with Apache installed by the package manager but will not work with Nginx).<br />
<hr class="mycode_hr" />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Prerequisites</span><br />
<br />
First we will install a few necessary tools via apt. To do that first connect to your server and login (best would be to login as root or a user with sudo access as you will need administrative permissions to run some of the commands).<br />
<br />
Run the following command in your terminal as root or a user with sudo access (remember to add sudo before the command) to install the necessary tools:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>apt-get install wget nano ca-certificates tar gzip -y</code></div></div><br />
The command will install the CLI downloader "wget", the CLI text editor "nano", the TLS CA certificate base (to download from HTTPS links without certificate errors) and the archive management tool tar + gzip for tar and gunzip archives. <br />
<hr class="mycode_hr" />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">phpMyAdmin MySQL Administration User</span><br />
<br />
Next step before the phpMyAdmin installation is the creation of the necessary MySQL administration user that you can use in phpMyAdmin instead of the MySQL root user.<br />
<br />
Start the MySQL CLI management console as the MySQL root user:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>mysql -u root -p</code></div></div>(Enter your MySQL root password when prompted.)<br />
<br />
Create a new user that will become the administrator:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>CREATE USER 'pmaadmin'@'localhost' IDENTIFIED BY 'mypassword123';</code></div></div>(I'll use pmaadmin as the username. Remember to adjust it to your liking and also set your own password instead of mypassword123.)<br />
<br />
Grant all permissions to all databases and also special permission to the new user:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>GRANT ALL PRIVILEGES ON *.* TO 'pmaadmin'@'localhost' WITH GRANT OPTION;</code></div></div><br />
Reload all user privileges:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>FLUSH PRIVILEGES;</code></div></div><br />
Exit the MySQL CLI tool:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>exit</code></div></div>(Remember to adjust the username to yours!)<br />
<br />
You now have a MySQL user that basically has a lot of power over the database server. It is like the MySQL root user. You will use this use to login in phpMyAdmin when you need to create a new user/database or do other administrative tasks.<br />
<hr class="mycode_hr" />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">phpMyAdmin Installation</span><br />
<br />
Now we can finally perform the phpMyAdmin installation.<br />
<br />
Change your directory to the folder containing your website (where you want to install phpMyAdmin):<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>cd /var/www/hiddenrefuge.eu.org</code></div></div>(Adjust the path to your own website on your own web hosting stack.)<br />
<br />
Download the latest version that is compatible with your web hosting stack. You can get the download links on <a href="https://www.phpmyadmin.net/downloads/" target="_blank" rel="noopener" class="mycode_url">this page</a>. Take the download link for the archive file ending with tar.gz.<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>wget https://files.phpmyadmin.net/phpMyAdmin/5.1.0/phpMyAdmin-5.1.0-all-languages.tar.gz</code></div></div>(Here you would use the link for the correct and latest version.)<br />
<br />
Extract the downloaded phpMyAdmin archive:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>tar -zxvf phpMyAdmin-5.1.0-all-languages.tar.gz</code></div></div>(Here you should use the file name of the version you downloaded.)<br />
<br />
You will now have a folder called like the archive name (without .tar.gz). Rename this folder to a easier to remember name:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>mv phpMyAdmin-5.1.0-all-languages sqlmgmt</code></div></div>(Here you should use the folder name of your version and your new wish name for the folder. Make it something not so obvious to prevent bots trying to look for phpMyAdmin - so AVOID calling the folder pma or phpmyadmin/phpMyAdmin!)<br />
<br />
You can now remove the downloaded tar.gz archive:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>rm -rf phpMyAdmin-5.1.0-all-languages.tar.gz</code></div></div>(Here you should use the file name of the version you downloaded.)<br />
<br />
Set correct ownership/permissions for the phpMyAdmin folder:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>chown -R nginx:nginx /var/www/hiddenrefuge.eu.org/sqlmgmt</code></div></div>(Here you should adjust the user and group to the one you use for the web server and PHP processes. Additionally remember to adjust the path to your phpMyAdmin folder.)<br />
<br />
To verify that you can access phpMyAdmin and it works (not displaying any kind of errors or something) should open the phpMyAdmin instance on your website in a web browser. <br />
<br />
You should see this page:<br />
<img src="https://i.imgur.com/pBApgyV.png" loading="lazy"  alt="[Image: pBApgyV.png]" class="mycode_img" /><br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">phpMyAdmin Configuration</span><br />
<br />
After the phpMyAdmin installation it is necessary to configure a few things or else you will not be able to use phpMyAdmin properly.<br />
<br />
Change directory in to your phpMyAdmin folder:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>cd /var/www/hiddenrefuge.eu.org/sqlmgmt</code></div></div>(Adjust the path to your phpMyAdmin installation.)<br />
<br />
Rename the sample configuration file to the main configuration file name:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>mv config.sample.inc.php config.inc.php</code></div></div><br />
Open the configuration file with nano:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>nano /var/www/hiddenrefuge.eu.org/sqlmgmt/config.inc.php</code></div></div>(Adjust the path to your phpMyAdmin installation.)<br />
<br />
Go to <a href="https://phpsolved.com/phpmyadmin-blowfish-secret-generator/" target="_blank" rel="noopener" class="mycode_url">this page</a> and generate yourself a new blowfish secret.<br />
<br />
Inside your configuration file replace <br />
<blockquote class="mycode_quote"><cite>Quote:</cite>&#36;cfg['blowfish_secret'] = ''; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */</blockquote>
<br />
With the new configuration line with your blowfish secret from the page, e.g.:<br />
<blockquote class="mycode_quote"><cite>Quote:</cite>&#36;cfg['blowfish_secret'] = 'MN66UsUnxf,uVql{Dt1uzCE[cnE5M6Rb';</blockquote>
(Don't use the blowfish secret from the example above! Get your own from the page that I linked to above.)<br />
<br />
Save the file with CTRL + O and ENTER. Exit the nano text editor with CTRL + X.<br />
<br />
This is about it in terms of the configuration of phpMyAdmin.<br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">Getting started with phpMyAdmin</span><br />
<br />
Now navigate to your phpMyAdmin installation on your website via web browser and try to login with the user that you created during the phpMyAdmin MySQL Administration User setup step.<br />
<br />
<img src="https://i.imgur.com/m39NtjU.png" loading="lazy"  alt="[Image: m39NtjU.png]" class="mycode_img" /><br />
<br />
If everything went well you should be in and it should look like this:<br />
<img src="https://i.imgur.com/kGhTppC.png" loading="lazy"  alt="[Image: kGhTppC.png]" class="mycode_img" /><br />
<br />
Do you see the warning message at the bottom of the screenshot? You need to do a little something to fix this issue.<br />
<br />
Go to <a href="http://hiddenrefuge.eu.org/sqlmgmt/index.php?route=/check-relations" target="_blank" rel="noopener" class="mycode_url">http://hiddenrefuge.eu.org/sqlmgmt/index...-relations</a> in your web browser. Remember to adjust the part before "index.php?route=/check-relations" to the web address of your phpMyAdmin installation.<br />
<br />
You will see the error below:<br />
<img src="https://i.imgur.com/MGIommv.png8" loading="lazy"  alt="[Image: MGIommv.png8]" class="mycode_img" /><br />
<br />
To fix this click on the blue "Create" link. This will generate a databse called phpmyadmin where phpMyAdmin will store its own configuration changes and settings.<br />
<br />
After that you can go back to the main page of phpMyAdmin and the warning message should be gone.<br />
<br />
<br />
That's all folks! You now have installed phpMyAdmin. To update it you would simply download the latest version and overwrite all files. The configuration files config.inc.php will remain unchanged. After overwritting the files you also have to set the ownership/permission again. You would basically simply repeat the phpMyAdmin Installation part with a newer version.<br />
</div>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[How to create Docker's container and enter its shell [Basic container for any-usage]]]></title>
			<link>https://post4vps.com/Thread-How-to-create-Docker-s-container-and-enter-its-shell-Basic-container-for-any-usage</link>
			<pubDate>Sun, 23 May 2021 11:58:56 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://post4vps.com/member.php?action=profile&uid=1446">LightDestory</a>]]></dc:creator>
			<guid isPermaLink="false">https://post4vps.com/Thread-How-to-create-Docker-s-container-and-enter-its-shell-Basic-container-for-any-usage</guid>
			<description><![CDATA[I didn't plan to post this guide because it wasn't intend to. But since <dvz_me_placeholder id="0" /> splitted the post... here we go <img src="https://post4vps.com/images/emoji/smile.png" alt="Smile" title="Smile" class="smilie smilie_1" /><br />
<br />
<br />
So, on <dvz_me_placeholder id="1" /> topic about setting up a WP from scratch I wrote a simple command-list to create a container... Why? I think that nowadays it is important to isolate any application because there could be any CVE that can hurt our precious VPS!<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u">BEWARE: CONTAINERS ARE NOT A SECURITY TOOLS. YOU MUST SECURE YOURSELF CONFIGURING A STRONG PROTECTION AGAIN ATTACKS</span></span><br />
<br />
<span style="font-style: italic;" class="mycode_i">So, why create a container?</span><br />
Let's imagine that we were running a Laravel WebApplication and someone used the latest known CVE to inject on our machine a cryptominer know as kdevtmpfsi . The cryptominer is a cron-job script that check if the miner process is running, if not it will download the binaries and run it. If you kill it... it will just respawn.<br />
<br />
To get rid of the cryptominer you must FIND the faulty cronjob and delete it. Then you can hope that by deleting the binaries it will not respawn. I got a personal experience with such miner and it was a pain. My friend application was running on barehardware and the miner got injected into the main system...<br />
<br />
<span style="font-style: italic;" class="mycode_i">If the application were running inside a container the solution could be very fast: just destroy and recreate the container! I mean, we were still vulnerable but the recovery process was much faster, as I have already said: containers aren't security tools!</span><br />
<br />
Now, for example we want to run WP from scratch but inside a container? How can do such a complex thinh? Don't worry... using a container is easy as using a normal terminal connection <img src="https://post4vps.com/images/emoji/smile.png" alt="Smile" title="Smile" class="smilie smilie_1" /><br />
<br />
A basic way to create a basic container ready for any usage is:<br />
<blockquote class="mycode_quote"><cite>Quote:</cite>docker run -it -d --name debian -p 9090:80 debian:latest</blockquote><ul class="mycode_list"><li>"docker run": creates a new container;<br />
</li>
<li>"-it": tags the container as a interactive one, you can access its shell;<br />
</li>
<li>"-d": tags the container as detachable, it will not block your terminal once started;<br />
</li>
<li>"--name debian": names the container for easy handling;<br />
</li>
<li>"-p 9090:80": it binds your host port to the port of the container, very useful if we want to host services that requires port... such as Web services!;<br />
</li>
<li>"debian:latest": points to the latest stable, Buster.<br />
</li>
</ul>
Once the containers is up you can access it in 2 ways:<ul class="mycode_list"><li>Attach using <br />
docker attach debian<br />
</li>
<li>Deattach using the combination: CTRL+P + CTRL+ Q<br />
</li>
</ul>
Or<ul class="mycode_list"><li>Attach using <br />
docker exec -it debian /usr/bin/bash<br />
</li>
<li>Deattach using the combination CTRL+C or the command exit<br />
</li>
</ul>
<br />
<br />
Now, inside the container shell you can just follow <dvz_me_placeholder id="1" /> tutorial 1:1 with commands, there is no differences!<br />
<br />
After everything is setup, you must create a reverse proxy that points to the container...<br />
Because <dvz_me_placeholder id="1" /> used NGINX I will provide below a simple reverse-proxy configuration for our example case:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>server {<br />
listen&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;80;<br />
server_name your_prefered_domain<br />
location /{<br />
proxy_pass 0.0.0.0:9090<br />
proxy_set_header Host&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#36;host;<br />
proxy_set_header X-Real-IP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#36;remote_addr;<br />
proxy_set_header X-Forwarded-For&nbsp;&nbsp; &#36;proxy_add_x_forwarded_for;<br />
proxy_set_header X-Forwarded-Proto &#36;scheme;<br />
proxy_set_header X-Forwarded-Host&nbsp;&nbsp;&#36;host;<br />
proxy_set_header X-Forwarded-Port&nbsp;&nbsp;&#36;server_port;<br />
}</code></div></div>This reverse proxy is very basic, for example it lack of HTTPS redirect... but that is not the goal of this tutorial <img src="https://post4vps.com/images/emoji/smile.png" alt="Smile" title="Smile" class="smilie smilie_1" /><br />
<br />
I know that this container is not optimal, there is no persistent but it gives you a bit a "security" and doesn't require much of docker knowledge.]]></description>
			<content:encoded><![CDATA[I didn't plan to post this guide because it wasn't intend to. But since <dvz_me_placeholder id="0" /> splitted the post... here we go <img src="https://post4vps.com/images/emoji/smile.png" alt="Smile" title="Smile" class="smilie smilie_1" /><br />
<br />
<br />
So, on <dvz_me_placeholder id="1" /> topic about setting up a WP from scratch I wrote a simple command-list to create a container... Why? I think that nowadays it is important to isolate any application because there could be any CVE that can hurt our precious VPS!<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u">BEWARE: CONTAINERS ARE NOT A SECURITY TOOLS. YOU MUST SECURE YOURSELF CONFIGURING A STRONG PROTECTION AGAIN ATTACKS</span></span><br />
<br />
<span style="font-style: italic;" class="mycode_i">So, why create a container?</span><br />
Let's imagine that we were running a Laravel WebApplication and someone used the latest known CVE to inject on our machine a cryptominer know as kdevtmpfsi . The cryptominer is a cron-job script that check if the miner process is running, if not it will download the binaries and run it. If you kill it... it will just respawn.<br />
<br />
To get rid of the cryptominer you must FIND the faulty cronjob and delete it. Then you can hope that by deleting the binaries it will not respawn. I got a personal experience with such miner and it was a pain. My friend application was running on barehardware and the miner got injected into the main system...<br />
<br />
<span style="font-style: italic;" class="mycode_i">If the application were running inside a container the solution could be very fast: just destroy and recreate the container! I mean, we were still vulnerable but the recovery process was much faster, as I have already said: containers aren't security tools!</span><br />
<br />
Now, for example we want to run WP from scratch but inside a container? How can do such a complex thinh? Don't worry... using a container is easy as using a normal terminal connection <img src="https://post4vps.com/images/emoji/smile.png" alt="Smile" title="Smile" class="smilie smilie_1" /><br />
<br />
A basic way to create a basic container ready for any usage is:<br />
<blockquote class="mycode_quote"><cite>Quote:</cite>docker run -it -d --name debian -p 9090:80 debian:latest</blockquote><ul class="mycode_list"><li>"docker run": creates a new container;<br />
</li>
<li>"-it": tags the container as a interactive one, you can access its shell;<br />
</li>
<li>"-d": tags the container as detachable, it will not block your terminal once started;<br />
</li>
<li>"--name debian": names the container for easy handling;<br />
</li>
<li>"-p 9090:80": it binds your host port to the port of the container, very useful if we want to host services that requires port... such as Web services!;<br />
</li>
<li>"debian:latest": points to the latest stable, Buster.<br />
</li>
</ul>
Once the containers is up you can access it in 2 ways:<ul class="mycode_list"><li>Attach using <br />
docker attach debian<br />
</li>
<li>Deattach using the combination: CTRL+P + CTRL+ Q<br />
</li>
</ul>
Or<ul class="mycode_list"><li>Attach using <br />
docker exec -it debian /usr/bin/bash<br />
</li>
<li>Deattach using the combination CTRL+C or the command exit<br />
</li>
</ul>
<br />
<br />
Now, inside the container shell you can just follow <dvz_me_placeholder id="1" /> tutorial 1:1 with commands, there is no differences!<br />
<br />
After everything is setup, you must create a reverse proxy that points to the container...<br />
Because <dvz_me_placeholder id="1" /> used NGINX I will provide below a simple reverse-proxy configuration for our example case:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>server {<br />
listen&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;80;<br />
server_name your_prefered_domain<br />
location /{<br />
proxy_pass 0.0.0.0:9090<br />
proxy_set_header Host&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#36;host;<br />
proxy_set_header X-Real-IP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &#36;remote_addr;<br />
proxy_set_header X-Forwarded-For&nbsp;&nbsp; &#36;proxy_add_x_forwarded_for;<br />
proxy_set_header X-Forwarded-Proto &#36;scheme;<br />
proxy_set_header X-Forwarded-Host&nbsp;&nbsp;&#36;host;<br />
proxy_set_header X-Forwarded-Port&nbsp;&nbsp;&#36;server_port;<br />
}</code></div></div>This reverse proxy is very basic, for example it lack of HTTPS redirect... but that is not the goal of this tutorial <img src="https://post4vps.com/images/emoji/smile.png" alt="Smile" title="Smile" class="smilie smilie_1" /><br />
<br />
I know that this container is not optimal, there is no persistent but it gives you a bit a "security" and doesn't require much of docker knowledge.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Host Your Own WP Blog (Debian 10, Nginx, PHP 8 & MariaDB)]]></title>
			<link>https://post4vps.com/Thread-Host-Your-Own-WP-Blog-Debian-10-Nginx-PHP-8-MariaDB</link>
			<pubDate>Wed, 19 May 2021 18:54:01 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://post4vps.com/member.php?action=profile&uid=26">Mashiro</a>]]></dc:creator>
			<guid isPermaLink="false">https://post4vps.com/Thread-Host-Your-Own-WP-Blog-Debian-10-Nginx-PHP-8-MariaDB</guid>
			<description><![CDATA[<div style="text-align: center;" class="mycode_align"><span style="font-size: x-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b"><span style="color: royalblue;" class="mycode_color">Host Your Own WordPress Blog</span></span></span><br />
<span style="font-size: small;" class="mycode_size">Using Debian 10, Nginx, PHP 8 &amp; MariaDB</span></div>
<br />
<br />
<div style="text-align: justify;" class="mycode_align">Hello Post4VPS Community &amp; Staff<br />
<br />
Welcome to my tutorial to teach you how to set up your own WordPress blog on a Debian 10 based server using only the command-line and its toolset. You will not need or use a hosting or VPS control panel. The command-line is your friend and key to your own success with Linux. So it is very important to collect command-line experience by doing projects such as those introduced to you in this tutorial. Another personal goal is to get you a bit away from using control panels to manage your server to reduce overhead and remove a big layer of possible security risks and other kinds of issues.<br />
<br />
We will cover all necessary steps of the setup, starting with the installation of the Nginx web server, setting up the firewall rules, necessary directory permissions, everything in between, and finally performing the WordPress installation. What we will not cover are the following subjects: DNS and mail server setups. I recommend using a 3rd party DNS infrastructure provider such as Cloudflare or similar providers. For mail servicing, I would also recommend using a free 3rd party service with SMTP options to send emails from within your WordPress blog (e.g. Sendinblue or similar services). Additionally this guide will not contain the setup process of a HTTPS vHost with TLS certificates. Later on a tutorial may follow as an addon for this guide that will cover this topic in combination with Let's Encrypt TLS certificates.<br />
<br />
For this tutorial, I'm using a small server with the following specifications:<ul class="mycode_list"><li>Intel Pentium N4200 4x 2.4 GHz<br />
</li>
<li>4 GB DDR4 2400 MHz RAM<br />
</li>
<li>64 GB eMMC Flash Storage<br />
</li>
<li>Debian "Buster" 10 64 Bit<br />
</li>
</ul>
<br />
In short: I will be using a home server that is actually an old repurposed Acer Swift One Ultrabook. I will be hosting the setup locally however with a proper domain name. Regardless of this fact, everything shown in this guide will still work on dedicated servers and VPSs with public IP addresses. You can look at my setup for this guide as a computer &amp; server testing laboratory. Made to produce educational content such as this tutorial.<br />
<br />
Let's get started!<br />
<hr class="mycode_hr" />
<br />
<br />
Before we really begin I'd like to mention some prerequisites and provide some information about upcoming procedures.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Clean OS</span><br />
- It is highly recommended to use a clean OS installation for this project. A already in use OS installation where you might have certain software installed that might be similar to what we want to set up or something else is running on can produce conflicts and thus cause negative side effects. So it's best to reinstall your OS to a fresh installation of Debian 10 before starting with this tutorial.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Up to date OS</span><br />
- Please make sure your OS installation is not only fresh but also up to date. This is also a highly recommended step that needs to be performed before going forward with the installation steps in this guide. Out-of-date software combined with what we want to do can cause unwanted and unnecessary issues.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Root access</span><br />
- It is highly recommended to be logged in as root on your server to perform all upcoming installation setups and commands. You will save yourself a lot of time this way. Alternatively, you can use a user with sudo access but <span style="font-weight: bold;" class="mycode_b">remember to apply the sudo keyword before all commands</span>.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">3rd party repos</span><br />
- For the best experience we want to use the latest available version of the software that we need to achieve our goal. Sadly, the default software repositories of Linux distributions like CentOS, Debian, or Ubuntu don't provide the latest version of the software we need in their default repositories. To get past this problem we will be adding 3rd party software repositories that will allow us to get the latest version of the software we need.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Going a nit off road</span><br />
- We're not going to stick with all software defaults of software packages. We will change configurations of the software we install and we will write our own configurations from scratch where and when necessary. <br />
<br />
Make sure you have all of that ready and are properly prepared.<br />
<hr class="mycode_hr" />
<br />
<br />
First, we will be adding 3rd party repositories for the latest Nginx Stable, PHP 8, and MariaDB versions.<br />
<br />
Run the commands below to create new source lists for the three application sets.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Nginx Stable (directly from nginx.org)</span><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>apt-get update<br />
apt-get install curl gnupg2 ca-certificates lsb-release -y<br />
echo "deb http://nginx.org/packages/debian `lsb_release -cs` nginx" | tee /etc/apt/sources.list.d/nginx.list<br />
echo -e "Package: *&#92;nPin: origin nginx.org&#92;nPin: release o=nginx&#92;nPin-Priority: 900&#92;n" | tee /etc/apt/preferences.d/99nginx<br />
curl -o /etc/apt/trusted.gpg.d/nginx_signing.asc https://nginx.org/keys/nginx_signing.key<br />
apt-get update</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">PHP 8 (from deb.sury.org)</span><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>apt-get install wget apt-transport-https software-properties-common dirmngr -y<br />
echo "deb https://packages.sury.org/php/ &#36;(lsb_release -sc) main" | tee /etc/apt/sources.list.d/sury-php.list<br />
wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add -<br />
apt-get update</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">MariaDB 10.5 (directly from MariaDB Foundation)</span><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>apt-key adv --fetch-keys 'https://mariadb.org/mariadb_release_signing_key.asc'<br />
add-apt-repository 'deb [arch=amd64] http://mirror.23media.de/mariadb/repo/10.5/debian buster main'<br />
apt-get update</code></div></div>(In my case I'm using a German mirror. You can generate a source list for MariaDB 10.5 with a different mirror <a href="https://downloads.mariadb.org/MariaDB/repositories/" target="_blank" rel="noopener" class="mycode_url">here</a>.)<br />
<br />
Finally, there are a few packages that can be updated and others that can be deleted (as they're no longer required). Run the command below to make sure everything is up to date:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>apt-get upgrade -y<br />
apt-get dist-upgrade -y<br />
apt-get --purge autoremove -y</code></div></div><br />
After adding these 3rd party repositories we can continue with the installation of all software packages that we need.<br />
<hr class="mycode_hr" />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Nginx Stable</span><br />
<br />
Let's start by installing, enabling, and starting the Nginx web server. Run the commands below:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>apt-get install nginx -y<br />
systemctl enable nginx<br />
systemctl start nginx</code></div></div><br />
<br />
<span style="font-weight: bold;" class="mycode_b">PHP 8.0 + Extensions</span><br />
<br />
Now it's time to install PHP 8.0 and the necessary extensions. One important being the PHP FPM extension. Which we will enable as a service and start after the installation. Execute the commands below on your server:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>apt-get install php8.0 php8.0-bcmath php8.0-mysql php8.0-tidy php8.0-dba php8.0-readline php8.0-bz2 php8.0-xdebug php8.0-xml php8.0-enchant php8.0-opcache php8.0-intl php8.0-soap php8.0-xsl php8.0-cli php8.0-fpm php8.0-zip php8.0-sqlite3 php8.0-common php8.0-gd php8.0-phpdbg php8.0-mbstring php8.0-sybase php8.0-curl php8.0-gmp php8.0-pspell -y <br />
systemctl enable php8.0-fpm<br />
systemctl start php8.0-fpm</code></div></div><br />
<br />
<span style="font-weight: bold;" class="mycode_b">MariaDB 10.5</span><br />
<br />
After PHP 8.0 has been installed we can install the MariaDB 10.5 MySQL database server. After that, we will enable and start it. Run the commands below in your terminal:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>apt-get install mariadb-server -y<br />
systemctl enable mariadb<br />
systemctl start mariadb</code></div></div><br />
Now we have everything necessary installed and can continue with the configuration of the applications, set up things like firewall rules and directory permissions.<br />
<hr class="mycode_hr" />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Firewall rules for the web server</span><br />
<br />
By default Debian 10 comes neither with firewalld nor with any other easier-to-use firewall or iptables frontend. Only the raw iptables firewall is available. However, to makes things much easier for the future we will install the iptables frontend ufw (uncomplicated firewall).<br />
<br />
To install ufw run the commands below:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>apt-get install ufw -y</code></div></div><br />
If you have IPv6 addresses available you may want to enable IPv6 support.<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>nano /etc/default/ufw</code></div></div><br />
Make sure you have the entry "IPV6=yes" inside the file and it is not commented.<br />
<br />
Now we have to configure the default policies. The best security practice is to block everything that we didn't explicitly allow. So our default policy for incoming connections will be set to "deny". However, we will allow all outgoing connections as it can be very hard and painful to filter outgoing connections properly. Outgoing connections can happen basically any port to any port (1 to 65535). It depends a lot on what kind of server or service the outgoing connection is connecting to. So for the outgoing connections, we will set the default policy to "allow".<br />
<br />
Run the commands below to set default policies:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>ufw default deny incoming<br />
ufw default allow outgoing</code></div></div><br />
Don't worry. You will not be disconnected! After running the commands above ufw is actually still inactive.<br />
<br />
Next, it is time to open the incoming ports that we need. We'll be simply starting with the SSH port (I use port 22 still as SSH is only accessible over LAN - remember to adjust your SSH port in the command below), port 80 for HTTP, and port 443 for HTTPS. Run the commands below:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>ufw allow 22<br />
ufw allow 80<br />
ufw allow 443</code></div></div><br />
Now we will enable ufw and from here on the rules will be active. If you set up the wrong port for SSH you will be locked out after running the command below! For this kind of case make sure you have some kind of emergency access. I highly recommend being careful when configuring the allowed incoming connections to avoid locking yourself out.<br />
<br />
Enable ufw:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>ufw enable</code></div></div><br />
If asked whether you wish to continue press the Y button and the ENTER button. Ufw is now enabled.<br />
<br />
Please read <a href="https://www.digitalocean.com/community/tutorials/ufw-essentials-common-firewall-rules-and-commands" target="_blank" rel="noopener" class="mycode_url">https://www.digitalocean.com/community/t...d-commands</a> for more information about ufw and the most necessary basics and commands.<br />
<br />
<br />
What you can do now to confirm that the firewall is working properly is to access the IP or domain of your server. You should see an Nginx page showing up like in the screenshot below. And obviously, if your SSH connection is still working the firewall rules for it are correct <img src="https://post4vps.com/images/emoji/twinkle.png" alt="Wink" title="Wink" class="smilie smilie_2" />.<br />
<br />
<img src="https://i.imgur.com/fFWcFHE.png" loading="lazy"  alt="[Image: fFWcFHE.png]" class="mycode_img" /><br />
<br />
By the way: during the whole tutorial I will be using hiddenrefuge.eu.org as my domain in all configurations, etc. Keep in mind to replace this domain with your own domain where you see it. This means especially the part where we will configure our Nginx vHost, the WordPress blog, etc.<br />
<hr class="mycode_hr" />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Nginx default vHost configuration</span><br />
<br />
We will not touch the default nginx.conf file in /etc/nginx/ as it is fine as it is by default. The way the file is configured by default in the Nginx.org packages is enough to run pretty much any website for the beginning.<br />
<br />
What we will modify is the default vHost "default.conf" to disconnect all connections that attempt to connect to the IP address or domain name that has no vHost on the server.<br />
<br />
Rename the original default.conf file to a backup:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.bak</code></div></div><br />
Open a new and empty default.conf:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>nano /etc/nginx/conf.d/default.conf</code></div></div><br />
Paste the following into the file:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>server {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;listen 80 default_server;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 444;<br />
}</code></div></div><br />
Use the CTRL + O button to save the changes and after that use CTRL + X to exit nano.<br />
<br />
Restart Nginx to apply the changes:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>systemctl restart nginx</code></div></div><br />
If you now access the IP address or domain of your server you will see a browser error message like this one:<br />
<img src="https://user-media-prod-cdn.itsre-sumo.mozilla.net/uploads/images/2015-02-09-12-13-38-59e3c7.png" loading="lazy"  alt="[Image: 2015-02-09-12-13-38-59e3c7.png]" class="mycode_img" /><br />
(In the case of Firefox, as it is the web browser I currently use.)<br />
<br />
If you see such a page or a similar in another browser you now know that the default.conf vHost is working as intended. All connections to the IP address directly or a domain that has no vHost on the webserver are canceled by the webserver to prevent host spoofing.<br />
<hr class="mycode_hr" />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Nginx vHost configuration for your own domain</span><br />
<br />
Now that we have configured the default vHost we can continue with setting up the real vHost for our own domain of the WordPress blog we want to host.<br />
<br />
Create an empty vHost file for your site:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>nano /etc/nginx/conf.d/hiddenrefuge.eu.org.conf</code></div></div>(Remember to adjust the domain in the vHost file name.)<br />
<br />
Paste the following code into the file:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>server {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;listen 80;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;server_name hiddenrefuge.eu.org www.hiddenrefuge.eu.org;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root /var/www/hiddenrefuge.eu.org;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;index index.html index.htm index.php home.html home.htm home.php;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;location / {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try_files &#36;uri &#36;uri/ /index.php?&#36;args;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;location ~ &#92;.php&#36; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fastcgi_pass unix:/run/php/php8.0-fpm.sock;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;include&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fastcgi_params;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fastcgi_param&nbsp;&nbsp; SCRIPT_FILENAME&nbsp;&nbsp;&nbsp;&nbsp;&#36;document_root&#36;fastcgi_script_name;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fastcgi_param&nbsp;&nbsp; SCRIPT_NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#36;fastcgi_script_name;<br />
&nbsp;&nbsp;}<br />
}</code></div></div>(Again remember to adjust the domain name to the one you use where needed.)<br />
<br />
Use the CTRL + O button to save the changes and after that use CTRL + X to exit nano.<br />
<br />
In this guide, I will use /var/www/hiddenrefuge.eu.org as the directory for my WordPress blog. So now it is necessary to create that folder and give it the correct permissions.<br />
<br />
Create the folder tree:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>mkdir -p /var/www/hiddenrefuge.eu.org</code></div></div>(Adjust your domain!)<br />
<br />
Set the correct ownership of the folder:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>chown -R nginx:nginx /var/www</code></div></div>(The Nginx web server is running as the user and group "nginx".)<br />
<br />
Restart Nginx to apply the new vHost configuration:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>systemctl restart nginx</code></div></div><br />
Now you have a vHost for your domain that is pointed to the IP address of your server. If you now open the domain you pointed to your server you should see a 403 Forbidden error. Why 403? Because we don't have an index file, yet. By default, Nginx disables the listing directories and so it returns a 403 Forbidden error. However, this means that the vHost is working. If it wouldn't be working you still would get the error from the default vHost configuration or another error/issue.<br />
<br />
<img src="https://i.imgur.com/O6G3R7V.png" loading="lazy"  alt="[Image: O6G3R7V.png]" class="mycode_img" /><br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">Fixing PHP to prevent malicious requests to PHP via PHP-FPM</span><br />
<br />
<blockquote class="mycode_quote"><cite>Quote:</cite>When pairing NGINX with PHP-FPM, it’s possible to return to NGINX a .php URI that does not actually exist within the site’s directory structure. The PHP processor will process the URI, and execute the .php file because its job is to process anything handed to it by NGINX. This presents a security problem.<br />
<br />
It’s important to limit what NGINX passes to PHP-FPM so malicious scripts can’t be injected into return streams to the server. Instead, the request is stopped, possibly then resulting in a 404.</blockquote>
<br />
Run the following command:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>sed -i 's/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/g' /etc/php/8.0/fpm/php.ini</code></div></div><br />
Restart PHP-FPM:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>systemctl restart php8.0-fpm</code></div></div><br />
That security risk should be fixed now.<br />
<hr class="mycode_hr" />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Fix PHP-FPM pool listen user and group</span><br />
<br />
The Nginx web server is running as the user Nginx and the group Nginx. Meanwhile, the default PHP-FPM pool www is using the user and group www-data. This is a conflict that will prevent from PHP 8.0 working with Nginx. This needs to be fixed.<br />
<br />
Open the default PHP-FPM pool www config file to edit it:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>nano /etc/php/8.0/fpm/pool.d/www.conf</code></div></div><br />
Find the following lines:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>user = www-data<br />
group = www-data</code></div></div><div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>listen.owner = www-data<br />
listen.group = www-data</code></div></div><br />
Replace them with:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>user = nginx<br />
group = nginx</code></div></div><div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>listen.owner = nginx<br />
listen.group = nginx</code></div></div><br />
Use the CTRL + O button to save the changes and after that use CTRL + X to exit nano.<br />
<br />
Restart PHP-FPM to apply the changes:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>systemctl restart php8.0-fpm</code></div></div><br />
Now the PHP-FPM process will be running under the same user as Nginx and Nginx can properly access the listen socket of PHP-FPM to process PHP files from the webserver to PHP and vice-versa.<br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">Verification of PHP 8.0 working with Nginx</span><br />
<br />
The next step before going forward with MariaDB is to confirm that PHP 8.0 is actually working properly with Nginx.<br />
<br />
Create an empty info.php file in the directory of your website:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>nano /var/www/hiddenrefuge.eu.org/info.php</code></div></div><br />
Paste the following PHP code into the file:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&lt;?php<br />
phpinfo();<br />
?&gt;</code></div></div><br />
Use the CTRL + O button to save the changes and after that use CTRL + X to exit nano.<br />
<br />
Open the file in your browser and you should see the PHP 8.0 info page like in the screenshot below.<br />
<br />
<img src="https://i.imgur.com/8r7nINK.png" loading="lazy"  alt="[Image: 8r7nINK.png]" class="mycode_img" /><br />
<br />
If you see this page and not an error page you now know that PHP 8.0 is working properly together with the Nginx webserver.<br />
<br />
You can remove the info.php file as it is no longer needed.<br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">Setting up MariaDB</span><br />
<br />
How far are we? Great news! We have so far installed and configured the Nginx web server successfully. We've fixed up PHP 8.0 and made it work together with Nginx (with a small and easy verification).<br />
<br />
Next goal: MariaDB 10.5 MySQL database server.<br />
<br />
The first step is to perform a secure configuration of the MariaDB MySQL database server by setting a root password, etc.<br />
<br />
Run the command below to start the secure configuration:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>mysql_secure_installation</code></div></div><br />
By default, there is no root password set. So simply press the ENTER key to continue.<br />
<br />
Next, you will be asked if you want to switch to unix_socket authentication. Press the N key and the ENTER key. While this might be more secure not every application you might want to host will support Unix socket authentication.<br />
<br />
Now you will be asked to change the root password. Press the Y key and the ENTER key. Type in the new password twice.<br />
<br />
After that, press the Y key and the ENTER key when asked to disable anonymous user access.<br />
<br />
Next, you will be asked to disable root login. Press the Y key and the ENTER key. This will allow root login only via localhost in the CLI.<br />
<br />
After that, you will be asked if you wish to remove the test database. Press the Y key and the ENTER key.<br />
<br />
Finally, when asked to reload the privileges tables press the Y key and the ENTER key.<br />
<br />
The secure setup of MariaDB is finished after this set of steps.<br />
<br />
Here is how the whole output of the configuration screen should look like:<br />
<blockquote class="mycode_quote"><cite>Quote:</cite>root@hiddenrefuge:~# mysql_secure_installation<br />
<br />
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB<br />
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!<br />
<br />
To log into MariaDB to secure it, we'll need the current<br />
password for the root user. If you've just installed MariaDB, and<br />
haven't set the root password yet, you should just press enter here.<br />
<br />
Enter current password for root (enter for none):<br />
OK, successfully used password, moving on...<br />
<br />
Setting the root password or using the unix_socket ensures that nobody<br />
can log into the MariaDB root user without the proper authorization.<br />
<br />
You already have your root account protected, so you can safely answer 'n'.<br />
<br />
Switch to unix_socket authentication [Y/n] n<br />
 ... skipping.<br />
<br />
You already have your root account protected, so you can safely answer 'n'.<br />
<br />
Change the root password? [Y/n] Y<br />
New password:<br />
Re-enter new password:<br />
Password updated successfully!<br />
Reloading privilege tables..<br />
 ... Success!<br />
<br />
<br />
By default, a MariaDB installation has an anonymous user, allowing anyone<br />
to log into MariaDB without having to have a user account created for<br />
them.  This is intended only for testing, and to make the installation<br />
go a bit smoother.  You should remove them before moving into a<br />
production environment.<br />
<br />
Remove anonymous users? [Y/n] Y<br />
 ... Success!<br />
<br />
Normally, root should only be allowed to connect from 'localhost'.  This<br />
ensures that someone cannot guess the root password from the network.<br />
<br />
Disallow root login remotely? [Y/n] Y<br />
 ... Success!<br />
<br />
By default, MariaDB comes with a database named 'test' that anyone can<br />
access.  This is also intended only for testing and should be removed<br />
before moving into a production environment.<br />
<br />
Remove test database and access to it? [Y/n] Y<br />
 - Dropping test database...<br />
 ... Success!<br />
 - Removing privileges on test database...<br />
 ... Success!<br />
<br />
Reloading the privilege tables will ensure that all changes made so far<br />
will take effect immediately.<br />
<br />
Reload privilege tables now? [Y/n] Y<br />
 ... Success!<br />
<br />
Cleaning up...<br />
<br />
All done!  If you've completed all of the above steps, your MariaDB<br />
installation should now be secure.<br />
<br />
Thanks for using MariaDB!</blockquote>
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">Creating a MySQL user and database for the WordPress blog</span><br />
<br />
Time to create a new MySQL user and database for the WordPress blog that we will host. We will not use the MySQL root account and we cannot. It is bad security practice to use the MySQL root account for web applications or other database use cases. In the new MySQL / MariaDB version it is impossible to use root any other way than via the localhost CLI MySQL tool.<br />
<br />
Start the CLI MySQL tool:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>mysql -u root -p</code></div></div><br />
Type in the password you have set before during the MariaDB secure setup.<br />
<br />
You will be in the MariaDB CLI interace that looks like this:<br />
<img src="https://i.imgur.com/Vo3S9Oc.png" loading="lazy"  alt="[Image: Vo3S9Oc.png]" class="mycode_img" /><br />
<br />
Create a new database for the Wordpress blog:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>CREATE DATABASE hiddenblog;</code></div></div>(I will be using the database name hiddenblog. Remember to adjust yours!)<br />
<br />
Now, create a new user:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>CREATE USER 'hiddenuser'@'localhost' IDENTIFIED BY 'mypassword123';</code></div></div>(I will be using the username hiddenuser. Remember to adjust yours! Also don't forget to set the password.)<br />
<br />
After that, it is time to give the user full permission for the database:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>GRANT ALL ON hiddenblog.* TO 'hiddenuser'@'localhost';</code></div></div><br />
Finally, reload the privileges:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>FLUSH PRIVILEGES;</code></div></div><br />
Exit the MySQL CLI tool.<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>exit</code></div></div><br />
So now we have an empty database and a user assigned to it that we can use in the WordPress installation.<br />
<hr class="mycode_hr" />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">WordPress blog installation</span><br />
<br />
Finally! We can start with the installation of the WordPress blog <img src="https://post4vps.com/images/emoji/smile.png" alt="Smile" title="Smile" class="smilie smilie_1" /> .<br />
<br />
Change into the directory of your site:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>cd /var/www/hiddenrefuge.eu.org/</code></div></div><br />
Download the latest WordPress version:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>wget https://wordpress.org/latest.tar.gz</code></div></div><br />
Extract the downloaded archive:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>tar -xvf latest.tar.gz</code></div></div><br />
Move the WordPress files into your main directory:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>mv /var/www/hiddenrefuge.eu.org/wordpress/* /var/www/hiddenrefuge.eu.org</code></div></div><br />
Remove the downloaded archive and the empty wordpress folder:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>rm -rf /var/www/hiddenrefuge.eu.org/wordpress<br />
rm -rf /var/www/hiddenrefuge.eu.org/latest.tar.gz</code></div></div><br />
Set ownership for the files and folders correctly:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>chown -R nginx:nginx /var/www/</code></div></div><br />
Now, open your domain in the web browser and you should see the WordPress installer.<br />
<br />
At the first screen select the language you want to use. In my case English. After that press on the blue "Continue" button.<br />
<br />
After that, you will see a info screen showing what is coming up next in terms of configuration. Here you will need the database name, username and password that we created before. First click on the "Let's go!" button.<br />
<br />
On the next screen type in the database name, username and password. You can keep the database host and table prefix as is. After you have filled out the necessary fields click on the "Submit" button.<br />
<br />
Now, you will see a screen saying that everything looks sparky (good) and you can click on the "Run the installation" button to perform the installation.<br />
<br />
Shortly after, you will be at the first configuration screen where you can set the title of your blog, a username and password for the main account and e-mail. Fill in everything as you wish. At the end press the "Install Wordpress" button.<br />
<br />
A few seconds later you will be the last screen of the installation. It should say Success!. From here on your blog is installed. You can log into he Admin CP and continue the configuration and add content.<br />
<br />
<img src="https://i.imgur.com/5126of4.png" loading="lazy"  alt="[Image: 5126of4.png]" class="mycode_img" /><br />
<br />
<img src="https://i.imgur.com/bo4iR4N.png" loading="lazy"  alt="[Image: bo4iR4N.png]" class="mycode_img" /><br />
<br />
FYI: WordPress permalinks are already working as the vHost that we created for our site contains the necessary pieces of code to make them work. <br />
<br />
That's it. You now have a Nginx web server running with PHP 8.0 and the MariaDB MySQL database server. All of that is hosting your very own WordPress blog. You've not used a single control panel during the whole process.<br />
<br />
This might seem like a lot of work? 75% of the content from this thread can be compiled into a single bash shell script that will perform a lot of the steps automatically without any user input. After that you would only have to setup your own vHost, create a database with a user and install your WordPress blog. Again using no control panel.<br />
</div>
<br />
<br />
<div style="text-align: left;" class="mycode_align"><span style="font-size: x-small;" class="mycode_size"><span style="font-style: italic;" class="mycode_i">Revision: 2021-05-19</span></span></div>]]></description>
			<content:encoded><![CDATA[<div style="text-align: center;" class="mycode_align"><span style="font-size: x-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b"><span style="color: royalblue;" class="mycode_color">Host Your Own WordPress Blog</span></span></span><br />
<span style="font-size: small;" class="mycode_size">Using Debian 10, Nginx, PHP 8 &amp; MariaDB</span></div>
<br />
<br />
<div style="text-align: justify;" class="mycode_align">Hello Post4VPS Community &amp; Staff<br />
<br />
Welcome to my tutorial to teach you how to set up your own WordPress blog on a Debian 10 based server using only the command-line and its toolset. You will not need or use a hosting or VPS control panel. The command-line is your friend and key to your own success with Linux. So it is very important to collect command-line experience by doing projects such as those introduced to you in this tutorial. Another personal goal is to get you a bit away from using control panels to manage your server to reduce overhead and remove a big layer of possible security risks and other kinds of issues.<br />
<br />
We will cover all necessary steps of the setup, starting with the installation of the Nginx web server, setting up the firewall rules, necessary directory permissions, everything in between, and finally performing the WordPress installation. What we will not cover are the following subjects: DNS and mail server setups. I recommend using a 3rd party DNS infrastructure provider such as Cloudflare or similar providers. For mail servicing, I would also recommend using a free 3rd party service with SMTP options to send emails from within your WordPress blog (e.g. Sendinblue or similar services). Additionally this guide will not contain the setup process of a HTTPS vHost with TLS certificates. Later on a tutorial may follow as an addon for this guide that will cover this topic in combination with Let's Encrypt TLS certificates.<br />
<br />
For this tutorial, I'm using a small server with the following specifications:<ul class="mycode_list"><li>Intel Pentium N4200 4x 2.4 GHz<br />
</li>
<li>4 GB DDR4 2400 MHz RAM<br />
</li>
<li>64 GB eMMC Flash Storage<br />
</li>
<li>Debian "Buster" 10 64 Bit<br />
</li>
</ul>
<br />
In short: I will be using a home server that is actually an old repurposed Acer Swift One Ultrabook. I will be hosting the setup locally however with a proper domain name. Regardless of this fact, everything shown in this guide will still work on dedicated servers and VPSs with public IP addresses. You can look at my setup for this guide as a computer &amp; server testing laboratory. Made to produce educational content such as this tutorial.<br />
<br />
Let's get started!<br />
<hr class="mycode_hr" />
<br />
<br />
Before we really begin I'd like to mention some prerequisites and provide some information about upcoming procedures.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Clean OS</span><br />
- It is highly recommended to use a clean OS installation for this project. A already in use OS installation where you might have certain software installed that might be similar to what we want to set up or something else is running on can produce conflicts and thus cause negative side effects. So it's best to reinstall your OS to a fresh installation of Debian 10 before starting with this tutorial.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Up to date OS</span><br />
- Please make sure your OS installation is not only fresh but also up to date. This is also a highly recommended step that needs to be performed before going forward with the installation steps in this guide. Out-of-date software combined with what we want to do can cause unwanted and unnecessary issues.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Root access</span><br />
- It is highly recommended to be logged in as root on your server to perform all upcoming installation setups and commands. You will save yourself a lot of time this way. Alternatively, you can use a user with sudo access but <span style="font-weight: bold;" class="mycode_b">remember to apply the sudo keyword before all commands</span>.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">3rd party repos</span><br />
- For the best experience we want to use the latest available version of the software that we need to achieve our goal. Sadly, the default software repositories of Linux distributions like CentOS, Debian, or Ubuntu don't provide the latest version of the software we need in their default repositories. To get past this problem we will be adding 3rd party software repositories that will allow us to get the latest version of the software we need.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Going a nit off road</span><br />
- We're not going to stick with all software defaults of software packages. We will change configurations of the software we install and we will write our own configurations from scratch where and when necessary. <br />
<br />
Make sure you have all of that ready and are properly prepared.<br />
<hr class="mycode_hr" />
<br />
<br />
First, we will be adding 3rd party repositories for the latest Nginx Stable, PHP 8, and MariaDB versions.<br />
<br />
Run the commands below to create new source lists for the three application sets.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Nginx Stable (directly from nginx.org)</span><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>apt-get update<br />
apt-get install curl gnupg2 ca-certificates lsb-release -y<br />
echo "deb http://nginx.org/packages/debian `lsb_release -cs` nginx" | tee /etc/apt/sources.list.d/nginx.list<br />
echo -e "Package: *&#92;nPin: origin nginx.org&#92;nPin: release o=nginx&#92;nPin-Priority: 900&#92;n" | tee /etc/apt/preferences.d/99nginx<br />
curl -o /etc/apt/trusted.gpg.d/nginx_signing.asc https://nginx.org/keys/nginx_signing.key<br />
apt-get update</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">PHP 8 (from deb.sury.org)</span><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>apt-get install wget apt-transport-https software-properties-common dirmngr -y<br />
echo "deb https://packages.sury.org/php/ &#36;(lsb_release -sc) main" | tee /etc/apt/sources.list.d/sury-php.list<br />
wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add -<br />
apt-get update</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">MariaDB 10.5 (directly from MariaDB Foundation)</span><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>apt-key adv --fetch-keys 'https://mariadb.org/mariadb_release_signing_key.asc'<br />
add-apt-repository 'deb [arch=amd64] http://mirror.23media.de/mariadb/repo/10.5/debian buster main'<br />
apt-get update</code></div></div>(In my case I'm using a German mirror. You can generate a source list for MariaDB 10.5 with a different mirror <a href="https://downloads.mariadb.org/MariaDB/repositories/" target="_blank" rel="noopener" class="mycode_url">here</a>.)<br />
<br />
Finally, there are a few packages that can be updated and others that can be deleted (as they're no longer required). Run the command below to make sure everything is up to date:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>apt-get upgrade -y<br />
apt-get dist-upgrade -y<br />
apt-get --purge autoremove -y</code></div></div><br />
After adding these 3rd party repositories we can continue with the installation of all software packages that we need.<br />
<hr class="mycode_hr" />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Nginx Stable</span><br />
<br />
Let's start by installing, enabling, and starting the Nginx web server. Run the commands below:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>apt-get install nginx -y<br />
systemctl enable nginx<br />
systemctl start nginx</code></div></div><br />
<br />
<span style="font-weight: bold;" class="mycode_b">PHP 8.0 + Extensions</span><br />
<br />
Now it's time to install PHP 8.0 and the necessary extensions. One important being the PHP FPM extension. Which we will enable as a service and start after the installation. Execute the commands below on your server:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>apt-get install php8.0 php8.0-bcmath php8.0-mysql php8.0-tidy php8.0-dba php8.0-readline php8.0-bz2 php8.0-xdebug php8.0-xml php8.0-enchant php8.0-opcache php8.0-intl php8.0-soap php8.0-xsl php8.0-cli php8.0-fpm php8.0-zip php8.0-sqlite3 php8.0-common php8.0-gd php8.0-phpdbg php8.0-mbstring php8.0-sybase php8.0-curl php8.0-gmp php8.0-pspell -y <br />
systemctl enable php8.0-fpm<br />
systemctl start php8.0-fpm</code></div></div><br />
<br />
<span style="font-weight: bold;" class="mycode_b">MariaDB 10.5</span><br />
<br />
After PHP 8.0 has been installed we can install the MariaDB 10.5 MySQL database server. After that, we will enable and start it. Run the commands below in your terminal:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>apt-get install mariadb-server -y<br />
systemctl enable mariadb<br />
systemctl start mariadb</code></div></div><br />
Now we have everything necessary installed and can continue with the configuration of the applications, set up things like firewall rules and directory permissions.<br />
<hr class="mycode_hr" />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Firewall rules for the web server</span><br />
<br />
By default Debian 10 comes neither with firewalld nor with any other easier-to-use firewall or iptables frontend. Only the raw iptables firewall is available. However, to makes things much easier for the future we will install the iptables frontend ufw (uncomplicated firewall).<br />
<br />
To install ufw run the commands below:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>apt-get install ufw -y</code></div></div><br />
If you have IPv6 addresses available you may want to enable IPv6 support.<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>nano /etc/default/ufw</code></div></div><br />
Make sure you have the entry "IPV6=yes" inside the file and it is not commented.<br />
<br />
Now we have to configure the default policies. The best security practice is to block everything that we didn't explicitly allow. So our default policy for incoming connections will be set to "deny". However, we will allow all outgoing connections as it can be very hard and painful to filter outgoing connections properly. Outgoing connections can happen basically any port to any port (1 to 65535). It depends a lot on what kind of server or service the outgoing connection is connecting to. So for the outgoing connections, we will set the default policy to "allow".<br />
<br />
Run the commands below to set default policies:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>ufw default deny incoming<br />
ufw default allow outgoing</code></div></div><br />
Don't worry. You will not be disconnected! After running the commands above ufw is actually still inactive.<br />
<br />
Next, it is time to open the incoming ports that we need. We'll be simply starting with the SSH port (I use port 22 still as SSH is only accessible over LAN - remember to adjust your SSH port in the command below), port 80 for HTTP, and port 443 for HTTPS. Run the commands below:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>ufw allow 22<br />
ufw allow 80<br />
ufw allow 443</code></div></div><br />
Now we will enable ufw and from here on the rules will be active. If you set up the wrong port for SSH you will be locked out after running the command below! For this kind of case make sure you have some kind of emergency access. I highly recommend being careful when configuring the allowed incoming connections to avoid locking yourself out.<br />
<br />
Enable ufw:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>ufw enable</code></div></div><br />
If asked whether you wish to continue press the Y button and the ENTER button. Ufw is now enabled.<br />
<br />
Please read <a href="https://www.digitalocean.com/community/tutorials/ufw-essentials-common-firewall-rules-and-commands" target="_blank" rel="noopener" class="mycode_url">https://www.digitalocean.com/community/t...d-commands</a> for more information about ufw and the most necessary basics and commands.<br />
<br />
<br />
What you can do now to confirm that the firewall is working properly is to access the IP or domain of your server. You should see an Nginx page showing up like in the screenshot below. And obviously, if your SSH connection is still working the firewall rules for it are correct <img src="https://post4vps.com/images/emoji/twinkle.png" alt="Wink" title="Wink" class="smilie smilie_2" />.<br />
<br />
<img src="https://i.imgur.com/fFWcFHE.png" loading="lazy"  alt="[Image: fFWcFHE.png]" class="mycode_img" /><br />
<br />
By the way: during the whole tutorial I will be using hiddenrefuge.eu.org as my domain in all configurations, etc. Keep in mind to replace this domain with your own domain where you see it. This means especially the part where we will configure our Nginx vHost, the WordPress blog, etc.<br />
<hr class="mycode_hr" />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Nginx default vHost configuration</span><br />
<br />
We will not touch the default nginx.conf file in /etc/nginx/ as it is fine as it is by default. The way the file is configured by default in the Nginx.org packages is enough to run pretty much any website for the beginning.<br />
<br />
What we will modify is the default vHost "default.conf" to disconnect all connections that attempt to connect to the IP address or domain name that has no vHost on the server.<br />
<br />
Rename the original default.conf file to a backup:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.bak</code></div></div><br />
Open a new and empty default.conf:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>nano /etc/nginx/conf.d/default.conf</code></div></div><br />
Paste the following into the file:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>server {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;listen 80 default_server;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return 444;<br />
}</code></div></div><br />
Use the CTRL + O button to save the changes and after that use CTRL + X to exit nano.<br />
<br />
Restart Nginx to apply the changes:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>systemctl restart nginx</code></div></div><br />
If you now access the IP address or domain of your server you will see a browser error message like this one:<br />
<img src="https://user-media-prod-cdn.itsre-sumo.mozilla.net/uploads/images/2015-02-09-12-13-38-59e3c7.png" loading="lazy"  alt="[Image: 2015-02-09-12-13-38-59e3c7.png]" class="mycode_img" /><br />
(In the case of Firefox, as it is the web browser I currently use.)<br />
<br />
If you see such a page or a similar in another browser you now know that the default.conf vHost is working as intended. All connections to the IP address directly or a domain that has no vHost on the webserver are canceled by the webserver to prevent host spoofing.<br />
<hr class="mycode_hr" />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Nginx vHost configuration for your own domain</span><br />
<br />
Now that we have configured the default vHost we can continue with setting up the real vHost for our own domain of the WordPress blog we want to host.<br />
<br />
Create an empty vHost file for your site:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>nano /etc/nginx/conf.d/hiddenrefuge.eu.org.conf</code></div></div>(Remember to adjust the domain in the vHost file name.)<br />
<br />
Paste the following code into the file:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>server {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;listen 80;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;server_name hiddenrefuge.eu.org www.hiddenrefuge.eu.org;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;root /var/www/hiddenrefuge.eu.org;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;index index.html index.htm index.php home.html home.htm home.php;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;location / {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try_files &#36;uri &#36;uri/ /index.php?&#36;args;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;location ~ &#92;.php&#36; {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fastcgi_pass unix:/run/php/php8.0-fpm.sock;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;include&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fastcgi_params;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fastcgi_param&nbsp;&nbsp; SCRIPT_FILENAME&nbsp;&nbsp;&nbsp;&nbsp;&#36;document_root&#36;fastcgi_script_name;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fastcgi_param&nbsp;&nbsp; SCRIPT_NAME&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&#36;fastcgi_script_name;<br />
&nbsp;&nbsp;}<br />
}</code></div></div>(Again remember to adjust the domain name to the one you use where needed.)<br />
<br />
Use the CTRL + O button to save the changes and after that use CTRL + X to exit nano.<br />
<br />
In this guide, I will use /var/www/hiddenrefuge.eu.org as the directory for my WordPress blog. So now it is necessary to create that folder and give it the correct permissions.<br />
<br />
Create the folder tree:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>mkdir -p /var/www/hiddenrefuge.eu.org</code></div></div>(Adjust your domain!)<br />
<br />
Set the correct ownership of the folder:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>chown -R nginx:nginx /var/www</code></div></div>(The Nginx web server is running as the user and group "nginx".)<br />
<br />
Restart Nginx to apply the new vHost configuration:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>systemctl restart nginx</code></div></div><br />
Now you have a vHost for your domain that is pointed to the IP address of your server. If you now open the domain you pointed to your server you should see a 403 Forbidden error. Why 403? Because we don't have an index file, yet. By default, Nginx disables the listing directories and so it returns a 403 Forbidden error. However, this means that the vHost is working. If it wouldn't be working you still would get the error from the default vHost configuration or another error/issue.<br />
<br />
<img src="https://i.imgur.com/O6G3R7V.png" loading="lazy"  alt="[Image: O6G3R7V.png]" class="mycode_img" /><br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">Fixing PHP to prevent malicious requests to PHP via PHP-FPM</span><br />
<br />
<blockquote class="mycode_quote"><cite>Quote:</cite>When pairing NGINX with PHP-FPM, it’s possible to return to NGINX a .php URI that does not actually exist within the site’s directory structure. The PHP processor will process the URI, and execute the .php file because its job is to process anything handed to it by NGINX. This presents a security problem.<br />
<br />
It’s important to limit what NGINX passes to PHP-FPM so malicious scripts can’t be injected into return streams to the server. Instead, the request is stopped, possibly then resulting in a 404.</blockquote>
<br />
Run the following command:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>sed -i 's/;cgi.fix_pathinfo=1/cgi.fix_pathinfo=0/g' /etc/php/8.0/fpm/php.ini</code></div></div><br />
Restart PHP-FPM:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>systemctl restart php8.0-fpm</code></div></div><br />
That security risk should be fixed now.<br />
<hr class="mycode_hr" />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Fix PHP-FPM pool listen user and group</span><br />
<br />
The Nginx web server is running as the user Nginx and the group Nginx. Meanwhile, the default PHP-FPM pool www is using the user and group www-data. This is a conflict that will prevent from PHP 8.0 working with Nginx. This needs to be fixed.<br />
<br />
Open the default PHP-FPM pool www config file to edit it:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>nano /etc/php/8.0/fpm/pool.d/www.conf</code></div></div><br />
Find the following lines:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>user = www-data<br />
group = www-data</code></div></div><div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>listen.owner = www-data<br />
listen.group = www-data</code></div></div><br />
Replace them with:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>user = nginx<br />
group = nginx</code></div></div><div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>listen.owner = nginx<br />
listen.group = nginx</code></div></div><br />
Use the CTRL + O button to save the changes and after that use CTRL + X to exit nano.<br />
<br />
Restart PHP-FPM to apply the changes:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>systemctl restart php8.0-fpm</code></div></div><br />
Now the PHP-FPM process will be running under the same user as Nginx and Nginx can properly access the listen socket of PHP-FPM to process PHP files from the webserver to PHP and vice-versa.<br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">Verification of PHP 8.0 working with Nginx</span><br />
<br />
The next step before going forward with MariaDB is to confirm that PHP 8.0 is actually working properly with Nginx.<br />
<br />
Create an empty info.php file in the directory of your website:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>nano /var/www/hiddenrefuge.eu.org/info.php</code></div></div><br />
Paste the following PHP code into the file:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&lt;?php<br />
phpinfo();<br />
?&gt;</code></div></div><br />
Use the CTRL + O button to save the changes and after that use CTRL + X to exit nano.<br />
<br />
Open the file in your browser and you should see the PHP 8.0 info page like in the screenshot below.<br />
<br />
<img src="https://i.imgur.com/8r7nINK.png" loading="lazy"  alt="[Image: 8r7nINK.png]" class="mycode_img" /><br />
<br />
If you see this page and not an error page you now know that PHP 8.0 is working properly together with the Nginx webserver.<br />
<br />
You can remove the info.php file as it is no longer needed.<br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">Setting up MariaDB</span><br />
<br />
How far are we? Great news! We have so far installed and configured the Nginx web server successfully. We've fixed up PHP 8.0 and made it work together with Nginx (with a small and easy verification).<br />
<br />
Next goal: MariaDB 10.5 MySQL database server.<br />
<br />
The first step is to perform a secure configuration of the MariaDB MySQL database server by setting a root password, etc.<br />
<br />
Run the command below to start the secure configuration:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>mysql_secure_installation</code></div></div><br />
By default, there is no root password set. So simply press the ENTER key to continue.<br />
<br />
Next, you will be asked if you want to switch to unix_socket authentication. Press the N key and the ENTER key. While this might be more secure not every application you might want to host will support Unix socket authentication.<br />
<br />
Now you will be asked to change the root password. Press the Y key and the ENTER key. Type in the new password twice.<br />
<br />
After that, press the Y key and the ENTER key when asked to disable anonymous user access.<br />
<br />
Next, you will be asked to disable root login. Press the Y key and the ENTER key. This will allow root login only via localhost in the CLI.<br />
<br />
After that, you will be asked if you wish to remove the test database. Press the Y key and the ENTER key.<br />
<br />
Finally, when asked to reload the privileges tables press the Y key and the ENTER key.<br />
<br />
The secure setup of MariaDB is finished after this set of steps.<br />
<br />
Here is how the whole output of the configuration screen should look like:<br />
<blockquote class="mycode_quote"><cite>Quote:</cite>root@hiddenrefuge:~# mysql_secure_installation<br />
<br />
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB<br />
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!<br />
<br />
To log into MariaDB to secure it, we'll need the current<br />
password for the root user. If you've just installed MariaDB, and<br />
haven't set the root password yet, you should just press enter here.<br />
<br />
Enter current password for root (enter for none):<br />
OK, successfully used password, moving on...<br />
<br />
Setting the root password or using the unix_socket ensures that nobody<br />
can log into the MariaDB root user without the proper authorization.<br />
<br />
You already have your root account protected, so you can safely answer 'n'.<br />
<br />
Switch to unix_socket authentication [Y/n] n<br />
 ... skipping.<br />
<br />
You already have your root account protected, so you can safely answer 'n'.<br />
<br />
Change the root password? [Y/n] Y<br />
New password:<br />
Re-enter new password:<br />
Password updated successfully!<br />
Reloading privilege tables..<br />
 ... Success!<br />
<br />
<br />
By default, a MariaDB installation has an anonymous user, allowing anyone<br />
to log into MariaDB without having to have a user account created for<br />
them.  This is intended only for testing, and to make the installation<br />
go a bit smoother.  You should remove them before moving into a<br />
production environment.<br />
<br />
Remove anonymous users? [Y/n] Y<br />
 ... Success!<br />
<br />
Normally, root should only be allowed to connect from 'localhost'.  This<br />
ensures that someone cannot guess the root password from the network.<br />
<br />
Disallow root login remotely? [Y/n] Y<br />
 ... Success!<br />
<br />
By default, MariaDB comes with a database named 'test' that anyone can<br />
access.  This is also intended only for testing and should be removed<br />
before moving into a production environment.<br />
<br />
Remove test database and access to it? [Y/n] Y<br />
 - Dropping test database...<br />
 ... Success!<br />
 - Removing privileges on test database...<br />
 ... Success!<br />
<br />
Reloading the privilege tables will ensure that all changes made so far<br />
will take effect immediately.<br />
<br />
Reload privilege tables now? [Y/n] Y<br />
 ... Success!<br />
<br />
Cleaning up...<br />
<br />
All done!  If you've completed all of the above steps, your MariaDB<br />
installation should now be secure.<br />
<br />
Thanks for using MariaDB!</blockquote>
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">Creating a MySQL user and database for the WordPress blog</span><br />
<br />
Time to create a new MySQL user and database for the WordPress blog that we will host. We will not use the MySQL root account and we cannot. It is bad security practice to use the MySQL root account for web applications or other database use cases. In the new MySQL / MariaDB version it is impossible to use root any other way than via the localhost CLI MySQL tool.<br />
<br />
Start the CLI MySQL tool:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>mysql -u root -p</code></div></div><br />
Type in the password you have set before during the MariaDB secure setup.<br />
<br />
You will be in the MariaDB CLI interace that looks like this:<br />
<img src="https://i.imgur.com/Vo3S9Oc.png" loading="lazy"  alt="[Image: Vo3S9Oc.png]" class="mycode_img" /><br />
<br />
Create a new database for the Wordpress blog:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>CREATE DATABASE hiddenblog;</code></div></div>(I will be using the database name hiddenblog. Remember to adjust yours!)<br />
<br />
Now, create a new user:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>CREATE USER 'hiddenuser'@'localhost' IDENTIFIED BY 'mypassword123';</code></div></div>(I will be using the username hiddenuser. Remember to adjust yours! Also don't forget to set the password.)<br />
<br />
After that, it is time to give the user full permission for the database:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>GRANT ALL ON hiddenblog.* TO 'hiddenuser'@'localhost';</code></div></div><br />
Finally, reload the privileges:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>FLUSH PRIVILEGES;</code></div></div><br />
Exit the MySQL CLI tool.<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>exit</code></div></div><br />
So now we have an empty database and a user assigned to it that we can use in the WordPress installation.<br />
<hr class="mycode_hr" />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">WordPress blog installation</span><br />
<br />
Finally! We can start with the installation of the WordPress blog <img src="https://post4vps.com/images/emoji/smile.png" alt="Smile" title="Smile" class="smilie smilie_1" /> .<br />
<br />
Change into the directory of your site:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>cd /var/www/hiddenrefuge.eu.org/</code></div></div><br />
Download the latest WordPress version:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>wget https://wordpress.org/latest.tar.gz</code></div></div><br />
Extract the downloaded archive:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>tar -xvf latest.tar.gz</code></div></div><br />
Move the WordPress files into your main directory:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>mv /var/www/hiddenrefuge.eu.org/wordpress/* /var/www/hiddenrefuge.eu.org</code></div></div><br />
Remove the downloaded archive and the empty wordpress folder:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>rm -rf /var/www/hiddenrefuge.eu.org/wordpress<br />
rm -rf /var/www/hiddenrefuge.eu.org/latest.tar.gz</code></div></div><br />
Set ownership for the files and folders correctly:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>chown -R nginx:nginx /var/www/</code></div></div><br />
Now, open your domain in the web browser and you should see the WordPress installer.<br />
<br />
At the first screen select the language you want to use. In my case English. After that press on the blue "Continue" button.<br />
<br />
After that, you will see a info screen showing what is coming up next in terms of configuration. Here you will need the database name, username and password that we created before. First click on the "Let's go!" button.<br />
<br />
On the next screen type in the database name, username and password. You can keep the database host and table prefix as is. After you have filled out the necessary fields click on the "Submit" button.<br />
<br />
Now, you will see a screen saying that everything looks sparky (good) and you can click on the "Run the installation" button to perform the installation.<br />
<br />
Shortly after, you will be at the first configuration screen where you can set the title of your blog, a username and password for the main account and e-mail. Fill in everything as you wish. At the end press the "Install Wordpress" button.<br />
<br />
A few seconds later you will be the last screen of the installation. It should say Success!. From here on your blog is installed. You can log into he Admin CP and continue the configuration and add content.<br />
<br />
<img src="https://i.imgur.com/5126of4.png" loading="lazy"  alt="[Image: 5126of4.png]" class="mycode_img" /><br />
<br />
<img src="https://i.imgur.com/bo4iR4N.png" loading="lazy"  alt="[Image: bo4iR4N.png]" class="mycode_img" /><br />
<br />
FYI: WordPress permalinks are already working as the vHost that we created for our site contains the necessary pieces of code to make them work. <br />
<br />
That's it. You now have a Nginx web server running with PHP 8.0 and the MariaDB MySQL database server. All of that is hosting your very own WordPress blog. You've not used a single control panel during the whole process.<br />
<br />
This might seem like a lot of work? 75% of the content from this thread can be compiled into a single bash shell script that will perform a lot of the steps automatically without any user input. After that you would only have to setup your own vHost, create a database with a user and install your WordPress blog. Again using no control panel.<br />
</div>
<br />
<br />
<div style="text-align: left;" class="mycode_align"><span style="font-size: x-small;" class="mycode_size"><span style="font-style: italic;" class="mycode_i">Revision: 2021-05-19</span></span></div>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[How to install CyberPanel]]></title>
			<link>https://post4vps.com/Thread-How-to-install-CyberPanel</link>
			<pubDate>Sun, 09 May 2021 16:39:53 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://post4vps.com/member.php?action=profile&uid=917">deanhills</a>]]></dc:creator>
			<guid isPermaLink="false">https://post4vps.com/Thread-How-to-install-CyberPanel</guid>
			<description><![CDATA[I have just successfully installed CyberPanel in my quest to find a good alternative to VestaCP.  The verdict is still out there as I get to know it better, but I thought I would share the requirements and steps for those who are also interested to install CyberPanel.  The steps are for use with CentOS.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Requirements</span><br />
You can work through the requirements on the CyberPanel Installation Website:<br />
<a href="https://cyberpanel.net/docs/installing-cyberpanel/" target="_blank" rel="noopener" class="mycode_url">https://cyberpanel.net/docs/installing-cyberpanel/</a><br />
<br />
According to the Website the OS requirements are: Centos 7.x, Centos 8.x, Ubuntu 18.04, Ubuntu 20.04<br />
<br />
However I found that Centos 7.x is probably not ideal.  Reason being that CyberPanel works with high-end Python, so Centos 8.x is better.  Probably the same would apply for Ubuntu.  CyberPanel seems to be a very up to date script that works on the high-end side of requirements.<br />
<br />
CyberPanel also has the following requirements:<br />
<br />
Python 3.x<br />
1024MB or above Ram.<br />
10GB Disk Space.<br />
<br />
Please note that the above specs are checked during the installation process.  So don't try to install CyberPanel without having the above specs on your VPS.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Free vs Premium version of CyberPanel</span><br />
Initially I thought there would be two different scripts for the free and paid version of CyberPanel.  But there is only one script.  During installation you will be asked whether you want the one or the other.  For a comparison of the two you can check the above cyberpanel.net Website.  The free one is referred to as CyberPanel with OpenLiteSpeed.  And the paid one as LiteSpeed Enterprise.  I'm not sure what the difference is between free and paid as the free version is excellent.  Possibly it could be that the LiteSpeed Enterprise version is much better supported.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Installation Steps</span><br />
1. As previously mentioned.  CyberPanel works on the high-end of Linux available technology, so best is to start with a clean install of CentOS or Ubuntu and the most up to date version you can find.  In my experience it is better to use a Minimal version of the OS as the Panel Script will be loading all the software you need.  So the only software you should make sure to load is Python. To install it on CentOS 8 you need the following command:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>yum install python38</code></div></div><br />
2. Disable SElinux<br />
Next step needed is to disable SElinux as per the commands below:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>yum install nano</code></div></div><div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>nano /etc/selinux/config</code></div></div>Set SELINUX=disabled<br />
<br />
It should look like this:<br />
<br />
<img src="https://i.imgur.com/oivMuiE.png" loading="lazy"  alt="[Image: oivMuiE.png]" class="mycode_img" /><br />
<br />
<br />
Ctrl X - Y for Yes - and then Enter key<br />
<br />
For SELINUX=disabled to take effect the VPS has to be rebooted.  Note that when OS is reinstalled in future, SElinux will remain disabled on the VPS.<br />
<br />
3. Install CyberPanel<br />
Use the following commands to start the installation script:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>yum install wget</code></div></div><div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>wget https://cyberpanel.net/install.sh</code></div></div><div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>bash install.sh</code></div></div><br />
4. During the installation process first question asked is to choose one of the following:<br />
<br />
<blockquote class="mycode_quote"><cite>Quote:</cite>1. Install CyberPanel with OpenLiteSpeed.<br />
<br />
2. Install Cyberpanel with LiteSpeed Enterprise.<br />
<br />
3. Exit.</blockquote>
If you want the free version, select Option 1.<br />
<br />
Next you will be asked whether you want FULL or CUSTOM install.  FULL is probably ideal to get the full benefits of cyberpanel, also of course full benefits of headaches.  I prefer minimal and chose Custom which helped me to opt out of FTP, DNS and e-mails.<br />
<br />
It took quite a while for the script to load after that.  Compared with VestaCP VestaCP loads in a fraction of the time, and never fails.  My first attempt at installation of CyberPanel with CentOS 7 failed due to Python issues.  But with CentOS 8 I had no issues at all.  I also had a Website up and running within minutes after the installation of CyberPanel was completed.  Note that you don't need to add on any domains.  Don't look for that tool once you're in the Panel.  Go straight to "Create Website".  And CyberPanel will take care of the rest.  If you want to create a WordPress site after that, after you have created the Website, scroll downwards and you'll see the WordPress Icon.  Takes about one minute (no kidding) to have the WordPress site up and running.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Assistance</span><br />
You can check this post4vps discussion about CyberPanel, particularly if you have issues with installation of e-mails.  Here is a link to <dvz_me_placeholder id="2" />'s post in the discussion about how he was able to have success with e-mails with CyberPanel:<br />
<a href="https://post4vps.com/Thread-CyberPanel?pid=39214#pid39214" target="_blank" rel="noopener" class="mycode_url">https://post4vps.com/Thread-CyberPanel?p...4#pid39214</a><br />
<br />
You can also check CyberPanel sources below:<br />
<br />
Website : <a href="https://www.cyberpanel.net" target="_blank" rel="noopener" class="mycode_url">https://www.cyberpanel.net</a><br />
             Forums  : <a href="https://forums.cyberpanel.net" target="_blank" rel="noopener" class="mycode_url">https://forums.cyberpanel.net</a><br />
             Wikipage: <a href="https://docs.cyberpanel.net" target="_blank" rel="noopener" class="mycode_url">https://docs.cyberpanel.net</a><br />
             Docs    : <a href="https://cyberpanel.net/docs/" target="_blank" rel="noopener" class="mycode_url">https://cyberpanel.net/docs/</a>]]></description>
			<content:encoded><![CDATA[I have just successfully installed CyberPanel in my quest to find a good alternative to VestaCP.  The verdict is still out there as I get to know it better, but I thought I would share the requirements and steps for those who are also interested to install CyberPanel.  The steps are for use with CentOS.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Requirements</span><br />
You can work through the requirements on the CyberPanel Installation Website:<br />
<a href="https://cyberpanel.net/docs/installing-cyberpanel/" target="_blank" rel="noopener" class="mycode_url">https://cyberpanel.net/docs/installing-cyberpanel/</a><br />
<br />
According to the Website the OS requirements are: Centos 7.x, Centos 8.x, Ubuntu 18.04, Ubuntu 20.04<br />
<br />
However I found that Centos 7.x is probably not ideal.  Reason being that CyberPanel works with high-end Python, so Centos 8.x is better.  Probably the same would apply for Ubuntu.  CyberPanel seems to be a very up to date script that works on the high-end side of requirements.<br />
<br />
CyberPanel also has the following requirements:<br />
<br />
Python 3.x<br />
1024MB or above Ram.<br />
10GB Disk Space.<br />
<br />
Please note that the above specs are checked during the installation process.  So don't try to install CyberPanel without having the above specs on your VPS.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Free vs Premium version of CyberPanel</span><br />
Initially I thought there would be two different scripts for the free and paid version of CyberPanel.  But there is only one script.  During installation you will be asked whether you want the one or the other.  For a comparison of the two you can check the above cyberpanel.net Website.  The free one is referred to as CyberPanel with OpenLiteSpeed.  And the paid one as LiteSpeed Enterprise.  I'm not sure what the difference is between free and paid as the free version is excellent.  Possibly it could be that the LiteSpeed Enterprise version is much better supported.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Installation Steps</span><br />
1. As previously mentioned.  CyberPanel works on the high-end of Linux available technology, so best is to start with a clean install of CentOS or Ubuntu and the most up to date version you can find.  In my experience it is better to use a Minimal version of the OS as the Panel Script will be loading all the software you need.  So the only software you should make sure to load is Python. To install it on CentOS 8 you need the following command:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>yum install python38</code></div></div><br />
2. Disable SElinux<br />
Next step needed is to disable SElinux as per the commands below:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>yum install nano</code></div></div><div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>nano /etc/selinux/config</code></div></div>Set SELINUX=disabled<br />
<br />
It should look like this:<br />
<br />
<img src="https://i.imgur.com/oivMuiE.png" loading="lazy"  alt="[Image: oivMuiE.png]" class="mycode_img" /><br />
<br />
<br />
Ctrl X - Y for Yes - and then Enter key<br />
<br />
For SELINUX=disabled to take effect the VPS has to be rebooted.  Note that when OS is reinstalled in future, SElinux will remain disabled on the VPS.<br />
<br />
3. Install CyberPanel<br />
Use the following commands to start the installation script:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>yum install wget</code></div></div><div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>wget https://cyberpanel.net/install.sh</code></div></div><div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>bash install.sh</code></div></div><br />
4. During the installation process first question asked is to choose one of the following:<br />
<br />
<blockquote class="mycode_quote"><cite>Quote:</cite>1. Install CyberPanel with OpenLiteSpeed.<br />
<br />
2. Install Cyberpanel with LiteSpeed Enterprise.<br />
<br />
3. Exit.</blockquote>
If you want the free version, select Option 1.<br />
<br />
Next you will be asked whether you want FULL or CUSTOM install.  FULL is probably ideal to get the full benefits of cyberpanel, also of course full benefits of headaches.  I prefer minimal and chose Custom which helped me to opt out of FTP, DNS and e-mails.<br />
<br />
It took quite a while for the script to load after that.  Compared with VestaCP VestaCP loads in a fraction of the time, and never fails.  My first attempt at installation of CyberPanel with CentOS 7 failed due to Python issues.  But with CentOS 8 I had no issues at all.  I also had a Website up and running within minutes after the installation of CyberPanel was completed.  Note that you don't need to add on any domains.  Don't look for that tool once you're in the Panel.  Go straight to "Create Website".  And CyberPanel will take care of the rest.  If you want to create a WordPress site after that, after you have created the Website, scroll downwards and you'll see the WordPress Icon.  Takes about one minute (no kidding) to have the WordPress site up and running.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Assistance</span><br />
You can check this post4vps discussion about CyberPanel, particularly if you have issues with installation of e-mails.  Here is a link to <dvz_me_placeholder id="2" />'s post in the discussion about how he was able to have success with e-mails with CyberPanel:<br />
<a href="https://post4vps.com/Thread-CyberPanel?pid=39214#pid39214" target="_blank" rel="noopener" class="mycode_url">https://post4vps.com/Thread-CyberPanel?p...4#pid39214</a><br />
<br />
You can also check CyberPanel sources below:<br />
<br />
Website : <a href="https://www.cyberpanel.net" target="_blank" rel="noopener" class="mycode_url">https://www.cyberpanel.net</a><br />
             Forums  : <a href="https://forums.cyberpanel.net" target="_blank" rel="noopener" class="mycode_url">https://forums.cyberpanel.net</a><br />
             Wikipage: <a href="https://docs.cyberpanel.net" target="_blank" rel="noopener" class="mycode_url">https://docs.cyberpanel.net</a><br />
             Docs    : <a href="https://cyberpanel.net/docs/" target="_blank" rel="noopener" class="mycode_url">https://cyberpanel.net/docs/</a>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Cyberpanel with Remote Database]]></title>
			<link>https://post4vps.com/Thread-Cyberpanel-with-Remote-Database</link>
			<pubDate>Sun, 13 Dec 2020 21:13:55 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://post4vps.com/member.php?action=profile&uid=246">fitkoh</a>]]></dc:creator>
			<guid isPermaLink="false">https://post4vps.com/Thread-Cyberpanel-with-Remote-Database</guid>
			<description><![CDATA[This tutorial is aimed at <a href="https://cyberpanel.net/" target="_blank" rel="noopener" class="mycode_url">Cyberpanel</a> users  who may wish to offload database functions on a separate machine for a gain in performance. Remote database is a newer feature of cyberpanel introduced in version 2.0.2 If p4v admin to decide to create a system for users to get a second vps, it could be very useful <img src="https://post4vps.com/images/emoji/twinkle.png" alt="Wink" title="Wink" class="smilie smilie_2" /> <br />
<br />
I wrote this tutorial, however I didn't do it without some good sources:<br />
#TLDR Check these pages and it'll give you all the information in this tutorial and then some.<br />
<br />
<a href="https://cyberpanel.net/docs/installing-cyberpanel/" target="_blank" rel="noopener" class="mycode_url">https://cyberpanel.net/docs/installing-cyberpanel/</a><br />
<a href="https://cyberpanel.net/docs/remote-sql-for-cyberpanel/" target="_blank" rel="noopener" class="mycode_url">https://cyberpanel.net/docs/remote-sql-for-cyberpanel/</a><br />
<a href="https://www.virtualmin.com/documentation/database/remote" target="_blank" rel="noopener" class="mycode_url">https://www.virtualmin.com/documentation...ase/remote</a><br />
<a href="https://www.webmin.com/deb.html" target="_blank" rel="noopener" class="mycode_url">https://www.webmin.com/deb.html</a><br />
<a href="https://www.digitalocean.com/community/tutorials/ufw-essentials-common-firewall-rules-and-commands" target="_blank" rel="noopener" class="mycode_url">https://www.digitalocean.com/community/t...d-commands</a><br />
<br />
The closer the physical proximity and lower the latency between the two servers, the better the opportunity for performance gain. For those curious, the specifications of the servers used in writing this tutorial can be found <a href="https://post4vps.com/Thread-cyberpanel-webmin-fastest-web-server-ever?pid=39582#pid39582" target="_blank" rel="noopener" class="mycode_url">here post #3</a><br />
<br />
It is written using 2 servers using  ubuntu 18. It assumes you have basic knowledge of logging into your server via ssh and familiarity with the command line/terminal.<br />
<br />
1. As always it's recommend to update the installation by running the following command from terminal on both servers:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&#36; apt-get update &amp;&amp; apt-get upgrade</code></div></div><br />
When your servers finish the upgrade, you'll need to set up the database server first. It will be required for cyberpanel to complete its installation. While any sql server should work, I chose to use <a href="https://webmin.com" target="_blank" rel="noopener" class="mycode_url">webmin:</a> a sturdy, lightweight open source web panel to facilitate installation and configuration of the sql server.<br />
<br />
2. First I  download  the webmin installation:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&#36; wget http://www.webmin.com/download/deb/webmin-current.deb</code></div></div><br />
3. Then use dpkg to start the installation.<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&#36; dpkg -i webmin-current.deb</code></div></div><br />
Oh no! The installer isn't going. We're missing dependencies!<br />
<br />
Before I could get the webmin installation to start, here's what I had to install:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&#36; apt-get install perl libnet-ssleay-perl libauthen-pam-perl libpam-runtime libio-pty-perl unzip</code></div></div>Try running dpkg again webmin-current.deb, if it still complains about missing dependencies you might want to check <a href="https://www.webmin.com/deb.html" target="_blank" rel="noopener" class="mycode_url">here</a><br />
In a few moments, if everything worked, you will be informed you can log into your webmin server at localhost:10000<br />
<br />
4. For security reasons, I recommend creating a sudo user to login to webmin rather than using root.<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&#36; adduser your_name</code></div></div>You will be asked to enter a password twice. The more complex the better. Then add this user to the list of sudoers so you can log in and work inside webmin panel.<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&#36; usermod -aG sudo your_name</code></div></div><br />
5. I recommend running webmin from a non-standard port. Webmin has been  around for years and black-hats often port scan the webmin default ports. You can edit the webmin port in the webmin conf file. look for the line that reads "port=10000" and change the number to something different. <br />
You can edit the webmin conf file with the editor of your choice or by running:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>nano /etc/webmin/miniserv.conf</code></div></div><br />
For the purposes of this tutorial I'll assume you changed port=10000 to port=12345. ctrl+x will save your changes to miniserv.conf<br />
Now restart webmin so the port change takes effect.<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&#36; /etc/init.d/webmin restart</code></div></div><br />
6. you should now be able to log into your server via webmin in the browser. Note that your browser will throw an error from self-signed ssl. This is normal. In your browser navigate to <br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>https://123.456.789:12345</code></div></div>where 123.456.789 is your database server ip and 12345 is the port you used in webmin.conf<br />
<br />
Enter in the credentials of the sudo user you created. After this you should be logged into webmin. If you've never used webmin before, you'll see lots of links on the left sidebar. Don't panic!<br />
<br />
here's a screenshot to show you where to look and help you feel a little more comfortable:<br />

<br />
<img src="https://post4vps.com/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
&nbsp;&nbsp;<a href="attachment.php?aid=247" target="_blank" title="">Screenshot from 2020-12-13 15-08-44.png</a> (Size: 88.99 KB / Downloads: 33)
<br />
7. Click on "Servers" on the left. If you see MySQL Database Server, skip this  step. It wasn't installed for me, so I had to click on "Unused Modules". Scroll down until you see MySQL Database Server. The SQL installer will take a few moments. After it completes, you may need to click "Refresh Modules" to bring it up in the "Servers" sub menu.<br />
<br />
Now you've gotten SQL installed, but it needs to be configured.<br />
<br />
8. From the "Server" sub menu click on "MySQL Database Server" <br />
<br />
9. First click on "Set admin password" - I recommend you use a password generator and use a very strong password here.<br />
<br />
10. Next click on "User permissions" then "Create a New User"<br />
<br />
*Make sure you give the user the name root. a user named root is required by cyberpanel.<br />
*Make sure to use a strong password<br />
*Make sure you set "Hosts" to the IP of the server you'll use for cyberpanel installation<br />
*Highlight all the permissions so cyberpanel can do what it needs to in the database.<br />
Once you've got everything filled out, create your user<br />
<br />
11.  After your remote user is created, click on Database permissions. <br />
For Databases, select "Any"<br />
For Username, input "root"<br />
Hosts: The IP of your cyberpanel installation<br />
Permissions: highlight all<br />
<br />
12. Next, go to "Mysql Server Configuration"<br />
For Host, use the IP of your cyberpanel installation<br />
You may wish to change the default port: be forewarned that while this is recommended for security, it can cause complications with some web apps depending on how they're configured.<br />
Scroll down and click "Save and Restart MySQL"<br />
<br />
At this point your Remote database should be ready.<br />
<br />
13. It is strongly recommended to use a firewall for increased security. I used ufw to close off all ports except those needed for sql, ssh, and webmin, and restrict access to sql to only the Cyberpanel IP.<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&#36; apt-get install ufw<br />
&#36; ufw deny all<br />
&#36; ufw allow 123 //whatever port you use for ssh<br />
&#36; ufw allow 12345 //webmin port<br />
&#36; ufw allow from 987.654.321 to any port 54321 //cyberpanel's VPS IP, sql port</code></div></div><br />
14. Now we're ready to begin the cyberpanel installation on our other server.<br />
The only dependency I needed was curl.<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&#36; apt-get install curl<br />
&#36; sh &lt;(curl https://cyberpanel.net/install.sh || wget -O - https://cyberpanel.net/install.sh)</code></div></div><br />
This covers the installation of Cyberpanel with OpenLightSpeed WebServer. It doesn't cover the installation of Cyberpanel ENT, although they should be similar.<br />
<br />
15. The installer will ask you if you want a full install or a custom install. I chose a custom install, because I don't want to deal with the hassle of setting up services I would prefer to offload for increased performance.<br />
<br />
The installer will ask you if you want to install DNS, Postfix, or FTP. This tutorial does not cover the configuration of the full cyberpanel stack, only the minimum required for serving web pages. I chose no for all of these options.<br />
<br />
16. The installer will ask you if you want to install Cyberpanel with Remote Database. Choose Yes.<br />
The installer will ask you for the hostname of the remote database server. You can use the IP of your database server here.<br />
The installer will ask you for a mysql port. Use 3306 if you didn't change the port in step 12. If you did, enter that port here.<br />
The installer will ask you for a mysql user. Enter the credentials from the user created in step 10.<br />
The installer will ask you which database has the default mysql schema: 'mysql' worked for me.<br />
<br />
17. The installer will ask about a few more additional softwares: Redis, MemCache, Watchdog. This tutorial does not cover the configuration of these programs. I entered no for all options.<br />
<br />
Cross your fingers and hope for the best. If everything worked properly in a few minutes the terminal will tell you how to log into your new cyberpanel installation <img src="https://post4vps.com/images/emoji/smile.png" alt="Smile" title="Smile" class="smilie smilie_1" />]]></description>
			<content:encoded><![CDATA[This tutorial is aimed at <a href="https://cyberpanel.net/" target="_blank" rel="noopener" class="mycode_url">Cyberpanel</a> users  who may wish to offload database functions on a separate machine for a gain in performance. Remote database is a newer feature of cyberpanel introduced in version 2.0.2 If p4v admin to decide to create a system for users to get a second vps, it could be very useful <img src="https://post4vps.com/images/emoji/twinkle.png" alt="Wink" title="Wink" class="smilie smilie_2" /> <br />
<br />
I wrote this tutorial, however I didn't do it without some good sources:<br />
#TLDR Check these pages and it'll give you all the information in this tutorial and then some.<br />
<br />
<a href="https://cyberpanel.net/docs/installing-cyberpanel/" target="_blank" rel="noopener" class="mycode_url">https://cyberpanel.net/docs/installing-cyberpanel/</a><br />
<a href="https://cyberpanel.net/docs/remote-sql-for-cyberpanel/" target="_blank" rel="noopener" class="mycode_url">https://cyberpanel.net/docs/remote-sql-for-cyberpanel/</a><br />
<a href="https://www.virtualmin.com/documentation/database/remote" target="_blank" rel="noopener" class="mycode_url">https://www.virtualmin.com/documentation...ase/remote</a><br />
<a href="https://www.webmin.com/deb.html" target="_blank" rel="noopener" class="mycode_url">https://www.webmin.com/deb.html</a><br />
<a href="https://www.digitalocean.com/community/tutorials/ufw-essentials-common-firewall-rules-and-commands" target="_blank" rel="noopener" class="mycode_url">https://www.digitalocean.com/community/t...d-commands</a><br />
<br />
The closer the physical proximity and lower the latency between the two servers, the better the opportunity for performance gain. For those curious, the specifications of the servers used in writing this tutorial can be found <a href="https://post4vps.com/Thread-cyberpanel-webmin-fastest-web-server-ever?pid=39582#pid39582" target="_blank" rel="noopener" class="mycode_url">here post #3</a><br />
<br />
It is written using 2 servers using  ubuntu 18. It assumes you have basic knowledge of logging into your server via ssh and familiarity with the command line/terminal.<br />
<br />
1. As always it's recommend to update the installation by running the following command from terminal on both servers:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&#36; apt-get update &amp;&amp; apt-get upgrade</code></div></div><br />
When your servers finish the upgrade, you'll need to set up the database server first. It will be required for cyberpanel to complete its installation. While any sql server should work, I chose to use <a href="https://webmin.com" target="_blank" rel="noopener" class="mycode_url">webmin:</a> a sturdy, lightweight open source web panel to facilitate installation and configuration of the sql server.<br />
<br />
2. First I  download  the webmin installation:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&#36; wget http://www.webmin.com/download/deb/webmin-current.deb</code></div></div><br />
3. Then use dpkg to start the installation.<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&#36; dpkg -i webmin-current.deb</code></div></div><br />
Oh no! The installer isn't going. We're missing dependencies!<br />
<br />
Before I could get the webmin installation to start, here's what I had to install:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&#36; apt-get install perl libnet-ssleay-perl libauthen-pam-perl libpam-runtime libio-pty-perl unzip</code></div></div>Try running dpkg again webmin-current.deb, if it still complains about missing dependencies you might want to check <a href="https://www.webmin.com/deb.html" target="_blank" rel="noopener" class="mycode_url">here</a><br />
In a few moments, if everything worked, you will be informed you can log into your webmin server at localhost:10000<br />
<br />
4. For security reasons, I recommend creating a sudo user to login to webmin rather than using root.<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&#36; adduser your_name</code></div></div>You will be asked to enter a password twice. The more complex the better. Then add this user to the list of sudoers so you can log in and work inside webmin panel.<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&#36; usermod -aG sudo your_name</code></div></div><br />
5. I recommend running webmin from a non-standard port. Webmin has been  around for years and black-hats often port scan the webmin default ports. You can edit the webmin port in the webmin conf file. look for the line that reads "port=10000" and change the number to something different. <br />
You can edit the webmin conf file with the editor of your choice or by running:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>nano /etc/webmin/miniserv.conf</code></div></div><br />
For the purposes of this tutorial I'll assume you changed port=10000 to port=12345. ctrl+x will save your changes to miniserv.conf<br />
Now restart webmin so the port change takes effect.<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&#36; /etc/init.d/webmin restart</code></div></div><br />
6. you should now be able to log into your server via webmin in the browser. Note that your browser will throw an error from self-signed ssl. This is normal. In your browser navigate to <br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>https://123.456.789:12345</code></div></div>where 123.456.789 is your database server ip and 12345 is the port you used in webmin.conf<br />
<br />
Enter in the credentials of the sudo user you created. After this you should be logged into webmin. If you've never used webmin before, you'll see lots of links on the left sidebar. Don't panic!<br />
<br />
here's a screenshot to show you where to look and help you feel a little more comfortable:<br />

<br />
<img src="https://post4vps.com/images/attachtypes/image.png" title="PNG Image" border="0" alt=".png" />
&nbsp;&nbsp;<a href="attachment.php?aid=247" target="_blank" title="">Screenshot from 2020-12-13 15-08-44.png</a> (Size: 88.99 KB / Downloads: 33)
<br />
7. Click on "Servers" on the left. If you see MySQL Database Server, skip this  step. It wasn't installed for me, so I had to click on "Unused Modules". Scroll down until you see MySQL Database Server. The SQL installer will take a few moments. After it completes, you may need to click "Refresh Modules" to bring it up in the "Servers" sub menu.<br />
<br />
Now you've gotten SQL installed, but it needs to be configured.<br />
<br />
8. From the "Server" sub menu click on "MySQL Database Server" <br />
<br />
9. First click on "Set admin password" - I recommend you use a password generator and use a very strong password here.<br />
<br />
10. Next click on "User permissions" then "Create a New User"<br />
<br />
*Make sure you give the user the name root. a user named root is required by cyberpanel.<br />
*Make sure to use a strong password<br />
*Make sure you set "Hosts" to the IP of the server you'll use for cyberpanel installation<br />
*Highlight all the permissions so cyberpanel can do what it needs to in the database.<br />
Once you've got everything filled out, create your user<br />
<br />
11.  After your remote user is created, click on Database permissions. <br />
For Databases, select "Any"<br />
For Username, input "root"<br />
Hosts: The IP of your cyberpanel installation<br />
Permissions: highlight all<br />
<br />
12. Next, go to "Mysql Server Configuration"<br />
For Host, use the IP of your cyberpanel installation<br />
You may wish to change the default port: be forewarned that while this is recommended for security, it can cause complications with some web apps depending on how they're configured.<br />
Scroll down and click "Save and Restart MySQL"<br />
<br />
At this point your Remote database should be ready.<br />
<br />
13. It is strongly recommended to use a firewall for increased security. I used ufw to close off all ports except those needed for sql, ssh, and webmin, and restrict access to sql to only the Cyberpanel IP.<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&#36; apt-get install ufw<br />
&#36; ufw deny all<br />
&#36; ufw allow 123 //whatever port you use for ssh<br />
&#36; ufw allow 12345 //webmin port<br />
&#36; ufw allow from 987.654.321 to any port 54321 //cyberpanel's VPS IP, sql port</code></div></div><br />
14. Now we're ready to begin the cyberpanel installation on our other server.<br />
The only dependency I needed was curl.<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&#36; apt-get install curl<br />
&#36; sh &lt;(curl https://cyberpanel.net/install.sh || wget -O - https://cyberpanel.net/install.sh)</code></div></div><br />
This covers the installation of Cyberpanel with OpenLightSpeed WebServer. It doesn't cover the installation of Cyberpanel ENT, although they should be similar.<br />
<br />
15. The installer will ask you if you want a full install or a custom install. I chose a custom install, because I don't want to deal with the hassle of setting up services I would prefer to offload for increased performance.<br />
<br />
The installer will ask you if you want to install DNS, Postfix, or FTP. This tutorial does not cover the configuration of the full cyberpanel stack, only the minimum required for serving web pages. I chose no for all of these options.<br />
<br />
16. The installer will ask you if you want to install Cyberpanel with Remote Database. Choose Yes.<br />
The installer will ask you for the hostname of the remote database server. You can use the IP of your database server here.<br />
The installer will ask you for a mysql port. Use 3306 if you didn't change the port in step 12. If you did, enter that port here.<br />
The installer will ask you for a mysql user. Enter the credentials from the user created in step 10.<br />
The installer will ask you which database has the default mysql schema: 'mysql' worked for me.<br />
<br />
17. The installer will ask about a few more additional softwares: Redis, MemCache, Watchdog. This tutorial does not cover the configuration of these programs. I entered no for all options.<br />
<br />
Cross your fingers and hope for the best. If everything worked properly in a few minutes the terminal will tell you how to log into your new cyberpanel installation <img src="https://post4vps.com/images/emoji/smile.png" alt="Smile" title="Smile" class="smilie smilie_1" />]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Use RDP Wrapper Library with latest Windows 10 / Server OS Versions]]></title>
			<link>https://post4vps.com/Thread-Use-RDP-Wrapper-Library-with-latest-Windows-10-Server-OS-Versions</link>
			<pubDate>Sat, 31 Oct 2020 20:28:31 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://post4vps.com/member.php?action=profile&uid=26">Mashiro</a>]]></dc:creator>
			<guid isPermaLink="false">https://post4vps.com/Thread-Use-RDP-Wrapper-Library-with-latest-Windows-10-Server-OS-Versions</guid>
			<description><![CDATA[<div style="text-align: CENTER;" class="mycode_align"><span style="font-size: X-LARGE;" class="mycode_size"><span style="color: ROYALBLUE;" class="mycode_color">Use RDP Wrapper Library with latest Windows 10 / Server OS Versions</span></span></div>
<br />
<br />
<div style="text-align: JUSTIFY;" class="mycode_align">Howdy Post4VPS Staff &amp; Community<br />
<br />
Before I start writing about the main subject of today's guide I will start off with explaining what the "RDP Wrapper" library actually is:<br />
<blockquote class="mycode_quote"><cite>Quote:</cite>Imagine you are a normal Windows user and your computer came with Windows 10 Home preinstalled. Now you might know that the Windows 10 Home edition is very limited in many aspects such as a lot less control over the system settings (e.g. updates are forced and cannot be turned off). Another locked down feature is the absolute lack of the remote desktop feature / the remote desktop server. That means you cannot connect to your computer remotely in your network from e.g. a tablet or something similar.<br />
<br />
Such a feature, while not many normal users may use it, is actually a very useful feature. So for those who are very interested in this feature... what should these people do? The next higher up version that comes with the remote desktop feature / server is Windows 10 Pro. Would you be willing to go out and buy a Windows 10 Pro license? Of course you could get a cheap license from some random or weird site. You don't have to do this! It could especially be a dangerous scam / rip off.<br />
<br />
Here is where the "RDP Wrapper" library comes into play. It is a RDP library with a lot of modifications and tweaks. You can install RDP Wrapper on your Windows 10 Home computer to get back the Windows remote desktop feature / server for free. Not only that - it also supports concurrent RDP sessions which is usually only a premium Windows Server feature (2 sessions by default and many more with the expensive RDS-CAL licenses). RDP Wrapper library can also be used on Windows Server products to unlock more than 2 concurrent RDP sessions for free (grey area subject). It is compatible from Windows Vista to Windows 10.</blockquote>
<br />
Above was a little explanation about the RDP Wrapper library. Now let's talk about the subject of this guide. The RDP Wrapper is no longer in development and has no support since the end of 2018. That means that newer Windows 10 Version that came out after 2018 aren't really supported or rather said the RDP Wrapper library doesn't properly work on newer / latest Windows 10 builds. This guide will show you how to fix this issue and be able to use the RDP Wrapper library on the latest Windows 10 / Server builds (e.g. Windows 10 2009 Home or Windows Server 2019).<br />
<br />
The actual constellation / my setup: Windows 10 Home Build 20H2 (2009) with a license inside a Hyper-V VM with 2 CPU Cores, 4 GB RAM and a 64 GB vSSD. It doesn't matter whether your computer is physical or virtual. I'm just using a virtual system because I don't have a device with Windows 10 Home in physical form. Due to the limited feature set of Windows 10 Home RDP is not available. I however want to use RDP to access the VM remotely from my tablet to do some stuff without always being at my computer. I'm going to install RDP Wrapper and fix it up to work on my setup.<br />
<br />
<img src="https://i.imgur.com/qg94ofh.png" loading="lazy"  alt="[Image: qg94ofh.png]" class="mycode_img" /><br />
<img src="https://i.imgur.com/yDTxrvo.png" loading="lazy"  alt="[Image: yDTxrvo.png]" class="mycode_img" /><br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="color: RED;" class="mycode_color">Disclaimer: You are performing all actions at your own risks. You cannot make me responsible for anything that happens. I hold no responsibility for the actions performed by you with this guide. This is solely for educational and non commerical use only! The legality of the subject of this guide is not clearly defined. See <a href="https://github.com/stascorp/rdpwrap/issues/26" target="_blank" rel="noopener" class="mycode_url">here</a> for more information.</span></span><br />
<hr class="mycode_hr" />
<hr class="mycode_hr" />
<br />
Let's get started. Make sure you have administrative rights / access on your machine as this level of access is required to perform actions in this guide.<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Step #1</span><br />
<br />
Open your web browser, go to <a href="https://github.com/stascorp/rdpwrap/releases" target="_blank" rel="noopener" class="mycode_url">https://github.com/stascorp/rdpwrap/releases</a> and download the latest version of RDP Wrapper (currently and as of 2018 it is version 1.6.2). Choose the .zip file version of the release as the .MSI installer will not work at all on latest Windows 10 / Server builds.<br />
<br />
Or click <a href="https://github.com/stascorp/rdpwrap/releases/download/v1.6.2/RDPWrap-v1.6.2.zip" target="_blank" rel="noopener" class="mycode_url">this link</a> to download the .zip file directly from the release page.<br />
<br />
Also download <a href="https://github.com/asmtron/rdpwrap/raw/master/autoupdate.zip" target="_blank" rel="noopener" class="mycode_url">this file</a>.<br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">Step #2</span><br />
<br />
Press the Windows key and the R key at the same time. In the small "Run" window type in the following text and hit the ENTER key:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>%ProgramFiles%</code></div></div><br />
The Windows explorer will open up. Inside the directory that opened up create a folder called "RDP Wrapper". Do not use another path than %ProgramFiles%\RDP Wrapper!<br />
<br />
Full path should normally be "C:\Program Files\RDP Wrapper".<br />
<br />
<img src="https://i.imgur.com/GIIeDv6.png" loading="lazy"  alt="[Image: GIIeDv6.png]" class="mycode_img" /><br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">Step #3</span><br />
<br />
Extract the content of the RDP Wrapper .zip file into the RDP Wrapper folder you have created.<br />
<br />
Additionally extract the content of the autoupdate.zip file that you have downloaded into the RDP Wrapper folder.<br />
<br />
The RDP Wrapper folder should look like below:<br />
<img src="https://i.imgur.com/NUpRmYr.png" loading="lazy"  alt="[Image: NUpRmYr.png]" class="mycode_img" /><br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">Step #4</span><br />
<br />
Open the "Helper" folder in the RDP Wrapper folder and run "autoupdate__enable_autorun_on_startup.bat" as an administrator (right click the .bat file and click on "Run as Administrator").<br />
<br />
If a small and blue Windows protection window opens click on "More info" and then on the "Run anyway" button to run the .bat file. Alternatively you can disable Windows smart screen to get rid of this blue Windows protection windows.<br />
<br />
A CMD window will open up. Once its done you will see a message saying to press any key to close the window. Just press any key to close that windows.<br />
<br />
Set in your Antivirus an exclusion for the folder "%ProgramFiles%\RDP Wrapper" to prevent the deletion of RDP Wrapper files.<br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">Step #5</span><br />
<br />
After the step above run "autoupdate.bat" inside the RDP Wrapper folder as an administrator (right click the bat file and click on "Run as Administrator").<br />
<br />
If a small and blue Windows protection window opens click on "More info" and then on the "Run anyway" button to run the .bat file. Alternatively you can disable Windows smart screen to get rid of this blue Windows protection windows.<br />
<br />
A CMD window will open up. It will perform a lot of tasks and install fixes for the RDP Wrapper library 1.6.2 that we downloaded. Once everything is finished the CMD window will close.<br />
<br />
After that you can run the "RDPConf.exe" file in the RDP Wrapper folder to see whether the RDP Wrapper library was installed and is working properly. Below an example of a working RDP Wrapper:<br />
<img src="https://i.imgur.com/xpN38nD.png" loading="lazy"  alt="[Image: xpN38nD.png]" class="mycode_img" /><br />
<hr class="mycode_hr" />
<br />
Now you can verify that RDP is working on your Windows 10 Home computer by using a different device with a RDP client and typing in the IP address of your Windows 10 Home computer. If everything works you will be connect to your computer via RDP and you can login with your user.<br />
<br />
<img src="https://i.imgur.com/llq9AA6.png" loading="lazy"  alt="[Image: llq9AA6.png]" class="mycode_img" /><br />
<img src="https://i.imgur.com/dzUFprr.png" loading="lazy"  alt="[Image: dzUFprr.png]" class="mycode_img" /><br />
<img src="https://i.imgur.com/V95OU9c.png" loading="lazy"  alt="[Image: V95OU9c.png]" class="mycode_img" /><br />
<br />
As you can see I'm connected to my Windows 10 Home VM. Windows still says that RDP is not available because of Windows 10 Home but we're connected via RDP. We have successfully enable RDP on our Windows 10 Home computer.<br />
<br />
That's it! Couldn't be easier, right? You can configure RDP Wrapper further by editing the rdpwrapper.ini file inside the RDP Wrapper folder. WARNING: You shouldn't touch the file if you don't know what you are doing. Some options can be guessed easily by the names but others aren't that easy to understand and can break RDP on your system. <br />
</div>]]></description>
			<content:encoded><![CDATA[<div style="text-align: CENTER;" class="mycode_align"><span style="font-size: X-LARGE;" class="mycode_size"><span style="color: ROYALBLUE;" class="mycode_color">Use RDP Wrapper Library with latest Windows 10 / Server OS Versions</span></span></div>
<br />
<br />
<div style="text-align: JUSTIFY;" class="mycode_align">Howdy Post4VPS Staff &amp; Community<br />
<br />
Before I start writing about the main subject of today's guide I will start off with explaining what the "RDP Wrapper" library actually is:<br />
<blockquote class="mycode_quote"><cite>Quote:</cite>Imagine you are a normal Windows user and your computer came with Windows 10 Home preinstalled. Now you might know that the Windows 10 Home edition is very limited in many aspects such as a lot less control over the system settings (e.g. updates are forced and cannot be turned off). Another locked down feature is the absolute lack of the remote desktop feature / the remote desktop server. That means you cannot connect to your computer remotely in your network from e.g. a tablet or something similar.<br />
<br />
Such a feature, while not many normal users may use it, is actually a very useful feature. So for those who are very interested in this feature... what should these people do? The next higher up version that comes with the remote desktop feature / server is Windows 10 Pro. Would you be willing to go out and buy a Windows 10 Pro license? Of course you could get a cheap license from some random or weird site. You don't have to do this! It could especially be a dangerous scam / rip off.<br />
<br />
Here is where the "RDP Wrapper" library comes into play. It is a RDP library with a lot of modifications and tweaks. You can install RDP Wrapper on your Windows 10 Home computer to get back the Windows remote desktop feature / server for free. Not only that - it also supports concurrent RDP sessions which is usually only a premium Windows Server feature (2 sessions by default and many more with the expensive RDS-CAL licenses). RDP Wrapper library can also be used on Windows Server products to unlock more than 2 concurrent RDP sessions for free (grey area subject). It is compatible from Windows Vista to Windows 10.</blockquote>
<br />
Above was a little explanation about the RDP Wrapper library. Now let's talk about the subject of this guide. The RDP Wrapper is no longer in development and has no support since the end of 2018. That means that newer Windows 10 Version that came out after 2018 aren't really supported or rather said the RDP Wrapper library doesn't properly work on newer / latest Windows 10 builds. This guide will show you how to fix this issue and be able to use the RDP Wrapper library on the latest Windows 10 / Server builds (e.g. Windows 10 2009 Home or Windows Server 2019).<br />
<br />
The actual constellation / my setup: Windows 10 Home Build 20H2 (2009) with a license inside a Hyper-V VM with 2 CPU Cores, 4 GB RAM and a 64 GB vSSD. It doesn't matter whether your computer is physical or virtual. I'm just using a virtual system because I don't have a device with Windows 10 Home in physical form. Due to the limited feature set of Windows 10 Home RDP is not available. I however want to use RDP to access the VM remotely from my tablet to do some stuff without always being at my computer. I'm going to install RDP Wrapper and fix it up to work on my setup.<br />
<br />
<img src="https://i.imgur.com/qg94ofh.png" loading="lazy"  alt="[Image: qg94ofh.png]" class="mycode_img" /><br />
<img src="https://i.imgur.com/yDTxrvo.png" loading="lazy"  alt="[Image: yDTxrvo.png]" class="mycode_img" /><br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="color: RED;" class="mycode_color">Disclaimer: You are performing all actions at your own risks. You cannot make me responsible for anything that happens. I hold no responsibility for the actions performed by you with this guide. This is solely for educational and non commerical use only! The legality of the subject of this guide is not clearly defined. See <a href="https://github.com/stascorp/rdpwrap/issues/26" target="_blank" rel="noopener" class="mycode_url">here</a> for more information.</span></span><br />
<hr class="mycode_hr" />
<hr class="mycode_hr" />
<br />
Let's get started. Make sure you have administrative rights / access on your machine as this level of access is required to perform actions in this guide.<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Step #1</span><br />
<br />
Open your web browser, go to <a href="https://github.com/stascorp/rdpwrap/releases" target="_blank" rel="noopener" class="mycode_url">https://github.com/stascorp/rdpwrap/releases</a> and download the latest version of RDP Wrapper (currently and as of 2018 it is version 1.6.2). Choose the .zip file version of the release as the .MSI installer will not work at all on latest Windows 10 / Server builds.<br />
<br />
Or click <a href="https://github.com/stascorp/rdpwrap/releases/download/v1.6.2/RDPWrap-v1.6.2.zip" target="_blank" rel="noopener" class="mycode_url">this link</a> to download the .zip file directly from the release page.<br />
<br />
Also download <a href="https://github.com/asmtron/rdpwrap/raw/master/autoupdate.zip" target="_blank" rel="noopener" class="mycode_url">this file</a>.<br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">Step #2</span><br />
<br />
Press the Windows key and the R key at the same time. In the small "Run" window type in the following text and hit the ENTER key:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>%ProgramFiles%</code></div></div><br />
The Windows explorer will open up. Inside the directory that opened up create a folder called "RDP Wrapper". Do not use another path than %ProgramFiles%\RDP Wrapper!<br />
<br />
Full path should normally be "C:\Program Files\RDP Wrapper".<br />
<br />
<img src="https://i.imgur.com/GIIeDv6.png" loading="lazy"  alt="[Image: GIIeDv6.png]" class="mycode_img" /><br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">Step #3</span><br />
<br />
Extract the content of the RDP Wrapper .zip file into the RDP Wrapper folder you have created.<br />
<br />
Additionally extract the content of the autoupdate.zip file that you have downloaded into the RDP Wrapper folder.<br />
<br />
The RDP Wrapper folder should look like below:<br />
<img src="https://i.imgur.com/NUpRmYr.png" loading="lazy"  alt="[Image: NUpRmYr.png]" class="mycode_img" /><br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">Step #4</span><br />
<br />
Open the "Helper" folder in the RDP Wrapper folder and run "autoupdate__enable_autorun_on_startup.bat" as an administrator (right click the .bat file and click on "Run as Administrator").<br />
<br />
If a small and blue Windows protection window opens click on "More info" and then on the "Run anyway" button to run the .bat file. Alternatively you can disable Windows smart screen to get rid of this blue Windows protection windows.<br />
<br />
A CMD window will open up. Once its done you will see a message saying to press any key to close the window. Just press any key to close that windows.<br />
<br />
Set in your Antivirus an exclusion for the folder "%ProgramFiles%\RDP Wrapper" to prevent the deletion of RDP Wrapper files.<br />
<hr class="mycode_hr" />
<br />
<span style="font-weight: bold;" class="mycode_b">Step #5</span><br />
<br />
After the step above run "autoupdate.bat" inside the RDP Wrapper folder as an administrator (right click the bat file and click on "Run as Administrator").<br />
<br />
If a small and blue Windows protection window opens click on "More info" and then on the "Run anyway" button to run the .bat file. Alternatively you can disable Windows smart screen to get rid of this blue Windows protection windows.<br />
<br />
A CMD window will open up. It will perform a lot of tasks and install fixes for the RDP Wrapper library 1.6.2 that we downloaded. Once everything is finished the CMD window will close.<br />
<br />
After that you can run the "RDPConf.exe" file in the RDP Wrapper folder to see whether the RDP Wrapper library was installed and is working properly. Below an example of a working RDP Wrapper:<br />
<img src="https://i.imgur.com/xpN38nD.png" loading="lazy"  alt="[Image: xpN38nD.png]" class="mycode_img" /><br />
<hr class="mycode_hr" />
<br />
Now you can verify that RDP is working on your Windows 10 Home computer by using a different device with a RDP client and typing in the IP address of your Windows 10 Home computer. If everything works you will be connect to your computer via RDP and you can login with your user.<br />
<br />
<img src="https://i.imgur.com/llq9AA6.png" loading="lazy"  alt="[Image: llq9AA6.png]" class="mycode_img" /><br />
<img src="https://i.imgur.com/dzUFprr.png" loading="lazy"  alt="[Image: dzUFprr.png]" class="mycode_img" /><br />
<img src="https://i.imgur.com/V95OU9c.png" loading="lazy"  alt="[Image: V95OU9c.png]" class="mycode_img" /><br />
<br />
As you can see I'm connected to my Windows 10 Home VM. Windows still says that RDP is not available because of Windows 10 Home but we're connected via RDP. We have successfully enable RDP on our Windows 10 Home computer.<br />
<br />
That's it! Couldn't be easier, right? You can configure RDP Wrapper further by editing the rdpwrapper.ini file inside the RDP Wrapper folder. WARNING: You shouldn't touch the file if you don't know what you are doing. Some options can be guessed easily by the names but others aren't that easy to understand and can break RDP on your system. <br />
</div>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Installing Wordpress Mulitsite]]></title>
			<link>https://post4vps.com/Thread-Installing-Wordpress-Mulitsite</link>
			<pubDate>Sun, 11 Oct 2020 23:55:55 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://post4vps.com/member.php?action=profile&uid=2077">tbelldesignco</a>]]></dc:creator>
			<guid isPermaLink="false">https://post4vps.com/Thread-Installing-Wordpress-Mulitsite</guid>
			<description><![CDATA[Hello All,<br />
<br />
So I have been working through all of the bugs of this install to get thing exactly correct, so fellow designers and developers can follow along and setup a Wordpress Multisite Network to easily create and manage sites for clients along with theme and plugin development. Before we begin, we will need some things in place before we can get to the meat and potatoes of the tutorial.<br />
<br />
Prerequisites:<br />
 - Ubuntu Server 18.04<br />
 - Apache2 (Your LAMP stack including Apache and SQL)<br />
 - PHP 7.4.11<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Setting up Ubuntu Server:</span><br />
<br />
If you are installing a fresh install of Ubuntu proceed through the setup and when prompted to select an install package, you can choose the Apache2 (LAMP Stack), make sure to hit the spacebar to select the install package prior to hitting the enter button.<br />
<br />
1. Check to see if UFW has the Apache application profile: <br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>sudo ufw app list</code></div></div><br />
You should see the available options include: Apache, Apache Full, Apache Secure<br />
2. Allow incoming HTTP/HTTPS traffic to your server:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>sudo ufw allow in "Apache Full"</code></div></div><br />
Using your public IP address you can check to see if Apache was correctly configured, you can visit <a href="http://PUBLIC.IP.ADDRESS" target="_blank" rel="noopener" class="mycode_url">http://PUBLIC.IP.ADDRESS</a> and you should see the default Apache2 Ubuntu Default Page. If you are unable to see this page make sure to start the server if it has not been started already <span style="font-weight: bold;" class="mycode_b">sudo systemctl start apache2</span><br />
<br />
3. Install MySQL Server<br />
You will now need to install the MySQL server so you can being creating databases. This setup will install the initial server with a root user and you will be able to set the password for the root user along with securing the server with the secure installation. First run:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>sudo apt install mysql-server</code></div></div><br />
You will see a list of packages that will need to be installed, type Y to confirm and then the installation will continue. After the installation has completed, you will now need to run this built in script to remove any harmful defaults and lock down your SQL Server.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>sudo mysql_secure_installation</code></div></div><br />
The secure installer will then ask you a list of questions, all of which you can answer Y too. The next step will ask you to select a password validation policy level, where 0 is none at all and 3 is maximum security, you will need a super strong password. With my installation, I set the level to 1, that way you need a secure password, but it does not have to be wickedly strong. You will then setup and confirm the password for root@localhost.<br />
<br />
4. Installing PHP<br />
Using the following command you can install PHP and it's components for displaying dynamic content and connecting to the MySQL server.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>sudo apt install php libapache2-mod-php php-mysql</code></div></div><br />
Once the scripts install, restart the apache server: <span style="font-weight: bold;" class="mycode_b">sudo systemctl restart apache2</span><br />
<br />
Now that the server is restarted, you can upgrade from the stock PHP version in Ubuntu (PHP 7.0) to the most recent version, 7.4.11. Run the following scripts to add the PPA repository for PHP 7.4.<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>sudo apt install software-properties-common<br />
sudo add-apt-repository ppa:ondrej/php<br />
sudo apt update<br />
sudo apt install php7.4</code></div></div><br />
With PHP 7.4 installed, you will now need to run these commands to install the needed PHP modules followed by deactivating PHP 7.0 and activating PHP 7.4 then restarting Apache.<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>sudo apt install php7.4-{mysql,common,xml,xmlrcp,curl,gd,imagick,cli,dev,mbstring,opcache,soap,zip,intl}<br />
sudo a2dismod php7.0<br />
sudo a2enmod php7.4<br />
sudo systemctl restart apache2</code></div></div><br />
5. Upgrading phpMyAdmin &amp; Adding a Symbolic Link<br />
Now we have PHP updated, we need to update phpMyAdmin, the stock version included in the LAMP stack is out of date and some of the functions are depreciated. This will give you the most up to date version of phpMyAdmin which is compatible with PHP 7.0+ and MySQL 5.0+.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>Navigate back to your system root and change to the directory /usr/share and remove the current phpmyadmin folder<br />
<br />
sudo rm -rf ./phpmyadmin/<br />
<br />
Followed by downloading phpMyAdmin, unpacking it and renaming the directory<br />
<br />
sudo wget https://files.phpmyadmin.net/phpMyAdmin/5.0.3/phpMyAdmin-5.0.3-english.tar.gz<br />
sudo tar -xvf phpMyAdmin-5.0.3-english.tar.gz<br />
sudo mv ./phpMyAdmin-5.0.3-english/ ./phpmyadmin/<br />
sudo rm -rf phpMyAdmin-5.0.3-english.tar.gz</code></div></div><br />
Now that we have the update downloaded, you will need to change the config.sample.inc.php into config.inc.php and then add a blowfish secret key that will enable cookies for phpMyAdmin.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>cd phpmyadmin<br />
cp ./config.sample.inc.php ./config.inc.php<br />
sudo nano config.inc.php</code></div></div><br />
Key down to the line asking for the blowfish key and then generate it and insert from this site: <a href="https://phpsolved.com/phpmyadmin-blowfish-secret-generator/" target="_blank" rel="noopener" class="mycode_url">https://phpsolved.com/phpmyadmin-blowfis...generator/</a><br />
<br />
Once you have it entered press ctrl+X and save the changes.<br />
<br />
6. Setting up Virtual Hosts<br />
Now that your Apache server is mostly set up, you can now begin to create the public_html folder which will host the Wordpress install. This is where you would connect up your domain by modifying the DNS settings with your cPanel or Domain Registrar. You can set up and give the proper permissions to the public_html folder by running the commands below.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>cd ../../../<br />
sudo mkdir /var/www/public_html<br />
sudo chown -R &#36;USER:&#36;USER /var/www/public_html<br />
sudo chmod -R 755 /var/www/public_html</code></div></div><br />
Now that the public_html directory is made, you will need to create a virtual host file that will allow Apache to serve the content when you and others access your site. Run these commands to create a new configuration file. Make sure to change YOURDOMAIN to your domain name. Ie. tbelldesign.conf<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/YOURDOMAIN.conf<br />
sudo nano /etc/apache2/sites-available/YOURDOMAIN.conf<br />
<br />
Change the following details to match your domain:<br />
ServerName YOURDOMAIN<br />
ServerAlias www.YOURDOMAIN<br />
DocumentRoot /var/www/public_html<br />
<br />
Now exit and write the changes then run the following commands to enable your new conf and disable the default conf.<br />
<br />
sudo a2ensite YOURDOMAIN.conf<br />
sudo a2dissite 000-default.conf<br />
sudo systemctl restart apache2</code></div></div><br />
Now that you have your new virtual host setup, you will need to create a symbolic link to your public_html so that when you visit <a href="http://YOURDOMAIN/phpmyadmin/" target="_blank" rel="noopener" class="mycode_url">http://YOURDOMAIN/phpmyadmin/</a> you can login to phpMyAdmin and have all of the great features this visual database manager has to offer.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>sudo ln -ls /etc/phpmyadmin/ /var/www/phpmyadmin/</code></div></div><br />
Now visit <a href="http://YOURDOMAIN/phpmyadmin/" target="_blank" rel="noopener" class="mycode_url">http://YOURDOMAIN/phpmyadmin/</a> to make sure that you can see the login page and log in with your root@localhost username (root) and the password you setup during the MySQL secure install. If you are unable to access phpmyadmin, make sure to chown and chmod the directory.<br />
<br />
7. Install Wordpress<br />
Now that you have Apache, PHP, MySQL and phpMyAdmin installed and configured you can now download Wordpress to your public_html folder and begin the installation process.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>cd /var/www/public_html<br />
sudo wget https://wordpress.org/latest.tar.gz<br />
sudo tar -xvf latest.tar.gz<br />
cd ./wordpress<br />
sudo mv -R ./* ../<br />
cd ../<br />
rm -rf wordpress/<br />
<br />
Then make sure to chmod everything so it is writable by the installer<br />
<br />
sudo chmod -R 755 ./</code></div></div><br />
Now the Wordpress is moved to public_html you can begin the installation by visiting <a href="http://YOURDOMAIN" target="_blank" rel="noopener" class="mycode_url">http://YOURDOMAIN</a> and following the directions.<br />
<br />
Once you have successfully installed Wordpress, you can edit your wp-config.php to then begin the installation of Multisite Network.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>sudo nano wp-config.php<br />
<br />
Add the following code right above /*Finish adding code, happy editing*/<br />
<br />
define('WP_ALLOW_MULTISITE' , true);<br />
<br />
Close and write the changes</code></div></div><br />
Next login to WP-Admin using the credentials you have set up, and begin to remove the stock plugins and the default themes, minus Twenty Twenty. Then head on over to Settings&gt;Permalink and change the option to Post Name. Once those are removed, you can then go to Settings&gt; Create a Wordpress Network of Site. Follow the recommendations of the the installation of the network. I recommend using the subdirectory method and disabling the subdomain method of adding sites. With it installed, you will now be able to create development sites, add network themes and plugins along with more network admin users.<br />
<br />
Edit: Subdomain Setup<br />
To have a subdomain set up where your wordpress network would look like site1.YOURDOMAIN and site2.YOURDOMAIN you will need to set up a wildcard subdomain either in cPanel or with your domain registrar. In cPanel you would go to Domains&gt;Sub Domains and create a subdomain with the following information.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>* .YOURDOMAIN<br />
/var/www/YOURDOMAIN/public_html/wildcard<br />
<br />
Then in your DNS settings you will need to have the wildcard domain (*.YOURDOMAIN) point towards your server.</code></div></div><br />
If you're not using cPanel, you can login to your domain registrar and edit your DNS settings and set up the same configuration but it will look something like this:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TTL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Class&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Type&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Record<br />
*.YOURDOMAIN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 14400&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;YOURSERVERIP<br />
www.*.YOURDOMAIN&nbsp;&nbsp; 14400&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;YOURSERVERIP</code></div></div><br />
Thank you to <dvz_me_placeholder id="3" /> for this recommendation.<br />
<br />
I would like to thanks Post4VPS and <dvz_me_placeholder id="4" /> for the amazing server, allowing me to get Tyler Bell Design Co. Development up and running. You can see the results of the Multisite Network by visiting <a href="http://dev.tbelldesign.co" target="_blank" rel="noopener" class="mycode_url">http://dev.tbelldesign.co</a> and <a href="http://dev.tbelldesign.co/eventpros/" target="_blank" rel="noopener" class="mycode_url">http://dev.tbelldesign.co/eventpros/</a> to see how one network can host a plethora of sub sites. Good luck and happy development! If you have any questions feel free to ask them below!]]></description>
			<content:encoded><![CDATA[Hello All,<br />
<br />
So I have been working through all of the bugs of this install to get thing exactly correct, so fellow designers and developers can follow along and setup a Wordpress Multisite Network to easily create and manage sites for clients along with theme and plugin development. Before we begin, we will need some things in place before we can get to the meat and potatoes of the tutorial.<br />
<br />
Prerequisites:<br />
 - Ubuntu Server 18.04<br />
 - Apache2 (Your LAMP stack including Apache and SQL)<br />
 - PHP 7.4.11<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Setting up Ubuntu Server:</span><br />
<br />
If you are installing a fresh install of Ubuntu proceed through the setup and when prompted to select an install package, you can choose the Apache2 (LAMP Stack), make sure to hit the spacebar to select the install package prior to hitting the enter button.<br />
<br />
1. Check to see if UFW has the Apache application profile: <br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>sudo ufw app list</code></div></div><br />
You should see the available options include: Apache, Apache Full, Apache Secure<br />
2. Allow incoming HTTP/HTTPS traffic to your server:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>sudo ufw allow in "Apache Full"</code></div></div><br />
Using your public IP address you can check to see if Apache was correctly configured, you can visit <a href="http://PUBLIC.IP.ADDRESS" target="_blank" rel="noopener" class="mycode_url">http://PUBLIC.IP.ADDRESS</a> and you should see the default Apache2 Ubuntu Default Page. If you are unable to see this page make sure to start the server if it has not been started already <span style="font-weight: bold;" class="mycode_b">sudo systemctl start apache2</span><br />
<br />
3. Install MySQL Server<br />
You will now need to install the MySQL server so you can being creating databases. This setup will install the initial server with a root user and you will be able to set the password for the root user along with securing the server with the secure installation. First run:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>sudo apt install mysql-server</code></div></div><br />
You will see a list of packages that will need to be installed, type Y to confirm and then the installation will continue. After the installation has completed, you will now need to run this built in script to remove any harmful defaults and lock down your SQL Server.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>sudo mysql_secure_installation</code></div></div><br />
The secure installer will then ask you a list of questions, all of which you can answer Y too. The next step will ask you to select a password validation policy level, where 0 is none at all and 3 is maximum security, you will need a super strong password. With my installation, I set the level to 1, that way you need a secure password, but it does not have to be wickedly strong. You will then setup and confirm the password for root@localhost.<br />
<br />
4. Installing PHP<br />
Using the following command you can install PHP and it's components for displaying dynamic content and connecting to the MySQL server.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>sudo apt install php libapache2-mod-php php-mysql</code></div></div><br />
Once the scripts install, restart the apache server: <span style="font-weight: bold;" class="mycode_b">sudo systemctl restart apache2</span><br />
<br />
Now that the server is restarted, you can upgrade from the stock PHP version in Ubuntu (PHP 7.0) to the most recent version, 7.4.11. Run the following scripts to add the PPA repository for PHP 7.4.<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>sudo apt install software-properties-common<br />
sudo add-apt-repository ppa:ondrej/php<br />
sudo apt update<br />
sudo apt install php7.4</code></div></div><br />
With PHP 7.4 installed, you will now need to run these commands to install the needed PHP modules followed by deactivating PHP 7.0 and activating PHP 7.4 then restarting Apache.<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>sudo apt install php7.4-{mysql,common,xml,xmlrcp,curl,gd,imagick,cli,dev,mbstring,opcache,soap,zip,intl}<br />
sudo a2dismod php7.0<br />
sudo a2enmod php7.4<br />
sudo systemctl restart apache2</code></div></div><br />
5. Upgrading phpMyAdmin &amp; Adding a Symbolic Link<br />
Now we have PHP updated, we need to update phpMyAdmin, the stock version included in the LAMP stack is out of date and some of the functions are depreciated. This will give you the most up to date version of phpMyAdmin which is compatible with PHP 7.0+ and MySQL 5.0+.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>Navigate back to your system root and change to the directory /usr/share and remove the current phpmyadmin folder<br />
<br />
sudo rm -rf ./phpmyadmin/<br />
<br />
Followed by downloading phpMyAdmin, unpacking it and renaming the directory<br />
<br />
sudo wget https://files.phpmyadmin.net/phpMyAdmin/5.0.3/phpMyAdmin-5.0.3-english.tar.gz<br />
sudo tar -xvf phpMyAdmin-5.0.3-english.tar.gz<br />
sudo mv ./phpMyAdmin-5.0.3-english/ ./phpmyadmin/<br />
sudo rm -rf phpMyAdmin-5.0.3-english.tar.gz</code></div></div><br />
Now that we have the update downloaded, you will need to change the config.sample.inc.php into config.inc.php and then add a blowfish secret key that will enable cookies for phpMyAdmin.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>cd phpmyadmin<br />
cp ./config.sample.inc.php ./config.inc.php<br />
sudo nano config.inc.php</code></div></div><br />
Key down to the line asking for the blowfish key and then generate it and insert from this site: <a href="https://phpsolved.com/phpmyadmin-blowfish-secret-generator/" target="_blank" rel="noopener" class="mycode_url">https://phpsolved.com/phpmyadmin-blowfis...generator/</a><br />
<br />
Once you have it entered press ctrl+X and save the changes.<br />
<br />
6. Setting up Virtual Hosts<br />
Now that your Apache server is mostly set up, you can now begin to create the public_html folder which will host the Wordpress install. This is where you would connect up your domain by modifying the DNS settings with your cPanel or Domain Registrar. You can set up and give the proper permissions to the public_html folder by running the commands below.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>cd ../../../<br />
sudo mkdir /var/www/public_html<br />
sudo chown -R &#36;USER:&#36;USER /var/www/public_html<br />
sudo chmod -R 755 /var/www/public_html</code></div></div><br />
Now that the public_html directory is made, you will need to create a virtual host file that will allow Apache to serve the content when you and others access your site. Run these commands to create a new configuration file. Make sure to change YOURDOMAIN to your domain name. Ie. tbelldesign.conf<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/YOURDOMAIN.conf<br />
sudo nano /etc/apache2/sites-available/YOURDOMAIN.conf<br />
<br />
Change the following details to match your domain:<br />
ServerName YOURDOMAIN<br />
ServerAlias www.YOURDOMAIN<br />
DocumentRoot /var/www/public_html<br />
<br />
Now exit and write the changes then run the following commands to enable your new conf and disable the default conf.<br />
<br />
sudo a2ensite YOURDOMAIN.conf<br />
sudo a2dissite 000-default.conf<br />
sudo systemctl restart apache2</code></div></div><br />
Now that you have your new virtual host setup, you will need to create a symbolic link to your public_html so that when you visit <a href="http://YOURDOMAIN/phpmyadmin/" target="_blank" rel="noopener" class="mycode_url">http://YOURDOMAIN/phpmyadmin/</a> you can login to phpMyAdmin and have all of the great features this visual database manager has to offer.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>sudo ln -ls /etc/phpmyadmin/ /var/www/phpmyadmin/</code></div></div><br />
Now visit <a href="http://YOURDOMAIN/phpmyadmin/" target="_blank" rel="noopener" class="mycode_url">http://YOURDOMAIN/phpmyadmin/</a> to make sure that you can see the login page and log in with your root@localhost username (root) and the password you setup during the MySQL secure install. If you are unable to access phpmyadmin, make sure to chown and chmod the directory.<br />
<br />
7. Install Wordpress<br />
Now that you have Apache, PHP, MySQL and phpMyAdmin installed and configured you can now download Wordpress to your public_html folder and begin the installation process.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>cd /var/www/public_html<br />
sudo wget https://wordpress.org/latest.tar.gz<br />
sudo tar -xvf latest.tar.gz<br />
cd ./wordpress<br />
sudo mv -R ./* ../<br />
cd ../<br />
rm -rf wordpress/<br />
<br />
Then make sure to chmod everything so it is writable by the installer<br />
<br />
sudo chmod -R 755 ./</code></div></div><br />
Now the Wordpress is moved to public_html you can begin the installation by visiting <a href="http://YOURDOMAIN" target="_blank" rel="noopener" class="mycode_url">http://YOURDOMAIN</a> and following the directions.<br />
<br />
Once you have successfully installed Wordpress, you can edit your wp-config.php to then begin the installation of Multisite Network.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>sudo nano wp-config.php<br />
<br />
Add the following code right above /*Finish adding code, happy editing*/<br />
<br />
define('WP_ALLOW_MULTISITE' , true);<br />
<br />
Close and write the changes</code></div></div><br />
Next login to WP-Admin using the credentials you have set up, and begin to remove the stock plugins and the default themes, minus Twenty Twenty. Then head on over to Settings&gt;Permalink and change the option to Post Name. Once those are removed, you can then go to Settings&gt; Create a Wordpress Network of Site. Follow the recommendations of the the installation of the network. I recommend using the subdirectory method and disabling the subdomain method of adding sites. With it installed, you will now be able to create development sites, add network themes and plugins along with more network admin users.<br />
<br />
Edit: Subdomain Setup<br />
To have a subdomain set up where your wordpress network would look like site1.YOURDOMAIN and site2.YOURDOMAIN you will need to set up a wildcard subdomain either in cPanel or with your domain registrar. In cPanel you would go to Domains&gt;Sub Domains and create a subdomain with the following information.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>* .YOURDOMAIN<br />
/var/www/YOURDOMAIN/public_html/wildcard<br />
<br />
Then in your DNS settings you will need to have the wildcard domain (*.YOURDOMAIN) point towards your server.</code></div></div><br />
If you're not using cPanel, you can login to your domain registrar and edit your DNS settings and set up the same configuration but it will look something like this:<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>Name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TTL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Class&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Type&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Record<br />
*.YOURDOMAIN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 14400&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;YOURSERVERIP<br />
www.*.YOURDOMAIN&nbsp;&nbsp; 14400&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; IN&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; A&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;YOURSERVERIP</code></div></div><br />
Thank you to <dvz_me_placeholder id="3" /> for this recommendation.<br />
<br />
I would like to thanks Post4VPS and <dvz_me_placeholder id="4" /> for the amazing server, allowing me to get Tyler Bell Design Co. Development up and running. You can see the results of the Multisite Network by visiting <a href="http://dev.tbelldesign.co" target="_blank" rel="noopener" class="mycode_url">http://dev.tbelldesign.co</a> and <a href="http://dev.tbelldesign.co/eventpros/" target="_blank" rel="noopener" class="mycode_url">http://dev.tbelldesign.co/eventpros/</a> to see how one network can host a plethora of sub sites. Good luck and happy development! If you have any questions feel free to ask them below!]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[How to Host(/mirror) your Own online KVM VPS Locally]]></title>
			<link>https://post4vps.com/Thread-How-to-Host-mirror-your-Own-online-KVM-VPS-Locally</link>
			<pubDate>Sat, 03 Oct 2020 06:20:55 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://post4vps.com/member.php?action=profile&uid=1026">fChk</a>]]></dc:creator>
			<guid isPermaLink="false">https://post4vps.com/Thread-How-to-Host-mirror-your-Own-online-KVM-VPS-Locally</guid>
			<description><![CDATA[There are times when we want to replicate our own online VPS locally whatever the reason behind that decision; this HowTo tutorial is just about this process done for a QEMU/KVM guest system.<br />
<br />
<span style="font-size: large;" class="mycode_size">Some Context:</span><br />
During last June I decided to terminate my VPS-9 hosting of a GIS project that I've deployed there over a period of 2 months. The general experience was fair but I've never let it run on autopilot mainly because of CPU issues (stealness issues and CPU spikes (under certain circumstances) with time spans edging the sponsor's AUP.<br />
<br />
Because everything was already perfectly setup and working just fine, I decided to replicate my VPS-9 locally, on my Fedora Server 32, which is running KVM.<br />
<br />
The replication process consists in two steps:<br />
<ol type="1" class="mycode_list"><li>The first thing we have to do is to clone VPS-9 virtual disk (ie /dev/vda) over the network using dd.<br />
</li>
<li>Once we get our block device then we can setup our KVM VPS by mimicking the same configuration used by VirMach.<br />
</li>
</ol>
In this post, I'll only touch on <span style="text-decoration: underline;" class="mycode_u">the how to clone a block device over the network.</span> The VPS creation will be addressed in the next post.<br />
<br />
<span style="font-size: large;" class="mycode_size">Cloning your VPS storage device over the network</span><br />
As with pretty much anything in Linux, there are many ways to clone a block device over the network. But the most simple and straightforward way is to use the old and time-tested DD tool over SSH.<br />
<br />
Before showing the command I've used, I must first stress on the fact that while you have to keep your VPS online, it must be kept in a quasi idle state. That means all its services must be turned off, everything!.. Of course you'll still have some residual activity, but what we aim for is that the filesystem should not be altered too much while we're copying the entire block device. You must remember that transferring 100 GiB (the size of VirMach VPS-9) over the network will take hours!<br />
<br />
Now for the command:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>ssh -i ~/.ssh/phoenix-ecdsa-key xxx.xxx.xxx.xxx -p SSH-PORT "sudo dd if=/dev/vda bs=16M conv=sparse,notrunc,noerror status=progress | gzip -1 -" | dd bs=16M of=phoenix.img.gz</code></div></div><br />
What this command does is first initiate the SSH login via our public key authentication then, when done, run the dd command as a sudoer. But for this to work you'll have to let your sudoer run commands without entering the password everytime [1].<br />
<br />
Now let's see what the bellow subcommand does:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>sudo dd if=/dev/vda bs=16M conv=sparse,notrunc,noerror status=progress | gzip -1 -</code></div></div>This command, if successful, will end up generating a gzipped stream of our block device that will feed the next portion of the code highlighted in the code bellow.<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&lt;....&gt; | dd bs=16M of=phoenix.img.gz</code></div></div>This portion of the code will simply get the streamed feed and store it locally as the 'phoenix.img.gz' image file.<br />
<br />
Back to the dd command. it was set to copy our block device, which was /dev/vda, in 16 MB block size while ignoring all read errors and constantly updating us on its progress.<br />
<br />
That's a hell of a command!.. Isn't it?<br />
<br />
Here is the whole output in my case, from start to finish, some 30 hours latter:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>[me@local media]&#36; ssh -i ~/.ssh/phoenix-ecdsa-key xxx.xxx.xxx.xxx -p SSH-PORT "sudo dd if=/dev/vda bs=16M conv=sparse,notrunc,noerror status=progress | gzip -1 -" | dd bs=16M of=phoenix.img.gz<br />
107374182400 bytes (107 GB, 100 GiB) copied, 118118 s, 909 kB/s<br />
6400+0 records in<br />
6400+0 records out<br />
107374182400 bytes (107 GB, 100 GiB) copied, 118118 s, 909 kB/s<br />
0+2428890 records in<br />
0+2428890 records out<br />
47201888523 bytes (47 GB, 44 GiB) copied, 118125 s, 400 kB/s</code></div></div><br />
Once I have my block device on my PC, I can now start setting up my VPS-9 locally; but that for the next post.<br />
<br />
Stay tuned!...<br />
<br />
------------------------<br />
[1]-Generally, it's just a matter of appending this line at the end of the '/etc/sudoers' file:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>sudoerUserName ALL=(ALL) NOPASSWD: ALL</code></div></div><br />
<br />
Edited!..]]></description>
			<content:encoded><![CDATA[There are times when we want to replicate our own online VPS locally whatever the reason behind that decision; this HowTo tutorial is just about this process done for a QEMU/KVM guest system.<br />
<br />
<span style="font-size: large;" class="mycode_size">Some Context:</span><br />
During last June I decided to terminate my VPS-9 hosting of a GIS project that I've deployed there over a period of 2 months. The general experience was fair but I've never let it run on autopilot mainly because of CPU issues (stealness issues and CPU spikes (under certain circumstances) with time spans edging the sponsor's AUP.<br />
<br />
Because everything was already perfectly setup and working just fine, I decided to replicate my VPS-9 locally, on my Fedora Server 32, which is running KVM.<br />
<br />
The replication process consists in two steps:<br />
<ol type="1" class="mycode_list"><li>The first thing we have to do is to clone VPS-9 virtual disk (ie /dev/vda) over the network using dd.<br />
</li>
<li>Once we get our block device then we can setup our KVM VPS by mimicking the same configuration used by VirMach.<br />
</li>
</ol>
In this post, I'll only touch on <span style="text-decoration: underline;" class="mycode_u">the how to clone a block device over the network.</span> The VPS creation will be addressed in the next post.<br />
<br />
<span style="font-size: large;" class="mycode_size">Cloning your VPS storage device over the network</span><br />
As with pretty much anything in Linux, there are many ways to clone a block device over the network. But the most simple and straightforward way is to use the old and time-tested DD tool over SSH.<br />
<br />
Before showing the command I've used, I must first stress on the fact that while you have to keep your VPS online, it must be kept in a quasi idle state. That means all its services must be turned off, everything!.. Of course you'll still have some residual activity, but what we aim for is that the filesystem should not be altered too much while we're copying the entire block device. You must remember that transferring 100 GiB (the size of VirMach VPS-9) over the network will take hours!<br />
<br />
Now for the command:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>ssh -i ~/.ssh/phoenix-ecdsa-key xxx.xxx.xxx.xxx -p SSH-PORT "sudo dd if=/dev/vda bs=16M conv=sparse,notrunc,noerror status=progress | gzip -1 -" | dd bs=16M of=phoenix.img.gz</code></div></div><br />
What this command does is first initiate the SSH login via our public key authentication then, when done, run the dd command as a sudoer. But for this to work you'll have to let your sudoer run commands without entering the password everytime [1].<br />
<br />
Now let's see what the bellow subcommand does:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>sudo dd if=/dev/vda bs=16M conv=sparse,notrunc,noerror status=progress | gzip -1 -</code></div></div>This command, if successful, will end up generating a gzipped stream of our block device that will feed the next portion of the code highlighted in the code bellow.<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>&lt;....&gt; | dd bs=16M of=phoenix.img.gz</code></div></div>This portion of the code will simply get the streamed feed and store it locally as the 'phoenix.img.gz' image file.<br />
<br />
Back to the dd command. it was set to copy our block device, which was /dev/vda, in 16 MB block size while ignoring all read errors and constantly updating us on its progress.<br />
<br />
That's a hell of a command!.. Isn't it?<br />
<br />
Here is the whole output in my case, from start to finish, some 30 hours latter:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>[me@local media]&#36; ssh -i ~/.ssh/phoenix-ecdsa-key xxx.xxx.xxx.xxx -p SSH-PORT "sudo dd if=/dev/vda bs=16M conv=sparse,notrunc,noerror status=progress | gzip -1 -" | dd bs=16M of=phoenix.img.gz<br />
107374182400 bytes (107 GB, 100 GiB) copied, 118118 s, 909 kB/s<br />
6400+0 records in<br />
6400+0 records out<br />
107374182400 bytes (107 GB, 100 GiB) copied, 118118 s, 909 kB/s<br />
0+2428890 records in<br />
0+2428890 records out<br />
47201888523 bytes (47 GB, 44 GiB) copied, 118125 s, 400 kB/s</code></div></div><br />
Once I have my block device on my PC, I can now start setting up my VPS-9 locally; but that for the next post.<br />
<br />
Stay tuned!...<br />
<br />
------------------------<br />
[1]-Generally, it's just a matter of appending this line at the end of the '/etc/sudoers' file:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>sudoerUserName ALL=(ALL) NOPASSWD: ALL</code></div></div><br />
<br />
Edited!..]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[How to install OpenGamePanel on Debian/Ubuntu]]></title>
			<link>https://post4vps.com/Thread-How-to-install-OpenGamePanel-on-Debian-Ubuntu</link>
			<pubDate>Mon, 28 Sep 2020 11:16:48 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://post4vps.com/member.php?action=profile&uid=453">sAmI</a>]]></dc:creator>
			<guid isPermaLink="false">https://post4vps.com/Thread-How-to-install-OpenGamePanel-on-Debian-Ubuntu</guid>
			<description><![CDATA[<div style="text-align: center;" class="mycode_align"><span style="font-weight: bold;" class="mycode_b">This is an updated tutorial! The previous tutorials of OpenGamePanel posted on Post4VPS can be found here <a href="https://post4vps.com/Thread-Debian-Ubuntu-Full-OpenGamePanel-Guide-FOGPG?highlight=opengamepanel" target="_blank" rel="noopener" class="mycode_url">Thread 1</a> &amp; <a href="https://post4vps.com/Thread-Install-OpenGamePanel-Agent-on-centos-5-6-7?highlight=opengamepanel" target="_blank" rel="noopener" class="mycode_url">Thread 2</a>.</span></div>
<br />
Hello there!<br />
OpenGamePanel is a free and really easy to use game management panel which consist of many features and it is better than some paid game management panels. OpenGamePanel have two parts which i will show you how to install<br />
1. <span style="font-weight: bold;" class="mycode_b">Panel/Website</span> : Which will be used to manage your server and agents and install game servers etc.<br />
2. <span style="font-weight: bold;" class="mycode_b">Agent </span>: Which will control all your servers and it can be remotely managed by the Web Interface!<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Step 1 : [b]Updating your VPS:</span>[/b]<br />
<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>apt-get -y update &amp;&amp; apt-get -y upgrade </code></div></div><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Step 2 : Preparing and Installing Required Packages for Web Panel</span><br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>apt-get install apache2 curl subversion php7.0 php7.0-gd php7.0-zip libapache2-mod-php7.0 php7.0-curl php7.0-mysql php7.0-xmlrpc php-pear phpmyadmin mysql-server php7.0-mbstring php-gettext git php-bcmath  - UBUNTU 16.04 &amp; DEBIAN 9!</code></div></div><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>apt-get install apache2 curl subversion php7.2 php7.2-gd php7.2-zip libapache2-mod-php7.2 php7.2-curl php7.2-mysql php7.2-xmlrpc php-pear mysql-server php7.2-mbstring php-gettext git php-bcmath - UBUNTU 18.0</code></div></div><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>apt-get install apache2 curl subversion php7.3 php7.3-gd php7.3-zip libapache2-mod-php7.3 php7.3-curl php7.3-mysql php7.3-xmlrpc php-pear mariadb-server php7.3-mbstring php-gettext git php-bcmath - DEBIAN 10</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">Step 3 : Installing OpenGamePanel</span><br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>wget "https://github.com/OpenGamePanel/Easy-Installers/raw/master/Linux/Debian-Ubuntu/ogp-panel-latest.deb"<br />
sudo dpkg -i "ogp-panel-latest.deb"</code></div></div>After doing the second step you will be prompt to enter your root SQL Password so it can create a database for the Panel. The details will be shown for your OpenGamePanel Database Like this:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>MySQL Host: localhost<br />
MySQL User: ogpuser<br />
MySQL User Password: lbRufrXCdd3e<br />
MySQL Database Name: ogp_panel</code></div></div><br />
After entering your root password you can now open <a href="http://2.2.2.2/" target="_blank" rel="noopener" class="mycode_url">http://2.2.2.2/</a> (Change it with your server ip) you will be redirected to the install page! <br />
If you just in case did not save the password before you can use the following command to retrieve your database password <br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>cat ogp_panel_mysql_info</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">Step 4 : Installing a theme (because the default theme looks really old duh) and this obsidian theme is created by HMR!</span><br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>cd /var/www/html/themes/<br />
git clone https://github.com/hmrserver/Obsidian.git<br />
mv Obsidian/themes/Obsidian/* Obsidian/</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">Step 5 : Installing Required Packages for OpenGamePanel Agent<span style="color: #24292e;" class="mycode_color"><span style="font-size: x-small;" class="mycode_size"><span style="font-family: SFMono-Regular, Consolas,;" class="mycode_font">a</span></span></span></span><br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>sudo apt-get install libxml-parser-perl libpath-class-perl perl-modules screen rsync sudo e2fsprogs unzip subversion libarchive-extract-perl pure-ftpd libarchive-zip-perl libc6 libgcc1 git curl<br />
sudo apt-get install libc6-i386 <br />
sudo apt-get install libgcc1:i386<br />
sudo apt-get install libhttp-daemon-perl<br />
sudo apt-get install lib32gcc1</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">Step 6 : Installing the OpenGamePanel Agent</span><br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>wget "https://github.com/OpenGamePanel/OGP-Agent-Linux/archive/master.zip"<br />
unzip master.zip<br />
cd OGP-Agent-Linux-master/<br />
<br />
# Create a USER for<br />
sudo adduser ogpbot<br />
sudo usermod -a -G sudo ogpbot<br />
sudo bash ./install.sh</code></div></div>Now you have successfully installed OpenGamePanel AGENT and WEB Panel you can easily now add your server to the web panel<br />
Click on Administration&gt;Servers<br />
Where you have to put your Server IP and your encryption key which you set when you were installing the OpenGamePanel Agent!<br />
Links to some other themes <ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b"><a href="https://github.com/chiqors/FlatOGP" target="_blank" rel="noopener" class="mycode_url">FlatOGP</a></span><br />
</li>
<li><span style="font-weight: bold;" class="mycode_b"><a href="https://github.com/hmrserver/Obsidian" target="_blank" rel="noopener" class="mycode_url">Obsidian</a></span><br />
</li>
<li><span style="font-weight: bold;" class="mycode_b"><a href="https://github.com/OpenGamePanel/Theme-SimpleBootstrap" target="_blank" rel="noopener" class="mycode_url">SimpleBootStrap</a></span><br />
</li>
</ul>
I hope you find this tutorial useful! as there are few old threads <a href="https://post4vps.com/Thread-Debian-Ubuntu-Full-OpenGamePanel-Guide-FOGPG?highlight=opengamepanel" target="_blank" rel="noopener" class="mycode_url">Thread 1</a> and <a href="https://post4vps.com/Thread-Install-OpenGamePanel-Agent-on-centos-5-6-7?highlight=opengamepanel" target="_blank" rel="noopener" class="mycode_url">Thread 2</a>, Which were a little bit outdated and a little bit difficult to install. I have tested this on a VPS with Ubuntu 16.04 and Debian 9. Soon will update it for CENTOS 6 and 7 too!<br />
I did not use the easy installer for installing agent it somewhere breaks and causes issues, I used a manual installer which is more easy and shows you many option to setup for the agent!<br />
<br />
Regards,<br />
sAmI]]></description>
			<content:encoded><![CDATA[<div style="text-align: center;" class="mycode_align"><span style="font-weight: bold;" class="mycode_b">This is an updated tutorial! The previous tutorials of OpenGamePanel posted on Post4VPS can be found here <a href="https://post4vps.com/Thread-Debian-Ubuntu-Full-OpenGamePanel-Guide-FOGPG?highlight=opengamepanel" target="_blank" rel="noopener" class="mycode_url">Thread 1</a> &amp; <a href="https://post4vps.com/Thread-Install-OpenGamePanel-Agent-on-centos-5-6-7?highlight=opengamepanel" target="_blank" rel="noopener" class="mycode_url">Thread 2</a>.</span></div>
<br />
Hello there!<br />
OpenGamePanel is a free and really easy to use game management panel which consist of many features and it is better than some paid game management panels. OpenGamePanel have two parts which i will show you how to install<br />
1. <span style="font-weight: bold;" class="mycode_b">Panel/Website</span> : Which will be used to manage your server and agents and install game servers etc.<br />
2. <span style="font-weight: bold;" class="mycode_b">Agent </span>: Which will control all your servers and it can be remotely managed by the Web Interface!<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Step 1 : [b]Updating your VPS:</span>[/b]<br />
<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>apt-get -y update &amp;&amp; apt-get -y upgrade </code></div></div><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Step 2 : Preparing and Installing Required Packages for Web Panel</span><br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>apt-get install apache2 curl subversion php7.0 php7.0-gd php7.0-zip libapache2-mod-php7.0 php7.0-curl php7.0-mysql php7.0-xmlrpc php-pear phpmyadmin mysql-server php7.0-mbstring php-gettext git php-bcmath  - UBUNTU 16.04 &amp; DEBIAN 9!</code></div></div><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>apt-get install apache2 curl subversion php7.2 php7.2-gd php7.2-zip libapache2-mod-php7.2 php7.2-curl php7.2-mysql php7.2-xmlrpc php-pear mysql-server php7.2-mbstring php-gettext git php-bcmath - UBUNTU 18.0</code></div></div><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>apt-get install apache2 curl subversion php7.3 php7.3-gd php7.3-zip libapache2-mod-php7.3 php7.3-curl php7.3-mysql php7.3-xmlrpc php-pear mariadb-server php7.3-mbstring php-gettext git php-bcmath - DEBIAN 10</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">Step 3 : Installing OpenGamePanel</span><br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>wget "https://github.com/OpenGamePanel/Easy-Installers/raw/master/Linux/Debian-Ubuntu/ogp-panel-latest.deb"<br />
sudo dpkg -i "ogp-panel-latest.deb"</code></div></div>After doing the second step you will be prompt to enter your root SQL Password so it can create a database for the Panel. The details will be shown for your OpenGamePanel Database Like this:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>MySQL Host: localhost<br />
MySQL User: ogpuser<br />
MySQL User Password: lbRufrXCdd3e<br />
MySQL Database Name: ogp_panel</code></div></div><br />
After entering your root password you can now open <a href="http://2.2.2.2/" target="_blank" rel="noopener" class="mycode_url">http://2.2.2.2/</a> (Change it with your server ip) you will be redirected to the install page! <br />
If you just in case did not save the password before you can use the following command to retrieve your database password <br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>cat ogp_panel_mysql_info</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">Step 4 : Installing a theme (because the default theme looks really old duh) and this obsidian theme is created by HMR!</span><br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>cd /var/www/html/themes/<br />
git clone https://github.com/hmrserver/Obsidian.git<br />
mv Obsidian/themes/Obsidian/* Obsidian/</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">Step 5 : Installing Required Packages for OpenGamePanel Agent<span style="color: #24292e;" class="mycode_color"><span style="font-size: x-small;" class="mycode_size"><span style="font-family: SFMono-Regular, Consolas,;" class="mycode_font">a</span></span></span></span><br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>sudo apt-get install libxml-parser-perl libpath-class-perl perl-modules screen rsync sudo e2fsprogs unzip subversion libarchive-extract-perl pure-ftpd libarchive-zip-perl libc6 libgcc1 git curl<br />
sudo apt-get install libc6-i386 <br />
sudo apt-get install libgcc1:i386<br />
sudo apt-get install libhttp-daemon-perl<br />
sudo apt-get install lib32gcc1</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">Step 6 : Installing the OpenGamePanel Agent</span><br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>wget "https://github.com/OpenGamePanel/OGP-Agent-Linux/archive/master.zip"<br />
unzip master.zip<br />
cd OGP-Agent-Linux-master/<br />
<br />
# Create a USER for<br />
sudo adduser ogpbot<br />
sudo usermod -a -G sudo ogpbot<br />
sudo bash ./install.sh</code></div></div>Now you have successfully installed OpenGamePanel AGENT and WEB Panel you can easily now add your server to the web panel<br />
Click on Administration&gt;Servers<br />
Where you have to put your Server IP and your encryption key which you set when you were installing the OpenGamePanel Agent!<br />
Links to some other themes <ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b"><a href="https://github.com/chiqors/FlatOGP" target="_blank" rel="noopener" class="mycode_url">FlatOGP</a></span><br />
</li>
<li><span style="font-weight: bold;" class="mycode_b"><a href="https://github.com/hmrserver/Obsidian" target="_blank" rel="noopener" class="mycode_url">Obsidian</a></span><br />
</li>
<li><span style="font-weight: bold;" class="mycode_b"><a href="https://github.com/OpenGamePanel/Theme-SimpleBootstrap" target="_blank" rel="noopener" class="mycode_url">SimpleBootStrap</a></span><br />
</li>
</ul>
I hope you find this tutorial useful! as there are few old threads <a href="https://post4vps.com/Thread-Debian-Ubuntu-Full-OpenGamePanel-Guide-FOGPG?highlight=opengamepanel" target="_blank" rel="noopener" class="mycode_url">Thread 1</a> and <a href="https://post4vps.com/Thread-Install-OpenGamePanel-Agent-on-centos-5-6-7?highlight=opengamepanel" target="_blank" rel="noopener" class="mycode_url">Thread 2</a>, Which were a little bit outdated and a little bit difficult to install. I have tested this on a VPS with Ubuntu 16.04 and Debian 9. Soon will update it for CENTOS 6 and 7 too!<br />
I did not use the easy installer for installing agent it somewhere breaks and causes issues, I used a manual installer which is more easy and shows you many option to setup for the agent!<br />
<br />
Regards,<br />
sAmI]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[How to Post Longer Status Messages With Color Background On Facebook]]></title>
			<link>https://post4vps.com/Thread-How-to-Post-Longer-Status-Messages-With-Color-Background-On-Facebook</link>
			<pubDate>Mon, 07 Sep 2020 04:12:07 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://post4vps.com/member.php?action=profile&uid=2057">hopphim95</a>]]></dc:creator>
			<guid isPermaLink="false">https://post4vps.com/Thread-How-to-Post-Longer-Status-Messages-With-Color-Background-On-Facebook</guid>
			<description><![CDATA[First, you post an status with any background and set the view only for me<br />
<img src="https://i.imgur.com/uAHPMvg.png" loading="lazy"  alt="[Image: uAHPMvg.png]" class="mycode_img" /><br />
Then, you need to access facebook under the link <a href="https://m.facebook.com" target="_blank" rel="noopener" class="mycode_url">https://m.facebook.com</a><br />
<img src="https://i.imgur.com/gaCvHDT.png" loading="lazy"  alt="[Image: gaCvHDT.png]" class="mycode_img" /><br />
<br />
Then you edit the status and enter as many characters as you want, and edit your views with friends or public .. Good luck<br />
<img src="https://i.imgur.com/fhY46bU.png" loading="lazy"  alt="[Image: fhY46bU.png]" class="mycode_img" />]]></description>
			<content:encoded><![CDATA[First, you post an status with any background and set the view only for me<br />
<img src="https://i.imgur.com/uAHPMvg.png" loading="lazy"  alt="[Image: uAHPMvg.png]" class="mycode_img" /><br />
Then, you need to access facebook under the link <a href="https://m.facebook.com" target="_blank" rel="noopener" class="mycode_url">https://m.facebook.com</a><br />
<img src="https://i.imgur.com/gaCvHDT.png" loading="lazy"  alt="[Image: gaCvHDT.png]" class="mycode_img" /><br />
<br />
Then you edit the status and enter as many characters as you want, and edit your views with friends or public .. Good luck<br />
<img src="https://i.imgur.com/fhY46bU.png" loading="lazy"  alt="[Image: fhY46bU.png]" class="mycode_img" />]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[How to Install TeamSpeak3 on Debian/Ubuntu]]></title>
			<link>https://post4vps.com/Thread-How-to-Install-TeamSpeak3-on-Debian-Ubuntu</link>
			<pubDate>Sat, 08 Aug 2020 22:48:53 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://post4vps.com/member.php?action=profile&uid=453">sAmI</a>]]></dc:creator>
			<guid isPermaLink="false">https://post4vps.com/Thread-How-to-Install-TeamSpeak3-on-Debian-Ubuntu</guid>
			<description><![CDATA[Hello there, I'm going to show you the easiest way to install SinusBot and TeamSpeak3 on VPS both for Debian and Ubuntu! TeamSpeak3 is a Voice Server which is mostly used by the eSport teams for communication and it is also used by some students and other individuals too, On the other hand Sinusbot is a MusicBot in which you could listen music or setup amazing scripts provided over their forum!<br />
<br />
<span style="font-weight: bold;" class="mycode_b">So, Lets get started by updating and installing some tools for running TeamSpeak3</span><br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>For Debian/Ubuntu Users<br />
apt-get update &amp;&amp; apt-get upgrade<br />
apt-get install nano wget perl tar bzip2</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">Now, Add a non-root user for TeamSpeak3 as it is not recommended to run TeamSpeak3 on root user!</span><br />
<br />
<div class="codeblock phpcodeblock"><div class="title">PHP Code:</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">adduser&nbsp;</span><span style="color: #007700">--</span><span style="color: #0000BB">disabled</span><span style="color: #007700">-</span><span style="color: #0000BB">login&nbsp;username<br /></span><span style="color: #007700">*</span><span style="color: #0000BB">Now&nbsp;you&nbsp;can&nbsp;</span><span style="color: #007700">switch&nbsp;</span><span style="color: #0000BB">to&nbsp;the&nbsp;username</span><span style="color: #007700">*<br /></span><span style="color: #0000BB">su&nbsp;username&nbsp;<br /></span></code></div></div></div><br />
<span style="font-weight: bold;" class="mycode_b">Setting up the files for TeamSpeak3 Server and starting the server :</span><br />
<div class="codeblock phpcodeblock"><div class="title">PHP Code:</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">http</span><span style="color: #007700">:</span><span style="color: #FF8000">//dl.4players.de/ts/releases/3.12.1/teamspeak3-server_linux_amd64-3.12.1.tar.bz2&nbsp; &nbsp; -&nbsp;FOR&nbsp;64BIT*<br /></span><span style="color: #0000BB">http</span><span style="color: #007700">:</span><span style="color: #FF8000">//dl.4players.de/ts/releases/3.12.1/teamspeak3-server_linux_x86-3.12.1.tar.bz2&nbsp; &nbsp; &nbsp; -&nbsp;FOR&nbsp;32BIT*<br /></span><span style="color: #0000BB">tar&nbsp;xvf&nbsp;teamspeak3</span><span style="color: #007700">-</span><span style="color: #0000BB">server_linux_amd64</span><span style="color: #007700">-</span><span style="color: #0000BB">3.12.1</span><span style="color: #007700">.</span><span style="color: #0000BB">tar</span><span style="color: #007700">.</span><span style="color: #0000BB">bz2&nbsp;<br />cd&nbsp;teamspeak3</span><span style="color: #007700">-</span><span style="color: #0000BB">server_linux_amd64<br /><br />touch&nbsp;</span><span style="color: #007700">.</span><span style="color: #0000BB">ts3server_license_accepted&nbsp; &nbsp;<br /></span><span style="color: #007700">(</span><span style="color: #0000BB">TeamSpeak3&nbsp;requirest&nbsp;you&nbsp;to&nbsp;accept&nbsp;a&nbsp;licence&nbsp;before&nbsp;starting&nbsp;it&nbsp;</span><span style="color: #007700">for&nbsp;</span><span style="color: #0000BB">the&nbsp;first&nbsp;time</span><span style="color: #007700">)<br />(</span><span style="color: #0000BB">You&nbsp;can&nbsp;read&nbsp;the&nbsp;terms&nbsp;by&nbsp;typing&nbsp;nano&nbsp;LICENSE</span><span style="color: #007700">)<br />*</span><span style="color: #0000BB">Now&nbsp;start&nbsp;the&nbsp;server&nbsp;by&nbsp;typing</span><span style="color: #007700">*&nbsp;<br /><br />./</span><span style="color: #0000BB">ts3server_startscript</span><span style="color: #007700">.</span><span style="color: #0000BB">sh&nbsp;start&nbsp;<br /></span></code></div></div></div>Your TeamSpeak3 will generate a ServerAdmin Password, APKIKEY and one time user Server Admin Token which should be used open joining the server first time<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>Example of the generated stuff<br />
------------------------------------------------------------------<br />
                      I M P O R T A N T                           <br />
------------------------------------------------------------------<br />
               Server Query Admin Account created                 <br />
         loginname= "serveradmin", password= "f5SfK3"<br />
------------------------------------------------------------------<br />
<br />
------------------------------------------------------------------<br />
                      I M P O R T A N T                           <br />
------------------------------------------------------------------<br />
      ServerAdmin privilege key created, please use it to gain <br />
      serveradmin rights for your virtualserver. please<br />
      also check the doc/privilegekey_guide.txt for details.<br />
<br />
       token=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa<br />
------------------------------------------------------------------</code></div></div><br />
You have successfully installed TeamSpeak3 Server on your VPS! TeamSpeak3 is a voice server.<br />
<span style="font-weight: bold;" class="mycode_b">Pros </span>: <br />
TeamSpeak3 is simple and have a decent interface<br />
It uses much less ram as compared to others Voice Servers.<br />
You can also use multiple scripts to modify the server according to your needs (Example, Admin Bots which manage users and other actions)<br />
Cons:<br />
TeamSpeak3 Free Licence allows only 32 slots and the gamer licence starts from 55&#36;! They do not accept sponsorship offer real easily.]]></description>
			<content:encoded><![CDATA[Hello there, I'm going to show you the easiest way to install SinusBot and TeamSpeak3 on VPS both for Debian and Ubuntu! TeamSpeak3 is a Voice Server which is mostly used by the eSport teams for communication and it is also used by some students and other individuals too, On the other hand Sinusbot is a MusicBot in which you could listen music or setup amazing scripts provided over their forum!<br />
<br />
<span style="font-weight: bold;" class="mycode_b">So, Lets get started by updating and installing some tools for running TeamSpeak3</span><br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>For Debian/Ubuntu Users<br />
apt-get update &amp;&amp; apt-get upgrade<br />
apt-get install nano wget perl tar bzip2</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">Now, Add a non-root user for TeamSpeak3 as it is not recommended to run TeamSpeak3 on root user!</span><br />
<br />
<div class="codeblock phpcodeblock"><div class="title">PHP Code:</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">adduser&nbsp;</span><span style="color: #007700">--</span><span style="color: #0000BB">disabled</span><span style="color: #007700">-</span><span style="color: #0000BB">login&nbsp;username<br /></span><span style="color: #007700">*</span><span style="color: #0000BB">Now&nbsp;you&nbsp;can&nbsp;</span><span style="color: #007700">switch&nbsp;</span><span style="color: #0000BB">to&nbsp;the&nbsp;username</span><span style="color: #007700">*<br /></span><span style="color: #0000BB">su&nbsp;username&nbsp;<br /></span></code></div></div></div><br />
<span style="font-weight: bold;" class="mycode_b">Setting up the files for TeamSpeak3 Server and starting the server :</span><br />
<div class="codeblock phpcodeblock"><div class="title">PHP Code:</div><div class="body"><div dir="ltr"><code><span style="color: #0000BB">http</span><span style="color: #007700">:</span><span style="color: #FF8000">//dl.4players.de/ts/releases/3.12.1/teamspeak3-server_linux_amd64-3.12.1.tar.bz2&nbsp; &nbsp; -&nbsp;FOR&nbsp;64BIT*<br /></span><span style="color: #0000BB">http</span><span style="color: #007700">:</span><span style="color: #FF8000">//dl.4players.de/ts/releases/3.12.1/teamspeak3-server_linux_x86-3.12.1.tar.bz2&nbsp; &nbsp; &nbsp; -&nbsp;FOR&nbsp;32BIT*<br /></span><span style="color: #0000BB">tar&nbsp;xvf&nbsp;teamspeak3</span><span style="color: #007700">-</span><span style="color: #0000BB">server_linux_amd64</span><span style="color: #007700">-</span><span style="color: #0000BB">3.12.1</span><span style="color: #007700">.</span><span style="color: #0000BB">tar</span><span style="color: #007700">.</span><span style="color: #0000BB">bz2&nbsp;<br />cd&nbsp;teamspeak3</span><span style="color: #007700">-</span><span style="color: #0000BB">server_linux_amd64<br /><br />touch&nbsp;</span><span style="color: #007700">.</span><span style="color: #0000BB">ts3server_license_accepted&nbsp; &nbsp;<br /></span><span style="color: #007700">(</span><span style="color: #0000BB">TeamSpeak3&nbsp;requirest&nbsp;you&nbsp;to&nbsp;accept&nbsp;a&nbsp;licence&nbsp;before&nbsp;starting&nbsp;it&nbsp;</span><span style="color: #007700">for&nbsp;</span><span style="color: #0000BB">the&nbsp;first&nbsp;time</span><span style="color: #007700">)<br />(</span><span style="color: #0000BB">You&nbsp;can&nbsp;read&nbsp;the&nbsp;terms&nbsp;by&nbsp;typing&nbsp;nano&nbsp;LICENSE</span><span style="color: #007700">)<br />*</span><span style="color: #0000BB">Now&nbsp;start&nbsp;the&nbsp;server&nbsp;by&nbsp;typing</span><span style="color: #007700">*&nbsp;<br /><br />./</span><span style="color: #0000BB">ts3server_startscript</span><span style="color: #007700">.</span><span style="color: #0000BB">sh&nbsp;start&nbsp;<br /></span></code></div></div></div>Your TeamSpeak3 will generate a ServerAdmin Password, APKIKEY and one time user Server Admin Token which should be used open joining the server first time<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>Example of the generated stuff<br />
------------------------------------------------------------------<br />
                      I M P O R T A N T                           <br />
------------------------------------------------------------------<br />
               Server Query Admin Account created                 <br />
         loginname= "serveradmin", password= "f5SfK3"<br />
------------------------------------------------------------------<br />
<br />
------------------------------------------------------------------<br />
                      I M P O R T A N T                           <br />
------------------------------------------------------------------<br />
      ServerAdmin privilege key created, please use it to gain <br />
      serveradmin rights for your virtualserver. please<br />
      also check the doc/privilegekey_guide.txt for details.<br />
<br />
       token=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa<br />
------------------------------------------------------------------</code></div></div><br />
You have successfully installed TeamSpeak3 Server on your VPS! TeamSpeak3 is a voice server.<br />
<span style="font-weight: bold;" class="mycode_b">Pros </span>: <br />
TeamSpeak3 is simple and have a decent interface<br />
It uses much less ram as compared to others Voice Servers.<br />
You can also use multiple scripts to modify the server according to your needs (Example, Admin Bots which manage users and other actions)<br />
Cons:<br />
TeamSpeak3 Free Licence allows only 32 slots and the gamer licence starts from 55&#36;! They do not accept sponsorship offer real easily.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[CyberPanel on NanoKVM's VPS - 2 Methods]]></title>
			<link>https://post4vps.com/Thread-CyberPanel-on-NanoKVM-s-VPS-2-Methods</link>
			<pubDate>Mon, 27 Jul 2020 04:26:17 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://post4vps.com/member.php?action=profile&uid=1044">Amresh</a>]]></dc:creator>
			<guid isPermaLink="false">https://post4vps.com/Thread-CyberPanel-on-NanoKVM-s-VPS-2-Methods</guid>
			<description><![CDATA[Hello, P4V community!<br />
You maybe thinking about the topic name that it's insane as only 20 ipv4 ports are open and cyberpanel's port is out of that range as well as it's port cannot be changed. We are going to figure this out below.<br />
BTW you may also be thinking about this that from nowhere this thread came out in light. I am making this thread as yesterday I tackled this problem. I wanted to install cyberpanel on nanokvm's vps. I contacted their support but they said port cannot be changed as its integrated and thus if we forcefully change the port then its going to break. <br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="color: #333333;" class="mycode_color">Solution</span></span> (Of which I thinked of yesterday and discussed with cyberpanel admins): As we know NanoKVM doesn't allows port out of 7801-7820 to be accessible out of the local vps network. Now you may have got the idea that what I am going to do. I am going to run cyberpanel locally on the VPS.<br />
I am going to install a GUI environment (if it's not installed) on the supported OS and then going to install cyberpanel which can be accessible on the local network with its port. [Method -1]<br />
OR<br />
Why not make the network of VPS and your PC same! [Method - 2] {VPN server}<br />
And yes when I tried this out it worked out well.  <img src="https://post4vps.com/images/emoji/party.png" alt="Party" title="Party" class="smilie smilie_23" /> <br />
<br />
<span style="color: #ff3333;" class="mycode_color">**Warning**: As <dvz_me_placeholder id="5" /> says so I am going to say that too here that this thread is not spoon feeding! Also, the commands given below were used on CentOS, so change them according to your server OS</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="color: #333333;" class="mycode_color">Prerequisites:</span></span><ul class="mycode_list"><li>You should be aware and should be used to <span style="font-weight: bold;" class="mycode_b">CyberPanel</span><br />
</li>
<li>Used to <span style="font-weight: bold;" class="mycode_b">VNC</span> and <span style="font-weight: bold;" class="mycode_b">GUI Installation</span><br />
</li>
<li>Used to <span style="font-weight: bold;" class="mycode_b">Linux Commands</span><br />
</li>
<li>etc<br />
</li>
</ul>
<span style="font-weight: bold;" class="mycode_b"><span style="color: #333333;" class="mycode_color">Moving Forward:</span></span><br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: large;" class="mycode_size">Method - 1</span></span><br />
<span style="font-weight: bold;" class="mycode_b"><span style="color: #333333;" class="mycode_color">First:</span> </span>Installation of a GUI. (We don't need to install any VNC server as we already have a VNC server on NanoKVM)<br />
<br />
Install epel-release first,<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>sudo yum install epel-release</code></div></div><br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>dnf --enablerepo=epel group -y install "Xfce" "base-x"</code></div></div><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>echo "exec /usr/bin/xfce4-session" &gt;&gt; ~/.xinitrc</code></div></div><br />
Now, Take care that you don't restart the VPS as after you restart you will stop the GUI session and again fallback to Command Line. (So, enter the below command when you are ready for it). And yes the below command should be run through VNC as then you will directly fall from Command to the GUI session.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>startx</code></div></div><br />
Now exit the VNC session.<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="color: #333333;" class="mycode_color">Second:</span> </span>Installation of <span style="font-weight: bold;" class="mycode_b">CyberPanel</span>.<br />
Fire up your ssh and then follow the procedures which is stated on the official site.<br />
After installation, Note all the details of the users, passwords, ports in a txt file.<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="color: #333333;" class="mycode_color">Third:</span></span> Accessing the Panel.<br />
Open the VNC session again. Now we have to open firefox. (Its not already installed. To install it simply type <span style="font-weight: bold;" class="mycode_b">sudo apt install firefox</span> or <span style="font-weight: bold;" class="mycode_b">sudo yum install firefox</span> for the respective OS systems)<br />
<br />
After opening Firefox, enter this<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>https://localhost:8090</code></div></div><br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="color: #333333;" class="mycode_color">And your panel will load up!</span></span><br />
<br />
Note: This pic was taken yesterday when I was experimenting all this! (OS: CentOS 8)<br />
<img src="https://i.imgur.com/J9E3ZYF.png" loading="lazy"  alt="[Image: J9E3ZYF.png]" class="mycode_img" /><br />
<br />
Now, add a site, etc! All thing will work flawlessly! <br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: large;" class="mycode_size">Method - 2{RECOMMENDED}</span></span><br />
Note: <dvz_me_placeholder id="6" /> said that VPN for fair use is allowed. <img src="https://post4vps.com/images/emoji/smile.png" alt="Smile" title="Smile" class="smilie smilie_1" /><br />
So, you can use that until you make your server open to the world. Which will cause deletion of your server <img src="https://post4vps.com/images/emoji/huh.png" alt="Dodgy" title="Dodgy" class="smilie smilie_14" /><br />
So, If you have any doubt still then ask <dvz_me_placeholder id="6" /> through mail support!<br />
Credits to <dvz_me_placeholder id="7" /> ! <img src="https://post4vps.com/images/emoji/twinkle.png" alt="Wink" title="Wink" class="smilie smilie_2" /><br />
I tried openvpn earlier but it didn't worked as I was messing with NAT IP and Public ipv4 address.<br />
<br />
Step-1: Installing OpenVPN server link to repository: <a href="https://github.com/Nyr/openvpn-install" target="_blank" rel="noopener" class="mycode_url">https://github.com/Nyr/openvpn-install</a><br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>wget https://git.io/vpn -O openvpn-install.sh &amp;&amp; bash openvpn-install.sh</code></div></div><br />
Step-2: When Installing choose the listening port between 7801 to 7820 and then you will get a .ovpn configuration file. Now you need that file on your local desktop. First, go the file and type <br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>cat &lt;your_client_name&gt;.ovpn</code></div></div><br />
This will show you the text. Just copy and paste it on your local desktop with .ovpn extension!<br />
<br />
Step-3: Install OpenVPN Connect from OpenVPN site and open openvpn connection with that .ovpn file<br />
<br />
Step-4: Now comes the step to access cyberpanel. You just have to go to nanokvm dashboard. At starting you will see a IP 10.0.x.x or something like this. This is your local NAT IP which is used to communicate locally. So, just copy that IP and paste it in your local browser with 8090 port at the end<br />
And<br />
Voila! Cyberpanel will load up!<br />
<br />
<hr class="mycode_hr" />
<dvz_me_placeholder id="8" /> I tried SSH tunneling and then I tried to access the cyberpanel with NAT IP but still It didn't worked. I tried this with mozilla firefox browser. I forgot the error which was displayed. <img src="https://post4vps.com/images/emoji/sad.png" alt="Sad" title="Sad" class="smilie smilie_8" /><br />
<br />
Found any error? reply below! We all will help you out <img src="https://post4vps.com/images/emoji/smile.png" alt="Smile" title="Smile" class="smilie smilie_1" />]]></description>
			<content:encoded><![CDATA[Hello, P4V community!<br />
You maybe thinking about the topic name that it's insane as only 20 ipv4 ports are open and cyberpanel's port is out of that range as well as it's port cannot be changed. We are going to figure this out below.<br />
BTW you may also be thinking about this that from nowhere this thread came out in light. I am making this thread as yesterday I tackled this problem. I wanted to install cyberpanel on nanokvm's vps. I contacted their support but they said port cannot be changed as its integrated and thus if we forcefully change the port then its going to break. <br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="color: #333333;" class="mycode_color">Solution</span></span> (Of which I thinked of yesterday and discussed with cyberpanel admins): As we know NanoKVM doesn't allows port out of 7801-7820 to be accessible out of the local vps network. Now you may have got the idea that what I am going to do. I am going to run cyberpanel locally on the VPS.<br />
I am going to install a GUI environment (if it's not installed) on the supported OS and then going to install cyberpanel which can be accessible on the local network with its port. [Method -1]<br />
OR<br />
Why not make the network of VPS and your PC same! [Method - 2] {VPN server}<br />
And yes when I tried this out it worked out well.  <img src="https://post4vps.com/images/emoji/party.png" alt="Party" title="Party" class="smilie smilie_23" /> <br />
<br />
<span style="color: #ff3333;" class="mycode_color">**Warning**: As <dvz_me_placeholder id="5" /> says so I am going to say that too here that this thread is not spoon feeding! Also, the commands given below were used on CentOS, so change them according to your server OS</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="color: #333333;" class="mycode_color">Prerequisites:</span></span><ul class="mycode_list"><li>You should be aware and should be used to <span style="font-weight: bold;" class="mycode_b">CyberPanel</span><br />
</li>
<li>Used to <span style="font-weight: bold;" class="mycode_b">VNC</span> and <span style="font-weight: bold;" class="mycode_b">GUI Installation</span><br />
</li>
<li>Used to <span style="font-weight: bold;" class="mycode_b">Linux Commands</span><br />
</li>
<li>etc<br />
</li>
</ul>
<span style="font-weight: bold;" class="mycode_b"><span style="color: #333333;" class="mycode_color">Moving Forward:</span></span><br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: large;" class="mycode_size">Method - 1</span></span><br />
<span style="font-weight: bold;" class="mycode_b"><span style="color: #333333;" class="mycode_color">First:</span> </span>Installation of a GUI. (We don't need to install any VNC server as we already have a VNC server on NanoKVM)<br />
<br />
Install epel-release first,<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>sudo yum install epel-release</code></div></div><br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>dnf --enablerepo=epel group -y install "Xfce" "base-x"</code></div></div><br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>echo "exec /usr/bin/xfce4-session" &gt;&gt; ~/.xinitrc</code></div></div><br />
Now, Take care that you don't restart the VPS as after you restart you will stop the GUI session and again fallback to Command Line. (So, enter the below command when you are ready for it). And yes the below command should be run through VNC as then you will directly fall from Command to the GUI session.<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>startx</code></div></div><br />
Now exit the VNC session.<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="color: #333333;" class="mycode_color">Second:</span> </span>Installation of <span style="font-weight: bold;" class="mycode_b">CyberPanel</span>.<br />
Fire up your ssh and then follow the procedures which is stated on the official site.<br />
After installation, Note all the details of the users, passwords, ports in a txt file.<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="color: #333333;" class="mycode_color">Third:</span></span> Accessing the Panel.<br />
Open the VNC session again. Now we have to open firefox. (Its not already installed. To install it simply type <span style="font-weight: bold;" class="mycode_b">sudo apt install firefox</span> or <span style="font-weight: bold;" class="mycode_b">sudo yum install firefox</span> for the respective OS systems)<br />
<br />
After opening Firefox, enter this<br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>https://localhost:8090</code></div></div><br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="color: #333333;" class="mycode_color">And your panel will load up!</span></span><br />
<br />
Note: This pic was taken yesterday when I was experimenting all this! (OS: CentOS 8)<br />
<img src="https://i.imgur.com/J9E3ZYF.png" loading="lazy"  alt="[Image: J9E3ZYF.png]" class="mycode_img" /><br />
<br />
Now, add a site, etc! All thing will work flawlessly! <br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="font-size: large;" class="mycode_size">Method - 2{RECOMMENDED}</span></span><br />
Note: <dvz_me_placeholder id="6" /> said that VPN for fair use is allowed. <img src="https://post4vps.com/images/emoji/smile.png" alt="Smile" title="Smile" class="smilie smilie_1" /><br />
So, you can use that until you make your server open to the world. Which will cause deletion of your server <img src="https://post4vps.com/images/emoji/huh.png" alt="Dodgy" title="Dodgy" class="smilie smilie_14" /><br />
So, If you have any doubt still then ask <dvz_me_placeholder id="6" /> through mail support!<br />
Credits to <dvz_me_placeholder id="7" /> ! <img src="https://post4vps.com/images/emoji/twinkle.png" alt="Wink" title="Wink" class="smilie smilie_2" /><br />
I tried openvpn earlier but it didn't worked as I was messing with NAT IP and Public ipv4 address.<br />
<br />
Step-1: Installing OpenVPN server link to repository: <a href="https://github.com/Nyr/openvpn-install" target="_blank" rel="noopener" class="mycode_url">https://github.com/Nyr/openvpn-install</a><br />
<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>wget https://git.io/vpn -O openvpn-install.sh &amp;&amp; bash openvpn-install.sh</code></div></div><br />
Step-2: When Installing choose the listening port between 7801 to 7820 and then you will get a .ovpn configuration file. Now you need that file on your local desktop. First, go the file and type <br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>cat &lt;your_client_name&gt;.ovpn</code></div></div><br />
This will show you the text. Just copy and paste it on your local desktop with .ovpn extension!<br />
<br />
Step-3: Install OpenVPN Connect from OpenVPN site and open openvpn connection with that .ovpn file<br />
<br />
Step-4: Now comes the step to access cyberpanel. You just have to go to nanokvm dashboard. At starting you will see a IP 10.0.x.x or something like this. This is your local NAT IP which is used to communicate locally. So, just copy that IP and paste it in your local browser with 8090 port at the end<br />
And<br />
Voila! Cyberpanel will load up!<br />
<br />
<hr class="mycode_hr" />
<dvz_me_placeholder id="8" /> I tried SSH tunneling and then I tried to access the cyberpanel with NAT IP but still It didn't worked. I tried this with mozilla firefox browser. I forgot the error which was displayed. <img src="https://post4vps.com/images/emoji/sad.png" alt="Sad" title="Sad" class="smilie smilie_8" /><br />
<br />
Found any error? reply below! We all will help you out <img src="https://post4vps.com/images/emoji/smile.png" alt="Smile" title="Smile" class="smilie smilie_1" />]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Password Recovery Ubuntu Server 18.04 LTS]]></title>
			<link>https://post4vps.com/Thread-Password-Recovery-Ubuntu-Server-18-04-LTS</link>
			<pubDate>Fri, 24 Jul 2020 09:06:54 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://post4vps.com/member.php?action=profile&uid=26">Mashiro</a>]]></dc:creator>
			<guid isPermaLink="false">https://post4vps.com/Thread-Password-Recovery-Ubuntu-Server-18-04-LTS</guid>
			<description><![CDATA[<div style="text-align: CENTER;" class="mycode_align"><span style="font-size: X-LARGE;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b"><span style="color: ROYALBLUE;" class="mycode_color">Password Recovery Ubuntu Server 18.04 LTS</span></span></span></div>
<br />
<br />
<div style="text-align: JUSTIFY;" class="mycode_align">Hello Post4VPS Community<br />
<br />
In this brief guide I will provide instructions to perform a password recovery on a server or computer with Ubuntu 18.04 LTS or Ubuntu Server 18.04 LTS (it might as well work on older or newer versions). This information can be useful if you have forgot your root password. To perform the necessary steps you need to have VNC access or physical access to your server or computer.<br />
<br />
Let's get started.<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Step #1</span><br />
<br />
Reboot your server or computer. When it is booting up hit the SHIFT key until you get into the GRUB boo tmenu. You migh need several tries depending on the hardware setup and how the OS was installed (Legacy vs UEFI and etc. can effect how the OS boots). It's a bit tricky especially if you're on modern and very fast hardware the OS boots really quick.<br />
<br />
Once you are in GRUB it should look a bit like in the screenshot below (Ubuntu Server 18.04 LTS):<br />
<img src="https://i.imgur.com/BCghVeA.png" loading="lazy"  alt="[Image: BCghVeA.png]" class="mycode_img" /><br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Step #2</span><br />
<br />
In the GRUB boot menu select the Ubuntu entry and hit the E key to enable edit mode for the boot entry. <br />
<br />
You will see the following screen:<br />
<img src="https://i.imgur.com/mNsprJ0.png" loading="lazy"  alt="[Image: mNsprJ0.png]" class="mycode_img" /><br />
<br />
Navigate to the bottom of the file with the arrow keys until you see the following line:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>linux /boot/vmlinuz-4.15.0-112-generic root=[...] ro maybe-ubiquity</code></div></div>^ This is an example from a Ubuntu Server 18.04 LTS VPS (might look different on a different machine).<br />
<br />
Screenshot:<br />
<img src="https://i.imgur.com/ImrywxW.png" loading="lazy"  alt="[Image: ImrywxW.png]" class="mycode_img" /><br />
<br />
Change "ro maybe-ubiquity" to "rw init=/bin/bash".<br />
<br />
Screenshot:<br />
<img src="https://i.imgur.com/uAFSvZe.png" loading="lazy"  alt="[Image: uAFSvZe.png]" class="mycode_img" /><br />
<br />
After that press F10 to boot into single user mode with the new parameters that you've set above.<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Step #3</span><br />
<br />
You are now in single user mode and have a direct bash shell session open as the user "root" without the need to enter a password or something else.<br />
<br />
Screenshot:<br />
<img src="https://i.imgur.com/E9iAVdg.png" loading="lazy"  alt="[Image: E9iAVdg.png]" class="mycode_img" /><br />
<br />
Now simply run the password utility to change the password of the root user:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>passwd</code></div></div><br />
Enter a new password and confirm it.<br />
<br />
Screenshot:<br />
<img src="https://i.imgur.com/TBJKmJM.png" loading="lazy"  alt="[Image: TBJKmJM.png]" class="mycode_img" /><br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Step #4</span><br />
<br />
Reboot the server or computer to boot into the normal Ubuntu environment using the command below:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>exec /sbin/init</code></div></div><br />
Login with your new root password.<br />
<br />
<br />
That's it! You have recovered or reset your lost root password. The same method can be used to reset other user passwords, too. <br />
</div>]]></description>
			<content:encoded><![CDATA[<div style="text-align: CENTER;" class="mycode_align"><span style="font-size: X-LARGE;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b"><span style="color: ROYALBLUE;" class="mycode_color">Password Recovery Ubuntu Server 18.04 LTS</span></span></span></div>
<br />
<br />
<div style="text-align: JUSTIFY;" class="mycode_align">Hello Post4VPS Community<br />
<br />
In this brief guide I will provide instructions to perform a password recovery on a server or computer with Ubuntu 18.04 LTS or Ubuntu Server 18.04 LTS (it might as well work on older or newer versions). This information can be useful if you have forgot your root password. To perform the necessary steps you need to have VNC access or physical access to your server or computer.<br />
<br />
Let's get started.<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Step #1</span><br />
<br />
Reboot your server or computer. When it is booting up hit the SHIFT key until you get into the GRUB boo tmenu. You migh need several tries depending on the hardware setup and how the OS was installed (Legacy vs UEFI and etc. can effect how the OS boots). It's a bit tricky especially if you're on modern and very fast hardware the OS boots really quick.<br />
<br />
Once you are in GRUB it should look a bit like in the screenshot below (Ubuntu Server 18.04 LTS):<br />
<img src="https://i.imgur.com/BCghVeA.png" loading="lazy"  alt="[Image: BCghVeA.png]" class="mycode_img" /><br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Step #2</span><br />
<br />
In the GRUB boot menu select the Ubuntu entry and hit the E key to enable edit mode for the boot entry. <br />
<br />
You will see the following screen:<br />
<img src="https://i.imgur.com/mNsprJ0.png" loading="lazy"  alt="[Image: mNsprJ0.png]" class="mycode_img" /><br />
<br />
Navigate to the bottom of the file with the arrow keys until you see the following line:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>linux /boot/vmlinuz-4.15.0-112-generic root=[...] ro maybe-ubiquity</code></div></div>^ This is an example from a Ubuntu Server 18.04 LTS VPS (might look different on a different machine).<br />
<br />
Screenshot:<br />
<img src="https://i.imgur.com/ImrywxW.png" loading="lazy"  alt="[Image: ImrywxW.png]" class="mycode_img" /><br />
<br />
Change "ro maybe-ubiquity" to "rw init=/bin/bash".<br />
<br />
Screenshot:<br />
<img src="https://i.imgur.com/uAFSvZe.png" loading="lazy"  alt="[Image: uAFSvZe.png]" class="mycode_img" /><br />
<br />
After that press F10 to boot into single user mode with the new parameters that you've set above.<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Step #3</span><br />
<br />
You are now in single user mode and have a direct bash shell session open as the user "root" without the need to enter a password or something else.<br />
<br />
Screenshot:<br />
<img src="https://i.imgur.com/E9iAVdg.png" loading="lazy"  alt="[Image: E9iAVdg.png]" class="mycode_img" /><br />
<br />
Now simply run the password utility to change the password of the root user:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>passwd</code></div></div><br />
Enter a new password and confirm it.<br />
<br />
Screenshot:<br />
<img src="https://i.imgur.com/TBJKmJM.png" loading="lazy"  alt="[Image: TBJKmJM.png]" class="mycode_img" /><br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Step #4</span><br />
<br />
Reboot the server or computer to boot into the normal Ubuntu environment using the command below:<br />
<div class="codeblock"><div class="title">Code:</div><div class="body" dir="ltr"><code>exec /sbin/init</code></div></div><br />
Login with your new root password.<br />
<br />
<br />
That's it! You have recovered or reset your lost root password. The same method can be used to reset other user passwords, too. <br />
</div>]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[How to install new OS on NanoKVM VPS]]></title>
			<link>https://post4vps.com/Thread-How-to-install-new-OS-on-NanoKVM-VPS</link>
			<pubDate>Wed, 22 Jul 2020 10:47:34 +0000</pubDate>
			<dc:creator><![CDATA[<a href="https://post4vps.com/member.php?action=profile&uid=1044">Amresh</a>]]></dc:creator>
			<guid isPermaLink="false">https://post4vps.com/Thread-How-to-install-new-OS-on-NanoKVM-VPS</guid>
			<description><![CDATA[Before beginning I want to elaborate why I started this thread....<br />
I installed ajenti and changed the port in-between  7801-7820 to access it but later on I wanted to uninstall it and install cyberpanel.<br />
But as soon as I tried sudo apt-get remove ajenti it gave me a error that no package ajenti found.<br />
I asked <dvz_me_placeholder id="7" /> as he also owns one nanokvm vps on how to change os.<br />
He stated me some steps which I tried and it worked out well after I tried it twice.....<br />
<span style="color: #ff3333;" class="mycode_color">So, the whole credits to</span> <dvz_me_placeholder id="7" /> <span style="color: #ff3333;" class="mycode_color">for this <img src="https://post4vps.com/images/emoji/twinkle.png" alt="Wink" title="Wink" class="smilie smilie_2" /></span><br />
I am just going to elaborate it more <img src="https://post4vps.com/images/emoji/smile.png" alt="Smile" title="Smile" class="smilie smilie_1" /><br />
And yes thnx to <dvz_me_placeholder id="6" /> for giving us such a nice NanoKVM VPS <img src="https://post4vps.com/images/emoji/twinkle.png" alt="Wink" title="Wink" class="smilie smilie_2" /><br />
<hr class="mycode_hr" />
Okay, So let's get started!<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Step 1:</span> As Usual first login to the <a href="https://nanokvm.net/index.php?p=login" target="_blank" rel="noopener" class="mycode_url">NanoKVM panel</a><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Step 2:</span> Select the ISO which you want from the ISO Option on the panel<br />
<img src="https://i.ibb.co/frfnVNP/image.png" loading="lazy"  alt="[Image: image.png]" class="mycode_img" /><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Step 3: </span>Then restart the vps by clicking that <span style="font-weight: bold;" class="mycode_b">Restart button</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Step 4:</span> Now click on the <span style="font-weight: bold;" class="mycode_b">VNC button</span> to open the VNC details.<br />
            It get changed in few seconds so as soon as the VNC details page opens then connect to it by using your preferred VNC client.<br />
            Here, I am gonna use <span style="font-weight: bold;" class="mycode_b">RealVNC VNC Viewer</span>.<br />
            Now as soon as you get connected you will get a screen like this(If you haven't tried installing any iso then you will get something like                    this):<br />
<img src="https://i.ibb.co/gy0WWzQ/image.png" loading="lazy"  alt="[Image: image.png]" class="mycode_img" /><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Step 5:</span> Restarting the machine to select the BOOT from option. For this click on the <span style="font-weight: bold;" class="mycode_b">ctrl + alt + del</span> button<br />
<img src="https://i.ibb.co/wCY8jVq/image.png" loading="lazy"  alt="[Image: image.png]" class="mycode_img" /><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Step 6:</span> As soon as you click that button the system will start restarting. Once you see this page immediately <span style="font-weight: bold;" class="mycode_b">click Esc button</span>.<br />
<img src="https://i.ibb.co/6BdskVt/image.png" loading="lazy"  alt="[Image: image.png]" class="mycode_img" /><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Step 7:</span> Now you will reach the Boot Menu if you performed all the above steps clearly!<br />
<img src="https://i.ibb.co/8xyhv1C/image.png" loading="lazy"  alt="[Image: image.png]" class="mycode_img" /><br />
<br />
Now select the 3rd option which contains the installation ISO file.<br />
<br />
And Voila! The new OS Installation page will open up!<br />
<img src="https://i.ibb.co/84wnyXc/image.png" loading="lazy"  alt="[Image: image.png]" class="mycode_img" /><br />
<br />
<hr class="mycode_hr" />
<br />
FEEL FREE TO ASK Me(<dvz_me_placeholder id="9" />), <dvz_me_placeholder id="7" />, <dvz_me_placeholder id="6" /> and Staff if you have any doubt <img src="https://post4vps.com/images/emoji/twinkle.png" alt="Wink" title="Wink" class="smilie smilie_2" /><br />
Contributions to threads are always welcomed!]]></description>
			<content:encoded><![CDATA[Before beginning I want to elaborate why I started this thread....<br />
I installed ajenti and changed the port in-between  7801-7820 to access it but later on I wanted to uninstall it and install cyberpanel.<br />
But as soon as I tried sudo apt-get remove ajenti it gave me a error that no package ajenti found.<br />
I asked <dvz_me_placeholder id="7" /> as he also owns one nanokvm vps on how to change os.<br />
He stated me some steps which I tried and it worked out well after I tried it twice.....<br />
<span style="color: #ff3333;" class="mycode_color">So, the whole credits to</span> <dvz_me_placeholder id="7" /> <span style="color: #ff3333;" class="mycode_color">for this <img src="https://post4vps.com/images/emoji/twinkle.png" alt="Wink" title="Wink" class="smilie smilie_2" /></span><br />
I am just going to elaborate it more <img src="https://post4vps.com/images/emoji/smile.png" alt="Smile" title="Smile" class="smilie smilie_1" /><br />
And yes thnx to <dvz_me_placeholder id="6" /> for giving us such a nice NanoKVM VPS <img src="https://post4vps.com/images/emoji/twinkle.png" alt="Wink" title="Wink" class="smilie smilie_2" /><br />
<hr class="mycode_hr" />
Okay, So let's get started!<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Step 1:</span> As Usual first login to the <a href="https://nanokvm.net/index.php?p=login" target="_blank" rel="noopener" class="mycode_url">NanoKVM panel</a><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Step 2:</span> Select the ISO which you want from the ISO Option on the panel<br />
<img src="https://i.ibb.co/frfnVNP/image.png" loading="lazy"  alt="[Image: image.png]" class="mycode_img" /><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Step 3: </span>Then restart the vps by clicking that <span style="font-weight: bold;" class="mycode_b">Restart button</span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Step 4:</span> Now click on the <span style="font-weight: bold;" class="mycode_b">VNC button</span> to open the VNC details.<br />
            It get changed in few seconds so as soon as the VNC details page opens then connect to it by using your preferred VNC client.<br />
            Here, I am gonna use <span style="font-weight: bold;" class="mycode_b">RealVNC VNC Viewer</span>.<br />
            Now as soon as you get connected you will get a screen like this(If you haven't tried installing any iso then you will get something like                    this):<br />
<img src="https://i.ibb.co/gy0WWzQ/image.png" loading="lazy"  alt="[Image: image.png]" class="mycode_img" /><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Step 5:</span> Restarting the machine to select the BOOT from option. For this click on the <span style="font-weight: bold;" class="mycode_b">ctrl + alt + del</span> button<br />
<img src="https://i.ibb.co/wCY8jVq/image.png" loading="lazy"  alt="[Image: image.png]" class="mycode_img" /><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Step 6:</span> As soon as you click that button the system will start restarting. Once you see this page immediately <span style="font-weight: bold;" class="mycode_b">click Esc button</span>.<br />
<img src="https://i.ibb.co/6BdskVt/image.png" loading="lazy"  alt="[Image: image.png]" class="mycode_img" /><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Step 7:</span> Now you will reach the Boot Menu if you performed all the above steps clearly!<br />
<img src="https://i.ibb.co/8xyhv1C/image.png" loading="lazy"  alt="[Image: image.png]" class="mycode_img" /><br />
<br />
Now select the 3rd option which contains the installation ISO file.<br />
<br />
And Voila! The new OS Installation page will open up!<br />
<img src="https://i.ibb.co/84wnyXc/image.png" loading="lazy"  alt="[Image: image.png]" class="mycode_img" /><br />
<br />
<hr class="mycode_hr" />
<br />
FEEL FREE TO ASK Me(<dvz_me_placeholder id="9" />), <dvz_me_placeholder id="7" />, <dvz_me_placeholder id="6" /> and Staff if you have any doubt <img src="https://post4vps.com/images/emoji/twinkle.png" alt="Wink" title="Wink" class="smilie smilie_2" /><br />
Contributions to threads are always welcomed!]]></content:encoded>
		</item>
	</channel>
</rss>