Files
racalmas/install/INSTALL.md
Milan 5dbe801a11 install/create.sql: full schema dump
remove delta migrate.sql
2021-04-11 13:10:42 +02:00

7.2 KiB

setup database

create database

mysqladmin -u root -p create calcms

start mysql with root permissions

mysql -u root -p

if using plesk, use

mysql -u admin mysql -p`cat /etc/psa/.psa.shadow`

We use different accounts for different purposes. Please change the passwords config after "INDENTIFIED BY" !

create admin account

CREATE USER 'calcms_admin'@'localhost' IDENTIFIED BY 'taes9Cho';
GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, INDEX, ALTER ON *.* TO 'calcms_admin'@'localhost' IDENTIFIED BY 'taes9Cho';
GRANT ALL PRIVILEGES ON `calcms_test`.* TO 'calcms_admin'@'localhost';

create editor account

CREATE USER 'calcms_write'@'localhost' IDENTIFIED BY 'Toothok8';
GRANT SELECT, INSERT, UPDATE, DELETE ON *.* TO 'calcms_write'@'localhost' IDENTIFIED BY 'Toothok8';
GRANT ALL PRIVILEGES ON `calcms_test`.* TO 'calcms_write'@'localhost';

create read-only account

CREATE USER 'calcms_read'@'localhost' IDENTIFIED BY 'Ro2chiya';
GRANT SELECT ON *.* TO 'calcms_read'@'localhost' IDENTIFIED BY 'Ro2chiya' ;
GRANT ALL PRIVILEGES ON `calcms_test`.* TO 'calcms_read'@'localhost';

import database content

mysql -u calcms_admin -p calcms < ./install/create.sql 

Apache HTTP Server Setup

install mod_perl

install apache2

apt install apache2

install apache2 rewrite

apt-get install libapache2-rewrite
a2enmod rewrite

install mod_perl2

apt install libapache2-mod-perl2 libapache2-reload-perl libapache2-request-perl
a2enmod perl

or via cpan

cpan install Apache2::Reload Apache2::Request
a2enmod perl

Apache Configuration

Virtual host configuration has to be placed at /etc/conf/apache2/.

# adopt your settings here
Define domain   your-domain.org
Define base_dir /home/calcms
Define perl_lib /home/radio/calcms

# Possible values include: debug, info, notice, warn, error, crit, alert, emerg.
LogLevel info

# limit redirection on injecting into your website
LimitInternalRecursion 4

# redirect HTTP to HTTPS, 
# only needed for HTTP configuration, do not use this at HTTPS configuration(!)
Redirect permanent /agenda/planung https://${domain}/agenda/planung

# inject calcms into your website
Alias /agenda        ${base_dir}/website/agenda
Alias /programm      ${base_dir}/website/programm
Alias /agenda_files  ${base_dir}/website/agenda_files

<Directory ${base_dir}/website/agenda>
    AllowOverride All
    Options -Indexes +FollowSymLinks +MultiViews +ExecCGI
    Require all granted
</Directory>

<Directory ${base_dir}/website/programm>
    AllowOverride All
    Options -Indexes +FollowSymLinks -MultiViews -ExecCGI
    Require all granted

    <IfModule mod_rewrite.c>
        RewriteBase /programm

        RewriteEngine on
        RewriteCond  %{REQUEST_FILENAME} -f
        RewriteRule (.*) $1 [L]
        RewriteCond  %{REQUEST_FILENAME} -d
        RewriteRule (.*) $1 [L]

        RewriteRule ^kalender/(\d{4}-\d{2}-\d{2})_(\d{4}-\d{2}-\d{2})\.html[\?]?(.*)$   /agenda/aggregate.cgi?from_date=$1&till_date=$2&$3 [L]
        RewriteRule ^kalender/(\d{4}-\d{2}-\d{2})\.html[\?]?(.*)$                       /agenda/aggregate.cgi?date=$1&$2 [L]
        RewriteRule ^sendungen/(\d{4}-\d{2}-\d{2})\.html[\?]?(.*)$                      /agenda/aggregate.cgi?date=$1&$2 [L]
        RewriteRule ^sendung/(\d+)\.html[\?]?(.*)$                                      /agenda/aggregate.cgi?event_id=$1&$2 [L]
        RewriteRule ^sendung/serie_plus/(\d+)\.html[\?]?(.*)$                           /agenda/aggregate.cgi?next_series=$1&$2 [L]
        RewriteRule ^sendung/serie_minus/(\d+)\.html[\?]?(.*)$                          /agenda/aggregate.cgi?previous_series=$1&$2 [L]
    </IfModule>
