Using API function is an option, and in my opinion generally preferable. As counting, numbering on the archive page isn't an issue, this concerns how to do it at the view of a single post. This is not ready to use code, just an exemplary outline:
$current_posts_id = get_the_ID();
$wp_query_obj = new WP_Query(
[
//other conditions to determine order
//use the same as for the archive page, otherwise the numbering differs
//use parameter fields to get an array of
//keys numerically indexed, with value post id
'fields' => 'ids'
]
);
//get the numerically array of post ids into its own variable
$wp_query_posts_array = $wp_query_obj->posts;
//search array by value, which is the post id, and return corresponding key, numeric index
$wp_query_posts_array_index = array_search( $current_posts_id, $wp_query_posts_array );
//the array index starts with 0, add one for the issue numbering
$current_posts_issue_number = $wp_query_posts_array_index + 1;
Note: This is of course, if you want to get the issue number on the fly. Generally speaking, if you want or have to work with the issue number more frequently, or want to do queries where you can use the issue number, I probably would introduce a post meta to store the issue number. But that's just my thought in regard to possibly necessary code, data structure design choices.