KYIV, Ukraine—At the end of August 2014, the battle for the city of Mariupol loomed as a climactic showdown in Ukraine’s defensive war to repel a Russian armored invasion.

The stakes were dire. Should Mariupol fall to Russia’s combined-separatist forces—an amalgamation of thousands of Russian regulars, pro-Russian separatists, and foreign mercenaries—Moscow would gain a virtually unimpeded land corridor along the Sea of Azov coastline, connecting mainland Russian territory to the Crimean Peninsula.

Russia had already invaded and seized Crimea from Ukraine earlier in the 2014. Yet, the peninsula, while connected to southern Ukraine, had no land connection to Russia in 2014. The Kerch Strait bridge, connecting Crimea to mainland Russia, was not completed until the summer of 2018.

Moreover, seizing Mariupol was a key goal for the now defunct, Kremlin-backed, separatist gambit to recreate “Novorossiya”—the historic Russian empire in the region north of the Black Sea.

In the waning days of August 2014, the Ukrainian soldiers sent to defend Mariupol anticipated an imminent, full-on Russian invasion. In the city, civilians were similarly resigned, throwing around words like “Grozny” and “Stalingrad” when asked to describe what a Russian invasion would look like. No one took events at that time lightly. In fact, it felt like things were spiraling rapidly out of control.

“Nobody wanted this,” as one Mariupol resident said at the time.

East of Mariupol, a combined force of pro-Russian separatists and thousands of Russian regulars, according to NATO intelligence reports at the time, had massed tanks, troops, and artillery in the town of Novoazovsk.

Civilians in Novoazovsk, whom this correspondent interviewed by telephone at the time, reported observing 67 Russian tanks in the town, as well as a 3-kilometer-long convoy of military equipment, including more tanks and armored personnel carriers, moving into the town from the direction of the Russian border.

An assault on Mariupol, a city home to half a million people, seemed at hand.

Turning Tides

By the end of August 2014, Russia and its proxies had seized the war’s momentum, a sharp reversal from weeks earlier when Ukrainian forces were on the march and it looked like they might be able to wrap up the war by summer’s end.

Since the conflict began in April 2014, Russia had been supplying and equipping its so-called separatist proxies in eastern Ukraine, supporting them with intelligence and special operations troops.

At first, Ukraine’s then-dilapidated armed forces—which had been depleted in manpower and materiel through decades of corruption—was on its heels. Yet, a grassroots, partisan war effort gave Ukraine’s armed forces the strength it needed to turn the tide.

With the regular army on its heels, Ukrainian volunteer military units stalled Russia’s hybrid warfare advance and turned the tide of the war. These paramilitary forces comprised civilians who often had little military training and were armed with hand-me-down weapons from area police forces. Yet, by July 2014, Ukraine’s mostly volunteer army had retaken 23 out of 36 districts previously captured by combined Russian-separatist forces.

Then, in August, Russia threw its weight into the war, pouring in weapons, ammunition, and its own troops to regain the advantage. The open intervention of Russian armor and regular combat units reversed the course of the war.

Russian forces took the town of Ilovaisk, inflicting heavy losses on Ukrainian units, and then went on to capture the town of Novoazovsk on the Sea of Azov coast. At Novoazovsk, the combined Russian-separatist forces paused to regroup and consolidate supplies for an assault on Mariupol.

For its part, the Ukrainian military was spread thin trying to both defend the encroaching southern front along the Sea of Azov coast, as well as push back an offensive farther north in the areas around the combined Russian-separatist strongholds of Donetsk and Luhansk.

Ready for War

During the first days of September, the war lulled as Ukrainian President Petro Poroshenko and Russian President Vladimir Putin inched toward a cease-fire agreement. Kyiv and Moscow traded conflicting stories over a presumptive cease-fire on Sept. 3. That day, Poroshenko announced a deal had been struck, but Moscow quickly reversed course and changed its demands.

Putin had the upper hand while the Ukrainian military reeled from the Ilovaisk disaster. Thus, on Sept. 4, the Russian president outlined a new series of pre-conditions for any cease-fire, trying to extract more concessions from Kyiv.

