We flew into Ft Lauderdale since it was much cheaper. Took SAS transport to hotel in Miami: Hilton Grand Biscayne Bay. A short taxi ride from Bongo's Cafe and a seaside shopping mall with tons of restaurants (there were also several restaurants on site, but we didn't try them). The next morning we took the hotel's shuttle (not free but not very expensive) to the port.
I'm sure you could find cheaper places to stay, but we look for Hiltons since we're members of their club.