This repository provisions three production-ready stacks on a clean Ubuntu 22.04 VPS:
- Nginx Proxy Manager (NPM) + n8n
- Evolution API
- Chatwoot
The deploy.sh script automates the entire installation, networking, and stack bootstrap sequence. Follow this guide end-to-end to secure your server, deploy the services, and perform post-installation checks.
sudo apt update && sudo apt upgrade -y
sudo rebootsudo adduser fulltech
sudo usermod -aG sudo fulltechLog out and back in as the new user before continuing.
- Generate an SSH key pair on your local machine (skip if you already have one):
ssh-keygen -t ed25519 -C "your_email@example.com" - Copy the public key to the VPS:
If
ssh-copy-id fulltech@<SERVER-IP>
ssh-copy-idis unavailable, manually append your public key to/home/fulltech/.ssh/authorized_keys. - Harden SSH (optional but recommended):
Set/confirm the following:
sudo nano /etc/ssh/sshd_config
Then restart the service:PasswordAuthentication no PubkeyAuthentication yes PermitRootLogin prohibit-passwordsudo systemctl restart ssh
Enable Ubuntu's uncomplicated firewall and allow only the required ports:
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status verboseClone (or upload) the project into your home directory:
cd ~
git clone <YOUR-REPO-URL> fulltech
cd ~/fulltechIf you received a ZIP archive, upload it and extract it into ~/fulltech instead.
Execute the provisioning script with elevated privileges:
sudo ./deploy.shThe script will:
- Validate administrative privileges.
- Install Docker Engine and the Docker Compose plugin if missing.
- Create the
~/fulltech/{npm,evolution,chatwoot}directory hierarchy for persistent volumes. - Copy
.env.example→.envfor Evolution and Chatwoot when needed and auto-generate secure credentials. - Create the shared Docker network
proxy-net. - Pull and start the stacks in order: NPM, Evolution, Chatwoot.
- Print follow-up steps and health check commands.
Tip: Environment secrets are generated only when
.envfiles are created for the first time. To rotate them later, delete the.envfile and rerun the script (services will be redeployed with new credentials).
-
Browse to
http://<SERVER-IP>:81and log in with the default credentials:- Email:
admin@example.com - Password:
changeme(You will be prompted to change them immediately.)
- Email:
-
Add the following proxy hosts after pointing the DNS A records for each domain to your VPS IP:
Domain Forward Hostname / IP Forward Port Scheme evo.fulltechvzla.comevolution3001httpcw.fulltechvzla.comrails3000*httpn8n.fulltechvzla.comn8n5678http*Chatwoot's Rails server listens on port 3000 inside the container.
-
Under the SSL tab for each host, request a new Let's Encrypt certificate, agree to the terms, and enable HTTP to HTTPS redirection.
If you must request certificates in advance (before creating proxy hosts), use the NPM SSL Certificates section to issue them. After issuance, you can attach them to the proxy hosts.
- Retrieve the auto-generated API key:
sudo cat ~/fulltech/evolution/.env | grep AUTHENTICATION_API_KEY
- Use the key to create your first instance (example request):
curl -X POST \ -H "Content-Type: application/json" \ -H "apikey: <PASTE-AUTHENTICATION_API_KEY>" \ -d '{ "name": "demo-instance", "description": "Instance deployed via API", "queue": "default" }' \ https://evo.fulltechvzla.com/instance/create
- Check the health endpoint:
curl https://evo.fulltechvzla.com/health
- Visit
https://cw.fulltechvzla.comand complete the initial onboarding (create admin user). - Navigate to Settings → Inboxes → Add Inbox → Chatbot and create a new bot inbox.
- Create a new bot agent under Settings → Agents and assign it to the bot inbox.
- Within the bot inbox, click Configure, enable the API channel, and copy the Bot Token. This token is required by n8n workflows to interact with Chatwoot.
- Update your n8n workflow credentials with the copied bot token and the Chatwoot host URL (
https://cw.fulltechvzla.com).
Use these commands/endpoints to verify each stack:
| Stack | Command / Endpoint |
|---|---|
| NPM + n8n | sudo docker compose -f npm/docker-compose.yml pshttp://<SERVER-IP>:81 UI |
| Evolution API | sudo docker compose -f evolution/docker-compose.yml pshttps://evo.fulltechvzla.com/health |
| Chatwoot | sudo docker compose -f chatwoot/docker-compose.yml pshttps://cw.fulltechvzla.com UI |
sudo docker compose -f npm/docker-compose.yml logs -f
sudo docker compose -f evolution/docker-compose.yml logs -f evolution
sudo docker compose -f chatwoot/docker-compose.yml logs -f rails- Database volumes reside in
~/fulltech/evolution/postgres_dataand~/fulltech/chatwoot/postgres_data. - Redis and n8n data are stored under their respective directories in
~/fulltech. - Schedule regular snapshots or
docker execbackups depending on your retention policy.
- Docker not running:
sudo systemctl status dockerthensudo journalctl -u docker. - Containers failing: Inspect logs with
docker compose logsand verify.envvalues. - Port conflicts: Ensure no other service uses ports 80/81/443/3001.
- DNS propagation: Allow time for DNS records to propagate before requesting SSL certificates.
- Integrate Evolution API instances with WhatsApp devices as required by your workflow.
- Build n8n workflows using the Chatwoot bot token to automate customer interactions.
- Monitor system resources with
htop,docker stats, or your preferred observability stack.
Happy deploying!