Poroshenko, for his part, was basically negotiating with a knife against his throat. The Ukrainian president’s last, best hope was to mount a determined defense of Mariupol, hoping that the prospect of a drawn-out battle would spur Putin to accept a cease-fire deal and forego pressing his advantage at the risk of a military quagmire.

To that end, the Ukrainian military was well dug in on Mariupol’s outskirts by the beginning of September 2014. A hastily constructed defensive perimeter of trenches, ad hoc forts, and checkpoints ringed around the city’s eastern flank, the direction from which a combined Russian-separatist assault was expected to come.

The Ukrainian troops had purposefully positioned themselves outside of the city center to avoid drawing fire on civilian areas.

Tank barriers blocked all major roads. Ukrainian tanks were hidden in camouflaged depressions in the ground at strategic points, alongside machine gun pillboxes, anti-aircraft missiles, and hardened positions stocked with anti-tank missiles. In a wartime tableau reminiscent of Omaha Beach in 1944, tank barriers, land mines, and barbed wire were laid out on Mariupol’s Sea of Azov beaches as defenses against an amphibious landing.

Traffic still flowed, more or less, through the checkpoints in and out of the city and train lines remained open (although the tracks carrying civilian railcars were just miles from the front lines). The city’s airport, however, had been converted into a fortified redoubt. If the city fell, the airport was going to be the Ukrainians’ Alamo, the Ukrainian troops stationed there at that time explained.

“We will do everything possible to prevent them [combined Russian-separatist forces] from moving into Mariupol,” Ukraine National Guard Capt. Ruslan Muzychuk explained to this correspondent on Sept. 3, 2014, during an interview at the Mariupol airport. “It’s one of the key cities for us and them.”

At the Mariupol airport redoubt, living conditions were Spartan, compounded by persistent supply chain shortfalls. Many of the soldiers had to sleep on the ground without a sleeping bag. Food was scarce, as were basic kit items.

Most of the Ukrainian troops had mismatched uniforms from various countries. Camouflage pants from Germany, perhaps, with a civilian T-shirt, and maybe a military blouse from the United States or the United Kingdom.

Most of their Kalashnikovs had serial numbers from when the Beatles were still touring. Plastic tubing coiled around the butt stock of their rifles was supposed to be used as a tourniquet if they were shot. As for footwear, some wore sandals, some had on sneakers. Hardly any wore actual combat boots.

“Living conditions are tough, but everyone understands we have to defend the country,” Muzychuk said.

Some of Mariupol’s residents volunteered to help the soldiers sent to defend them. On their own volition, groups of civilians delivered supplies such as wooden pallets to help improve sleeping arrangements at the airport. At other places, factory owners pitched in materials to help fortify Ukrainian positions. A team of civilians assisted the troops in digging trenches.

“The support of civilians for the Ukrainian Army is immense here,” Muzychuk said at that time. “It helped increase morale; it shows our guys what they’re fighting for. You spend three or four months in the trenches and everything starts to feel similar. But to see women and children again, and they bring you flowers, it helps morale.”

Homeland Defenders

Since 2014, Ukraine has rebuilt its army into a force comprising about 250,000 active-duty troops—second only to Russia among European countries in terms of military manpower.

However, in the summer of 2014, the Ukrainian army was largely a grassroots, national defense effort spearheaded by Ukrainian civilians.

The overwhelming majority of basic things like food and water, socks and underwear, even body armor, helmets, and medical supplies, were scraped together and delivered to the front lines by legions of civilian volunteers from across Ukraine. These volunteers comprised men and women of all ages from all strata of Ukrainian society.

The risks those volunteers took on the front lines—weaving beat-up old vans and trucks through artillery, rocket, and sniper fire—were often just as perilous as what the soldiers faced. Ukraine’s volunteers were, and remain, the unsung heroes of Ukraine’s defense.

Without the volunteers’ efforts, and the concurrent grassroots mobilization of Ukraine’s irregular, civilian combat battalions, Mariupol, and possibly half the country, would have fallen to Russia’s invading forces in the summer of 2014.

