Blog / Drupal
Návod pro všechny, kdo chtějí s Drupalem začít správně, ne jen rychle. Připravíte si vývojové prostředí na Macu, krok za krokem nainstalujete Drupal 11 a naučíte se příkazy, které budete používat každý den.
PŘÍPRAVA
Drupal se dnes zakládá a aktualizuje přes Composer a vyvíjí se v Dockeru. Na Macu k tomu potřebujete čtyři nástroje.
Docker zabalí web i vše, co potřebuje, aby běžel všude stejně. Je to přenosná dílna: kdekoli ji rozložíte, pracuje se stejně.
Na macOS doporučujeme OrbStack. Podle dokumentace DDEV se instaluje nejsnáz a je nejrychlejší. Pro osobní použití je zdarma, firmy potřebují placenou verzi Pro. Zdarma a s otevřeným kódem jsou Colima a Rancher Desktop.
Apple nabízí také vlastní kontejnery, Apple Containers. DDEV je zatím nepodporuje, podpora je ve vývoji.
DDEV pro vývojáře nastaví prostředí v Dockeru vždy stejně. Je to plán dílny: každé nářadí má své místo. Na Macu ho nainstalujete přes Homebrew:
brew install ddev/ddev/ddev
mkcert -install
Druhý příkaz spustíte jen jednou. Prohlížeč pak bude důvěřovat lokálním adresám s HTTPS.
Git zapisuje každou změnu kódu: kdo co změnil, s možností vrátit se. Funguje jako historie úprav ve sdíleném dokumentu. Na GitLabu repozitář sdílí celý tým a odtud se web také nasazuje na server. Poslouží i GitHub nebo Bitbucket, my používáme GitLab.
Doporučujeme Visual Studio Code nebo PhpStorm. Dobře poslouží i Sublime Text.
Orca není klasický editor. Vedle sebe v ní pracují AI agenti, každý ve vlastní kopii repozitáře.
HOSTING
Na vašem počítači běží Drupal v DDEV. Na serveru potřebujete:
.htaccess, musí na Nginx nastavit správce serveru.web.Drush na server zvlášť neinstalujete. Je součástí projektu a spouští se z jeho složky.
Sdílený hosting bez SSH často nestačí. Drupal.org upozorňuje, že nastavit kořen webu do složky web bývá na sdíleném hostingu problém. Jak nasazujeme na vlastní server bez výpadku, popisuje stránka Nasazení webu bez výpadku.
PROJEKT
Postup vychází z oficiálního návodu DDEV pro Drupal. V jednom detailu se liší: verzi Drupalu uzamkneme na 11 (:^11). Bez toho Composer vždy vezme nejnovější hlavní verzi.
mkdir muj-drupal && cd muj-drupal
ddev config --project-type=drupal11 --docroot=web
ddev start
ddev composer create-project 'drupal/recommended-project:^11'
ddev composer require drush/drush
ddev launch
Co jednotlivé příkazy dělají:
ddev config vytvoří složku .ddev s nastavením projektu. Výchozí je PHP 8.4, Nginx a MariaDB 11.8.ddev start spustí kontejnery. Web poběží na adrese https://muj-drupal.ddev.site.ddev composer create-project stáhne šablonu drupal/recommended-project a podle jejího composer.json nainstaluje Drupal se všemi závislostmi. Composer je správce závislostí pro PHP. Z omezení verzí spočítá sadu balíčků, které spolu fungují, stáhne je a přesné verze zapíše do composer.lock.ddev composer require drush/drush přidá do projektu Drush. Drush je nástroj, kterým Drupal ovládáte z příkazové řádky: maže cache, spouští aktualizace a exportuje nastavení.ddev launch otevře web v prohlížeči. Drupal ještě není nainstalovaný, takže se otevře instalátor.composer.json popisuje, co projekt potřebuje. Šablona do něj zapsala šest balíčků, mimo jiné drupal/core-recommended: ^11.4, drupal/core-composer-scaffold a drush/drush: ^13.8. Moduly a šablony z drupal.org se stahují z repozitáře https://packages.drupal.org/8.drupal/core-recommended přidá k jádru 45 knihoven ve verzích, se kterými je jádro odzkoušené. Proto se v projektu požaduje místo samotného drupal/core.composer.lock drží pro každý z 89 nainstalovaných balíčků přesnou verzi a adresu, odkud se stáhl. U nás je to drupal/core 11.4.11.vendor/ obsahuje PHP knihovny, mezi nimi komponenty Symfony, a autoloader.composer.json sekce installer-paths. Jádro jde do web/core, moduly do web/modules/contrib, šablony do web/themes/contrib.web/index.php, web/.htaccess nebo web/sites/default/default.settings.php vygeneroval plugin drupal/core-composer-scaffold. Při aktualizaci jádra je přepíše, proto je ručně neupravujte.INSTALACE
Drupal jde nainstalovat jedním příkazem. Poprvé ale doporučujeme projít instalátor v prohlížeči, ať vidíte, co se nastavuje. Instalátor začíná anglicky. Jako jazyk zvolíme češtinu, takže bude výchozím jazykem webu.
V kroku Choose language vyberte Čeština a klikněte na Save and continue. Drupal stáhne české překlady z localize.drupal.org a zbytek instalátoru už je česky. S češtinou má instalátor osm kroků místo šesti, přibude nastavení a dokončení překladů.
Profil určuje, s čím web začíná. Vyberte Standard. Přinese administraci, editor textu, role správce a redaktora a slovník Štítky. Minimální profil je pro pokročilé a Demo Umami je experimentální ukázkový web o vaření.
Kroky Kontrola požadavků a Nastavení databáze DDEV přeskočí. Databázi pro projekt připravil sám a přístup k ní zapsal do souboru settings.ddev.php. Na hostingu tady vyplníte název databáze, uživatele a heslo.
Instalace webu a import překladů pak proběhnou samy. U nás trvaly několik sekund a Drupal naimportoval 4 321 českých překladů.
Vyplňte název webu a e-mail, ze kterého bude web posílat zprávy. Použijte adresu ve stejné doméně jako web, jinak e-maily mohou končit ve spamu.
Účet pro správu webu má všechna oprávnění. Zvolte silné heslo. Pro běžnou práci redakce později založte vlastní účty s rolí redaktora.
Zkontrolujte časové pásmo, u nás Prague. Obě upozornění na aktualizace nechte zapnutá. Pak klikněte na Uložit a pokračovat.
Jste přihlášení jako správce a vidíte úvodní stránku s postranní navigací. Drupal upozorní, že u složky sites/default a souboru settings.php máte odebrat práva zápisu. Na vašem počítači v DDEV to řešit nemusíte, na serveru ano.
Některé texty zůstanou anglicky, třeba položka Announcements. Překlady připravuje komunita a ne všechny jsou hotové.
Od verze 11.4 nevytvoří profil Standard žádný typ obsahu. Přehled Typy obsahu v menu Struktura je prázdný. Typ obsahu si založíte sami a právě tím začíná další díl.
Když instalátor znáte, stačí jeden příkaz:
ddev drush site:install standard --locale=cs --site-name="Můj Drupal" --account-name=spravce -y
Heslo správce Drush vygeneruje a vypíše. Pak se přihlásíte přes ddev drush uli.
EXISTUJÍCÍ PROJEKT
Častěji než nový web dostanete existující projekt. Postup je pak kratší:
git clone git@gitlab.com:tym/projekt.git
cd projekt
ddev start
ddev composer install
ddev import-db --file=zaloha.sql.gz
ddev drush deploy
ddev drush uli
ddev start načte nastavení ze složky .ddev, kterou projekt má v Gitu.ddev composer install nainstaluje přesně ty verze, které jsou zapsané v composer.lock.ddev import-db nahraje databázi ze zálohy od kolegy.ddev drush deploy srovná databázi s kódem a konfigurací v Gitu.ddev drush uli vypíše jednorázový přihlašovací odkaz, heslo nepotřebujete.Záloha z ostrého webu obsahuje osobní údaje. Pracujte s ní podle pravidel projektu.
PŘÍKAZY
V DDEV píšete před Composer a Drush slovo ddev, třeba ddev drush cr.
ddev start a ddev stop spustí a zastaví projekt. ddev poweroff zastaví všechny projekty najednou.ddev launch otevře web v prohlížeči.ddev import-db --file=zaloha.sql.gz nahraje databázi ze souboru.ddev export-db --file=zaloha.sql.gz uloží databázi do souboru.ddev snapshot udělá rychlý snímek databáze, ddev snapshot restore --latest se k němu vrátí. Hodí se před riskantní změnou.composer install přečte composer.lock a nainstaluje přesně zapsané verze. Nic nepřepočítává, takže u vás, u kolegy i na serveru vznikne stejný vendor/ a web/core. Spouští se po git clone, po změně locku a při nasazení, na serveru s volbou --no-dev.composer update znovu vyhodnotí omezení v composer.json, stáhne nejnovější vyhovující verze a přepíše composer.lock. Omezení ^11.4 povolí jakoukoli verzi 11 od 11.4.0 výš, novou hlavní verzi ne. Spouštíte ho vědomě na svém počítači, výsledek otestujete a commitnete. Na serveru nikdy.composer require drupal/pathauto zapíše modul do composer.json, stáhne ho do web/modules/contrib/pathauto a aktualizuje lock. Modul je tím jen stažený. Zapnete ho přes drush en pathauto a zapnutí uložíte do konfigurace přes drush cex.composer.json i composer.lock patří do Gitu. Lock zaručí, že celý tým pracuje se stejnými verzemi.
Jádro aktualizujete podle postupu drupal.org:
ddev composer update "drupal/core-*" --with-all-dependencies
ddev drush updatedb
ddev drush cr
ddev drush cex
Poslední příkaz uloží změny konfigurace, které aktualizace přinesla.
drush cr smaže a znovu sestaví cache. První pomoc, když se změna neprojevila.drush updb spustí čekající aktualizace databáze, třeba po aktualizaci modulů.drush cex uloží konfiguraci z databáze do souborů.drush cim načte konfiguraci ze souborů do databáze.drush deploy spustí v jednom kroku aktualizace databáze, import konfigurace, smazání cache a nasazovací kroky modulů. Tímhle příkazem končí každé nasazení.drush uli vypíše jednorázový přihlašovací odkaz.KONFIGURACE
Drupal odděluje obsah od konfigurace. Obsah jsou nody, termíny taxonomie, uživatelé a soubory. Konfigurace určuje, jak web funguje: typy obsahu, pole, Views, role a oprávnění, zapnuté moduly a nastavení šablon.
Obojí je v databázi, konfigurace v tabulce config. Po instalaci profilu Standard v ní je 145 konfiguračních objektů.
drush cex zapíše každý objekt do vlastního souboru YAML. Soubor se jmenuje podle objektu, slovník Štítky je v taxonomy.vocabulary.tags.yml:
uuid: e9a02613-bf4c-421c-8ecb-05ca8cde5d49
langcode: cs
status: true
dependencies: { }
_core:
default_config_hash: PWTsHiwkIfp5TW-iTBc9AhBtvbYY6wrp3MopazQ-95o
name: Štítky
vid: tags
description: 'Use tags to group content on similar topics into categories.'
weight: 0
new_revision: false
Zapnuté moduly najdete v core.extension.yml. drush cim udělá z konfigurace v databázi přesnou kopii souborů: objekty přidá, změní i smaže. Rozdíly mezi databází a soubory vypíše drush config:status.
Import funguje jen mezi instancemi stejného webu. Každá instalace dostane vlastní UUID v objektu system.site. Import s jiným UUID Drupal odmítne hláškou „Site UUID in source storage does not match the target storage.“ Nový kolega proto web neinstaluje znovu. Nahraje databázi přes ddev import-db, nebo web nainstaluje z exportu přes drush site:install --existing-config.
Změna konfigurace jde vždy stejnou cestou:
ddev drush cex zapíše změněné soubory do config/sync. Co se změnilo, ukáže git diff.drush deploy: updatedb, config:import, cache:rebuild a deploy:hook.Konfiguraci proto neměňte přímo na ostrém webu. Import při dalším nasazení vrátí databázi do stavu souborů v Gitu a ruční změnu přepíše.
Hodnoty, které se liší podle prostředí, nastavte v settings.php nebo settings.local.php přes $config. Přepis platí jen za běhu, do tabulky config se nezapíše a drush cex ho neexportuje. Na svém počítači takhle třeba vypnete agregaci CSS:
$config['system.performance']['css']['preprocess'] = FALSE;
DDEV ukládá export do sites/default/files/sync, tedy do veřejné složky souborů. Drupal.org doporučuje mít konfiguraci mimo kořen webu. Před prvním exportem proto přidejte do web/sites/default/settings.php:
$settings['config_sync_directory'] = '../config/sync';
Šablona projektu nemá vlastní .gitignore. Do Gitu patří composer.json, composer.lock, složka .ddev, config/sync a váš vlastní kód. Nepatří tam nic, co Composer umí stáhnout znovu, ani nic s daty a hesly:
/vendor/
/web/core/
/web/modules/contrib/
/web/themes/contrib/
/web/profiles/contrib/
/web/libraries/
/web/sites/*/files/
/web/sites/*/settings.local.php
*.sql
*.sql.gz
Vzor najdete i v souboru web/example.gitignore, který přibalí jádro. Přístupové údaje k databázi na serveru patří do settings.local.php, který v Gitu není.
MIGRACE
Na nový web patří Drupal 11. Drupal 10 má podporu do 9. 12. 2026 a přechod z něj na 11 je upgrade na stejném základu.
Drupal 7 podporu nemá od 5. 1. 2025. Přechod z něj je migrace do nově vyvinutého webu. Obojí nabízíme jako službu Upgrade a migrace Drupalu.
DÁLE
V dalším díle založíme na tomto webu první typ obsahu. Vysvětlíme entity, pole, taxonomii, výpisy přes Views a bloky. Jak vytvořit multijazyčný Drupal s libovolným počtem jazyků se dozvíte v dalším článku, který připravujeme.
Chcete s Drupalem pracovat každý den? Podívejte se na volné pozice.
KONZULTACE
Napište nám, co právě řešíte. Ozveme se do jednoho pracovního dne.