diff --git a/docs/_static/images/administration/DNS-configuration/DNS-conf.png b/docs/_static/images/administration/DNS-configuration/DNS-conf.png new file mode 100644 index 000000000..c745f8a1c Binary files /dev/null and b/docs/_static/images/administration/DNS-configuration/DNS-conf.png differ diff --git a/docs/_static/images/administration/DNS-configuration/define-IP.png b/docs/_static/images/administration/DNS-configuration/define-IP.png new file mode 100644 index 000000000..edcf1e49a Binary files /dev/null and b/docs/_static/images/administration/DNS-configuration/define-IP.png differ diff --git a/docs/_static/images/administration/DNS-configuration/domain-section.png b/docs/_static/images/administration/DNS-configuration/domain-section.png new file mode 100644 index 000000000..8c12885f8 Binary files /dev/null and b/docs/_static/images/administration/DNS-configuration/domain-section.png differ diff --git a/docs/_static/images/administration/DNS-configuration/select-account.png b/docs/_static/images/administration/DNS-configuration/select-account.png new file mode 100644 index 000000000..71d52b76a Binary files /dev/null and b/docs/_static/images/administration/DNS-configuration/select-account.png differ diff --git a/docs/_static/images/administration/digital-ocean/credentials.png b/docs/_static/images/administration/digital-ocean/credentials.png new file mode 100644 index 000000000..04ef1e1d9 Binary files /dev/null and b/docs/_static/images/administration/digital-ocean/credentials.png differ diff --git a/docs/_static/images/administration/digital-ocean/datacenter.png b/docs/_static/images/administration/digital-ocean/datacenter.png new file mode 100644 index 000000000..6b05de0e8 Binary files /dev/null and b/docs/_static/images/administration/digital-ocean/datacenter.png differ diff --git a/docs/_static/images/administration/digital-ocean/droplet-create.png b/docs/_static/images/administration/digital-ocean/droplet-create.png new file mode 100644 index 000000000..bee414e21 Binary files /dev/null and b/docs/_static/images/administration/digital-ocean/droplet-create.png differ diff --git a/docs/_static/images/administration/digital-ocean/droplet-plan.png b/docs/_static/images/administration/digital-ocean/droplet-plan.png new file mode 100644 index 000000000..c6a662aca Binary files /dev/null and b/docs/_static/images/administration/digital-ocean/droplet-plan.png differ diff --git a/docs/_static/images/administration/digital-ocean/public-ip.png b/docs/_static/images/administration/digital-ocean/public-ip.png new file mode 100644 index 000000000..6d795523a Binary files /dev/null and b/docs/_static/images/administration/digital-ocean/public-ip.png differ diff --git a/docs/_static/images/administration/digital-ocean/ssh-key.png b/docs/_static/images/administration/digital-ocean/ssh-key.png new file mode 100644 index 000000000..fa7e1716f Binary files /dev/null and b/docs/_static/images/administration/digital-ocean/ssh-key.png differ diff --git a/docs/_static/images/administration/digital-ocean/web-console.png b/docs/_static/images/administration/digital-ocean/web-console.png new file mode 100644 index 000000000..1a346dd7a Binary files /dev/null and b/docs/_static/images/administration/digital-ocean/web-console.png differ diff --git a/docs/administration/DNS-configuration.md b/docs/administration/DNS-configuration.md new file mode 100644 index 000000000..d9e240b77 --- /dev/null +++ b/docs/administration/DNS-configuration.md @@ -0,0 +1,19 @@ +# DNS configuration + +This guide explains how to configure DNS records for your domain and point them to the Public IPv4 address of your server using CloudeFlare. + +1\. Select the account. + +![Select the account](../_static/images/administration/DNS-configuration/select-account.png) + +2\. Go to Domain section + +![Domain seaction](../_static/images/administration/DNS-configuration/domain-section.png) + +3\. Go to DNS configuration + +![DNS configuration](../_static/images/administration/DNS-configuration/DNS-conf.png) + +4\. Define an IP address of your VPS server. If you are using a subdomain instead of the root domain, enter the subdomain name in the Name field instead of @. For example, enter crm to configure crm.example.com. The exact configuration may vary depending on your DNS provider. + +![Defining an IP address](../_static/images/administration/DNS-configuration/define-IP.png) \ No newline at end of file diff --git a/docs/administration/Fail2ban.md b/docs/administration/Fail2ban.md new file mode 100644 index 000000000..c1d1c35b0 --- /dev/null +++ b/docs/administration/Fail2ban.md @@ -0,0 +1,50 @@ +# Fail2ban + +Fail2Ban is a security tool that monitors system logs for repeated failed authentication attempts and temporarily blocks suspicious IP addresses. It helps protect the server against brute-force attacks. + +The following steps demonstrate how to install and check that Fail2Ban is correctly configured on your server. + +1\. Install +``` +sudo apt update +sudo apt install fail2ban -y +``` +2\. Create the SSH jail configuration +Create the file: +``` +sudo nano /etc/fail2ban/jail.d/sshd.local +``` +Add the following configuration: +``` +[sshd] +enabled = true +port = ssh +filter = sshd +backend = systemd + +findtime = 10m +maxretry = 5 +bantime = 1h +``` +3\. Test the configuration +Run: +``` +sudo fail2ban-client -t +``` +You should see: +``` +OK: configuration test is successful +``` +4\. Restart Fail2Ban +``` +sudo systemctl restart fail2ban +sudo systemctl enable fail2ban +``` +5\. Check the jail +``` +sudo fail2ban-client status +``` +Check SSH jail details: +``` +sudo fail2ban-client status sshd +``` \ No newline at end of file diff --git a/docs/administration/docker/digital-ocean.md b/docs/administration/docker/digital-ocean.md new file mode 100644 index 000000000..cbe4ce6b4 --- /dev/null +++ b/docs/administration/docker/digital-ocean.md @@ -0,0 +1,57 @@ +# DigitalOcean and EspoCRM + +DigitalOcean is a cloud platform that provides scalable infrastructure, including virtual servers (Droplets), storage, networking, and other cloud services. In this guide, we will use a DigitalOcean Droplet to deploy and run a self-hosted EspoCRM instance. + +1\. Sign up on the [official DigitalOcean website](https://cloud.digitalocean.com/registrations/new) + +2\. Create a Droplet + +![Create a droplet](../../_static/images/administration/digital-ocean/droplet-create.png) + +3\. Choose a datacenter region that is convenient for you. The recommended OS is Ubuntu or Debian. + +![Choose a datecenter](../../_static/images/administration/digital-ocean/datacenter.png) + +4\. We recommend a Droplet plan with at least 2 GB of RAM. Higher plans may provide a smooother user experience. + +![Choose a droplet plan](../../_static/images/administration/digital-ocean/droplet-plan.png) + +5\. Attach an SSH key or create a password, although using a password provides lower security. Add Payment Method and complete the Droplet creation. + +![Create an SSH key](../../_static/images/administration/digital-ocean/ssh-key.png) + +!!! note + + To make your EspoCRM instance accessible through a domain, configure a DNS record pointing the domain to the Public IPv4 address of your Droplet. See the [Domain Configuration Guide](../DNS-configuration.md) for an example using Cloudflare. + +![puplic IPv4](../../_static/images/administration/digital-ocean/public-ip.png) + +6\. Now, log in to your server using the "Web Console" button or any other convenient way (e.g., a terminal) as the root user. + +![web-console position](../../_static/images/administration/digital-ocean/web-console.png) + +7\. Right after you log in to your server you can already download the installation script and run it with a single command: +``` +wget -N https://github.com/espocrm/espocrm-installer/releases/latest/download/install.sh +sudo bash install.sh --ssl +``` +During installation process, the system will prompt you to choose appropriate SSL protocol and enter a domain name, if available. + +It's also possible to run the installer with all necessary preset, for example: +``` +wget -N https://github.com/espocrm/espocrm-installer/releases/latest/download/install.sh +sudo bash install.sh -y --ssl --letsencrypt --domain=espocrm-sandbox.com --email=email@my-domain.com +``` + +All available prompt options can be foud [here](../installation-by-script.md#available-options) + +After a successful installation, the login credentials, including the URL that you can use to access EspoCRM, will be shown in the terminal. + +![Login credentails in terminal](../../_static/images/administration/digital-ocean/credentials.png) + +## Additional Security + +To improve the security of your EspoCRM server, we recommend configuring Fail2ban to help protect against repeated unauthorized access attempts. + +For more information, see the [Fail2ban Setup Guide](../Fail2ban.md). + diff --git a/docs/index.md b/docs/index.md index 0d00bc678..e44afc4b1 100644 --- a/docs/index.md +++ b/docs/index.md @@ -14,6 +14,8 @@ * [Caddy reverse proxy](administration/docker/caddy.md) * [Installation](administration/installation.md) * [Upgrading](administration/upgrading.md) +* Deployment Guides + * [DigitalOcean](administration/docker/digital-ocean.md) * Miscellaneous * [WebSocket](administration/websocket.md) * Portal diff --git a/mkdocs.yml b/mkdocs.yml index 9bace3fb9..eebea4456 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -68,8 +68,12 @@ nav: - 'Caddy reverse proxy': 'administration/docker/caddy.md' - 'Installation': 'administration/installation.md' - 'Upgrading': 'administration/upgrading.md' + - Deployment Guides: + - 'DigitalOcean': 'administration/docker/digital-ocean.md' - Miscellaneous: - 'WebSocket': 'administration/websocket.md' + - 'DNS configuration': 'administration/DNS-configuration.md' + - 'Fail2ban configuration': 'administration/Fail2ban.md' - 'Portal': - 'Configuring portal in Apache': 'administration/portal/apache-configuration.md' - 'Configuring portal in Nginx': 'administration/portal/nginx-configuration.md'