Fronte Tomcat med Apache og mod_proxy_ajp

Hvordan sette opp Apache som en frontend med mod_proxy_ajp mot en eller flere Tomcat instanser?

Dette er testet på Ubuntu 12.04.

Installer Apache og Tomcat:

sudo apt-get install apache2 tomcat7 tomcat7-examples

Jeg installerte også tomcat7-examples for å kunne sjekke at alt virker. Ville ikke installert det på en produsksjonsserver.

 

Konfigurer Tomcat

Åpne /etc/tomcat7/server.xml. Finn Connector og sørg for at den ikke er kommentert ut. Slett  <!– og -> før og etter:

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

Lagre og restart Tomcat7.
Når alt er testet og klart kan man gå tilbake hit og kommentere ut <Connector port=»8080″ …
Men når man setter opp kan det være en fordel å kunne sjekke at Tomcat7 kjører ved å åpne http://your_server:8080/

 

Konfigurer Apache

Sett opp mod_proxy_ajp:

a2enmod proxy_ajp

Restart Apache.

Åpnet /etc/apache2/sites-enabled/000-default og la til:

<VirtualHost *:80>
ServerAdmin webmaster@localhost

DocumentRoot /var/www
<Directory />
Options FollowSymLinks
AllowOverride None
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks MultiViews
AllowOverride All
Order allow,deny
allow from all
</Directory>

ProxyPreserveHost On
ProxyRequests Off
ProxyPass /examples ajp://localhost:8009/examples
ProxyPassReverse /examples ajp://localhost:8009/examples

ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Order allow,deny
Allow from all
</Directory>

ErrorLog ${APACHE_LOG_DIR}/error.log

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

CustomLog ${APACHE_LOG_DIR}/access.log combined

Alias /doc/ "/usr/share/doc/"
<Directory "/usr/share/doc/">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order deny,allow
Deny from all
Allow from 127.0.0.0/255.0.0.0 ::1/128
</Directory>

</VirtualHost>

Restart Apache og åpne http://your_server/examples

Tomcat7 Examples

I dette eksemplet så kjører Tomcat på samme server. Hvis du ønsker å kjøre Tomcat på en annen server, så må man endre localhost til IP eller dns på Tomcat server.

Her er ett eksempel med VirtuelHost og lastbalansering. Tomcat applikasjonen kjører på to server for lastbalansering. Det gir også mulighet til å ta ned en server om gangen for sikkerhetsoppdateringer.


<VirtualHost *:80>
ServerName www.eksempel.no
DocumentRoot /var/www/html/eksempel.no
ProxyRequests Off
ProxyPreserveHost On

<Proxy balancer://MyCluster>
BalancerMember ajp://192.168.4.151:8009
BalancerMember ajp://192.168.4.152:8009
</Proxy>

<Location />
ProxyPass balancer://MyCluster/ stickysession=JSESSIONID|jsessionid nofailover=On
</Location>

</VirtualHost>

Legg merke til at:
stickysession=JSESSIONID|jsessionid nofailover=On
sannsynligvis ikke vil passe for alle.

Enkelt oppsett av phpMyAdmin

Hvordan raskt laste ned og sette opp nyeste phpMyAdmin?

cd /var/www
wget http://www.sourceforge.net/projects/phpmyadmin/files/phpMyAdmin/4.0.2/phpMyAdmin-4.0.2-all-languages.tar.gz
tar xzvf phpMyAdmin-4.0.2-all-languages.tar.gz
mv phpMyAdmin-4.0.2-all-languages phpMyAdmin
cd phpMyAdmin
mv config.sample.inc.php config.inc.php

Sjekk versjonsnummer på phpMyAdmins websider og endre ovenfor.

Hvis databaserserveren ikke kjører på samme server, så må dette endres i config.inc.php:

/* Server parameters */
$cfg['Servers'][$i]['host'] = '192.168.1.200';

Hvis denne kjører på f.eks 192.168.1.201 så kan du åpne phpMyAdmin i nettleseren med denne adressen: http://192.168.1.201/phpMyAdmin

 

Flytte WordPress til ny server

Hvordan kan jeg flytte en WordPress installasjon til en ny server/domene?

Ta backup av wordpress-filene og databasen, og kopier over til ny server. Opprett databasen og gjenopprett innhold fra backup. Opprett en databasebruker som har tilgang til denne databasen.

Endre database detaljer i wp-config.php:

define('DB_NAME', 'database_navn');
define('DB_USER', 'database_brukernavn');
define('DB_PASSWORD', 'hemmelig_passord');
define('DB_HOST', 'dbhost.example.com');

Åpne databasen enten med phpMyAdmin eller annen måte. Åpne tabellen wp-options og endre siteurl til å stemme med din nye server. Bruk enten domenenavn eller IP.
Endre også home i samme tabell.

Å bruker IP adresse kan være nødvendig hvis dette er en utviklingsserver eller testserver og det ikke er satt opp dns for denne.

Enkel backup

Hvordan sette opp automatisk backup av en database og webfiler på en Linuxserver?

Denne løsningen benytter passordløs SSH-innlogging. Se her for veiledning.

Den tar backup av filene i katalogen ~/www og MySQL databasen og lagrer filene lokalt. Backupfiler eldre enn X dager blir slettet automatisk for at ikke lokal disk skal gå full.


