Why do you want to draw anything off-screen? This just consumes unnecessary resources. Imagine drawing an infinite map, it would take you an infinite amount of time to do that.
Try to draw only those tiles (and other objects), which are visible to your view. For small games this is not so important, because your computer can probably handle it, but for your scale this doesn't apply anymore.
For that you want to calculate which tiles are visible and recreate the vertex array with them every frame.
You also don't want to store every tile, just the ones nearby. (take a look at chunks)
As for how to generate your map: it depends on what type of map you want to make. There are many examples for various types of maps online. Perlin Noise is often used for that. Simplex Noise, Voronoi Map, etc...
To draw your infinite map: you load (or generate) only nearby tiles (chunks) and draw just the visible ones from those on screen.