1. First of all, you will need to install Docker in case you don’t have already installed that

    Here the quick way:

    Docker easy way to copy&paste install on the Ubuntu 18+

  2. Second, you will need to create ovpn-install.sh file and copy&paste code bellow

    #!/bin/bash
    
    myip=
    while IFS=$': \\t' read -a line ;do
        [ -z "${line%inet}" ] && ip=${line[${#line[1]}>4?1:2]} &&
            [ "${ip#127.0.0.1}" ] && myip=$ip
      done< <(LANG=C /sbin/ifconfig)
    
    apt update
    apt install -y expect
    
    mkdir -p openvpn/ovpns
    
    cat > ./openvpn/addvpnuser.sh << EOF
    #!/usr/bin/expect -f
    
    # Run example expect ./addvpnuser.sh username
    set CLIENTNAME [lindex \\$argv 0];
    set timeout -1
    
    spawn echo "\\$CLIENTNAME"
    
    # with a passphrase (recommended)
    # docker-compose run --rm openvpn easyrsa build-client-full $CLIENTNAME
    # without a passphrase (not recommended)
    spawn docker-compose run --rm openvpn easyrsa build-client-full \\$CLIENTNAME nopass
    sleep 5
    expect "Enter pass phrase for /etc/openvpn/pki/private/ca.key:"
    sleep 3
    send -- "Ir3hp3sFM30yFFob\\r";
    expect eof
    
    EOF
    
    cat > ./openvpn/revokeuser.sh << EOF
    #!/usr/bin/expect -f
    
    # Run example expect ./revokeuser.sh username
    set CLIENTNAME [lindex \\$argv 0];
    set timeout -1
    
    spawn echo "\\$CLIENTNAME"
    
    spawn docker-compose run --rm openvpn ovpn_revokeclient \\$CLIENTNAME nopass
    sleep 5
    expect "Continue with revocation:"
    sleep 3
    send -- "yes\\r";
    sleep 5
    expect "Enter pass phrase for /etc/openvpn/pki/private/ca.key:"
    sleep 3
    send -- "Ir3hp3sFM30yFFob\\r";
    sleep 5
    expect "Enter pass phrase for /etc/openvpn/pki/private/ca.key:"
    sleep 3
    send -- "Ir3hp3sFM30yFFob\\r";
    expect eof
    
    EOF
    
    cat > ./openvpn/docker-compose.yml << EOF
    version: '2'
    services:
      openvpn:
        cap_add:
         - NET_ADMIN
        image: kylemanna/openvpn
        container_name: openvpn
        ports:
         - "1194:1194/udp"
        restart: always
        volumes:
         - ./openvpn-data/conf:/etc/openvpn
    EOF
    
    cd ./openvpn
    
    docker-compose run --rm openvpn ovpn_genconfig -u udp://$myip
    
    cat > ./generate-certs.sh << EOF
    #!/usr/bin/expect -f
    
    set timeout -1
    
    spawn docker-compose run --rm openvpn ovpn_initpki
    
    expect "Enter New CA Key Passphrase:"
    send -- "Ir3hp3sFM30yFFob\\r";
    sleep 3
    
    expect "Re-Enter New CA Key Passphrase: "
    send -- "Ir3hp3sFM30yFFob\\r";
    sleep 3
    
    expect "your user, host, or server name"
    sleep 1
    send -- "\\r";
    sleep 10
    
    expect "Enter pass phrase for /etc/openvpn/pki/private/ca.key:"
    send -- "Ir3hp3sFM30yFFob\\r";
    sleep 3
    
    expect "Enter pass phrase for /etc/openvpn/pki/private/ca.key:"
    send -- "Ir3hp3sFM30yFFob\\r";
    sleep 5
    
    expect "CRL file: /etc/openvpn/pki/crl.pem"
    expect eof
    EOF
    
    expect ./generate-certs.sh
    
    sudo chown -R $(whoami): ./openvpn-data
    
    docker-compose up -d openvpn
    
  3. Then, run ovpn-install.sh file by running command:bash ovpn-install.sh

  4. After the successful execution of this code, you could add your user by running command bash ./openvpn/addvpnuser.sh {username}

    Enjoy!