Introduction

This comprehensive guide covers the complete setup and configuration of a production web server using Virtualmin, including DNS configuration, email server setup, and virtual server migration from existing Webmin installations.

Prerequisites: Fresh Ubuntu 20.04+ installation, root access, basic terminal knowledge

Virtualmin Installation

Step 1: System Requirements Check

Ensure you have a clean, supported operating system:

# Check OS version
lsb_release -a

# Verify clean installation
# Virtualmin requires fresh OS install

Step 2: Install Virtualmin

Run the installation script:

curl -L https://software.virtualmin.com/gpl/scripts/install.sh | sudo bash
Important: If installation fails due to existing Webmin, use force flag:
curl -L https://software.virtualmin.com/gpl/scripts/install.sh | sudo bash -s -- --force

Step 3: Post-Installation Verification

Check if Virtualmin installed successfully:

# Check Virtualmin service
virtualmin list-domains

# If command not found, installation failed
# Check Webmin status instead
systemctl status webmin

DNS Server Configuration

Step 1: BIND DNS Setup

Configure BIND to work with your domain:

# Install BIND if not present
apt install bind9 bind9utils bind9-doc

Step 2: Zone File Configuration

Edit your domain's zone file:

# Navigate to BIND configuration
cd /etc/bind

# Edit zone file for your domain
nano named.conf.local
Sample Zone Configuration:
zone "jazila-traders.com" {
    type master;
    file "/etc/bind/zones/jazila-traders.com.db";
};

Step 3: DNS Record Setup

Create essential DNS records:

; A records
@        IN  A     46.224.20.162
www      IN  A     46.224.20.162
webmail  IN  A     46.224.20.162
mail     IN  A     46.224.20.162

; MX record for email
@        IN  MX  10  webmail.jazila-traders.com.

Step 4: Cloudflare Integration

If using Cloudflare as primary DNS:

# Update BIND to match Cloudflare records
# Ensure local BIND config matches external DNS
Note: Virtualmin may show DNS warnings when using external DNS providers like Cloudflare. These can typically be ignored if mail and web services are functioning correctly.

Email Server Configuration

Step 1: Postfix Configuration

Configure Postfix for your domain:

# Edit main Postfix configuration
nano /etc/postfix/main.cf
# Essential Postfix settings
myhostname = webmail.jazila-traders.com
mydomain = jazila-traders.com
myorigin = $mydomain
mydestination = $myhostname, $mydomain, localhost.$mydomain, localhost
home_mailbox = Maildir/
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
inet_interfaces = all
inet_protocols = all

Step 2: Dovecot Installation

Set up Dovecot for IMAP/POP3:

# Install Dovecot
apt install dovecot-core dovecot-imapd dovecot-pop3d

# Configure mail location
nano /etc/dovecot/conf.d/10-mail.conf
# Dovecot mail location
mail_location = maildir:~/Maildir

Step 3: Roundcube Webmail

Configure Roundcube webmail interface:

# Install Roundcube
apt install roundcube roundcube-core roundcube-mysql roundcube-plugins
# Roundcube database setup
# Ensure database user has proper permissions
# Configure /etc/roundcube/config.inc.php

Step 4: Virtualmin Mail Path Configuration

Set custom mail directory in Virtualmin:

# Virtualmin → System Settings → Server Templates
# → Default → Mail → Mail folder
# Set to: /home/mail/$DOM/%u

Virtual Server Migration & Import

Step 1: Import Existing Webmin Servers

Migrate existing Webmin configurations to Virtualmin:

# In Virtualmin Web Interface:
# Navigate to: Virtualmin → Import Virtual Servers
Important: Virtualmin will detect existing Webmin virtual servers and guide you through the import process.

Step 2: Manual Server Configuration

If automatic import fails, create servers manually:

Virtual Server Creation Form:
- Domain name: jazila-traders.com
- Unix user: daemon (existing user)
- Home directory: /home/jazila-traders
- MySQL database: jazila_traders
- IP address: 46.224.20.162
- Create Webmin login: No (already exists)

Step 3: Document Root Correction

Fix incorrect document root paths:

# Edit Apache configuration directly
nano /etc/apache2/sites-enabled/jazila-traders.conf

# Change DocumentRoot to correct path
DocumentRoot /home/jazila-traders/public_html

Step 4: Sub-server Import

Import additional sub-servers individually:

# Repeat import process for each sub-domain
# webmail.jazila-traders.com
# cdn.jazila-traders.com
# etc.

PHP & Web Application Configuration

Step 1: PHP-FPM Setup

Configure PHP processing with FPM:

# Install PHP-FPM
apt install php8.1-fpm php8.1-mysql

# Enable proxy modules
a2enmod proxy_fcgi
a2enmod proxy

Step 2: Virtual Host PHP Configuration

Add PHP handler to Apache virtual hosts:

<FilesMatch \.php$>
    SetHandler "proxy:unix:/var/run/php/php8.1-fpm.sock|fcgi://localhost"
</FilesMatch>

Step 3: Roundcube PHP Fix

Ensure Roundcube processes PHP correctly:

# Verify PHP-FPM socket exists
ls -la /var/run/php/php8.1-fpm.sock

# Check permissions
chmod -R o+r /usr/share/roundcube/

Troubleshooting Common Issues

DNS Resolution Problems

If Virtualmin shows DNS warnings:

# Check current DNS resolution
nslookup jazila-traders.com

# Verify BIND configuration
named-checkconf
named-checkzone jazila-traders.com /path/to/zonefile

Email Delivery Issues

If mail is bouncing or not delivering:

# Check Postfix configuration
postconf -n

# Verify mydestination includes your domain
postconf mydestination

# Check mail logs
tail -f /var/log/mail.log

Webmin/Virtualmin Access Problems

If unable to access Webmin interface:

# Check if Webmin is running
systemctl status webmin

# Check port listening
netstat -tlnp | grep 10000

# Restart Webmin if needed
systemctl restart webmin

PHP Execution Issues

If PHP files show as raw code:

# Verify PHP-FPM is running
systemctl status php8.1-fpm

# Check Apache modules
a2query -m php*
a2query -m proxy*

Security Considerations

Firewall Configuration

Set up proper firewall rules:

# Enable UFW firewall
ufw enable

# Allow essential services
ufw allow ssh
ufw allow http
ufw allow https
ufw allow 10000
ufw allow 25,587,993,995

SSL/TLS Configuration

Secure your services with SSL certificates:

# Use Virtualmin's SSL certificate management
# Or use Let's Encrypt for free certificates
# Virtualmin → Server Configuration → SSL Certificate

Regular Maintenance

Keep your server secure and updated:

# Regular updates
apt update && apt upgrade

# Check logs regularly
tail -f /var/log/apache2/error.log
tail -f /var/log/mail.log

Conclusion

This guide has covered the complete process of setting up a production-ready web server with Virtualmin, including DNS configuration, email services, and virtual server management. Remember that server administration is an ongoing process that requires regular maintenance and monitoring.

Key Takeaways:
- Always start with a clean, supported OS installation
- Test each service individually after configuration
- Keep regular backups of your configurations
- Monitor logs for potential issues
- Security should be implemented at every layer