Debian

Install Zabbix Server 7.0 on Debian 13 / Debian 12

Zabbix 7.0 LTS is the latest long-term support release of the Zabbix monitoring platform, released in June 2024. It brings proxy load balancing, multi-factor authentication, new dashboard widgets (honeycomb, pie chart, gauge), async SNMP pollers, and browser-based monitoring. The LTS tag means five years of full support, making it a solid choice for production monitoring infrastructure.

Original content from computingforgeeks.com - post 25203

This guide walks through a full Zabbix Server 7.0 LTS deployment on Debian 13 (Trixie) and Debian 12 (Bookworm) using PostgreSQL as the backend database and Nginx as the web server. By the end, you will have a fully working Zabbix server with the web frontend accessible over HTTPS and Zabbix Agent 2 reporting metrics from the server itself.

Prerequisites

Before starting, make sure you have the following in place:

  • A Debian 13 or Debian 12 server with at least 2 GB RAM and 2 CPU cores (4 GB+ recommended for production)
  • Root or sudo access
  • A domain or subdomain pointed to your server (for SSL)
  • Ports 80, 443, and 10051 open in your firewall

Update your system packages before proceeding.

sudo apt update && sudo apt upgrade -y

Step 1: Add the Zabbix 7.0 Repository

Zabbix packages are not included in the default Debian repositories, so you need to add the official Zabbix repository first. The repo package differs between Debian versions.

On Debian 13 (Trixie):

wget https://repo.zabbix.com/zabbix/7.0/debian/pool/main/z/zabbix-release/zabbix-release_latest_7.0+debian13_all.deb
sudo dpkg -i zabbix-release_latest_7.0+debian13_all.deb
sudo apt update

On Debian 12 (Bookworm):

wget https://repo.zabbix.com/zabbix/7.0/debian/pool/main/z/zabbix-release/zabbix-release_latest_7.0+debian12_all.deb
sudo dpkg -i zabbix-release_latest_7.0+debian12_all.deb
sudo apt update

After the repository is configured, verify it was added correctly.

apt-cache policy zabbix-server-pgsql

You should see version 7.0.x available from repo.zabbix.com.

Step 2: Install Zabbix Server, Frontend, and Agent 2

Install all the required Zabbix components in a single command. This pulls in the server daemon, the PHP-based web frontend configured for Nginx, SQL schema scripts, and Zabbix Agent 2 for local host monitoring.

sudo apt install -y zabbix-server-pgsql zabbix-frontend-php zabbix-nginx-conf zabbix-sql-scripts zabbix-agent2

This also installs PHP-FPM and Nginx as dependencies if they are not already present on the system.

Step 3: Install and Configure PostgreSQL

Zabbix needs a database backend to store configuration data, collected metrics, and event history. PostgreSQL is the recommended choice for large-scale deployments due to its performance with time-series workloads. If you need a more detailed PostgreSQL setup, check our guide on installing PostgreSQL on Debian / Ubuntu.

Install PostgreSQL from the Debian repositories.

sudo apt install -y postgresql

Verify that PostgreSQL is running.

sudo systemctl status postgresql

The service should show active (exited) since PostgreSQL uses socket activation. Now create the Zabbix database user and database.

sudo -u postgres createuser --pwprompt zabbix

Enter a strong password when prompted. Remember this password because you will need it for the Zabbix server configuration and the web setup wizard.

Create the database owned by the zabbix user.

sudo -u postgres createdb -O zabbix -E Unicode -T template0 zabbix

Import the Zabbix Database Schema

The zabbix-sql-scripts package includes a compressed SQL file that creates all required tables, indexes, and inserts default data (templates, media types, user groups). Import it into the database you just created.

zcat /usr/share/zabbix-sql-scripts/postgresql/server.sql.gz | sudo -u zabbix psql zabbix

This takes a minute or two depending on your hardware. You will see a stream of CREATE TABLE, INSERT, and CREATE INDEX statements scrolling by. Wait until the prompt returns with no errors.

Step 4: Configure the Zabbix Server

The main Zabbix server configuration file needs the database connection details. Open it in your preferred editor.

sudo vi /etc/zabbix/zabbix_server.conf

Find and set the DBPassword directive with the password you created for the zabbix PostgreSQL user.

DBPassword=your_strong_password_here

The other database settings (DBHost, DBName, DBUser) default to localhost, zabbix, and zabbix respectively, which matches our setup. Leave them at their defaults unless you are using a remote database.

