Back to Cloud VPS Documentation

    Migrate from Contabo to RamNode

    A complete step-by-step guide to migrating your Contabo VPS to RamNode Cloud using file-level migration techniques.

    Introduction

    This guide provides step-by-step instructions for migrating your infrastructure from Contabo to RamNode. Whether you're moving a single VPS or multiple servers, following this structured approach will ensure minimal downtime and a smooth transition.

    RamNode offers modern cloud infrastructure with high-performance NVMe storage, private networking capabilities, and flexible scaling options that make it an excellent choice for developers, businesses, and self-hosting enthusiasts.

    Why Manual Migration Is Required

    Important: Unlike cloud providers that use OpenStack or offer image export functionality, Contabo runs a proprietary virtualization platform that does not support disk image exports.

    Contabo's infrastructure limitations include:

    • No downloadable snapshots — Their internal snapshot feature cannot be exported or transferred
    • No API access — No programmatic method to extract disk images
    • No detachable block storage — Volumes cannot be disconnected and moved to another provider
    • Closed hypervisor access — No direct access to the virtualization layer for image extraction

    This guide focuses on file-level migration using standard Linux tools such as rsync, tar, mysqldump, and pg_dump. While this approach requires more steps than an image-based migration, it offers several advantages: you can selectively migrate only what you need, clean up legacy configurations, and optimize your setup for RamNode's NVMe-based infrastructure.

    1Pre-Migration Planning

    Inventory Your Current Setup

    Before beginning the migration, document everything running on your Contabo server(s):

    • Operating system and version (e.g., Ubuntu 22.04, Debian 12, Rocky Linux 9)
    • Web servers (Apache, Nginx, LiteSpeed, OpenLiteSpeed)
    • Database servers (MySQL, MariaDB, PostgreSQL, MongoDB, Redis)
    • Application stacks (PHP-FPM, Node.js, Python, Ruby, Go)
    • Control panels (cPanel, Plesk, DirectAdmin, CyberPanel)
    • Mail servers (Postfix, Dovecot, Mail-in-a-Box)
    • Containers and orchestration (Docker, Podman, Kubernetes)
    • Cron jobs and scheduled tasks
    • Custom configurations and firewall rules
    • SSL certificates and their expiration dates
    • DNS records and zones

    Resource Assessment

    Compare your current Contabo resource usage with RamNode's offerings:

    ResourceContabo (Current)RamNode (Target)
    CPU CoresDocument current allocationMatch or exceed based on load
    RAMCheck actual usage with free -hSize appropriately for workload
    StorageUse df -h to check usageNVMe SSD (high IOPS)
    BandwidthReview monthly transferGenerous allocations available
    NetworkNote IP addresses in usePrivate networking available

    Create a Migration Timeline

    1. Select a low-traffic period for the cutover
    2. Notify stakeholders and users of potential brief downtime
    3. Schedule DNS TTL reduction 24-48 hours before migration
    4. Prepare rollback procedures in case of issues
    5. Allocate time for post-migration testing

    2RamNode Environment Setup

    Create Your RamNode Account & Deploy VPS

    1. Visit ramnode.com and create an account
    2. Complete account verification and add your payment method
    3. Enable two-factor authentication for security

    From the RamNode dashboard:

    1. Click "Deploy New Server"
    2. Select your preferred location (NYC, Atlanta, Seattle, LA, NL)
    3. Choose the VPS plan matching your requirements
    4. Select your operating system (match your Contabo OS for easier migration)
    5. Configure hostname and root password
    6. Add your SSH public key for secure access
    7. Deploy and wait for provisioning (usually under 60 seconds)

    Initial Server Configuration

    Once your RamNode VPS is deployed, perform initial setup:

    # Update system packages
    apt update && apt upgrade -y      # Debian/Ubuntu
    # or
    dnf update -y                     # RHEL/Rocky/Alma
    
    # Set timezone
    timedatectl set-timezone America/Chicago
    
    # Configure hostname
    hostnamectl set-hostname your-server.example.com

    Configure Private Networking (Optional)

    If you're migrating multiple servers, RamNode's private networking allows secure inter-server communication:

    # Enable private network interface
    # Network details available in RamNode dashboard
    ip addr add 10.x.x.x/24 dev eth1
    ip link set eth1 up

    3Data Backup from Contabo

    Full System Backup

    Create a comprehensive backup of your Contabo server before migration:

    Using rsync (Recommended):

    # From your RamNode server, pull data from Contabo
    rsync -avzP --progress root@contabo-ip:/var/www/ /var/www/
    rsync -avzP --progress root@contabo-ip:/etc/ /home/backup/etc/
    rsync -avzP --progress root@contabo-ip:/home/ /home/backup/home/

    Using tar for Compressed Archives:

    # On Contabo server, create archives
    tar -czvf /tmp/www-backup.tar.gz /var/www/
    tar -czvf /tmp/etc-backup.tar.gz /etc/
    
    # Transfer to RamNode
    scp /tmp/*-backup.tar.gz root@ramnode-ip:/home/backup/

    Database Backup

    MySQL/MariaDB:

    # Export all databases
    mysqldump --all-databases --single-transaction \
      --routines --triggers --events > all-databases.sql
    
    # Or export specific database
    mysqldump -u root -p database_name > database_name.sql
    
    # Transfer to RamNode
    scp all-databases.sql root@ramnode-ip:/home/backup/

    PostgreSQL:

    # Export all databases
    pg_dumpall > all-postgres.sql
    
    # Or specific database
    pg_dump database_name > database_name.sql

    MongoDB:

    # Full backup
    mongodump --out /tmp/mongodb-backup/
    
    # Compress and transfer
    tar -czvf /tmp/mongodb-backup.tar.gz /tmp/mongodb-backup/
    scp /tmp/mongodb-backup.tar.gz root@ramnode-ip:/home/backup/

    Email Data Backup

    If running a mail server:

    # Backup mail data
    tar -czvf /tmp/mail-backup.tar.gz /var/mail/ /var/vmail/
    
    # Backup mail configuration
    tar -czvf /tmp/mail-config.tar.gz /etc/postfix/ /etc/dovecot/

    SSL Certificate Backup

    # Let's Encrypt certificates
    tar -czvf /tmp/letsencrypt-backup.tar.gz /etc/letsencrypt/
    
    # Or copy specific certificates
    rsync -avz /etc/ssl/certs/ root@ramnode-ip:/etc/ssl/certs/
    rsync -avz /etc/ssl/private/ root@ramnode-ip:/etc/ssl/private/

    4Application Migration

    Web Server Configuration

    Nginx:

    # Install Nginx on RamNode
    apt install nginx -y
    
    # Copy configuration files
    rsync -avz root@contabo-ip:/etc/nginx/ /etc/nginx/
    
    # Test configuration
    nginx -t
    
    # Restart service
    systemctl restart nginx

    Apache:

    # Install Apache
    apt install apache2 -y
    
    # Copy configurations
    rsync -avz root@contabo-ip:/etc/apache2/ /etc/apache2/
    
    # Enable required modules
    a2enmod rewrite ssl headers proxy proxy_http
    
    # Test and restart
    apachectl configtest
    systemctl restart apache2

    Database Restoration

    MySQL/MariaDB:

    # Install MariaDB
    apt install mariadb-server -y
    
    # Secure installation
    mysql_secure_installation
    
    # Import databases
    mysql < /home/backup/all-databases.sql
    
    # Recreate users if needed
    mysql -e "CREATE USER 'user'@'localhost' IDENTIFIED BY 'password';"
    mysql -e "GRANT ALL ON database.* TO 'user'@'localhost';"

    PostgreSQL:

    # Install PostgreSQL
    apt install postgresql postgresql-contrib -y
    
    # Import databases
    sudo -u postgres psql < /home/backup/all-postgres.sql

    Control Panel Migration

    If using a control panel, follow the panel-specific migration process:

    cPanel:

    # On Contabo (source), create full backup via WHM
    # WHM > Backup > Full Backup
    
    # Or use command line
    /scripts/pkgacct username /home/backup/
    
    # On RamNode, restore
    /scripts/restorepkg /home/backup/cpmove-username.tar.gz

    Plesk:

    # Export via Plesk Migrator or command line
    plesk bin pleskbackup domains-only -v
    
    # Transfer and restore on RamNode
    plesk bin pleskrestore --restore domains-only backup.xml

    Docker Container Migration

    # Export container images
    docker save -o myapp.tar myapp:latest
    
    # Export volumes
    docker run --rm -v myvolume:/data -v $(pwd):/backup \
      alpine tar -czvf /backup/volume-backup.tar.gz /data
    
    # On RamNode, load images
    docker load -i myapp.tar
    
    # Restore volumes
    docker run --rm -v myvolume:/data -v $(pwd):/backup \
      alpine tar -xzvf /backup/volume-backup.tar.gz -C /

    5DNS Migration

    Pre-Migration DNS Preparation

    Reduce TTL values 24-48 hours before migration to ensure faster propagation:

    example.com. 300 IN A current-ip
    www.example.com. 300 IN A current-ip

    Update DNS Records

    After verifying your RamNode server is functioning correctly:

    1. Log into your DNS provider (Cloudflare, Route53, your registrar)
    2. Update A records to point to your new RamNode IP address
    3. Update AAAA records if using IPv6
    4. Update MX records if migrating email
    5. Update any CNAME, TXT, or other records as needed

    Verify DNS Propagation

    # Check DNS propagation
    dig example.com +short
    dig @8.8.8.8 example.com +short

    Or use online tools like whatsmydns.net or dnschecker.org

    Configure rDNS for your RamNode IP through the control panel for proper email deliverability and server identification.

    6Post-Migration Tasks

    Verification Checklist

    • All websites load correctly and function as expected
    • SSL certificates are valid and not showing warnings
    • Database connections are working
    • Email sending and receiving is functional
    • Cron jobs are running on schedule
    • Application APIs respond correctly
    • File uploads and downloads work
    • User authentication systems function properly

    Performance Optimization

    Take advantage of RamNode's NVMe storage and optimize your applications:

    # Enable opcache for PHP
    # /etc/php/8.x/fpm/conf.d/10-opcache.ini
    opcache.enable=1
    opcache.memory_consumption=256
    opcache.max_accelerated_files=20000
    
    # Optimize MySQL/MariaDB
    # /etc/mysql/conf.d/optimization.cnf
    [mysqld]
    innodb_buffer_pool_size = 1G
    innodb_log_file_size = 256M
    innodb_flush_method = O_DIRECT

    Security Hardening

    # Configure firewall
    ufw default deny incoming
    ufw default allow outgoing
    ufw allow ssh
    ufw allow http
    ufw allow https
    ufw enable
    
    # Install and configure fail2ban
    apt install fail2ban -y
    systemctl enable fail2ban
    systemctl start fail2ban

    Backup Configuration

    Establish a backup strategy for your RamNode server:

    # Install restic for efficient backups
    apt install restic -y
    
    # Initialize backup repository (RamNode S3 or external)
    restic init -r s3:s3.us-east-1.amazonaws.com/bucket-name
    
    # Create backup script
    #!/bin/bash
    restic backup /var/www /etc --exclude-caches
    restic forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6
    
    # Add to cron for daily backups
    0 2 * * * /root/backup.sh

    Contabo Cleanup

    After confirming everything works on RamNode (recommend waiting 7-14 days):

    1. Download a final backup from Contabo for archival purposes
    2. Cancel Contabo services through their control panel
    3. Update any external services pointing to old Contabo IPs
    4. Document lessons learned for future migrations

    Troubleshooting

    Connection Refused Errors

    # Check if service is running
    systemctl status nginx
    systemctl status apache2
    
    # Check if port is open
    ss -tlnp | grep :80
    ss -tlnp | grep :443
    
    # Check firewall
    ufw status

    Database Connection Issues

    # Check MySQL/MariaDB is running
    systemctl status mariadb
    
    # Verify user permissions
    mysql -e "SELECT user, host FROM mysql.user;"
    
    # Check bind address
    grep bind-address /etc/mysql/mariadb.conf.d/*.cnf

    SSL Certificate Problems

    # Re-issue Let's Encrypt certificate
    certbot certonly --nginx -d example.com -d www.example.com
    
    # Check certificate validity
    openssl x509 -in /etc/letsencrypt/live/example.com/cert.pem -text -noout

    Email Delivery Issues

    # Check mail queue
    mailq
    
    # Verify MX records
    dig MX example.com
    
    # Test SMTP
    swaks --to test@example.com --server localhost

    Getting Help

    If you encounter issues during your migration:

    Welcome to RamNode!

    Congratulations on successfully migrating from Contabo to RamNode! You now have access to high-performance NVMe storage, flexible scaling options, and excellent support.