Installing Drupal
Drupal ports are available on FreeBSD and, in fact, multiple versions are available:# pkg search drupal
drupal6-6.31
[...snip...]
drupal7-7.31
[...snip...]
Unless there is a compelling reason not to do so, install the latest one:
# pkg install drupal7
To successfully run Drupal, you need:
- The Apache HTTP Server.
- PHP.
- A supported database server (PostgreSQL or MySQL).
The Drupal port, however, does not enforce these dependencies, so that you have to satisfy them manually.
Installing the Apache HTTP Server
Unless there is a compelling reason not to do so, install the latest available Apache port (apache24 at the time of writing):# pkg install apache24
Once the port is installed, enable the corresponding service adding the following line to /etc/rc.conf:
apache24_enable="YES"
Installing the Database
Drupal supports both PostgreSQL and MySQL but the Drupal port does not install any, by default, although it installs the MySQL client utilities. In this post MySQL will be used but if you prefer using PostgreSQL instead, just skip this section and read this article instead.Since the Drupal port by default defines the MYSQL option, when you install the binary package using pkg you'll also get a MySQL client port, such as what I got at the time of writing:
mysql55-client-5.5.40
As a consequence, you have to install the matching mysqlXX-server port:
# pkg install mysql55-server-5.5.40
If you try to install a different version (at the time of writing mysql56 is available), you may be requested to remove Drupal itself because of the inter-dependencies between the client and server MySQL packages.
Once MySQL is installed, enable the corresponding service adding the following line to /etc/rc.conf:
mysql_enable="YES"
Installing PHP
The installation of PHP is taken care of by the Drupal port. However, the PHP module for the Apache HTTP Server is not installed and must be installed manually. Make sure you install the PHP module that corresponds with the PHP version installed by the Drupal port. At the time of writing, the following modules are available:# pkg search mod_php
mod_php5-5.4.33_1,1
mod_php55-5.5.17_1
mod_php56-5.6.1
Since the port depends on php5, then mod_php5-5.4.33_1,1 should be installed:
# pkg install mod_php5-5.4.33_1,1
The port takes care of modifying the Apache HTTP Server configuration file so that the PHP module is loaded. If you did not install the packages in order suggested by this post, then you may have lost that piece of configuration. In any case, make sure a line similar to the following is present in /usr/local/etc/apache24/httpd.conf:
LoadModule php5_module libexec/apache24/libphp5.so
Installing drush
drush is an optional package offering an amazingly good command line interface to perform many Drupal-related management tasks: drush could even be used to install Drupal, but this topic is not covered by this post, since I prefer relying on a port tested specifically on FreeBSD. However, once you have tested that a specific release works correctly, you may find drush very useful to streamline your installations. If you are interested in using drush, you will find plenty of good information on the Internet. To install drush, the following command may be used:# pkg install drush
Creating a Database for Drupal
A database for Drupal must be created in the DB server installed in the previous section. The MySQL port sets no password for the root user connecting from localhost; for this reason, setting its password is recommended (in bold the text input by the user):# mysql -u root
Welcome to the MySQL monitor. Commands end with ; or \g.
[...snip...]
mysql> set password for root@localhost=PASSWORD('your-password')
mysql> exit
Bye
Once the password is set, you can try to reconnect (in italic bold the variables whose name should be changed with your values of choice):
# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
[...snip...]
mysql> create database drupal_database_name;
mysql> create user 'drupal_user'@'localhost' identified by 'password';
mysql> grant all privileges on drupal_database_name.* to 'drupal_user'@'localhost' with grant option;
mysql> flush privileges;
Configuring the Apache HTTP Server
Now that everything is in place, we can configure the web server so that it starts serving the Drupal web application. The tasks to perform are the following- Configuring the required modules.
- Configuring a virtual host to serve Drupal.
- Configuring a MIME/type for PHP.
The modules required to run Drupal are mod_rewrite and the PHP module. The latter was configured automatically by the PHP module port, and the latter can be configured uncommenting the following line from /usr/local/etc/apache24/httpd.conf:
LoadModule rewrite_module libexec/apache24/mod_rewrite.so
The cleanest way to segregate the Drupal configuration is creating a virtual host for it. An additional advantage of this approach is that Drupal will be served from the root path (/) and you won't need to use any rewrite rule to achieve the same result. Assuming the host name and the port where Drupal will be published is drupal.host.name:80, then create a file in /usr/local/etc/apache24/Includes named drupal.conf and define the skeleton of the virtual host:
<VirtualHost *:80>
ServerName drupal.host.name
# Drupal directory configuration placeholder
ErrorLog ${APACHE_LOG_DIR}/drupal-error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/drupal-access.log combined
</VirtualHost>
In the default configuration of Apache in FreeBSD, any .conf file in this directory is included automatically, so that no additional code is required to add the virtual host to the web server configuration. In this fragment I've used an environment variable (${APACHE_LOG_DIR}) to separate some server configuration variables that could be reused in external scripts. To define environment variables, a .env file must be created in /usr/local/etc/apache24/envvars.d such as:
The Drupal directory fragment defines the DocumentRoot of the virtual host and some of the required options:
DocumentRoot /usr/local/www/drupal7
<Directory "/usr/local/www/drupal7">
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
The option AllowOverride set to All is required so that .htaccess files shipped with Drupal are taken into account by the Apache HTTP Server. In this fragment, the path of the Drupal installation directory of the FreeBSD port is used. If you installed Drupal using alternative methods (such as drush), update the path accordingly.
The complete virtual host configuration file is:
Finally, the Apache HTTP Server must be instructed to execute the PHP code contained in PHP pages and to do so we need to add a MIME/type for them adding the following line in httpd.conf:
<IfModule mime_module>
# Content has been trimmed
# Add MIME type for PHP
AddType application/x-httpd-php .php
</IfModule>
Once all the settings are in place, Apache can be restarted and you can point your browser to http://drupal.host.name/ where the Drupal installation wizard will welcome you and will require you to input the database configuration and other Drupal website settings.
To restart the Apache HTTP Server, the following command can be used:
# service apache24 restart
Configuring Drupal behind a Proxy Server
Machines connecting to enterprise network often are not connected directly to the Internet but require the use of a web proxy server instead. Drupal can be configured to use a web proxy server by setting the following variables in ${DRUPAL_HOME}/sites/default/settings.php. If this file does not exist, copy the file default.settings.php (shipped with Drupal) into settings.php. The configuration variable that enable proxy support are the following:Depending on your proxy settings, different values may be used.
Beware that although Drupal itself (Core) supports a proxy, many third-party modules still do not. One notable exception at the time of writing is the reCaptcha module which will not work without a direct Internet connection.
Not very related, but I recommend NGINX rather than Apache. Easier to config and much friendly to resources
ReplyDeleteHello.
ReplyDeleteThanks for this guide however I noticed the tha part of defining environment it seems that there is some part missing.
"... variable (${APACHE_LOG_DIR}) to separate some server configuration variables that could be reused in external scripts. To define environment variables, a .env file must be created in /usr/local/etc/apache24/envvars.d such as:
The Drupal directory fragment defines the DocumentRoot of the virtual host and some of the required options:"
Either the lines were deleted or it is supposed to be like that?
Thank you
The 500 error after database stage happens because of the long loading time of installation page (60-70 seconds in my case). However by default Drupal only waits 30 seconds for the page to load and then throws the 500 error.
ReplyDeleteHi. Great video. Thanks.
ReplyDeleteI didn't fully understand the step d at the warning on clean URLs.
I opened the file "000-default.conf" with gedit. What should I do after that?
you got so much respect from me when you chose Vi as your text editor. I've been trying for a few years and I still can't really get the hang of it!
ReplyDelete