Is it ethical for a CS profesor to assign development of real world systems?
Implementation is ethical. It is ethical for your teacher to require implementation of a system for real-world deployment. Albeit, it would be better if the word prototype were included.

Deployment is unethical. It is unethical for your teacher to claim that any such implementation is suitable for deployment.

Side note. Your teacher cannot expect any NGO to deploy implementations.

Additional remark. It is abysmal to teach students that
"passing [source code] around in flash drives and making full copies of the different versions was a better way to do things [compared to using a repository]."