Created Setting up Drupal 7 (markdown)
parent
904b236347
commit
211b80a433
252
Setting-up-Drupal-7.md
Normal file
252
Setting-up-Drupal-7.md
Normal file
|
@ -0,0 +1,252 @@
|
||||||
|
In this guide we are setting up *Drupal 7* with *php-fpm* and *Nginx*
|
||||||
|
|
||||||
|
## Prerequisites
|
||||||
|
|
||||||
|
* A DNS record:
|
||||||
|
```
|
||||||
|
cms.example.com. 69 IN A 2.2.2.2
|
||||||
|
```
|
||||||
|
|
||||||
|
* A Debian 9.3 (stretch) instance (ami-b9fa4cc1)
|
||||||
|
|
||||||
|
* Make the hostname persistent on the instance, by creating the file */etc/cloud/cloud.cfg.d/99_hostname.cfg*:
|
||||||
|
```
|
||||||
|
#cloud-config
|
||||||
|
hostname: cms
|
||||||
|
fqdn: cms.example.com
|
||||||
|
```
|
||||||
|
|
||||||
|
## Installing dependencies
|
||||||
|
|
||||||
|
**NOTE:The following commands are executed under a privileged *admin* user, unless otherwise stated.**
|
||||||
|
|
||||||
|
```
|
||||||
|
$ sudo apt -y install php-apcu php-pear php7.0-fpm php7.0-cli php7.0-gd php7.0-mysql php7.0-xml php7.0-mbstring php7.0-curl nginx
|
||||||
|
```
|
||||||
|
|
||||||
|
## Install Drupal 7
|
||||||
|
|
||||||
|
Create a user for the website and switch to it:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ sudo useradd -s /bin/bash -d /srv/webadmin -m webadmin
|
||||||
|
$ sudo su - webadmin
|
||||||
|
```
|
||||||
|
|
||||||
|
Download Drupal 7:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ wget https://ftp.drupal.org/files/projects/drupal-7.56.tar.gz
|
||||||
|
```
|
||||||
|
|
||||||
|
Extract Drupal 7
|
||||||
|
|
||||||
|
```
|
||||||
|
$ tar xvzf drupal-7.56.tar.gz
|
||||||
|
```
|
||||||
|
|
||||||
|
Rename the destination folder to *cms*:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ mv drupal-7.56/ cms
|
||||||
|
```
|
||||||
|
|
||||||
|
## Setup Nginx
|
||||||
|
|
||||||
|
Exit back to the *admin* user and prepare the CMS Virtualhost (Create the */etc/nginx/sites-available/cms* file):
|
||||||
|
|
||||||
|
```
|
||||||
|
server {
|
||||||
|
server_name cms.example.com;
|
||||||
|
root /srv/webadmin/cms;
|
||||||
|
|
||||||
|
access_log /var/log/nginx/cms.example.com.access.log;
|
||||||
|
error_log /var/log/nginx/cms.example.com.error.log info;
|
||||||
|
|
||||||
|
index index.php;
|
||||||
|
|
||||||
|
location = /favicon.ico {
|
||||||
|
log_not_found off;
|
||||||
|
access_log off;
|
||||||
|
}
|
||||||
|
|
||||||
|
location = /robots.txt {
|
||||||
|
allow all;
|
||||||
|
log_not_found off;
|
||||||
|
access_log off;
|
||||||
|
}
|
||||||
|
|
||||||
|
# This matters if you use drush
|
||||||
|
location = /backup {
|
||||||
|
deny all;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Very rarely should these ever be accessed outside of your lan
|
||||||
|
location ~* \.(txt|log)$ {
|
||||||
|
allow 127.0.0.1;
|
||||||
|
deny all;
|
||||||
|
}
|
||||||
|
|
||||||
|
location ~ \..*/.*\.php {
|
||||||
|
return 403;
|
||||||
|
}
|
||||||
|
|
||||||
|
location / {
|
||||||
|
# This is cool because no php is touched for static content
|
||||||
|
try_files $uri $uri/ @rewrite;
|
||||||
|
expires max;
|
||||||
|
}
|
||||||
|
|
||||||
|
location @rewrite {
|
||||||
|
# Some modules enforce no slash (/) at the end of the URL
|
||||||
|
# Else this rewrite block wouldn't be needed (GlobalRedirect)
|
||||||
|
rewrite ^/(.*)$ /index.php?q=$1;
|
||||||
|
}
|
||||||
|
|
||||||
|
location ~ \.php$ {
|
||||||
|
include fastcgi_params;
|
||||||
|
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
|
||||||
|
fastcgi_intercept_errors on;
|
||||||
|
fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Enable the *cms* virtualhost and disable the *default* (switch back to the *admin* user):
|
||||||
|
|
||||||
|
```
|
||||||
|
$ cd /etc/nginx/sites-enabled/
|
||||||
|
$ sudo ln -s ../sites-available/cms
|
||||||
|
$ sudo rm default
|
||||||
|
```
|
||||||
|
|
||||||
|
Verify the configuration:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ sudo nginx -t
|
||||||
|
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
|
||||||
|
nginx: configuration file /etc/nginx/nginx.conf test is successful
|
||||||
|
```
|
||||||
|
|
||||||
|
The configuration is free from syntax errors. We can go ahead and restart *Nginx*and *PHP-FPM* :
|
||||||
|
|
||||||
|
```
|
||||||
|
$ sudo systemctl restart nginx.service php7.0-fpm.service
|
||||||
|
```
|
||||||
|
|
||||||
|
## Enable HTTPS with Let's Encrypt
|
||||||
|
|
||||||
|
Install *Certbot*:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ sudo apt -y install python-certbot-nginx
|
||||||
|
```
|
||||||
|
|
||||||
|
Generate the certificate:
|
||||||
|
|
||||||
|
```
|
||||||
|
sudo certbot --authenticator standalone --installer nginx -d cms.theo-andreou.org --pre-hook "systemctl stop nginx" --post-hook "systemctl start nginx"
|
||||||
|
```
|
||||||
|
|
||||||
|
**NOTE: under normal conditions the following command should work (and without restarting *Nginx*, but the Nginx authenticator has been disabled because of a [security bug](https://community.letsencrypt.org/t/solution-client-with-the-currently-selected-authenticator-does-not-support-any-combination-of-challenges-that-will-satisfy-the-ca/49983):**
|
||||||
|
|
||||||
|
```
|
||||||
|
$ certbot run --nginx -d cms.example.com # Currently not working because of a letsencrypt bug
|
||||||
|
```
|
||||||
|
|
||||||
|
Use these settings in the prompt:
|
||||||
|
* Enter Email Address: **admin@example.com**
|
||||||
|
* ToS: **Agree**
|
||||||
|
* HTTPS Access: **Secure**
|
||||||
|
|
||||||
|
Certificate auto-renewal is already included in the *python-certbot-nginx* package. That is true for Debian but not Ubuntu:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ cat /etc/cron.d/certbot
|
||||||
|
# /etc/cron.d/certbot: crontab entries for the certbot package
|
||||||
|
#
|
||||||
|
# Upstream recommends attempting renewal twice a day
|
||||||
|
#
|
||||||
|
# Eventually, this will be an opportunity to validate certificates
|
||||||
|
# haven't been revoked, etc. Renewal will only occur if expiration
|
||||||
|
# is within 30 days.
|
||||||
|
SHELL=/bin/sh
|
||||||
|
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
|
||||||
|
|
||||||
|
0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(3600))' && certbot -q renew
|
||||||
|
```
|
||||||
|
|
||||||
|
## Setup a MariaDB database
|
||||||
|
|
||||||
|
Install *MariaDB*:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ sudo apt -y install mariadb-server
|
||||||
|
```
|
||||||
|
|
||||||
|
Now create the Drupal database:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ sudo mysql
|
||||||
|
|
||||||
|
MariaDB [(none)]> CREATE DATABASE cms CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
|
||||||
|
MariaDB [(none)]> GRANT ALL PRIVILEGES ON cms.* TO 'cmsuser'@'localhost' IDENTIFIED BY 'MyDrupalDBPass';
|
||||||
|
MariaDB [(none)]> FLUSH PRIVILEGES;
|
||||||
|
```
|
||||||
|
|
||||||
|
## Setup Drupal 7
|
||||||
|
|
||||||
|
We need some preparations before we proceed with the setup.
|
||||||
|
|
||||||
|
First create the *sites/default/files* directory (as the *admin* user):
|
||||||
|
|
||||||
|
```
|
||||||
|
$ cd /srv/webadmin/cms/
|
||||||
|
$ sudo mkdir sites/default/files
|
||||||
|
$ sudo chown www-data:webadmin sites/default/files
|
||||||
|
```
|
||||||
|
|
||||||
|
Then create the *sites/default/default.settings.php* file:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ sudo cp sites/default/default.settings.php sites/default/settings.php
|
||||||
|
$ sudo chown www-data:webadmin sites/default/settings.php
|
||||||
|
```
|
||||||
|
|
||||||
|
Now visit this website to setup *Drupal*:
|
||||||
|
|
||||||
|
https://cms.example.com/install.php
|
||||||
|
|
||||||
|
Select the following options:
|
||||||
|
* Select an installation profile: **Standard**
|
||||||
|
* Choose language: **English**
|
||||||
|
* Verify requirements
|
||||||
|
You will be redirected to the next step if all is OK. Otherwise you will need to fix your setup.
|
||||||
|
* Database configuration:
|
||||||
|
* Database name: **cms**
|
||||||
|
* Database username: **cmsuser**
|
||||||
|
* Database password: **MyDrupalDBPass**
|
||||||
|
* Configure site:
|
||||||
|
* Site name: **cms.example.com**
|
||||||
|
* Site e-mail address: **cms@example.com**
|
||||||
|
* Username: **cmsadmin**
|
||||||
|
* E-mail address: **admin@example.com**
|
||||||
|
* Password: **MyDrupalAdminPass**
|
||||||
|
* Confirm Password: **MyDrupalAdminPass**
|
||||||
|
* Default country: **Your country here**
|
||||||
|
* Default Timezone: **Your Timezone here**
|
||||||
|
* Check for updates automatically: **Enabled**
|
||||||
|
* Receive e-mail notifications: **Enabled**
|
||||||
|
|
||||||
|
If everything is correct you will be greeted with a "Congratulations, you installed Drupal!" after you press the **Save and continue** button.
|
||||||
|
|
||||||
|
You can visit your newly installed Drupal CMS here:
|
||||||
|
|
||||||
|
https://cms.example.com
|
||||||
|
|
||||||
|
References
|
||||||
|
----------
|
||||||
|
* https://www.drupal.org/node/1030854
|
||||||
|
* http://blog.celogeek.com/201209/202/how-to-configure-nginx-php-fpm-drupal-7-0/
|
||||||
|
* https://www.drupal.org/node/244924
|
Loading…
Reference in a new issue