No Good Options

When Russia’s offensive in southeastern Ukraine had begun in earnest, the military checkpoints outside Mariupol became clogged—residents reported that cars had lined up for kilometers as people tried to get out. By Sept. 1, about a third of the population had already fled, leaving many quarters feeling like a ghost town.

The Ukrainian military, overstretched in manpower and resources as it was, did not have a plan to evacuate Mariupol’s remaining residents. There were, at that time, only eight purpose-built bomb shelters in the city.

The shelters all dated from the Soviet Union and were originally conceived as fallout shelters in the event of a U.S. nuclear strike. But those eight shelters were nowhere near enough for Mariupol’s population. Many residents who had no way to leave the city braced to ride out the fighting in improvised bomb shelters they built in the basements beneath their apartment buildings.

Still, there was no mass panic, and no runs on foodstuff or other supplies. Mariupol’s streets just seemed quiet. But there were clues, subtle as they might have been, about what was to come.

In downtown Mariupol, along the city’s main thoroughfare of Lenin Avenue—the street has since been renamed “Peace Avenue” under Ukraine’s 2015 decommunization laws—windows were boarded up, and restaurants and shops were shut down. ATMs were out of cash. Spray-painted signs on the sides of buildings in the city center indicated the location of the nearest improvised bomb shelter. (Usually those ad hoc shelters were nothing more than a cellar stocked with some bottles of water and biscuits.)

Still, owning a car is not common in Ukraine. And most people in Mariupol had no means to flee even if they wanted to. And even if they did leave, where would they go? What would they do for work? How could they afford to eat or pay rent? The looming battle posed an impossible pickle for many people. They could either flee and became de facto refugees dependent on charity to survive—or they could stay home and face being engulfed in a lethal urban battle.

There were no good options.

“I’m scared because I have a little child,” Nataly Oksanichenko, then 32, explained over lunch on Sept. 4, 2014. “We have to leave. We don’t have a future here.”

Nataly and her husband Leonid, who was also 32 at that time, worried about their daughter, Veronica, who was then 3 years old. The Oksanichenkos had the trunk of their car filled with clothes and all their important documents; they were ready to flee on a moment’s notice if they had to.

“When it happens, it will happen fast,” Leonid warned.

Total War

Earlier that spring, Mariupol had briefly fallen to pro-Russian separatists operating under the direction of Russian military intelligence and special operations advisers.

Ukrainian military forces, mainly comprising civilian paramilitary groups, liberated the city after weeks of skirmishes. Since then, Mariupol had remained under Kyiv’s control—and still does to this day.

Although some people in Mariupol quietly harbored pro-Russian sentiments, many of Mariupol’s civilians resolved to stay and take up arms to repel the looming invasion in the late summer of 2014.

“I was never patriotic before,” Leonid said. “But if I wasn’t married and didn’t have a child I would be in some battalion. I am ready to defend my country, with my own life if I have to. I just don’t see any other way for a good life for my family.”

On Aug. 30, thousands of Mariupol’s residents formed a human chain outside a military checkpoint facing in the direction of Novoazovsk. The civilians, many of whom wore the traditional embroidered Ukrainian blouse called a vyshyvanka, locked arms in protest, forming a human barricade.

Set to a cyclical rhythm, someone within the crowd would yell, in Ukrainian: “Glory to Ukraine!”

To which the crowd chorused in reply: “Glory to heroes!”

With the threat of a sack on the horizon, Ukrainian paramilitary units trained groups of Mariupol’s civilians to use bazookas and fire machine guns. Old women sewed camouflaged bonnie suits for snipers. High school students, both male and female, trained to plant booby traps and lay land mines.

In one poignant moment, an old man in a paddy cap, who had a beer belly and a disarming smile beneath his bushy mustache, peered through the site of a bazooka while an adolescent soldier gave step-by-step instructions. The old man looked like he should have been teaching his grandchildren fishing lessons on that lazy summer afternoon, not learning how to annihilate Russian tanks.

Such is war, however.

Opening Salvo

