Differences between revisions 21 and 22
Revision 21 as of 2018-05-06 10:15:05
Size: 9254
Editor: AlbanVidal
Comment: Delete Wheezy section and add Stretch and Buster packages
Revision 22 as of 2018-05-06 10:24:30
Size: 9171
Editor: AlbanVidal
Comment: Delete # in begin of commands; Replace apt-get command by apt; Create Packages Installation section; Replace service command by systemctl
Deletions are marked like this. Additions are marked like this.
Line 8: Line 8:
== Basic Installation guide == == Packages Installation ==
Line 31: Line 31:
== Basic Installation guide ==
Line 34: Line 36:
# nano /etc/apache2/sites-available/wp.conf}}}

add this content:
nano /etc/apache2/sites-available/wp.conf

Add this content:
Line 56: Line 59:
# a2ensite wp}}}

=== Restart the webserver ===

# service apache2 reload}}}
a2ensite wp

=== Reload the webserver ===

systemctl reload apache2
Line 70: Line 75:
# nano /etc/wordpress/config-www.debianwordpress.dev.php}}} nano /etc/wordpress/config-www.debianwordpress.dev.php
Line 88: Line 94:
# nano ~/wp.sql}}} nano ~/wp.sql
Line 105: Line 112:
# cat ~/wp.sql | mysql --defaults-extra-file=/etc/mysql/debian.cnf}}} cat ~/wp.sql | mysql --defaults-extra-file=/etc/mysql/debian.cnf
Line 119: Line 127:
# apt-get update && apt-get upgrade}}} apt update && apt upgrade
Line 132: Line 141:

=== Install required packages ===

# apt-get install wordpress apache2 mysql-server
Line 171: Line 173:
# a2enmod rewrite && a2enmod vhost_alias && service apache2 restart a2enmod rewrite
a2enmod vhost_alias
restart apache2
Line 206: Line 210:
# a2ensite myblog.com
# service apache2 reload
a2ensite myblog.com
systemctl reload apache2

Translation(s): none

WordPress is a free and open source (GNU GPLv2 or later) blogging tool and a content management system (CMS) based on PHP and MySQL. Features include a plug-in architecture and a template system.

Packages Installation

Installation - Debian 8 (Jessie)

apt update
apt install wordpress curl apache2 mysql-server

Set the mysql admin root user password when prompted

Installation - Debian 9 (Stretch) and 10 (Buster)

apt update
apt install wordpress curl apache2 mariadb-server

Secure your MySQL installation with this command


Basic Installation guide

Create a site

nano /etc/apache2/sites-available/wp.conf

Add this content:

        Alias /wp/wp-content /var/lib/wordpress/wp-content
        Alias /wp /usr/share/wordpress
        <Directory /usr/share/wordpress>
            Options FollowSymLinks
            AllowOverride Limit Options FileInfo
            DirectoryIndex index.php
            Require all granted
        <Directory /var/lib/wordpress/wp-content>
            Options FollowSymLinks
            Require all granted

Enable the site

a2ensite wp

Reload the webserver

systemctl reload apache2

Create /etc/wordpress/config-$DM.php. $DM is the domain name e.g. if the fully qualified domain name is www.debianwordpress.dev, create one of the following files:

  • /etc/wordpress/config-www.debianwordpress.dev.php (this is the default, use it if you are unsure)

  • /etc/wordpress/config-debianwordpress.dev.php (this is used for multisite with subdomains)

  • /etc/wordpress/config-default.php (this is used as a fallback if no other file matches your domain name)

WordPress searches in the above order and uses the first configuration file it can find. The domain name is taken from the HTTP-Request of your browser. That way you may be able to define different configuration files for different domains you are hosting.

nano /etc/wordpress/config-www.debianwordpress.dev.php

Add this content:-

   1 <?php
   2 define('DB_NAME', 'wordpress');
   3 define('DB_USER', 'wordpress');
   4 define('DB_PASSWORD', 'password');
   5 define('DB_HOST', 'localhost');
   6 define('WP_CONTENT_DIR', '/var/lib/wordpress/wp-content');
   7 ?>

<!> replace password with a suitably secure password

Create a file to hold the database creation instructions

nano ~/wp.sql

Add this content:-

   1 CREATE DATABASE wordpress;
   3 ON wordpress.*
   4 TO wordpress@localhost
   5 IDENTIFIED BY 'password';

<!> replace password with your "suitably secure password"

Create the database:-

cat ~/wp.sql | mysql --defaults-extra-file=/etc/mysql/debian.cnf

Navigate to the wordpress directory in browser e.g.:- http://debianwordpress.dev/wp which redirects to http://debianwordpress.dev/wp/wp-admin/install.php where you'll see the "classic" wordpress 5 minute install page (actually a 5 second install thanks to the Debian packaging)

