From the way you asked the question, I will assume you would know how to group by customer and month, if the month was calendar month - and I will focus only on what is special about the "custom" month definition.
Here is code to generate the test data (which would have been a bit better if it included more than one customer; and, importantly, if it included gaps in the data - "custom" months with no orders from some customers, showing us what you would need in the output in that case):
create table orders (
  order_no    number primary key,
  customer_id number,
  order_date  date,
  amount      number
);
insert into orders (order_no, customer_id, order_date, amount)
  select 1001, 201, timestamp '2024-06-11 20:10:00', 2000 from dual union all
  select 1002, 201, timestamp '2024-06-25 15:35:00', 2100 from dual union all
  select 1003, 201, timestamp '2024-06-26 10:20:00', 1700 from dual union all
  select 1004, 201, timestamp '2024-07-15 20:58:00',  800 from dual union all
  select 1005, 201, timestamp '2024-07-25 13:45:00', 1500 from dual union all
  select 1006, 201, timestamp '2024-07-29 16:25:00',  900 from dual
;
commit;
I (ab?)used the TIMESTAMP literal - less writing than TO_DATE and a full format model; alas the DATE literal does not allow time component. Anyway, this is not important - it's just to create test data.
Note that DATE is an Oracle reserved keyword, so you shouldn't use it as a column name (you could, if you enclosed it in double-quotes - which is generally a poor practice). I used ORDER_DATE instead. Similar comment for the output - I used MTH instead of MONTH to avoid any confusion.
The trick is to use TRUNC(ORDER_DATE - 25, 'month') wherever you would otherwise use just TRUNC(ORDER_DATE, 'month'). The reason for this should be obvious. I believe this is what Connor was suggesting (his answer doesn't seem to address your question in its entirety).
In the SELECT list, I add one month to this (because apparently your "month" is based on the last day in the month, not on the first); and I apply TO_CHAR to control the output, so I can't use MTH from the SELECT list in ORDER BY. Alternatively (and the solution I would prefer) is to use ADD_MONTH(...) in the SELECT list, without applying formatting with TO_CHAR - and then format dates in the output from the user interface (NLS_DATE_FORMAT for example).
select customer_id, 
       to_char(add_months(trunc(order_date - 25, 'month'), 1), 'Mon-rr') as mth,
       sum(amount) as sum_amount
from   orders
group  by customer_id, trunc(order_date - 25, 'month')
order  by customer_id, trunc(order_date - 25, 'month')
;Output is as requested:
CUSTOMER_ID MTH             SUM_AMOUNT
----------- --------------- ----------
        201 Jun-24                4100
        201 Jul-24                4000
        201 Aug-24                 900