> For the complete documentation index, see [llms.txt](https://docs.plenit.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.plenit.com/docs-en/productos/servers-1/how-to/how-to-deploy-a-3cx-template.md).

# How to Deploy a 3CX Template on a Plenit Server

3CX is a unified communications and PBX platform based on Debian. In Plenit you deploy it from the **Marketplace**, which speeds up the initial provisioning and leaves the 3CX web configuration ready to be completed later.

> #### 👍 What you get
>
> A server with 3CX deployed from the Marketplace and its web setup wizard accessible through port 5015.

### Before you start

* Log in to the Plenit platform.
* Have a **Servers** available.
* Decide which public IP you will use to publish the port **5015** during the initial setup.

> #### 📘 Two things after deployment
>
> When the server has been created, open its **console** to enable remote access to web administration and publish the **port 5015** in the firewall. You can see it in Step 2.

### Step 1. Deploy the 3CX template

Go to the subscription of **Servers** and click **New server** to open the wizard. From there:

1. Select the **location** and click **Next**.
2. Choose the **size** (CPU and RAM) and click **Next**.
3. Open the **Marketplace**, click the image of **3CX**, select the **language** and click **Next**.
4. Choose the **disk size** and click **Next**.
5. Configure the **network** and click **Next**.
6. On the final screen, create a label and an SSH key if you need them, check **Open SSH port to Access the service** only if you are going to manage it via terminal, assign a **name** and click **Create Server**.

> #### 📘 Size according to your environment
>
> The minimum recommendation for 3CX is 1 CPU with 2 cores and 2 GB of RAM. Assign more resources if the environment requires it.

When deployment starts, you will see the server in **Loading** state and a creation notification. When it finishes, you can continue with the initial 3CX setup.

{/\* 📸 SCREENSHOT 1 · Marketplace tab with the 3CX image and the language selector \*/}

![Selection of 3CX and its language in the Marketplace](https://REEMPLAZA-URL/servidores-howto-3cx-01.png)

### Step 2. Prepare the 3CX system

> #### 🚧 First the console, then the port
>
> Port 5015 is useless until you enable web access from the console. Do this step before opening the firewall.

Go back to the Plenit dashboard and open the **console** of the server. Select the option **1** to enable initial remote access to web administration. The console will tell you that you must open port **5015** to access the application.

{/\* 📸 SCREENSHOT 2 · server console with option 1 to enable web access \*/}

![3CX console with the option to enable web configuration](https://REEMPLAZA-URL/servidores-howto-3cx-02.png)

Then, at the bottom of the server configuration, click **New entry rule** and create a rule **NAT** (redirection between the public IP and the server's private IP) to publish 5015:

* **Select network**: normally, leave it as is.
* **Origins**: an origin IP or range, or **Any IP** to allow any network.
* **Protocol**: leave the value shown by the template.
* **Public IP**: the public IP through which the connection is served.
* **Private IP**: the internal IP of the 3CX server.
* **Private Port**: **5015**.

Click **Continue** and check that the rule appears in the firewall list.

{/\* 📸 SCREENSHOT 3 · New entry rule (NAT) publishing port 5015 \*/}

![Creation of the NAT rule for 3CX port 5015](https://REEMPLAZA-URL/servidores-howto-3cx-03.png)

> 👍 Reduce the exposure of initial access
>
> Port 5015 is the gateway to your PBX administration. Whenever you can:
>
> * Use **Origins** with a specific IP or range instead of **Any IP**.
> * Open 5015 only during the initial setup and remove or restrict the rule when you're done.
> * Check **Open SSH port** and use an SSH key only if you are really going to manage it via terminal.

### Validation

Open in the browser `http://Public_IP:5015`, replacing `Public_IP` with the public IP of the rule. If it loads, you will see the screen **Configure your 3CX Install**, with options to upload a new configuration or restore a backup, and you can continue with the web wizard.

To confirm it from the terminal:

```bash
curl -I http://<PUBLIC-IP>:5015
```

### If something does not fit

| Symptom                                       | Likely cause                                 | What to do                                                       |
| --------------------------------------------- | -------------------------------------------- | ---------------------------------------------------------------- |
| `http://IP:5015` does not respond             | You did not enable web access in the console | Open the console and choose the option **1**                     |
| It still won't open                           | The rule is not publishing 5015 correctly    | Check that the rule exists and that the **Private Port** is 5015 |
| Connects to another machine or does not reach | IPs incorrectly assigned in the rule         | Check that **Public IP** and **Private IP** are correct          |
| Responds to others but not to you             | `Origins` leaves you out                     | Make sure your IP is in the allowed range                        |

<br>

### Conclusion

With this, you have 3CX deployed from the Marketplace and its web wizard ready on 5015. The key to the process is two steps in order: enable web access from the console and, only then, publish the port. And since it's a PBX, close or restrict that 5015 as soon as you finish the initial setup: it is not a good idea to leave administration open to the Internet longer than necessary.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.plenit.com/docs-en/productos/servers-1/how-to/how-to-deploy-a-3cx-template.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
