You definitely don't wanna be throwing fireballs from too far where he can react with that move. However, since it's a charge move, as soon as you notice him moving forward, you're safe to throw a fireball. Of course, you also don't wanna be throwing them when he has super.
All normal versions of the berserker charge are unsafe (-6). If you block one you can punish it in many ways. Target combo is an easy one. St.MP > LK tatsu > Super, if you have full bar, is very painful.
It's true that Necalli's normal will beat Ryu's on paper. I think the ideal range here is just outside his longest buttons, like st.HK, where you can throw fireballs and he can't just jump or berserker charge on reaction. Treat your fireball like a poke. Don't be predictable and vary your timing.
Once he starts respecting the fireball, you can get closer to him and start using your other normals. That's kind of Ryu' gameplan in every matchup, I think.
A lot of Necallis I've seen like to dash in to start their offense. Stop that with st.mp. It's a safer move to whiff than cr.mk and can lead to big damage if they just run into it.
Necallis like to do cr.mk > LK stomp, which they can confirm into super. A lot of people don't know LK stomp is slightly unsafe (-4) and needs to be spaced correctly. Move in close and block one of those, you can punish with st.LK > LK/MK tatsu. With super, you can punish it even if they space it correctly.
I've had a difficult time meating Necalli because his jabs are so fast. If you're also having problems with that, it pays to go into training mode and make sure you have the timing of your meaties right.