For production environments with many hosts, consider tuning these values in the same file.

StartPollers=10
StartPingers=5
CacheSize=128M
HistoryCacheSize=64M
ValueCacheSize=64M

Save and close the file.

Step 5: Configure Nginx for the Zabbix Frontend

The zabbix-nginx-conf package installs a ready-made Nginx server block at /etc/zabbix/nginx.conf. You need to uncomment and adjust the listen and server_name directives.

sudo vi /etc/zabbix/nginx.conf

Uncomment and modify the following lines to match your setup.

server {
        listen          8080;
        server_name     zabbix.example.com;
        ...

Replace zabbix.example.com with your actual domain or subdomain. The port 8080 is the default – if you want Zabbix on port 80 directly, change it to 80 and make sure the default Nginx site is disabled.

To avoid port conflicts with the default Nginx virtual host, remove or disable it.

sudo rm -f /etc/nginx/sites-enabled/default

If you changed the listen port to 80 above, you can now access Zabbix directly without specifying a port number.

Step 6: Configure PHP-FPM Timezone

Zabbix requires the PHP timezone to be set explicitly. The Zabbix PHP-FPM pool configuration file is where you set this.

sudo vi /etc/zabbix/php-fpm.conf

Find the php_value[date.timezone] line, uncomment it, and set your timezone.

php_value[date.timezone] = Africa/Nairobi

Use a valid PHP timezone string that matches your server location. Common examples: America/New_York, Europe/London, Asia/Tokyo, UTC.

Step 7: Start and Enable All Services

Start the Zabbix server, Zabbix Agent 2, Nginx, and PHP-FPM. Enable them so they persist across reboots.

sudo systemctl restart zabbix-server zabbix-agent2 nginx php8.2-fpm
sudo systemctl enable zabbix-server zabbix-agent2 nginx php8.2-fpm

Note for Debian 13: Debian 13 (Trixie) ships PHP 8.4 by default. Replace php8.2-fpm with php8.4-fpm in the commands above if you are on Debian 13.

sudo systemctl restart zabbix-server zabbix-agent2 nginx php8.4-fpm
sudo systemctl enable zabbix-server zabbix-agent2 nginx php8.4-fpm

Verify all services are running correctly.

sudo systemctl status zabbix-server

The output should show active (running). If the server fails to start, check the log at /var/log/zabbix/zabbix_server.log for database connection errors.

sudo systemctl status zabbix-agent2

Agent 2 should also show active (running).

Step 8: Configure UFW Firewall

If UFW is enabled on your Debian server, allow the required ports for Zabbix and Nginx.

sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw allow 10051/tcp
sudo ufw allow 10050/tcp
sudo ufw reload

Port 10051 is used by the Zabbix server to receive data from active agents and proxies. Port 10050 is the Zabbix agent port for passive checks. Ports 80 and 443 serve the web frontend.

Verify the firewall rules are active.

sudo ufw status verbose

You should see all four ports listed as ALLOW.

Step 9: Configure SSL with Let’s Encrypt

Running Zabbix over plain HTTP exposes your login credentials and monitoring data. Set up HTTPS with a free Let’s Encrypt certificate.

Install Certbot and the Nginx plugin.

sudo apt install -y certbot python3-certbot-nginx

Obtain and install the certificate. Replace the domain with your actual Zabbix subdomain.

sudo certbot --nginx -d zabbix.example.com --non-interactive --agree-tos -m [email protected]

Certbot automatically modifies the Nginx configuration to serve Zabbix over HTTPS and redirects HTTP to HTTPS. Verify the auto-renewal timer is working.

sudo certbot renew --dry-run

You should see “Congratulations, all simulated renewals succeeded” confirming that certificate renewal will work automatically.

Step 10: Complete the Zabbix Web Setup Wizard

Open your browser and navigate to https://zabbix.example.com (or http://your-server-ip:8080 if you have not configured SSL yet). The Zabbix frontend setup wizard will load.

Welcome Screen

The first page shows the Zabbix version and a language selector. Select your preferred language and click Next step.

Prerequisites Check

Zabbix checks that all PHP prerequisites are met – extensions, memory limits, timezone, and other settings. Every item should show OK in green. If anything fails, go back and verify your PHP-FPM configuration. Click Next step once everything passes.

Database Configuration

Enter the database connection details:

  • Database type: PostgreSQL
  • Database host: localhost
  • Database port: 5432 (default)
  • Database name: zabbix
  • User: zabbix
  • Password: the password you set in Step 3

Click Next step after entering the credentials.

Zabbix Server Details

Leave the host as localhost and port as 10051 unless your Zabbix server runs on a separate machine. Set a name for this installation (e.g., “Production Monitoring”). Click Next step.

Summary and Finish

Review all settings on the summary page and click Next step to complete the setup. Zabbix writes the configuration to /etc/zabbix/web/zabbix.conf.php and shows a congratulations message.

Click Finish to reach the login page. The default credentials are:

  • Username: Admin
  • Password: zabbix

Change the default password immediately after your first login. Go to User settings (top-right user icon) > Password and set a strong password.

The Zabbix login page loads after the wizard completes:

Zabbix 7.0 login page

After logging in, the Global View dashboard shows host availability, problems by severity, and system information:

Zabbix 7.0 dashboard showing live monitoring data

Step 11: Configure Zabbix Agent 2

Zabbix Agent 2 was installed alongside the server. By default, it is configured to report to 127.0.0.1, which means it already monitors the Zabbix server host. Verify the configuration.

sudo vi /etc/zabbix/zabbix_agent2.conf

Confirm these settings are correct.

Server=127.0.0.1
ServerActive=127.0.0.1
Hostname=Zabbix server

The Hostname value must exactly match the host name configured in the Zabbix frontend. The default “Zabbix server” host is preconfigured in the database, so this works out of the box.

If you changed any settings, restart the agent.

sudo systemctl restart zabbix-agent2

To monitor remote hosts, install Zabbix Agent 2 on those machines as well. Our guide on installing Zabbix Agent 2 on Debian covers the full setup for monitored hosts.

Verify Host Monitoring in the Web UI

After logging into the Zabbix frontend, go to Monitoring > Hosts. You should see the “Zabbix server” host with its agent status showing a green ZBX icon, meaning the agent is communicating with the server successfully. It may take a few minutes after the initial setup for data collection to begin.

Step 12: Post-Installation Tuning

A few adjustments make Zabbix run smoother in production.

Increase PHP Memory and Upload Limits

The default PHP settings work for small deployments, but if you plan to import large templates or handle many hosts, bump the limits.

sudo vi /etc/zabbix/php-fpm.conf

Add or modify these values.

php_value[memory_limit] = 256M
php_value[upload_max_filesize] = 20M
php_value[post_max_size] = 20M
php_value[max_execution_time] = 600

Restart PHP-FPM after making changes.

sudo systemctl restart php8.2-fpm

Again, use php8.4-fpm on Debian 13.

PostgreSQL Performance Tuning

For monitoring setups with more than 100 hosts, tune PostgreSQL for better write throughput. Edit the PostgreSQL configuration.

sudo vi /etc/postgresql/*/main/postgresql.conf

Adjust these parameters based on your available RAM (example for a 4 GB server).

shared_buffers = 1GB
work_mem = 16MB
maintenance_work_mem = 256MB
effective_cache_size = 3GB
checkpoint_completion_target = 0.9

Restart PostgreSQL to apply changes.

sudo systemctl restart postgresql

The host configuration page shows agent interface settings and linked templates:

Zabbix 7.0 host configuration

The system information page confirms server version, host count, and performance:

Zabbix 7.0 system information page

Troubleshooting

Here are fixes for the most common issues encountered during Zabbix installation on Debian.

Zabbix Server Fails to Start

Check the server log for specific errors.

sudo tail -50 /var/log/zabbix/zabbix_server.log

The most common cause is a wrong database password in /etc/zabbix/zabbix_server.conf. Verify the DBPassword value matches what you set during the createuser step. You can test the connection manually.

psql -h localhost -U zabbix -d zabbix -c "SELECT version();"

If this fails with an authentication error, reset the password.

sudo -u postgres psql -c "ALTER USER zabbix WITH PASSWORD 'new_password_here';"

Update /etc/zabbix/zabbix_server.conf with the new password and restart the server.

Web Frontend Shows “Database Error”

This usually means the web frontend configuration file has wrong credentials. Check the auto-generated config.

sudo cat /etc/zabbix/web/zabbix.conf.php

Make sure the DATABASE, USER, and PASSWORD values are correct. If this file does not exist, re-run the web setup wizard.

Nginx Returns 502 Bad Gateway

This means PHP-FPM is not running or Nginx cannot reach it. Check the PHP-FPM status.

sudo systemctl status php8.2-fpm

If it is stopped, start it and check the logs for errors.

sudo systemctl start php8.2-fpm
sudo journalctl -u php8.2-fpm --no-pager -n 30

Also verify the PHP-FPM socket path matches what Nginx expects. The Zabbix Nginx config references the socket defined in /etc/zabbix/php-fpm.conf.

Agent Shows Red ZBX Icon in the Frontend

A red icon means the server cannot reach the agent. Common causes:

  • Agent is not running: sudo systemctl status zabbix-agent2
  • Hostname mismatch between zabbix_agent2.conf and the host configured in the Zabbix frontend
  • Firewall blocking port 10050

Check the agent log for connection errors.

sudo tail -30 /var/log/zabbix/zabbix_agent2.log

PHP Prerequisites Check Fails

If the web wizard shows missing PHP modules, install them manually. The Zabbix packages should pull in all required modules, but occasionally one gets missed.

sudo apt install -y php-pgsql php-gd php-xml php-bcmath php-mbstring php-ldap php-json

Restart PHP-FPM after installing any missing modules.

Cannot Access Web Interface After Installation

Verify Nginx is listening on the correct port.

sudo ss -tlnp | grep nginx

If Nginx shows port 8080 but you expected port 80, edit /etc/zabbix/nginx.conf and change the listen directive. Make sure the default Nginx site is disabled as shown in Step 5.

Upgrading from Zabbix 6.x

If you are running Zabbix 6.0 or 6.4 on Debian, the upgrade path to 7.0 is straightforward. Update the repository to 7.0, install the new packages, and the database schema upgrades automatically on first start.

sudo apt update
sudo apt install --only-upgrade zabbix-server-pgsql zabbix-frontend-php zabbix-nginx-conf zabbix-sql-scripts zabbix-agent2

Restart all services after the upgrade.

sudo systemctl restart zabbix-server zabbix-agent2 nginx

Always take a full database backup before upgrading. A pg_dump of the zabbix database is the minimum safety net.

sudo -u postgres pg_dump zabbix > /tmp/zabbix_backup_pre_upgrade.sql

Key Differences Between Debian 13 and Debian 12

Both Debian releases follow the same installation steps, but there are a few differences worth noting:

  • PHP version: Debian 12 ships PHP 8.2, while Debian 13 ships PHP 8.4. Service names change accordingly (php8.2-fpm vs php8.4-fpm)
  • PostgreSQL version: Debian 12 includes PostgreSQL 15, Debian 13 includes PostgreSQL 16. Both work perfectly with Zabbix 7.0
  • Repository package: Different .deb files for each release as shown in Step 1

All configuration file paths and Zabbix package names remain identical between the two releases.

FAQ

What is the default Zabbix login?

The default username is Admin (capital A) and the default password is zabbix. Change this immediately after your first login from User settings in the top-right corner.

Can Zabbix 7.0 use MySQL instead of PostgreSQL?

Yes. Install zabbix-server-mysql instead of zabbix-server-pgsql and follow the MySQL-specific database setup. PostgreSQL generally performs better for large monitoring deployments with millions of metrics.

How many hosts can a single Zabbix server monitor?

A properly tuned Zabbix 7.0 server with 8 GB RAM and 4 CPU cores can comfortably monitor 1,000+ hosts. For larger deployments, use Zabbix proxies to distribute the collection load. Zabbix 7.0’s new proxy load balancing feature makes this much easier to manage.

Where are the Zabbix log files?

Zabbix server logs to /var/log/zabbix/zabbix_server.log and the agent logs to /var/log/zabbix/zabbix_agent2.log. You can change log paths and verbosity in their respective configuration files.

For monitoring your broader infrastructure, the next step is deploying Zabbix Agent 2 on all the servers you want to monitor. See our guide on installing Zabbix Server on Rocky Linux / AlmaLinux if you also run RHEL-based systems in your environment.

Related Articles

Zabbix How To Install Zabbix Server 5.0 on CentOS 7 / RHEL 7 Containers Installing Metrics Server in Kubernetes using Helm Chart Debian Install Plesk Control Panel on Ubuntu | Debian Debian Install EGroupware on Ubuntu 24.04 / Debian 13

Leave a Comment

Press ESC to close