Pimcore Installation Ubuntu Server
Pimcore is an open-source platform for managing digital experiences and data. It is a powerful and flexible content management system (CMS) and product information management (PIM) system that enables businesses to efficiently organize, manage, and deliver digital content across various channels.
At its core, Pimcore provides a centralized hub for managing and enriching product data, digital assets, and marketing content. It offers a user-friendly interface that allows users to easily create and update content, define product hierarchies, manage translations, and handle digital assets such as images, videos, and documents. Pimcore also provides features for search engine optimization (SEO), marketing automation, and personalization, making it a comprehensive solution for creating and delivering engaging digital experiences.
Pimcore’s architecture is based on a modern, modular framework that allows for customization and extension. It is built on PHP and relies on the Symfony framework, ensuring robustness and scalability. With its API-driven approach, Pimcore enables seamless integration with other systems and supports headless CMS and digital experience platform (DXP) scenarios.
Ubuntu Installation
Download the Ubuntu Server from the address below and install on a virtual or physical computer.
https://ubuntu.com/download/server
Install Required Packages
Update system package list to update all packages to the latest available versions.
sudo apt update
Add ppa:ondrej/php repository.
sudo apt -y install software-properties-common
sudo add-apt-repository ppa:ondrej/php
Update system package manager.
sudo apt update
Install PHP 8.0 and more modules.
sudo apt install apache2 mysql-server php8.0 libapache2-mod-php8.0 php8.0-mysql php8.0-curl php8.0-xml php8.0-zip php8.0-mbstring php8.0-intl php8.0-opcache php8.0-imagick php8.0-gd php8.0-cli php8.0-fpm libapache2-mod-fcgid wget unzip -y
Edit the PHP configuration file.
sudo nano /etc/php/8.0/fpm/php.ini
Find the following lines and change the values like below. Save and close the file.
memory_limit = 256M
upload_max_filesize = 100M
post_max_size = 100M
Enable Apache2 with PHP-FPM.
sudo a2enmod proxy_fcgi setenvif
sudo a2enconf php8.0-fpm
Restart Apache service.
sudo systemctl restart apache2
Create PIMCore Database
Start the MySQL service on system startup.
sudo systemctl enable mysql
sudo mysql
Define a password for root user
ALTER USER ‘root’@’localhost’ IDENTIFIED WITH mysql_native_password BY ‘SetRootPasswordHere’;
Exit;
Run mysql_secure installation script to ensure MySQL database server is secure form breaches.
sudo mysql_secure_installation
When prompted, answer the questions as shown below:
- Setup VALIDATE PASSWORD plugin? Press N, then ENTER.
- Change password? Press N, then ENTER.
- Remove anonymous users? Press Y, then ENTER.
- Disallow root login remotely? Press Y, then ENTER.
- Remove test database and access to it? Press Y, then ENTER.
- Reload privilege tables now? Press Y, then ENTER.
Run MySQL shell login command and enter your password to continue.
sudo mysql -u root -p
Create a database named pimcore.
CREATE DATABASE pimcore charset=utf8mb4;
Change the value of MySecurePassword to your own secure password.
Grant the database user full access to the database.
GRANT ALL ON pimcore.* TO ‘root’@’localhost’ WITH GRANT OPTION;
Save all the changes to take effect.
FLUSH PRIVILEGES;
Exit MySQL shell.
exit;
Install PIMCore
Install required dependencies.
sudo apt install curl git
Install Composer.
curl -sS https://getcomposer.org/installer | sudo php ––install-dir=/usr/local/bin ––filename=composer
Change to document root.
cd /var/www/
Change directories
cd /var/www/
Change group ownership (there is dot at the end)
sudo chown -Rv root:$USER .
Add priviledges to our group (there is dot at the end)
sudo chmod -Rv g+rw .
Set up the project using composer.
COMPOSER_MEMORY_LIMIT=-1 composer create-project pimcore/skeleton pimcore Or for demo $ COMPOSER_MEMORY_LIMIT=-1 composer create-project pimcore/demo pimcore
Change to the installation directory.
cd /var/www/pimcore
Run the installer to create an administrator account, and enter your database credentials.
sudo ./vendor/bin/pimcore-install
Set the ownership of the directory to the web-root user and group.
sudo chown www-data:www-data -R /var/www/pimcore/
Change the access permissions.
sudo chmod -R 755 /var/www/pimcore/
Configure Apache Server
Allow port 80 through the firewall.
sudo ufw allow 80
Create a new Apache configuration file, pimcore.conf.
sudo nano /etc/apache2/sites-available/pimcore.conf
Add the following lines of code to the file. Save and close the file.
ServerAdmin admin@example.com
DocumentRoot /var/www/pimcore/public
ServerName example.com
<Directory /var/www/pimcore/public/>
Options FollowSymlinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
Enable Apache rewrite mode.
sudo a2enmod rewrite
Enable the new Apache configuration file.
sudo a2ensite pimcore.conf
Disable Apache default configuration file.
sudo a2dissite 000-default.conf
Restart Apache service for changes to take effect.
sudo systemctl restart apache2
sudo nano /var/www/pimcore/public/.htaccess
Create .htaccess file in Pimcore
Paste the following code starting from the line:
Source:
https://pimcore.com/docs/pimcore/current/Development_Documentation/
Installation_and_Upgrade/System_Setup_and_Hosting/
Apache_Configuration.html
# Use the front controller as index file. It serves as a fallback solution when
# every other rewrite/redirect fails (e.g. in an aliased environment without
# mod_rewrite). Additionally, this reduces the matching process for the# start page (path “/”) because otherwise Apache will apply the rewriting rules
# to each configured DirectoryIndex file (e.g. index.php, index.html, index.pl).
DirectoryIndex index.php
# By default, Apache does not evaluate symbolic links if you did not enable this
# feature in your server configuration. Uncomment the following line if you
# install assets as symlinks or if you experience problems related to symlinks
# when compiling LESS/Sass/CoffeScript assets.
# Options FollowSymlinks
# Disabling MultiViews prevents unwanted negotiation, e.g. “/index” should not resolve
# to the front controller “/index.php” but be rewritten to “/index.php/index”.
<IfModule mod_negotiation.c>
Options -MultiViews
</IfModule>
# mime types
AddType video/mp4 .mp4
AddType video/webm .webm
AddType image/webp .webp
AddType image/jpeg .pjpeg
Options +SymLinksIfOwnerMatch
# Use UTF-8 encoding for anything served text/plain or text/html
AddDefaultCharset utf-8
RewriteEngine On
<IfModule mod_headers.c>
<FilesMatch “\.(jpe?g|png)$”>
Header always unset X-Content-Type-Options
</FilesMatch>
</IfModule>
# Determine the RewriteBase automatically and set it as environment variable.
# If you are using Apache aliases to do mass virtual hosting or installed the
# project in a subdirectory, the base path will be prepended to allow proper
# resolution of the index.php file and to redirect to the correct URI. It will
# work in environments without path prefix as well, providing a safe, one-size
# fits all solution. But as you do not need it in this case, you can comment
# the following 2 lines to eliminate the overhead.
RewriteCond %{REQUEST_URI}::$1 ^(/.+)/(.*)::\2$
RewriteRule ^(.*) – [E=BASE:%1]
# Sets the HTTP_AUTHORIZATION header removed by Apache
RewriteCond %{HTTP:Authorization} .
RewriteRule ^ – [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
# Redirect to URI without front controller to prevent duplicate content
# (with and without `/index.php`). Only do this redirect on the initial
# rewrite by Apache and not on subsequent cycles. Otherwise we would get an
# endless redirect loop (request -> rewrite to front controller ->
# redirect -> request -> …).# So in case you get a “too many redirects” error or you always get redirected
# to the start page because your Apache does not expose the REDIRECT_STATUS
# environment variable, you have 2 choices:
# – disable this feature by commenting the following 2 lines or
# – use Apache >= 2.3.9 and replace all L flags by END flags and remove the
# following RewriteCond (best solution)
RewriteCond %{ENV:REDIRECT_STATUS} ^$
RewriteRule ^index\.php(?:/(.*)|$) %{ENV:BASE}/$1 [R=301,L]
<IfModule mod_status.c>
RewriteCond %{REQUEST_URI} ^/(fpm|server)-(info|status|ping)
RewriteRule . – [L]
</IfModule>
# restrict access to dotfiles
RewriteCond %{REQUEST_FILENAME} -d [OR]
RewriteCond %{REQUEST_FILENAME} -l [OR]
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule /\.|^\.(?!well-known/) – [F,L]
# ASSETS: check if request method is GET (because of WebDAV) and if the requested file (asset) exists on the filesystem, if both match, deliver the asset directly
RewriteCond %{REQUEST_METHOD} ^(GET|HEAD)
RewriteCond %{DOCUMENT_ROOT}/var/assets%{REQUEST_URI} -f
RewriteRule ^(.*)$ /var/assets%{REQUEST_URI} [PT,L]
# Thumbnails
RewriteCond %{REQUEST_URI} .*/(image|video)-thumb__[\d]+__.*
RewriteCond %{DOCUMENT_ROOT}/var/tmp/thumbnails%{REQUEST_URI} -f
RewriteRule ^(.*)$ /var/tmp/thumbnails%{REQUEST_URI} [PT,L]
# static pages
SetEnvIf Request_URI ^(.*)$ STATIC_PAGE_URI=$1
SetEnvIf Request_URI / STATIC_PAGE_URI=/%home
RewriteCond %{REQUEST_METHOD} ^(GET|HEAD)
RewriteCond %{QUERY_STRING} !(pimcore_editmode=true|pimcore_preview|pimcore_version)
RewriteCond %{DOCUMENT_ROOT}/var/tmp/pages%{STATIC_PAGE_URI}.html -f
RewriteRule ^(.*)$ /var/tmp/pages%{STATIC_PAGE_URI}.html [PT,L]
# cache-buster rule for scripts & stylesheets embedded using view helpers
RewriteRule ^cache-buster\-[\d]+/(.*) $1 [PT,L]
# If the requested filename exists, simply serve it.
# We only want to let Apache serve files and not directories.
RewriteCond %{REQUEST_FILENAME} -f
RewriteRule ^ – [L]
# Rewrite all other queries to the front controller.
RewriteRule ^ %{ENV:BASE}/index.php [L]
<IfModule mod_deflate.c>
# Force compression for mangled headers.
# http://developer.yahoo.com/blogs/ydn/posts/2010/12/pushing-beyond-gzipping
<IfModule mod_setenvif.c>
<IfModule mod_headers.c>
SetEnvIfNoCase ^(Accept-EncodXng|X-cept-Encoding|X{15}|~{15}|-{15})$
^((gzip|deflate)\s*,?\s*)+|[X~-]{4,13}$ HAVE_Accept-Encoding
RequestHeader append Accept-Encoding “gzip,deflate” env=HAVE_Accept-Encoding
</IfModule>
</IfModule>
# Compress all output labeled with one of the following MIME-types
# (for Apache versions below 2.3.7, you don’t need to enable `mod_filter`
# and can remove the `<IfModule mod_filter.c>` and `</IfModule>` lines
# as `AddOutputFilterByType` is still in the core directives).
<IfModule mod_filter.c>
AddOutputFilterByType DEFLATE application/atom+xml application/javascript application/json \
application/vnd.ms-fontobject application/x-font-ttf application/rss+xml \
application/x-web-app-manifest+json application/xhtml+xml \
application/xml font/opentype image/svg+xml image/x-icon \
text/css text/html text/plain text/x-component text/xml text/javascript
</IfModule>
</IfModule>
<IfModule mod_expires.c>
ExpiresActive on
ExpiresDefault “access plus 31536000 seconds”
# specific overrides
#ExpiresByType text/css “access plus 1 year”
</IfModule>
<IfModule pagespeed_module>
# pimcore mod_pagespeed integration
# pimcore automatically disables mod_pagespeed in the following situations: debug-mode on, /admin, preview, editmode, …
# if you want to disable pagespeed for specific actions in pimcore you can use $this->disableBrowserCache() in your action
RewriteCond %{REQUEST_URI}
^/(mod_)?pagespeed_(statistics|message|console|beacon|admin|global_admin)
RewriteRule . – [L]
ModPagespeed Off
AddOutputFilterByType MOD_PAGESPEED_OUTPUT_FILTER text/html
ModPagespeedModifyCachingHeaders off
ModPagespeedRewriteLevel PassThrough
# low risk filters
ModPagespeedEnableFilters remove_comments,recompress_images
# low and moderate filters, recommended filters, but can cause problems
ModPagespeedEnableFilters
lazyload_images,extend_cache_images,inline_preview_images,sprite_images
ModPagespeedEnableFilters
combine_css,rewrite_css,move_css_to_head,flatten_css_imports,extend_cache_css,prioritize_critical_css
ModPagespeedEnableFilters
extend_cache_scripts,combine_javascript,canonicalize_javascript_libraries,rewrite_javascript
# high risk
#ModPagespeedEnableFilters defer_javascript,local_storage_cache
</IfModule>
Save the file by typing Ctrl + X
Access PIMCore Web Platform
To access the PIMCore administrator web platform, go to your browser and visit http://myServerIp/admin/. For example:
http://127.0.0.1/admin/