Systemy zarządzania treścią
Elastyczny system zarządzania treścią do tworzenia niestandardowych doświadczeń cyfrowych
Create custom content structures with sections, entries, fields, and Matrix blocks for any type of content
Build flexible, modular page layouts with reusable content blocks editors can arrange freely
Designer-friendly templates with powerful syntax, clean markup, and excellent documentation
Manage multiple sites, languages, and locales from single installation with shared or localized content
Beautiful, fast admin interface with live preview, asset manager, and image editing that clients love
Extensive plugins including Craft Commerce for e-commerce, SEO tools, forms, and custom development
sudo apt update && sudo apt upgrade -y
sudo apt install php8.1 php8.1-{fpm,cli,mysql,gd,mbstring,xml,curl,zip,intl,imagick} -y2. Install Composer:curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer3. Install MySQL:sudo apt install mysql-server -y
sudo mysql
CREATE DATABASE craftcms CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'craftuser'@'localhost' IDENTIFIED BY 'secure_password';
GRANT ALL PRIVILEGES ON craftcms.* TO 'craftuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;4. Create Craft Project:cd /var/www
composer create-project craftcms/craft mysite
cd mysite5. Set Permissions:sudo chown -R www-data:www-data /var/www/mysite
sudo chmod -R 755 /var/www/mysite
sudo chmod -R 777 /var/www/mysite/storage
sudo chmod -R 777 /var/www/mysite/config
sudo chmod -R 777 /var/www/mysite/web/cpresources6. Configure Environment:cp .env.example .env
nano .envSet configuration:ENVIRONMENT="production"
SECURITY_KEY="generate-via-php-craft-setup-security-key"
DB_DRIVER="mysql"
DB_SERVER="127.0.0.1"
DB_PORT="3306"
DB_DATABASE="craftcms"
DB_USER="craftuser"
DB_PASSWORD="secure_password"
DB_SCHEMA="public"
DB_TABLE_PREFIX=""
PRIMARY_SITE_URL="https://yourdomain.com"7. Configure Nginx:sudo nano /etc/nginx/sites-available/craftcmsAdd:server {
listen 80;
server_name yourdomain.com;
root /var/www/mysite/web;
index index.php index.html;
charset utf-8;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php8.1-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~ /\.ht {
deny all;
}
client_max_body_size 100M;
}Enable site:sudo ln -s /etc/nginx/sites-available/craftcms /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx8. Get SSL Certificate:sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d yourdomain.com9. Run Craft Setup:php craft setup/security-key
php craft installFollow prompts to:<?php
use craft\helpers\App;
return [
'*' => [
'defaultWeekStartDay' => 1,
'omitScriptNameInUrls' => true,
'securityKey' => App::env('SECURITY_KEY'),
'cpTrigger' => 'admin',
],
'production' => [
'devMode' => false,
'allowAdminChanges' => false,
'enableTemplateCaching' => true,
],
'dev' => [
'devMode' => true,
'allowAdminChanges' => true,
'enableTemplateCaching' => false,
],
];2. Database Config (config/db.php):<?php
return [
'driver' => App::env('DB_DRIVER'),
'server' => App::env('DB_SERVER'),
'port' => App::env('DB_PORT'),
'database' => App::env('DB_DATABASE'),
'user' => App::env('DB_USER'),
'password' => App::env('DB_PASSWORD'),
'schema' => App::env('DB_SCHEMA'),
'tablePrefix' => App::env('DB_TABLE_PREFIX'),
];3. Twig Template Example:{# templates/index.twig #}
{% extends "_layout" %}
{% block content %}
<h1>{{ entry.title }}</h1>
{# Matrix field #}
{% for block in entry.contentBlocks.all() %}
{% switch block.type %}
{% case "text" %}
<div class="text-block">
{{ block.text|raw }}
</div>
{% case "image" %}
<figure>
<img src="{{ block.image.one().url }}" alt="{{ block.image.one().title }}">
<figcaption>{{ block.caption }}</figcaption>
</figure>
{% case "gallery" %}
<div class="gallery">
{% for image in block.images.all() %}
<img src="{{ image.url }}" alt="{{ image.title }}">
{% endfor %}
</div>
{% endswitch %}
{% endfor %}
{% endblock %}4. Querying Entries:{# Get all blog posts #}
{% set posts = craft.entries()
.section('blog')
.orderBy('postDate desc')
.limit(10)
.all() %}
{% for post in posts %}
<article>
<h2>{{ post.title }}</h2>
<p>{{ post.summary }}</p>
<a href="{{ post.url }}">Read more</a>
</article>
{% endfor %}
{# Get related entries #}
{% set relatedPosts = craft.entries()
.section('blog')
.relatedTo(entry)
.limit(3)
.all() %}5. Asset Transforms:{# Define image transform #}
{% set thumb = {
mode: 'crop',
width: 300,
height: 300,
quality: 80
} %}
<img src="{{ image.url(thumb) }}" alt="{{ image.title }}">
{# Or use named transforms (config/image-transforms.php) #}
<img src="{{ image.url('thumbnail') }}" alt="{{ image.title }}">6. Multi-Site Configuration:<?php
// config/general.php
return [
'*' => [
'siteUrl' => [
'en' => 'https://example.com',
'fr' => 'https://example.com/fr',
'de' => 'https://example.de',
],
],
];7. Custom Module Example:# Generate module
php craft make module
# config/app.php
return [
'modules' => [
'my-module' => \modules\Module::class,
],
'bootstrap' => ['my-module'],
];8. Caching:<?php
// Enable Redis caching
// config/app.php
use craft\helpers\App;
return [
'components' => [
'cache' => [
'class' => yii\redis\Cache::class,
'redis' => [
'hostname' => 'localhost',
'port' => 6379,
'database' => 0,
],
],
],
];9. CLI Commands:# Clear caches
php craft clear-caches/all
# Backup database
php craft backup/db
# Restore database
php craft restore/db path/to/backup.sql
# Run migrations
php craft migrate/all
# Generate security key
php craft setup/security-key
# Create admin user
php craft users/create
# Project config sync
php craft project-config/apply10. Performance Optimization:<?php
// config/general.php
return [
'production' => [
'enableTemplateCaching' => true,
'cacheDuration' => 3600,
'maxCachedCloudImageSize' => 2000,
'optimizeImageFilesize' => true,
'transformGifs' => false,
],
];Best Practices:allowAdminChanges => false in productionphp craft backup/dbZacznij w minutach od naszego prostego procesu rozmieszczenia VPS
Deploy in about 2 minutes • Full root access • Support by ticket and email