How to Install the Neos CMS on CentOS 7

Neos is an innovative open source content management system which is great for creating and editing online content. With authors and editors in mind, Neos provides intuitive editing interface, structured content repository, multilingual content readiness, professional content workflows, and many more powerful features to facilitate content creation and management.


  • A newly deployed Vultr CentOS 7 x64 server instance. Say its IP address is, and its hostname is neos.
  • A domain have been configured to point to the server instance mentioned above. You can learn more details about this in another Vultr tutorial.
  • A sudo user.
  • The server instance has been updated to the latest stable status using the EPEL YUM repo.
  • In a production environment, it’s recommended to setup a swap file in order to obtain better performance.

Step 1: Setup an up to date LAMP stack

When deploying a content site based on Neos 3.2.0, it’s necessary to setup an up to date LAMP stack before you can get the site up and running. For example, a qualified LAMP stack for Neos 3.2.0 nowadays will consist of:

  • CentOS 7 x64, updated to the latest stable status,
  • Apache 2.4,
  • MariaDB 10.2, using the utf8_unicode_ci collation by default, and
  • PHP 7.1, or at least PHP 7.0.

There are many Vultr Docs to help you set up a LAMP stack, but the following is an example of the command line history for your information. Be aware that specific setting modifications for Neos will be included as well.

# Install and configure Apache 2.4.xsudo yum install httpd -ysudo sed -i 's/^/#&/g' /etc/httpd/conf.d/welcome.confsudo sed -i "s/Options Indexes FollowSymLinks/Options FollowSymLinks/" /etc/httpd/conf/httpd.confsudo systemctl start httpd.servicesudo systemctl enable httpd.service# Install MariaDB 10.2.xcurl -sS | sudo bashsudo yum install MariaDB-server MariaDB-client -ysudo systemctl start mariadb.servicesudo systemctl enable mariadb.service# Secure MariaDB 10.2.xsudo /usr/bin/mysql_secure_installation# When prompted, answer questions as below:# - Enter current password for root (enter for none): Just press the Enter button# - Set root password? [Y/n]: Y# - New password: your-MariaDB-root-password# - Re-enter new password: your-MariaDB-root-password# - Remove anonymous users? [Y/n]: Y# - Disallow root login remotely? [Y/n]: Y# - Remove test database and access to it? [Y/n]: Y# - Reload privilege tables now? [Y/n]: Y# Set the default collation of MariaDB as utf8_unicode_cicat <<EOF>> /tmp/collation.conf[client]default-character-set=utf8[mysql]default-character-set=utf8[mysqld]collation-server=utf8_unicode_ciinit-connect='SET NAMES utf8'character-set-server=utf8EOFsudo cp /etc/my.cnf /etc/my.cnf.baksudo sed -i '//[client-server/]/r /tmp/collation.conf' /etc/my.cnfsudo systemctl restart mariadb.service# Create a MariaDB database for Neosmysql -u root -p# For security purposes, be sure to replace "neos", "neosuser", and "yourpassword" with your own ones. CREATE DATABASE neos;CREATE USER 'neosuser'@'localhost' IDENTIFIED BY 'yourpassword';GRANT ALL PRIVILEGES ON neos.* TO 'neosuser'@'localhost' IDENTIFIED BY 'yourpassword' WITH GRANT OPTION;FLUSH PRIVILEGES;EXIT;# Install required PHP 7.1.x packages and configure PHP for Neossudo rpm -Uvh yum install -y php71w php71w-mysqlnd php71w-common php71w-cli php71w-xml php71w-mbstring php71w-pecl-imagick php71w-mcrypt php71w-opcache php71w-imap php71w-process php71w-intlsudo cp /etc/php.ini /etc/php.ini.baksudo sed -i 's#;date.timezone =#date.timezone = America/Los_Angeles#' /etc/php.inisudo sed -i "s/memory_limit = 128M/memory_limit = 250M/" /etc/php.inisudo sed -i '$a/xdebug.max_nesting_level = 500' /etc/php.ini

Step 2: Download and install Composer

Neos requires the Composer PHP dependency manager. You can use the following commands to install Composer 1.5.2 on your machine.

Note: In the future, you can always get the latest stable release of Composer from its official download page.

cdphp -r "copy('', 'composer-setup.php');"php -r "if (hash_file('SHA384', 'composer-setup.php') === '544e09ee996cdf60ece3804abc52599c22b1f40f4323403c44d44fdfdd586475ca9813a858088ffbc1f233e9b180f061') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"php composer-setup.phpphp -r "unlink('composer-setup.php');"sudo mv composer.phar /usr/local/bin/composer

Step 3: Install Neos using Composer

With the help of Composer, you can install Neos and all required dependencies into a designated location.

cdmkdir neoscd neoscomposer create-project --no-dev neos/neos-base-distribution .

For management purposes, move all Neos files to the /opt directory, and then create a symbolic link from the web root directory /var/www/html to the /opt/neos directory, making all Neos files available for Apache.

sudo mv ~/neos /optsudo chown -R apache:apache /opt/neossudo ln -s /opt/neos /var/www/html/neos

Setup an Apache virtual host for the Neos site which will specify /var/www/html/neos/Web as the web root directory.