<!> replace debianwordpress.dev with your domain name (or localhost if running on the same box as your browser).

At time of writing this provides WordPress v3.6.1. WordPress v3.7.1 is available in Testing and Unstable. I haven't tested it but it should install fine on Wheezy.

Upgrading the installed WordPress version

For keep your WordPress up to date and receive security fixes use Debian package manager:

apt update && apt upgrade

If you would like to use a more recent version of WordPress, consider using Backports or Debian testing.

An alternate installation method

I believe this method conforms more with how the maintainer recommends it should be done. Various sources are drawn upon using this method, and it is also affected by a few bugs as at this writing. It is basically centric around a "kind of" multisite install, but I recommend this method even for a single blog, otherwise when you decide down the track to have more than one and share the packages' codebase, you'll have a fair bit of work on your hands.

The key useful script here is /usr/share/doc/wordpress/examples/setup-mysql. This gem does a few things:

  • Creates a WordPress config file under /etc/wordpress

  • Creates the WordPress database and user

  • Sets up a wp-content structure under /srv/www/wp-content/DOMAIN (this is key for a non-WordPress multisite install, which is covered more below)

Run the helper script

Now run /usr/share/doc/wordpress/examples/setup-mysql, passing an argument of your site name; eg. myblog.com. You will most probably need other arguments too -- just try an initial -h to get help.

At this point, as per above, you should have a database created for you, and the /etc/wordpress/config-myblog.com.php config file. Peruse that and sanity check it.

Create the Apache site

Quoting /usr/share/doc/wordpress/examples/apache.conf:

There are several ways to setup Wordpress & Apache in Debian. However the maintainer's recommended way with the helper script setup-mysql uses:

## Virtual host VirtualDocumentRoot

        NameVirtualHost *:80

        <VirtualHost *:80>
        UseCanonicalName Off
        VirtualDocumentRoot /usr/share/wordpress
        Options All

        # wp-content in /srv/www/wp-content/$0
        RewriteEngine On
        RewriteRule ^/wp-content/(.*)$ /srv/www/wp-content/%{HTTP_HOST}/$1

For this configuration to work you'll also need to have mod_rewrite and mod_vhost_alias loaded and working in Apache. To enable these modules run

a2enmod rewrite
a2enmod vhost_alias
systemctl restart apache2

Place this config into something like /etc/apache2/sites-available/myblog.com and modify according to your needs (IP-based virtual host, name-based, logging, etc.)

If you're using any Wordpress functionality that requires URL rewriting (such as permalinks), then you will also need something like this in your Apache config:

    RewriteRule ^index\.php$ - [L]
    RewriteCond /usr/share/wordpress%{REQUEST_URI} !-f
    RewriteCond /usr/share/wordpress%{REQUEST_URI} !-d
    RewriteRule . /usr/share/wordpress/index.php [L]
    # Also needed if using PHP-FPM / Fast-CGI
    RewriteCond %{REQUEST_URI} !^/php5-fcgi/*

The above rewrite conditions rely on Apache finding the required files in /usr/share/wordpress for non-permalinks (such as wp-admin). This may require the following line to ensure it finds the index file when requesting /wp-admin/

    DirectoryIndex index.php

Final reading before actual configuration

Now would be a great time to read /usr/share/doc/wordpress/README.Debian if you haven't already. All the rest of the pieces should fall into place once you do.

Amongst other things, it explains the great way that the Debian WordPress package utilises the WordPress wp-config.php framework, and more importantly, how to handle the infamous "themes" and "plugins" directories in a WordPress install. The key point is that by symlinking under /var/lib/wordpress, users better abide by the FilesystemHierarchyStandard, and can use the in-app upgrade mechanisms of WordPress to upgrade plugins and themes, without clobbering the package, and risking server security.

It also discusses the two choices regarding multisite installs, of which this here describes the non-WordPress version.

Enable the Apache site

Now we enable the Apache site config made earlier using a2ensite, which basically just creates a symlink in /etc/apache2/sites-enabled from sites-available, then reload Apache:

a2ensite myblog.com
systemctl reload apache2

Configure WordPress

Now, browse to your new domain, and follow the normal WP configuration process, and you should be done.


Sadly at this point, there are some issues with symlinking, and messing around generally with WP_CONTENT_DIR.

The main bug is being tracked at http://core.trac.wordpress.org/ticket/16953. At this point, basically a fair few things break, especially if plugin or theme authors don't do things right when determining correct filesystem and URI paths to use. There seems no easy fix right now, other than not using symlinks or non-standard (but configurable!) paths.

See also

  • Sample configurations can be found in /usr/share/doc/wordpress/examples/

  • Debian specific instructions are /usr/share/doc/wordpress/README.Debian

  • LAMP