On Sept. 4, 2014, a combined force of pro-Russian separatists and Russian troops launched a mechanized assault to break through the Ukrainian lines around Mariupol.

At first the rumbles of combat seemed imagined. After all the anxious waiting for the attack to begin, it was easy to believe the staccato baritone thuds were anything other than far-off artillery.

But, the sounds of war became unmistakable and people apprehensively looked to one another as if silently asking for confirmation of what they were hearing. After a few moments, there was no mistaking the sounds. They were of war.

Artillery fire was audible throughout the day as Ukrainian military forces repelled a limited tank attack by combined Russian-separatist forces that had advanced to within 7 kilometers of block post 14, one of a series of defensive Ukrainian military positions around Mariupol’s perimeter.

After a pause of several hours during the afternoon, the rumbling of distant explosions continued into the night, growing louder until it shook windows in central Mariupol. There were reports that combined Russian-separatist forces were encircling the city.

Many people decided to flee, and there were long lines at the military checkpoints leading out of the city to the west. Many restaurants that had until then remained open, shut down. The streets grew empty. Those who decided to stay took shelter. By darkfall, the streets were empty and quiet.

Yet, despite the fighting, a planned pro-Ukraine rally went ahead as scheduled in downtown Mariupol on the late afternoon of Sept. 4. At the rally, about 2,000 residents came out to applaud the swearing-in ceremony of the city’s newly-formed civilian militia.

As different speakers took to the stage, the booms of distant artillery and tank shots wafted in on the warm summer breeze. It was a surreal scene of contrasts, highlighting the interwoven existence of war and normal life.

Amid the crowd, two young lovers embraced with a Ukrainian flag draped around them. Nearby, a man stood with his daughter on his shoulders—she wore a traditional Ukrainian flower garland in her hair.

Despite the dark clouds of war on the horizon, the rally had the air of a celebration, as if it were an affirmation of the city’s patriotism and defiant spirit in the face of what seemed to be the looming possibility of imminent, all-out urban warfare.

Peace, or Something Else?

On Sept. 5, 2014, it seemed for a while that all was lost, and the combined Russian-separatist army was poised to break through the Ukrainian lines and overrun the city. But the invasion of Mariupol never happened. As if ripped straight from the pages of “All Quiet on the Western Front,” the sounds of war went silent.

In Minsk, Belarus—more than 700 miles north of Mariupol—Ukrainian and Russian politicians reached a deal to stop the fighting. And then, in an instant, armies of young men stopped shooting at each other.

In Mariupol that night, it was like New Years times a million. Passing drivers honked their horns. People cheered in celebration and strangers hugged each other. Weddings were held around the city as young couples followed through on ceremonies put off by the fighting.

Yet, the peace was short-lived and the war never ended.

Four years and 11 weeks later, the artillery still thunders up and down a 250-mile-long front line in eastern Ukraine’s embattled Donbas region.

As a telling snapshot, in a two-week period this month—between Nov. 5 and 18—six Ukrainian soldiers died in combat and 12 more were wounded. The Ukrainian military claimed combined Russian-separatist forces attacked their positions 174 times in that same two-week stretch.

The war in Ukraine remains Europe’s only ongoing land war, in which the Continent’s two largest standing armies exchange fire every day. Since the war began, more than 10,300 Ukrainians have been killed—including more than 2,500 civilians—and about 1.7 million people have fled their homes.

The southern terminus of the war’s front lines is on the Sea of Azov coastline, roughly 10 miles east of Mariupol’s city limits. The artillery is still loud enough, sometimes, to rattle windows in the city center.

The war is always there, and people have gotten used to it. Life goes on. That’s human nature, after all. We can get used to just about anything. Yet, after more than four years of war on their doorstep, the people of Mariupol, as do all Ukrainians, wonder when the guns will finally silence.

“We don’t know if the worst is behind us, or if it’s still to come,” said Leonid, who ultimately fled Mariupol with his wife and daughter to live in Kyiv.

“If you had told me there was going to be a war in my country, and with Russia, I would have thought you were crazy,” Leonid said. “Nobody wanted this.”