</Directory>

<Directory ${base_dir}/website/agenda_files>
    AllowOverride All
    Options -Indexes -FollowSymLinks -MultiViews -ExecCGI
    Require all granted
</Directory>

<IfModule mod_perl.c>
    PerlSetEnv LC_ALL   en_US.UTF-8
    PerlSetEnv LANGUAGE en_US.UTF-8

    PerlWarn On
    PerlModule ModPerl::RegistryPrefork

    PerlModule Apache2::Reload
    PerlInitHandler Apache2::Reload

    # set local tmp dir
    SetEnv TMPDIR ${base_dir}/tmp/

    # set library directory
    PerlSetEnv PERL5LIB ${base_dir}/lib/calcms/
    
    # preload libraries
    PerlPostConfigRequire ${base_dir}/lib/calcms/startup.pl
</IfModule>

install required perl modules

There are debian packages for most required perl modules. You can install CPAN packages, if you cannot use debian packages. For example there is no debian package for Image::Magick::Square, so you can install it by "cpan Image::Magick::Square".

apt-get install

install debian packages

mariadb-server 
build-essentials
libapreq2-3
libapache-dbi-perl
libauthen-passphrase-blowfish-perl
libcalendar-simple-perl
libcgi-pm-perl
libcgi-session-perl
libconfig-general-perl
libdatetime-perl
libdate-calc-perl
libdate-manip-perl
libdbi-perl
libdbd-mysql-perl
libencode-perl
libjson-perl
libhtml-formattext-withlinks-andtables-perl
libhtml-parser-perl
libhtml-template-perl
libhtml-template-compiled-perl
libmime-base64-urlsafe-perl
libtext-wikicreole-perl
liburi-escape-xs-perl
perlmagick

Install CPAN packages

cpan <perl-package>

Apache2::Reload
Apache2::Request
Apache2::Upload
Apache::DBI
Authen::Passphrase
Authen::Passphrase::BlowfishCrypt
Calendar::Simple
CGI
CGI::Carp
CGI::Cookie
CGI::Session
CGI::Simple
Config::General
Data::Dumper
Date::Calc
Date::Manip
DateTime
DBD::mysql
DBI
Digest::MD5
Encode::Locale
HTML::Entities
HTML::FormatText
HTML::Parse
HTML::Template::Compiled
HTML::Template::Compiled::Plugin::XMLEscape
Image::Magick
Image::Magick::Square
JSON
MIME::Lite
ModPerl::Util
Session::Token
Text::Diff::FormatedHtml
Text::Markdown
Text::WikiCreole
URI::Escape

Configuration

edit configuration at website/config/config.cgi

Now you can connect to web gui

https:///agenda/planung/ ccAdmin shug!3Lu

inject calcms into your website

calcms uses a copy of your web page as a template to have the same layout as your web site.
To update calcms content create a cronjob to run tools/update_page.sh

you may have to update the paths inside update_page.sh

how-to

update time zones

mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u root mysql -p

if using plesk, use

mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql -u admin mysql -p`cat /etc/psa/.psa.shadow`

create database schema deltas for updates

cat  calcmsOld.sql | mysql -u root calcmsOld
cat  calcmsNew.sql | mysql -u root calcmsNew
mysqldiff --force --changes-for=server2 --difftype=sql calcmsOld:calcmsNew > migrate.sql
# make sure lines with "modified_at" contain "ON UPDATE CURRENT_TIMESTAMP"
# for example: `modified_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
cat migrate | mysql -u root calcms