civicrm.libre.is

CiviCRM deployment.

Under consideration:

CiviCRM

CiviCRM is a “constituent relationship management software” for especially designed for non-profits.

Drupal

CiviCRM works with various backends such as Drupal, Joomla, and Wordpress.

Drupal is the most powerful.

Drupal needs to be installed before CiviCRM.

Install Debian stable (bookworm/12) with Apache and set up Certbot.

Wordpress

The test install will have a CiviCRM with Wordpress install.

Download latest release:

sudo apt install unzip python3-certbot-apache php mariadb-server php-mysql

Set up the database.

sudo mariadb-admin password
mariadb -uroot -p

Then in the database:

CREATE USER 'wordpress'@'localhost' IDENTIFIED BY 'password';
CREATE DATABASE IF NOT EXISTS wordpress CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
GRANT ALL PRIVILEGES on wordpress.* to 'wordpress'@'localhost';
FLUSH PRIVILEGES;
EXIT

Import timezone data into the database:

mariadb-tzinfo-to-sql /usr/share/zoneinfo | mariadb -u root -p mysql

Perhaps change the ownership to your user (in this case jebba) to install wordpress files. Then unzip wordpress and move to the best location:

sudo chown -R jebba:jebba /var/www
cd /var/www/
unzip ~/devel/wordpress/latest.zip
sudo chown -R www-data /var/www/wordpress

Set up apache, perhaps thusly:

rm /etc/apache2/sites-enabled/000-default*

Edit /etc/apache2/sites-available/wordpress.conf

<VirtualHost 70.39.82.212:80>
        ServerName civicrm.libre.is
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/wordpress
        ErrorLog ${APACHE_LOG_DIR}/error-civicrm-libre-is.log
        CustomLog ${APACHE_LOG_DIR}/access-civicrm-libre-is.log combined
        RewriteEngine on
        ReWriteCond %{HTTPS} off
        RewriteRule ^ https://civicrm.libre.is%{REQUEST_URI} [END,NE,R=permanent]
        ReWriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
        RewriteCond %{SERVER_NAME} =civicrm.libre.is
        RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

<VirtualHost 70.39.82.212:443>
        ServerName civicrm.libre.is
        ServerAdmin webmaster@localhost
        DocumentRoot /var/www/html/civicrm-libre-is
        ErrorLog ${APACHE_LOG_DIR}/error-civicrm-libre-is.log
        CustomLog ${APACHE_LOG_DIR}/access-civicrm-libre-is.log combined
        RewriteEngine on
        ReWriteCond %{HTTPS} off [OR]
        ReWriteCond %{HTTP_HOST} ^www\.(.*)$ [NC]
        ReWriteRule ^(.*)$ https://%1$1 [L,R=301]
        ErrorDocument 404 /en/404.html
        Include /etc/letsencrypt/options-ssl-apache.conf
        ServerAlias doc.libre.is
        SSLCertificateFile /etc/letsencrypt/live/civicrm.libre.is/fullchain.pem
        SSLCertificateKeyFile /etc/letsencrypt/live/civicrm.libre.is/privkey.pem
</VirtualHost>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
sudo ln -s /etc/apache2/sites-available/wordpress.conf \
  /etc/apache2/sites-enabled/
sudo systemctl restart apache2

CiviCRM Install

Once Wordpress is running, install CiviCRM plugins. Download the Wordpress CiviCRM plugin from here:

Also install more PHP deps.

sudo chown -R jebba:jebba /var/www/wordpress/wp-content/plugins/
cd /var/www/wordpress/wp-content/plugins/
unzip ~/devel/civicrm/wordpress/civicrm-5.77.0-wordpress.zip
sudo apt install php-bcmath php-curl php-xml php-zip php-intl \
  php-soap php-mbstring php-common php-imagick php-gd

Edit /etc/php/8.2/apache2/php.ini with these values:

memory_limit = 256M
max_execution_time = 240
max_input_time = 120
post_max_size = 50M
upload_max_filesize = 50M

Then restart apache:

sudo systemctl restart apache2

Activate the plugin, logging in as Wordpress admin user:

Database Backup

HOWTO backup the database. Do this regularly and before major operations, such as importing contact lists.

Scriptlet to back up all databases on system:

#!/bin/bash

BACKUPDIR=/var/lib/dbbackup
NOW=`date +%Y%m%d%H%M`

sudo mkdir -p $BACKUPDIR
sudo chown root:root $BACKUPDIR
sudo chmod og-rwx $BACKUPDIR

sudo touch $BACKUPDIR/db-dump-$NOW.sql
sudo chmod 400 $BACKUPDIR/db-dump-$NOW.sql

# Backup full DB
sudo nice mariadb-dump -p --all-databases -uroot --result-file=$BACKUPDIR/db-dump-$NOW.sql

# Compress it
sudo nice xz -9 -T4 -z $BACKUPDIR/db-dump-$NOW.sql

Sciptlet to backup wordpress database, which includes CiviCRM:

#!/bin/bash

BACKUPDIR=/var/lib/dbbackup
NOW=`date +%Y%m%d%H%M`

sudo mkdir -p $BACKUPDIR
sudo chown root:root $BACKUPDIR
sudo chmod og-rwx $BACKUPDIR

sudo touch $BACKUPDIR/db-wordpress-$NOW.sql
sudo chmod 400 $BACKUPDIR/db-wordpress-$NOW.sql

# Backup full DB
sudo nice mariadb-dump -p -uroot --result-file=$BACKUPDIR/db-wordpress-$NOW.sql wordpress

# Compress it
sudo nice xz -9 -T4 -z $BACKUPDIR/db-wordpress-$NOW.sql

To decompress the file, run a command like this, with “-k”, if you want to keep the compressed version:

xz -d -k db-wordpress-202409190643.sql.xz

CiviCRM Import

Importing records, such as from Hubspot.

Contacts Import

HOWTO import the Hubspot contact export into CiviCRM.

Before doing an export, definitely make a backup of the database, in case it doesn’t work. Best to do on a test database first, definitely not in production. :)

Perhaps:

  • increase the memory_limit and max_execution_time values in php.ini.