Note: When deploying on your own machine, be sure to replace all example values below with your own ones.

cat <<EOF | sudo tee /etc/httpd/conf.d/neos.conf<VirtualHost *:80>ServerAdmin admin@example.comDocumentRoot /var/www/html/neos/WebServerName example.comServerAlias<Directory /var/www/html/neos/Web>Options FollowSymLinksAllowOverride AllOrder allow,denyallow from all</Directory>ErrorLog /var/log/httpd/ /var/log/httpd/ common</VirtualHost>EOF

Restart Apache to apply all updates.

sudo systemctl restart httpd.service

Step 4: Modify firewall rules

In order to allow visitors to access your Neos site, you need to modify firewall rules as follows.

sudo firewall-cmd --zone=public --permanent --add-service=httpsudo firewall-cmd --zone=public --permanent --add-service=httpssudo firewall-cmd --reload

Step 5: Continue the installation from a web install wizard

Point your favorite web browser to, and then you will be brought into the Neos web install wizard interface.

On the Login page, you need to input the setup password and then click the Login button before you can enter the setup interface. The password is stored in the /var/www/html/neos/Data/SetupPassword.txt file, you can type the following command in your terminal window to get it.

cat /var/www/html/neos/Data/SetupPassword.txt

For security purposes, this file will be deleted after you successfully log in. Remember to write down the password for future reference.

On the Neos requirements check - Image Manipulation page, make sure that the imagick or gmagick PHP extension has been installed and chosen, and then click the Next > button to move on.

On the Configure database page, input or select database details as below.

  • DB Driver: MySQL/MariaDB via PDO
  • DB Username: neosuser
  • DB Password: yourpassword
  • DB Host:
  • DB Name: neos

Make sure that the database neos is using the utf8 character set, and then click the Next > button to move on.

On the Create administrator account page, input site administrator’s first name, last name, username, and password (twice), and then click the Next > button to move on.

On the Create a new site page, as a beginner, you can select the Neos.Demo site package and then click the Next > button to finish the setup.

Note: When you get familiar with Neos in the future, you can run the Neos web install wizard again to create your own site package on this page, and then use the new site package to build a custom Neos site.

Now, you can visit the Neos site’s frontend page or manage the site in the Neos site’s backend page. For your reference, useful links are listed below.

  • Site frontend page:
  • Site backend page:
  • Site setup page:

Step 6: Post-installation instructions

When deploying your Neos site in a production environment, you also need to change the Flow application context from Development (the default value) to Production by inserting the line SetEnv FLOW_CONTEXT Production to the Apache virtual host configuration as follows.

cat <<EOF | sudo tee /etc/httpd/conf.d/neos.conf<VirtualHost *:80>ServerAdmin admin@example.comDocumentRoot /var/www/html/neos/WebSetEnv FLOW_CONTEXT ProductionServerName example.comServerAlias<Directory /var/www/html/neos/Web>Options FollowSymLinksAllowOverride AllOrder allow,denyallow from all</Directory>ErrorLog /var/log/httpd/ /var/log/httpd/ common</VirtualHost>EOF

Restart Apache to apply your modifications.

sudo systemctl restart httpd.service

If you create a site using the Neos.demo site package in public, be sure to remove the Create account button on the Try me page to prevent unauthorized access.

Step 7 (Optional): Enable HTTPS by deploying the Let’s Encrypt certificate

To enhance the security of your Neos site, you can enable HTTPS on your site by deploying a Let’s Encrypt certificate.

First, use the vi text editor to setup the FQDN (fully qualified domain name) on your server instance.

sudo vi /etc/hosts

Insert the following line before any existing lines. neos

Save and quit.


Use the hostname -f command to confirm the result which will look like this.

Install the Certbot utility which can automatically deploy the Let’s Encrypt certificate and enable HTTPS.

sudo yum install -y yum-utilssudo yum-config-manager --enable rhui-REGION-rhel-server-extras rhui-REGION-rhel-server-optionalsudo yum install -y certbot-apache

Next, use the Certbot utility to deploy a Let’s Encrypt certificate for the Apache web server running on your server instance.

sudo cp /etc/httpd/conf.d/neos.conf /etc/httpd/conf.d/neos.conf.baksudo certbot --apache

During the process, reply to questions, as shown below.

Enter email address (used for urgent renewal and security notices): ``Agree Letsencrypt terms of service (A)gree/(Cancel): `A`Would you be willing to share your email address (Y)es/(N)o: `Y`Which names would you like to activate HTTPS for? 1: `1,2`Whether or not to redirect HTTP traffic to HTTPS, removing HTTP access? 1: No redirect/2: Redirect `2`

All HTTP connections will now be redirected to HTTPS.

Create a cron job as below to try to renew the Let’s Encrypt certificate on your machine twice a day.

sudo crontab -e

Press “I” to enter the insert mode, and then input the following line.

0 1,13 * * * /usr/bin/certbot renew

Save and quit.


This concludes the tutorial. Thanks for reading.

Want to contribute?

You could earn up to $300 by adding new articles

Submit your article
Suggest an update
Request an article

No comments

Powered by Blogger.