djangoeurope Compared with a Virtual Server

Increase productivity by not installing and operating a virtual server yourself. With djangoeurope, you get a ready-to-use platform, and you manage its services from the comfort of your web browser.

djangoeurope

11 clicks

and a short form each, for all 6 tasks below. We keep everything up to date.

Your own virtual server

59+ lines

of commands and configuration for the same tasks, and then the updates are up to you.

  1. Getting started

    djangoeurope

    Nothing to set up. nginx, Apache, MySQL, PostgreSQL, the DNS and mail servers and the firewall are installed and configured, and plenty of packages are pre-installed.

    Ready to go

    Your own virtual server

    Install and configure the web servers, database servers, mail server and firewall yourself, tune them, and keep them secure and up to date from then on.

    sudo apt-get update && sudo apt-get upgrade
    sudo apt-get install nginx apache2 postgresql mariadb-server
    sudo apt-get install postfix dovecot-imapd bind9 nftables
    sudo vim /etc/nginx/nginx.conf
    sudo vim /etc/postgresql/*/main/postgresql.conf
    sudo vim /etc/mysql/my.cnf
    sudo vim /etc/postfix/main.cf
    sudo vim /etc/nftables.conf
    sudo systemctl enable --now nginx postgresql mariadb postfix
    ...

    9+ lines to type

  2. Create an SSH user

    djangoeurope

    SSH usersAdd

    Enter the user name and choose the plan you need. The plan sets the disk quota and the limits for RAM and processes.

    2 clicks + a form

    Your own virtual server

    Create the user and answer the prompts for the password and personal details. Then set a disk quota and resource limits, set up SSH access with keys, and make sure only the user can access their home directory.

    sudo adduser test2
    sudo chmod 700 /home/test2
    sudo setquota -u test2 20G 20G 0 0 /home
    sudo vim /etc/security/limits.conf
    sudo vim /etc/systemd/system/user-1001.slice.d/limits.conf
    sudo systemctl daemon-reload
    sudo mkdir -m 700 /home/test2/.ssh
    sudo vim /home/test2/.ssh/authorized_keys
    sudo chown -R test2: /home/test2/.ssh
    sudo vim /etc/ssh/sshd_config
    sudo systemctl reload ssh
    ...

    11+ lines to type

  3. Create a database

    djangoeurope

    DatabasesAdd database

    Enter the database name and choose MySQL or PostgreSQL. It is backed up automatically every day to a separate location, and you can restore it in the control panel.

    2 clicks + a form

    Your own virtual server

    Create a user, set a password, create the database and grant the permissions, for every database you need. Then take care of backups: dump the database regularly, copy the dumps to another location, clean up old ones, and test that you can restore them.

    CREATE USER "test2" WITH CONNECTION LIMIT 10;
    ALTER USER "test2" WITH PASSWORD '...';
    CREATE DATABASE "test2" WITH OWNER="test2";
    GRANT ALL ON DATABASE "test2" TO "test2";
    sudo crontab -e
    0 3 * * * pg_dump -U postgres test2 | gzip > /var/backups/test2-$(date +\%F).sql.gz
    0 4 * * * rsync -a /var/backups/ backup@offsite.example.com:backups/
    0 5 * * * find /var/backups -name 'test2-*' -mtime +7 -delete

    8 lines to type

  4. Set up a website

    djangoeurope

    WebsitesAdd

    Choose the domain, the SSH user and the settings you want.

    2 clicks + a form

    Your own virtual server

    Write an nginx server block with the redirect to HTTPS, the proxy to your application and the paths to your certificates.

    server {
        listen 80;
        server_name example.com;
        return 301 https://$host$request_uri;
    }
    server {
        listen 443 ssl;
        server_name example.com;
        ssl_certificate     /etc/ssl/example.com.pem;
        ssl_certificate_key /etc/ssl/example.com.key;
        location / {
            proxy_pass http://127.0.0.1:8080/;
        }
        ...
    }

    14+ lines to type

  5. Get an SSL certificate

    djangoeurope

    SSLCreate SSL certificate

    It is renewed and put into use automatically.

    2 clicks + a form

    Your own virtual server

    Install certbot, request a certificate and hook it into the web server. Then make sure the automatic renewal really runs, and that nginx and the mail servers reload the renewed certificate, or your site breaks when the old one expires.

    sudo apt-get install certbot python3-certbot-nginx
    sudo certbot --nginx -d example.com
    systemctl list-timers certbot.timer
    sudo vim /etc/letsencrypt/renewal-hooks/deploy/reload.sh
    #!/bin/sh
    systemctl reload nginx postfix dovecot
    sudo chmod +x /etc/letsencrypt/renewal-hooks/deploy/reload.sh
    sudo certbot renew --dry-run

    8 lines to type

  6. Set up e-mail

    djangoeurope

    E-mailsE-mail accountsAdd

    SPF, DKIM and DMARC records are set up automatically, so your mail gets delivered. Forwardings work the same way, under "E-mail forwardings".

    3 clicks + a form

    Your own virtual server

    Install and configure Postfix, Dovecot, SpamAssassin, ClamAV and a webmail client. Set up DKIM signing and publish SPF, DKIM and DMARC records, or big providers like Gmail and Microsoft reject your mail. And keep your server off the spam blacklists.

    sudo apt-get install postfix dovecot-imapd spamassassin clamav roundcube opendkim
    sudo opendkim-genkey -s mail -d example.com -D /etc/opendkim/keys/
    sudo vim /etc/opendkim.conf
    sudo vim /etc/postfix/main.cf
    sudo vim /etc/dovecot/dovecot.conf
    sudo vim /etc/spamassassin/local.cf
    # DNS: example.com TXT "v=spf1 mx -all"
    # DNS: mail._domainkey.example.com TXT "v=DKIM1; k=rsa; p=..."
    # DNS: _dmarc.example.com TXT "v=DMARC1; p=quarantine"
    ...

    9+ lines to type

Prefer scripts?

Automate it with our public API

Everything you do in the control panel, you can also automate through our public REST API at api.djangoeurope.com. The control panel itself is built on it. Create API keys in the control panel and limit each key to exactly the resources and actions an integration needs.

curl -H "Authorization: Token $API_KEY" \
     https://api.djangoeurope.com/website/

Spend your time on your project, not on your server

We maintain the servers and keep the software up to date. You get full shell access anyway.