Deployment guide

Flectra 3.0

Overview

Flectra is a comprehensive open-source ERP and CRM suite for growing businesses. It is developed as a community fork of Odoo and published under the LGPL-3.0 licence. It brings the full business suite together in one application: a CRM with a sales pipeline, sales quotations and orders, invoicing and full double-entry accounting, inventory and warehouse management, purchasing, projects, a point of sale, human resources, and an integrated website and eCommerce module. Unlike the community edition of the project it forked from, Flectra ships the complete suite with no core features held back behind a paid tier and no licence key to activate.

This SecureAnyCloud image installs Flectra 3.0 from its LGPL-3.0 source into a dedicated Python virtual environment. Flectra runs behind nginx, with a PostgreSQL 16 database, and the image is locked down for use as a marketplace appliance. Flectra is bound to loopback 127.0.0.1:8069 (HTTP) and 127.0.0.1:8072 (live chat / websocket) and is never exposed directly. nginx on port 80 is the only way in, plus an unauthenticated /healthz endpoint for load balancer probes.

The image is secure by default. The Odoo-family default admin/admin login and the database master password are never present in the image. On the first boot of every VM, a fresh PostgreSQL password, a fresh database master password and a unique random administrator password are generated and written to a root-only file. Demonstration data is preloaded, so the CRM pipeline, sales orders and accounting are populated out of the box. The image is backed by 24/7 SecureAnyCloud support.

Flectra is not affiliated with or endorsed by Odoo S.A.

What you get:

  • Flectra 3.0 installed from source in a dedicated Python virtual environment and running as the flectra systemd service
  • The full Flectra web suite on :80, fronted by nginx, with Flectra bound to loopback only
  • A PostgreSQL 16 database on loopback that holds the ERP, with a per-VM database password generated on first boot
  • Preloaded demonstration data (CRM opportunities, sales orders, products, customer invoices), so the suite is populated on first boot
  • No default account: admin/admin never ships, the administrator is created on first boot with a unique random password, and the database master password is generated per VM and never baked into the image
  • proxy_mode and a per-VM base URL, so sign-in works on the public IP address or a custom domain
  • An unauthenticated /healthz endpoint for Azure Load Balancer health probes
  • postgresql.service, flectra.service and nginx.service as systemd units, enabled and active
  • 24/7 SecureAnyCloud support

Prerequisites

You need an active Azure subscription, an SSH key pair, and a VNet and subnet in the target region.

Standard_B2s (2 vCPU / 4 GiB RAM) is a comfortable starting point. In the NSG, allow inbound 22/tcp from your management network, 80/tcp for the web application, and 443/tcp if you add TLS.

Flectra serves plain HTTP on port 80. For production use, terminate TLS in front of it with your own domain and restrict access to trusted IP ranges (see Maintenance).

Step 1 - Deploy from the Azure Marketplace

Sign in to the Azure Portal, choose Create a resource, search the Marketplace for Flectra by SecureAnyCloud, and select Create.

On the Basics tab, pick your subscription, resource group, region and size. Under Administrator account, choose SSH public key and paste your key. Under Inbound port rules, allow SSH (22) and HTTP (80). Then select Review + create and Create.

Step 2 - Deploy from the Azure CLI

# Accept the Marketplace terms once per subscription (required before the first CLI deploy)
az vm image terms accept --urn sac1647283583153:flectra-ubuntu-24-04:default:latest
az vm create \
  --resource-group <your-rg> \
  --name flectra \
  --image sac1647283583153:flectra-ubuntu-24-04:default:latest \
  --size Standard_B2s \
  --admin-username azureuser \
  --generate-ssh-keys \
  --public-ip-sku Standard

Open port 80 to your network so that you can reach the web interface:

az vm open-port --resource-group <your-rg> --name flectra --port 80

Step 3 - Connect to your VM

ssh azureuser@<vm-public-ip>

Step 4 - Confirm the services are running

systemctl is-active postgresql flectra nginx

All three report active. Flectra runs on the loopback addresses 127.0.0.1:8069 (HTTP) and 127.0.0.1:8072 (websocket). nginx fronts it on port 80, and PostgreSQL is bound to loopback. The application is never bound to a public interface, so nginx is the only way in. Check the listeners with:

ss -tln | grep -E '127.0.0.1:8069|:80 ' || true

Step 5 - Retrieve your admin and master passwords

Flectra uses a web login. The username is admin. On the first boot of your VM, a unique password is generated, along with a database master password that gates database management. Both are written to a root-only file. Read it with:

sudo cat /root/flectra-credentials.txt 2>/dev/null || echo '(generated on first boot; run this on your own VM)'

This file contains FLECTRA_ADMIN_USER, FLECTRA_ADMIN_PASSWORD, FLECTRA_MASTER_PASSWORD, FLECTRA_DB and the FLECTRA_URL to open in a browser. The file is mode 0600 root:root. Neither the default admin/admin login nor a default master password ever exists in the image, so no shared or default credential is present.

Store the passwords somewhere safe, and change the admin password after your first sign-in (see Maintenance).

Step 6 - Confirm the health endpoint

nginx serves an unauthenticated health endpoint for load balancers and probes:

