← Zpět na všechny články blogu

Automatizuj, automatizuj, nebo se z toho zblázníš!

Honza Černý
Honza Černý Aktualizováno 1. 6. 2026 – 5 min. čtení

Představte si situaci: právě nahráváte úpravu aplikace a těšíte se, že to bude brnkačka. Týden na tom makáte, říkáte si, nahraju už jen jednu věc a půjdu na oběd. Ale pak přijde SQL error. Týká se změny v databázové tabulce. I kdybyste si vzpomněli na nutnost aktualizace databáze, dnes musíte ručně spustit nástroj, jako je Adminer, a manuálně zadat SQL příkazy. A teď si ale vzpomenout, co všechno se v tý databázi měnilo…

Minule jsme si ukázali, jak nahradit ruční nahrávání změněných zdrojových souborů. Dnes půjdeme o něco dál a zautomatizujeme i spouštění databázových migrací.

Počkej, databázové migrace? Tak to prrr. 

Co je databázová migrace?

Máme databázi, v ní tabulky se strukturami a daty. Začátečník si vytvoří tabulku přes nástroj jako Adminer, pracuje s ní a má vždy aktuální verzi. Když chce tabulku nahrát na server, vytvoří dump (neboli kopii) a přenese ji tam.

Ale co když v lokální databázi provedete změnu, třeba přidáte nový sloupeček? Na serveru musíte udělat totéž. Zpočátku to zvládnete ručně, ale musíte si pamatovat správné SQL příkazy a ty spustit. Jednou zapomenete, a problém je na světě.

Aktualizace databáze vyžaduje spuštění SQL kódu, který odpovídá změnám v kódu aplikace. Pokud máte více změn, vyplatí se je ukládat do souborů a spouštět při nasazování nové aplikace. Tento proces je užitečný pro jednotlivce, ale naprostá nutnost pro vícečlenné týmy.

Tento problém už naštěstí někdo vyřešil, jde o nástroj Nextras\Migration. Pokud jej neznáte, mrkněte na následující video, kde se o něm podrobněji rozpovídal Jan Tvrdík.

VPS Centrum

Vyzkoušejte zdarma naši aplikaci pro správu serveru a domén. Budete si připadat jako zkušený administrátor.

Nextras/Migration

Nástroj najdete na adrese: https://nextras.org/migrations/docs/master/. Pracuje se třemi složkami pro SQL příkazy:

  1. structures – pro SQL dotazy, které vytvářejí nebo upravují struktury tabulek.
  2. basic-data – pro data dostupná jak lokálně, tak na serveru (např. číselníky).
  3. dummy-data – testovací data pro lokální a testovací prostředí.

Freelo - Nástroj na řízení úkolů a projektů

Přidej se, pozvi svůj tým a klienty, rozděl práci a sleduj, jak se úkoly dají do pohybu.

Instalace a integrace

Migraci nainstalujeme přes Composer a přidáme ji do Nette aplikace spolu s Contributte\Console, což je integrace Symfony\Console pro spouštění příkazů.

Instalace Contributte\Console

`composer require contributte/console`

Do konfigurace přidáme:

```

extensions: 

console: Contributte\Console\DI\ConsoleExtension(%consoleMode%)

```

Pak vytvoříme soubor příkazem:

./bin/console

```

#!/usr/bin/env php

<?php

declare(strict_types=1);

require __DIR__ . '/../vendor/autoload.php';

$bootstrap = new App\Bootstrap;

$container = $bootstrap->bootWebApplication();

$application = $container->getByType(Contributte\Console\Application::class);

// Run application.

exit($application->run());

```

Soubor nastavíme jako spustitelný:

`chmod +x ./bin/console`

Příkazem ./bin/console ověřte funkčnost:

Instalace Nextras\Migration

`composer require nextras/migration`

Do konfigurace přidáme (a poupravíme):

```

extensions:
console: Contributte\Console\DI\ConsoleExtension(%consoleMode%)

     migrations: Nextras\Migrations\Bridges\NetteDI\MigrationsExtension

migrations:

    dir: %appDir%/../migrations # adresář pro migrace

    driver: mysql               # pgsql nebo mysql

    dbal: nette               # nextras, nette, doctrine nebo dibi

    withDummyData: %debugMode%

```

Po spuštění ./bin/console uvidíme nové příkazy pro migrace:

Jake příkazy na nás čekají: 

migrations:continue – budeme spouštět na serveru pro kontinuální pokračování a spuštění migrací, které ještě nebyli zahájeny.

migrations:create – provede lokální tvorbu SQL scriptů ve správné složce a s časem v názvu souboru.

migrations:reset – provede lokální reset databáze pro testovací účely.

První migrace: Vytvoření tabulky

Předpokládáme, že je aplikace připojená k databázi. Migraci vytvoříme příkazem:

`./bin/console migration:create structures 'init-article-table'`

a dostaneme odpověď:

„/CESTA_KE_SKRIPTU/app/../migrations/structures/2024-12-03-023103-init-article-table.sql“

V editoru upravíme nově vytvořený soubor a přidáme SQL kód:

```

CREATE TABLE `article` (

  `id` int NOT NULL AUTO_INCREMENT PRIMARY KEY,

  `title` varchar(100) NOT NULL,

  `content` text NOT NULL

) ENGINE='InnoDB' COLLATE 'utf8mb4_czech_ci';

```

Spustíme migraci:

`./bin/console migration:continue`

V databázi přibude tabulka article a interní tabulka migrations, která eviduje soubory migrací.

Nasazení na server

Teď už nám nic nebrání si editovat námi vytvořený deploy script a přidat pod smazání cache automatické spouštění databázových migrací.

```

./bin/console migration:continue

```

Provedené změny odešleme na server pomocí příkazu`git push origin` Migrace pak proběhne automaticky. 

V příkazové řádce uvidíme, že se spouští Deploying…

Pro potřeby ladění, nebo většího přehledu, si ve VPS Centru můžeme pročíst samostatný log konkrétního deploye.

V Admineru na serveru pak už uvidíme aktualizovanou databázi, ve které právě vznikly dvě nové tabulky, article a migrations.

A teď jak dál?

Pro úpravu databází teď nově potřebujete projít procesem migrací. Pokud se tedy rozhodnete, že přidáte nový sloupeček „published_at“, postup je následovný:

  1. Přes příkaz ./bin/console migration:create structure ‘article-with-published-at’ si necháme vygenerovat nový SQL migrační soubor.
  2. Do vytvořeného souboru přidáme SQL skript ALTER TABLE `article` ADD `published_at` datetime NULL;
  3. Spustíme migrace lokálně ./bin/console migration:continue
  4. Zaverzujeme do Gitu.
  5. Pushneme na server git push origin.
  6. A máme hotovo.

Automatizaci máte úspěšně za sebou, a nyní můžeme jít v klidu dál vyvíjet svou aplikaci!

Kdyby cokoliv, dejte nám vědět. Zatím ahój.

Zůstaňte s námi v kontaktu

Jednou za měsíc posíláme souhrn novinek. Nemusíte se bát, spamovat vás nebudeme a odhlásit se můžete kdykoliv...

Karel Dytrych
Tým Váš Hosting
Vyzkoušejte náš trial na týden zdarma

Garance 14denní záruky vrácení peněz

Vyzkoušejte server na týden zdarma

Vyzkoušet server

Je váš web připravený na éru AI?

Stáhněte si praktický checklist

Jak přežít v éře GEO