The Selecao scored a goal late on in either half to pick up the three vital points, but they can count themselves lucky as for much of the second 45 minutes they struggled to get out of their own final third.
Both goals had a touch of quality about them, though, as Rui Jorge's men - now unbeaten in 15 games since their last participation in this tournament - did what was required of them to top the early Group B standings.
Portugal, backed by many to go one better than two years ago when losing to Sweden in the final, started the game well and came within the frame of the goal of making an early breakthrough.
Ruben Neves was left all alone at the back post when a free kick was flicked on, but the angle was slightly against him and he could only volley across the face of goal and off the post.
That was essentially as good as things got for Portugal prior to their breakthrough moment, however, as Serbia - themselves two-time finalists in the past eight instalments of the competition - created a couple of openings of their own.
Milan Gajic cut the ball back for Liverpool man Marko Grujic, who was brilliantly denied from close range by an opposition body, before Uros Djurdjevic slotted horribly wide when latching on to Andrija Zivkovic's through-ball.
Half a chance would come and go for Diogo Jota, as he failed to divert a right-sided cross on goal from inside the box, but the Selecao's opener did arrive just a minute or so late through Goncalo Guedes.
The front three linked up, with Jota sliding the ball through for Daniel Podence down the left, and he in turn saw his cross parried into the air by Vanja Milinkovic-Savic for Guedes to nod over the line.
Djurdjevic had the ball in the back of the net within seconds of the second-half restart, only for the offside flag to correctly go up, and Grugic tested Bruno Varela in another reminder that it would not be all one-way traffic in Bydgoszcz.
Portugal's advantage was looking slimmer and slimmer as the match transpired, as Grujic squandered a glorious headed chance from six yards out and Mijat Gacinovic saw his volley kept out by Varela down the middle.
Substitute Nemanja Radonjic was next to try his luck after cutting in from the left and sending a bullet strike narrowly over the bar, as the Selecao continued to look disjointed and devoid of any attacking impetus.
Former Roma winger Radonjic was continually finding himself in the right positions, this time belting over the bar on the volley when picked out from a corner.
Serbia threw bodies high up the pitch and were nearly caught out by Bruma - a surprise sub for the Portuguese, along with golden boy Renato Sanches - but he could only pick out an opposition body when cutting into the box and shooting.
For all Serbia's efforts they were unable to test Varela with anything other than a few routine stops, and that gave Portugal the chance to add some gloss to the scoreline late on when Bruno Fernandes controlled Sanches's chipped pass and coolly tucked home a second.