curl -s http://localhost/healthz

It returns ok. This endpoint never requires authentication, so you can use it for an Azure Load Balancer health probe.

Step 7 - Confirm the default login is rejected

The Odoo-family default admin/admin is deliberately removed from this image. You can verify this. An authentication attempt with admin/admin is rejected (no user id is returned), while the login page itself stays reachable so that you can sign in with your per-VM password:

echo "login page: $(curl -s -o /dev/null -w '%{http_code}' http://127.0.0.1/web/login)"
DEFAULT_UID=$(curl -s -m 20 -H 'Content-Type: application/json' -X POST \
  --data '{"jsonrpc":"2.0","params":{"db":"flectra","login":"admin","password":"admin"}}' \
  http://127.0.0.1/web/session/authenticate \
  | python3 -c 'import sys,json;r=(json.load(sys.stdin).get("result") or {});print(r.get("uid"))' 2>/dev/null || echo None)
echo "admin/admin -> uid ${DEFAULT_UID} (None or False means rejected)"

It prints login page: 200 and admin/admin -> uid None, which confirms that the default credential does not work. Sign in instead with admin and the FLECTRA_ADMIN_PASSWORD from Step 5.

Step 8 - Confirm the installed version and demo data

Flectra 3.0 runs on Python in a dedicated virtual environment. Confirm the runtime and that the demonstration data loaded:

/opt/flectra/venv/bin/python --version sudo -u postgres psql -d flectra -tAc "select 'CRM leads: '||count(*) from crm_lead"
sudo -u postgres psql -d flectra -tAc "select 'Sales orders: '||count(*) from sale_order"
sudo -u postgres psql -d flectra -tAc "select 'Customer invoices: '||count(*) from account_move where move_type='out_invoice'"

It reports Python 3.12 and populated CRM, Sales and Accounting data, so the suite is not empty on first boot.

Step 9 - Sign in to Flectra

Browse to http://<vm-public-ip>/. Flectra shows its sign-in page. Enter admin and the FLECTRA_ADMIN_PASSWORD from Step 5, then select Log in.

Step 10 - Explore the CRM pipeline

Open the CRM app. The pipeline is preloaded with demonstration opportunities across the New, Qualified, Proposition and Won stages. Each opportunity has an expected revenue, tags, a priority and a next activity, so you can see how the sales pipeline looks and works before you add your own leads.

Step 11 - Review sales orders

Open the Sales app. The demonstration data includes sales orders with customers, salespeople, amounts and invoicing status, so quotations, orders and the order-to-invoice flow are ready to explore.

Step 12 - Review accounting and invoices

Open the Accounting app. Flectra ships full double-entry accounting in the community edition, and the demonstration data includes posted customer invoices with amounts, due dates and payment status. Use this app to manage invoicing, bills, payments and the chart of accounts.

Step 13 - Build your business

The image ships demonstration data so that the suite is not empty. When you are ready, use the Apps menu to install additional modules (Inventory, Purchase, Project, Website, Point of Sale, HR). Then use each app to configure your own company, products, customers and chart of accounts.

To start from clean data, create a new database from the database manager using your FLECTRA_MASTER_PASSWORD, or remove the demonstration records from within each app. See the Flectra documentation for how to configure the suite for your business.

Maintenance

  • Passwords: the administrator password and the database master password are generated on first boot and stored in /root/flectra-credentials.txt (mode 0600 root:root). Change the admin password in Flectra under the user preferences. Change the master password by editing admin_passwd in /etc/flectra/flectra.conf and then running sudo systemctl restart flectra.
  • Restrict access: Flectra serves plain HTTP on port 80. For production, restrict access to trusted IP ranges in your Network Security Group, and front Flectra with TLS terminating on :443 (for example, certbot with your own domain). proxy_mode is already enabled, so Flectra honours the X-Forwarded-* headers from nginx.
  • Loopback binding: Flectra is bound to 127.0.0.1:8069 and 127.0.0.1:8072 in /etc/flectra/flectra.conf, so nginx is the only path in. Keep it that way, and do not change http_interface to a public interface.
  • Database: the ERP lives in the flectra PostgreSQL database on loopback. Back it up with sudo -u postgres pg_dump flectra > flectra.sql, together with the filestore under /var/lib/flectra. The database password is generated on first boot and held in /etc/flectra/flectra.conf (mode 0640 root:flectra).
  • Configuration: application settings are read from /etc/flectra/flectra.conf. Restart with sudo systemctl restart flectra after you edit it. workers is set to a conservative value that fits a Standard_B2s. Raise it on a larger VM for more concurrency.
  • Upgrades: Flectra is installed from its 3.0 source branch under /opt/flectra/src. To take the latest 3.0 fixes, update the checkout and restart the service.
  • Security patches: unattended-upgrades remains enabled, so the OS continues to receive security updates automatically.

Support

SecureAnyCloud provides 24/7 expert support for this image. Email sales@secureanycloud.com.

Deploy on Azure

Launch Flectra 3.0 on Ubuntu 24.04 LTS on Azure with 24/7 support from SecureAnyCloud.

View this image

Need Help?

Our support team is available 24/7.

sales@secureanycloud.com

Deploy on Azure