I can’t really give you a full extensive answer, but I would recommend looking at the scripts for the roblox Roped gear (just search roped into the toolbox and you will find it).
The gear works using a BodyVelocity for movement and a BodyAngularVelocity for changing the direction the player is facing. It also uses a BodyGyro to simulate the ‘leaning’ effect.
Yea so assuming the bike is all held together by welds and constraints or whatever then you can use a body gyro to set a target orientation for the bike.
For example the program below tries to keep a part always with (0,0,0) orientation.
local part = workspace.Part
local bg = Instance.new("BodyGyro")
bg.Parent = part
bg.CFrame = CFrame.new()