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.
Virtualmin Installation
Step 1: System Requirements Check
Ensure you have a clean, supported operating system:
lsb_release -a
# Verify clean installation
# Virtualmin requires fresh OS install
Step 2: Install Virtualmin
Run the installation script:
Step 3: Post-Installation Verification
Check if Virtualmin installed successfully:
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:
apt install bind9 bind9utils bind9-doc
Step 2: Zone File Configuration
Edit your domain's zone file:
cd /etc/bind
# Edit zone file for your domain
nano named.conf.local
zone "jazila-traders.com" {
type master;
file "/etc/bind/zones/jazila-traders.com.db";
};
Step 3: DNS Record Setup
Create essential DNS 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:
# Ensure local BIND config matches external DNS
Email Server Configuration
Step 1: Postfix Configuration
Configure Postfix for your domain:
nano /etc/postfix/main.cf
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:
apt install dovecot-core dovecot-imapd dovecot-pop3d
# Configure mail location
nano /etc/dovecot/conf.d/10-mail.conf
mail_location = maildir:~/Maildir
Step 3: Roundcube Webmail
Configure Roundcube webmail interface:
apt install roundcube roundcube-core roundcube-mysql roundcube-plugins
# Ensure database user has proper permissions
# Configure /etc/roundcube/config.inc.php
Step 4: Virtualmin Mail Path Configuration
Set custom mail directory in Virtualmin:
# → 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:
# Navigate to: Virtualmin → Import Virtual Servers
Step 2: Manual Server Configuration
If automatic import fails, create servers manually:
- 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:
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:
# webmail.jazila-traders.com
# cdn.jazila-traders.com
# etc.
PHP & Web Application Configuration
Step 1: PHP-FPM Setup
Configure PHP processing with 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:
SetHandler "proxy:unix:/var/run/php/php8.1-fpm.sock|fcgi://localhost"
</FilesMatch>
Step 3: Roundcube PHP Fix
Ensure Roundcube processes PHP correctly:
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:
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:
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:
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:
systemctl status php8.1-fpm
# Check Apache modules
a2query -m php*
a2query -m proxy*
Security Considerations
Firewall Configuration
Set up proper firewall rules:
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:
# Or use Let's Encrypt for free certificates
# Virtualmin → Server Configuration → SSL Certificate
Regular Maintenance
Keep your server secure and updated:
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.
- 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