Early city placement for me is dictated by the achieving the best possible spots in the short and medium term. The goal is getting the most productive spots and snagging strategic resources. Copper and Iron are offensive resources, Horses are defensive - after all, you won't be cracking cities with horses in early warfare where defensive bonuses rule. They matter for fighting in the field, which is what you do on the defense. After one or two founded cities expansion is best done through war I find. It is hard to actually protect or isolate cities so that they are not on a border (and late game every coast is a possible invasion spot, too), so it's not something I usually try for. I greatly value placing cities on hills for the defensive advantage and am not shy to raze and resettle conquered territory differently.
Unless it's a freshly-founded unimportant city in the late-game or there is really absolutely no danger to a city (inland, far from border and coast, no slaves/serfs), each city gets at least two defending units at all times - too often have I lost important cities that had just one defender in them. Usually that's a bowman and an irregular or a spear - spears particularly if not on a hill. For actual I-am-at-war-and-there's-a-stack-sieging-my-city defense, sure, stack as many archers and anti-melee and other "hard" units as your logistics will allow before giving you the really bad modifiers. Keeping "soft" units (skirmishers and horses with negative city strength modifiers) in these cities, or behind them if they clog up logistics, is also valuable - they can attack out of the city onto the sieging stack while benefitting from a lot of aid and make use of their collateral and withdrawal effects.
Offensively, the army gets split into however many stacks is needed by my logistics level and the number of troops (-10% strength is fine). I give them all equal and balanced compositions, a few units of each type in each stack, partially to cover each unit against their counters, partially to make better use of aid bonuses. Nothing sucks more than getting a bunch of city raider IV axes wiped by a chariot and two shortswords because there was nothing else covering them and they aren't good at anything but attacking cities.
In peace time I try to beef up all border cities relatively equally, drawing together the units wherever needed when an attack comes. Paved roads help a lot with that. Offensive stacks usually stick around in the cities or forts nearest the enemy they expect to need to invade next, but only in addition to the regular defensive forces. It's usually a good idea to wait until the enemy has sent a stack towards you and you've dealt with it before sending in your own, regardless of whether you or the other guy declared. Offensive stacks that are two-thirds siege units, city raiders and cannon fodder infantry are pretty fragile in the field.
To give an example of what I'd expect an offensive army to look like: Two stacks, each with 2 siege units, 1-2 cavalry/skirm, 2-3 city attackers, 1-2 irregulars/anti-melee, 0-1 spear and 0-1 archer. Spears give you some resilience against the cavalry the AI likes to regularly suicide into you and archers help against ranged mounted (check if your enemy uses those) and make your stacks a lot more sturdy on hills. They're also the ones who get to garrison conquered cities and they can attack and defend against skirmishers, too. Having archers in your offense stacks is pretty neat.
Cities in which I'm expecting an attack get a dedicated siege unit too as soon as bombards come around since they allow you to remotely bombard stacks. Attacking stacks have a hard time healing bombardment/collateral damage. For that reason my offensive armies normally carry a great general around, purely for the heal promotion - it's a long way until renaissance medicine and being able to give out that promotion yourself. If the army gets split, one great general will do as it also has an effect on neighboring tiles and shuffling it around to whichever stack is needed works fine.
Forts on a border can also be invaluable, especially if there is no hill next to them (chop forests adjacent to forts and cities). They count as city tiles for combat calculations and give significant advantages (like withdrawal chances) when attacking out of them as soon as the second fort aid tech has been researched in the midgame. And it's much better to have an attacking stack walk into your fort rather than walk up to a city and raze half your improvements every time! When you first unlock forts they have a bonus against barbarians (including slaves/serfs), so putting them in economically dead spots inside your territory makes them ideal garrison points for your revolt suppression skirms and horses.