#!/bin/sh
# Backup script av Trond, 28.05.2013
# Backup av MySQL database og ~/www/-katalog på Linux server. 
# Krever mysqldump, ssh og scp.
# Backup lagres lokalt under $DIR og 
# backup eldre enn $DAYS_TO_KEEP_BACKUP slettes automatisk.
# Avhenger at passordløs ssh innlogging er satt opp.
# Startes med cronjobb, f.eks hver natt kl 01:00
# * 1 * * * /path/to/backup.sh 

# Endre variabler her slik at de passer ditt miljø:

SSH_USER=trond
SSH_SERVER=192.168.1.201
DB_HOST=192.168.1.201
DB_USER=trond
DB_PASSWD=passord
DB_NAME=wordpressdb
DIR=/opt/backup/sissener.be
DAYS_TO_KEEP_BACKUP=7

# Ikke endre noe under her
NOW=$(date +"%Y-%m-%d")

# oprett dir hvis ikke finnes
if [ ! -d "$DIR" ]; then
  mkdir -p $DIR
fi
cd $DIR

# Datbasebackup lagres lokalt direkte.
/usr/bin/ssh ${SSH_USER}@${SSH_SERVER} /usr/bin/mysqldump -h $DB_HOST -u $DB_USER -p${DB_PASSWD} $DB_NAME > ${DB_NAME}-${NOW}.sql
/usr/bin/ssh ${SSH_USER}@${SSH_SERVER} tar czvf www.tar.gz www
/usr/bin/scp ${SSH_USER}@${SSH_SERVER}:www.tar.gz www-${NOW}.tar.gz

# Det er ikke nødvendig å slette backup på serveren.
# Databasedump lagres ikke på server.
# www.tar.gz skrives over av ny backup.

# Slett lokal backup over DAYS_TO_KEEP_BACKUP dager gammel
rm -rf `find ./ -mtime +${DAYS_TO_KEEP_BACKUP}`
exit

Gjør skriptet kjørbart:

chmod +x backup.sh

Sett opp automatisk kjøring med cron:

crontab -e

Skriptet kjører kl 05:00 hver natt:

0 5 * * * /path/to/backup.sh

En annen måte å sette opp på:

@midnight /path/to/backup.sh

Skriptet kjører da ved midnatt hver dag.

NTP Server

Hvordan sette opp Network Time Server på en Raspberry Pi med Raspbian “wheezy”?

sudo apt-get install ntp ntpdate ntp-server

Rediger /etc/ntp.conf

# /etc/ntp.conf, configuration for ntpd; see ntp.conf(5) for help

driftfile /var/lib/ntp/ntp.drift


# Enable this if you want statistics to be logged.
#statsdir /var/log/ntpstats/

statistics loopstats peerstats clockstats
filegen loopstats file loopstats type day enable
filegen peerstats file peerstats type day enable
filegen clockstats file clockstats type day enable


# You do need to talk to an NTP server or two (or three).
#server ntp.your-provider.example

# pool.ntp.org maps to about 1000 low-stratum NTP servers.  Your server will
# pick a different set every time it starts up.  Please consider joining the
# pool: 
server 0.debian.pool.ntp.org iburst
server 1.debian.pool.ntp.org iburst
server 2.debian.pool.ntp.org iburst
server 3.debian.pool.ntp.org iburst


# Access control configuration; see /usr/share/doc/ntp-doc/html/accopt.html for
# details.  The web page 
# might also be helpful.
#
# Note that "restrict" applies to both servers and clients, so a configuration
# that might be intended to block requests from certain clients could also end
# up blocking replies from your own upstream servers.

# By default, exchange time with everybody, but don't allow configuration.
restrict -4 default kod notrap nomodify nopeer noquery
restrict -6 default kod notrap nomodify nopeer noquery
restrict 192.168.1.0 mask 255.255.255.0 notrap nomodify

# Local users may interrogate the ntp server more closely.
restrict 127.0.0.1
restrict ::1

# Clients from this (example!) subnet have unlimited access, but only if
# cryptographically authenticated.
#restrict 192.168.123.0 mask 255.255.255.0 notrust

# If you want to provide time to your local subnet, change the next line.
# (Again, the address is an example only.)
#broadcast 192.168.123.255

# If you want to listen to time broadcasts on your local subnet, de-comment the
# next lines.  Please do this only if you trust everybody on the network!
#disable auth
#broadcastclient

Jeg la til linjen:

restrict 192.168.1.0 mask 255.255.255.0 notrap nomodify

slik at andre klienter i mitt lokalnett kan bruke denne som tidsserver. Mitt lokalnettverk er 192.168.1.0/24. Du må sannsynligvis endre dette.

Restarte NTP:

sudo service ntp restart

Åpne i brannmuren:

sudo ufw allow ntp

Sjekk at det virker:

sudo ntpq -p

     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
-ntp1.interpost. 139.112.153.51   2 u   57  128  377    5.646    1.964   0.255
+metis.fnutt.net 192.36.143.150   2 u   78  128  377   16.359    0.052   0.318
*tyldum.com      192.38.7.240     2 u   59  128  377    3.001   -0.126   0.189
+ntp.komsys.org  192.36.143.150   2 u   59  128  377    8.525    0.177   0.065

Så kan man synke fra en annen klient i nettverket:

sudo ntpdate ntp-server

Endre ntp-server til navn eller ip på NTP-serveren.

sudo ntpdate -v rpi01.sis.dom
24 May 18:52:09 ntpdate[5126]: ntpdate 4.2.6p3@1.2290-o Tue Jun  5 20:12:12 UTC 2012 (1)
24 May 18:52:17 ntpdate[5126]: adjust time server 192.168.1.201 offset -0.016519 sec