The easiest way to do this is, I think, by setting up some paragraph and object styles to automate the layout as much as possible, and then use a script to add in the numbers in anchored frames attached to each paragraph.
Setting up your paragraph styles
In my example here, I’ve set up a document with facing pages and some basic paragraph styles – I’ve just used [Basic Paragraph] and made a style based on it to use for those paragraphs that should be numbered (in case you need both numbered and unnumbered paragraphs). Both are left-justified and essentially identical, except that the style for the numbered paragraph is bulleted (and has no first-line indent), using the paragraph marker as the bullet (if you already have an actual paragraph marker as plain text in all the paragraphs you want numbered, you can just skip this). I’ve added a character style for the paragraph marker as well, just for show:

Filling a spread with placeholder text, that gives me this:

Next, I set up a paragraph style to be used for the actual numbers – the main thing here is whether to align the numbers towards or away from the spine. I’ve chosen to align them away from the spine, so that numbers of uneven length (i.e., ‘5’ vs ‘192’) will always appear at the same distance from the text block (Edit: This is wrong – the text should be aligned towards the spine, not away from it, to achieve the desired result, so ignore that bit of the screenshot):

Setting up your object style
Finally, I set up an object style for the frames that will hold the actual numbers. The only things you really need to set up here are the paragraph style (the one just made in the previous point) and the anchored positioning options which control the frame’s positioning on the page, relative to the paragraph it’s anchored in; they should look something like this:

Note the checkmark in “Relative to spine” and that the reference point of the object (the anchored frame) is towards the spine, while the reference point for the positioning (the page margin) is away from the spine – in other words, I’m telling it to use the point on the anchored frame closest to the spine and position that point relative to the page margin furthest from the spine, at a distance of 6 mm. Or in simpler terms, ‘place the frame so it’s 6 mm from the outer edge of the text block’.
You may also want to specify some Size and Position Options to make sure that the frame inserted is big enough to contain the number (I just used “Adjust: Height and Width” and gave it a width of 12 mm and a height of 7 mm).
Adding and executing the script
Once you’ve got this all set up, go through your entire document and make sure that all the paragraphs that should be numbered have the correct style applied.
When you’ve done this, you can use a script to insert an anchored text frame at the beginning of each of these paragraphs, containing the paragraph number. It just so happens that I needed to do a similar thing not too long ago and wrote a script that does more or less that for that, so I could just adapt that script for your use case here (see below).
Add the script to your scripts panel and double-click it to run it. That should leave you with something like what you’re looking for; in my example, this:

If your paragraphs (and their numbers) change after you’ve run the script, just run it again – it will first remove all the frames with the Paragraph Numbers
object style applied and then add in new ones to replace them.
The script
Copy the entire script below into a text editor (not a word processor like Word, which will likely mess it up – I’d recommend Visual Studio Code, but any code or plain-text editor will do). Change the three style names at the top to match the names you’ve used in your document. The fourth line is the text that will show up in your Undo menu (“Undo Add paragraph numbers in margin” it will say); you can change that too if you want, to anything you like.
var numberedParagraphStyle = "Numbered paragraphs";
var paragraphNumbersStyle = "Paragraph Numbers";
var objectStyle = "Paragraph Numbers";
var undoText = "Add paragraph numbers in margin";
/********************* Don't edit the script beyond this point *******************/
app.doScript(init, void 0, void 0, UndoModes.ENTIRE_SCRIPT, undoText);
function init() {
var doc = app.activeDocument;
var style = doc.paragraphStyles.item(numberedParagraphStyle);
app.findObjectPreferences.appliedObjectStyles = doc.objectStyles.item(objectStyle);
var frames = app.findObject();
for (var i = frames.length - 1; i >= 0; i--) {
frames[i].remove();
}
app.findGrepPreferences = NothingEnum.nothing;
app.findGrepPreferences.findWhat = '^.+$';
app.findGrepPreferences.appliedParagraphStyle = style;
var p, frame, ip;
var paras = doc.findGrep();
progress(paras.length);
for (var i = paras.length; i > 0; i--) {
p = paras[i - 1];
progress.message("Processing paragraphs: " + i + " of " + paras.length + " paragraphs left.");
progress.increment();
p.insertionPoints[0].textFrames.add({
appliedObjectStyle: doc.objectStyles.item(objectStyle),
contents: i.toString()
});
}
progress.close();
}
function progress(steps) {
var b;
var t;
var w;
w = new Window("palette", "Progress", undefined, {closeButton: false});
t = w.add("statictext");
t.preferredSize = [450, -1]; // 450 pixels wide, default height.
if (steps) {
b = w.add("progressbar", undefined, 0, steps);
b.preferredSize = [450, -1]; // 450 pixels wide, default height.
}
progress.close = function () {
w.close();
};
progress.increment = function () {
b.value++;
};
progress.message = function (message) {
t.text = message;
};
w.show();
}