Bzgl. Forum-Performance: Zum Einen ist es der Umfang - und zum anderen ist mir in den letzten Tagen/Wochen auch aufgefallen, dass es in Firefox/Edge um ein gewaltiges schlimmer ist als im Chrome. U.U. ist irgendein schlecht implementierter shim/polyfill in der Jive Plattform drin, der auf diesen Browsern quer schlägt.
Tomcat 8 geht grundsätzlich auch mit Alfresco - ich habe zu Experimentierzwecken auch schon einen Tomcat 9 Meilenstein mit Java 9 und Alfresco 5.2 aufgebaut, was in Bezug auf die Kernfunktionen auch läuft, sofern man die Java-Modularität etwas einschränkt. Offiziell unterstützt ist aber nur der Tomcat 7.
Es muss aber aufgepasst werden, welche Tomcat 7 und Tomcat 8 Version genutzt wird. Aufgrund eines ungünstigen Fixes und eines Backportings sind einige Tomcat 7 Versionen sowie frühe Tomcat 8 Versionen problematisch für die Share-Anwendung. Aktuelle Versionen sollten jedoch gehen.
Ich habe bisher auch noch keine Messungen mit APR vs. ohne gemacht, aber funktional ist es definitiv optional.
Bzgl. dem Ansatz mit einem selbst gebauten Tomcat auf Ubuntu: Ich nutze in der Regel das Standardpaket für Tomcat und erstelle über Linking und einer kleinen Anpassung des Startskripts einfach zwei Laufzeitinstanzen mit getrennter Config + Webapp. Da beide sich aber die Libraries im Paket-Standardverzeichnis teilen und dort auch die APR Libraries liegen, gibt es damit dann kein Problem. (mein noch in-progress befindliches Script als Referenz)
In den letzten Tagen / Wochen habe ich mich kunden-/projektbedingt auch mit dem Ansatz von vorgefertigten Docker-Images beschäftigt um einfach wiederverwendbare, baugleiche Systeme aufbauen zu können und im Bedarfsfall auch einfach upgraden / anpassen zu können (man muss nur das Image als Vorlage ändern).
Okay, ich blicks immer noch nicht.
Die letzte Tage habe ich damit zugebracht, mir ein durchaus tiefergehendes Verständnis um Tomcat, Catalina und die Instanzierung zu verschaffen.
Soweit so gut.
Für Ihr Tipps und Anregungen war ich bei diesen Arbeiten sehr dankbar und habe mich hauptsächlich darum gekümmert, die Slides der YouTube-Präsentation mit dem Skript von Herrn Faust zu vereinen.
Mit den unten aufgeführten Schritten hatte ich dann nun endlich eine fehlerfrei und fast gänzlich warnungsfreie Ausgabe in der catalina.out.
Nun kurz zu meinem Verständnis, wie die Instanzierung funktioniert, nicht das es doch bereits hier hapert:
Tomcat sehe ich nun eher als das Rahmenpaket, die eigentlich arbeitende Einheit ist offensichtlich viel eher Catalina sowie Java.
Der Start von Tomcat führt lediglich eine Reihe an Scripten aus, die Umgebungsvariablen setzen und letztlich diese an die catalina.s unter /usr/share/tomcat8/bin/ übergeben.
Dabe sind die scheinbar relevantesten die beiden $CATALINA_HOME und $CATALINA_BASE, wobei auch beim Instanzieren, $CATALINA_HOME vom default (/usr/share/tomcat8) nicht abweichen muss.
$CATALINA_BASE hingegen bezeichnet das Wurzelverzeichnis der neuen Instanz, hier wird für den Start von Catalina unter anderem nach der Datei senenv.sh gesucht um weitere Umgebungsvariablen für das zu startende Java gesetzt werden können.
Die CATALINA - Variablen habe ich dem Beispiel von Herrn Faust nach über ein Systemd Unit-File gesetzt (vielen Dank dafür).
Um die Hauptinstanz von Tomcat nicht zu stören (auch wenn ich diese deaktiviert [disabled] habe um die "Nebeninstanz" nicht zu stören [Ports, etc]), wird unter dem mit $CATALINA_BASE referenzierten Verzeichnis nun das Verzeichnis /var/lib/tomcat8 (default $CATALINA_BASE) nachgebaut (in meinem Fall ohne jegliche Links).
Im Wurzelverzeichnisbaum der neuen INstanz kann ich nun in der catalina.properties festlegen von wo weitere klassen/jars nachgeladen werden, abhängig vom der angewählten direktive nur für die app, den server und die app oder aber alle weiteren auf diesem Server laufenden Instanzen.
Siehe common.loader, server.loader und shared.loader
Damit alfresco später läuft, ist es wichtig die Datei alfresco-global.properties unter einem dieser Pfade liegen zu haben.
Soweit so gut, die war files müssen natürlich auch im weebapps Verzeichnis der neuen instanz liegen, sodass alles sauber anlaufen kann.
Nun nochmal die Schritte, die ich in den letzten Tage zum Starten von "alfresco-repo" durchlaufen habe:
(Umgebung und vorangegangene Einstellungen sind ähnlich/gleich der ursprünglichen Frage)
Die Instanz soll im Verzeichnis /opt/alfresco laufen
cd /opt
unzip /tmp/alfresco-community-distribution-201704.zip
mv alfresco-community-distribution-201704 comAlfresco
mkdir -p /opt/alfresco/alf_data
mkdir /opt/alfresco/bin
mkdir /opt/alfresco/run
mkdir -p /opt/alfresco/modules/platform
mkdir -p /opt/alfresco/tomcat/shared/lib
mkdir /opt/alfresco/tomcat/bin
mkdir /opt/alfresco/tomcat/logs
cp -r /opt/comAlfresco/amps /opt/alfresco
cp /opt/comAlfresco/bin/alfresco-mmt.jar /opt/alfresco/bin
cp /opt/comAlfresco/bin/apply_amps.sh /opt/alfresco/bin
cp /opt/comAlfresco/bin/clean_tomcat.sh /opt/alfresco/bin
cp -r /opt/comAlfresco/web-server/* /opt/alfresco/tomcat/
cp -r /etc/tomcat8/* /opt/alfresco/tomcat/conf
rm -rf /opt/alfresco/tomcat/webapps/share.war
rm -rf /opt/alfresco/tomcat/webapps/solr4.war
rm -rf /opt/alfresco/tomcat/conf/Catalina/localhost/share.xml
rm -rf /opt/alfresco/tomcat/shared/classes/alfresco/web-extension
#Um die Warnungen in der catalina.out zu verhindern
mkdir -p /usr/share/tomcat8/common/classes
mkdir -p /usr/share/tomcat8/server/classes
mkdir -p /usr/share/tomcat8/shared/classes
java -jar /opt/alfresco/bin/alfresco-mmt.jar install /opt/alfresco/amps/ /opt/alfresco/tomcat/webapps/alfresco.war -directory -nobackup
chown -R alfresco:alfresco /opt/alfresco
Beim Starten der Anwendung über das unit-file erhalte ich dann als ersten Fehler ein Problem von log4.
Hier geht es um das alfresco.log, kurzer grep ergibt, die zuständige Cofnfig liegt im entpwacken alfresco.war verzeichnis
(/opt/alfresco/tomcat/webapps/alfresco/WEB-INF/classes/log4j.properties).
Dort habe ich eine absoluten Pfad eingetragen und die Meldung bleibt aus, das File wird erstellt.
(log4j.appender.File.File=/opt/alfresco/tomcat/logs/alfresco.log)
Nun hatte ich dort zahlreiche weitere Fehler, wobei die Anzahl der Zeilen ein wenig unschlüssig ist, da ja je Problem mehrere Zeilen ausgegeben werden.
Von Oben nach unten habe ich den nächsten Fehler auf die Datei alfresco.xml geschoben und diese gelöscht (enthält ohnehin nicht besonders viel Information).
Irgendwann habe ich mich gefragt, ob es keinen besseren weg zur Umgehung des log4 - Problems gibt.
Leider ohne zwischenzeitlich die Auswirkung des Löschens der alfresco.xml zu prüfen.
Ich habe also die alfresco.war unzippen, die Anpassung vorgenommen und über
/opt/jdk1.8.0_131/bin/jar -cvf /opt/alfresco/tomcat/webapps/alfresco.war /opt/alfresco/tomcat/webapps/alfresco/*
Nun wieder eine war datei erstellt.
Hier ist zu beachten, das ich nach dem unzippen die ursprüngliche war Datei gelöscht hatte sowie nachträglich den Ordner alfresco gelöscht habe.
Ein Neustart der Anwednung zeigte nun einen absolut fehlerfreien Start.
So habe ich mich dem SOLR gewidmet.
Hier stellt sich die Bereitstellugn recht leicht dar, sodass dies schnell geschah.
Zur Prüfung, ob der alfresco-repo auch die SOLR-Schnittstelle nutzt, habe ich mir die Logfiles angesehen.
catalina.out hatte keinerlei Informationen diesbezüglich.
So viel mir nun endlich auf, das es zwar bezüglich der alfresco.log keinerleich Meldung mehr gab, diese jedoch nicht angelegt wurde -.-.
Kurzer Blick in den alfresco Ordner unter webapps, dort viel auf das nun nichtmehr alle Datei unter alfresco lagen, sondern dort ein weiter Ordner "alfresco" lag mit einem durch meinen jar erstelleten META-INF Ordner.
Letzteren gelöscht, alles von webapps/alfresco/alfresco nach webapps/alfresco, dann nur noch webapps/alfresco/alfresco löschen.
Zack wieder jede menge Fehler (Anhang rerun1).
Warum die App auf die Idee kommt, einen mysql-connector zu laden verstehe ich nicht.
Nicht nur habe ich soweit mir bewusst alles so eingestellt, dass eigentlich postgres verwendet werden sollte, noch kann ich einen einzelnen (nicht kommentierten) verweis auf "org.gjt.mm.mysql.Driver" finden.
Schiebe ich die alfresco.xml wieder an Ort und Stelle, verschwinden die Fehler bezüglich der falschen DB-Schnittstelle.
Nun wird über die zurückgebrachte Datei gemeckert (rerun2).
Vielleicht kann mir hier nochmal jemand unter die Arme greifen,
Vielen Dank.
So ich glaube ich habs.
Zumindest der Großteil sollte geschafft sein.
Folgende Schritte sind auszuführen, etwaige Dateien hänge ich an.
Voraussetzung sind die beiden Packete alfresco-community-distribution-* und der search-service unter temp.
Namen müssen ggf. angepasst werden, Pfade sowie Passwörter ebenfalls.
#>2017-07-10
#>prerequisits
apt-get install -y postgresql-client postgresql-9.5 unzip ghostscript imagemagick apache2 apache2-utils gcc make openjdk-8-jdk-headless openjdk-8-jre-headless libgs-dev libjpeg62 libpng3
apt-get install -y libice6 libsm6 libxt6 libxrender1 libfontconfig1 libcups2 tomcat8 ttf-mscorefonts-installer fonts-noto libglu1-mesa libxinerama1
adduser --system --disabled-login --disabled-password --group alfresco
#>make sure to stop tomcat8 for the following steps
systemctl stop tomcat8
#>disable default service as we will run our instances
systemctl disable tomcat8
#>PSQL stuff
#>change or add the following line to psotgresql pg_hba.conf
#host all all 127.0.0.1/32 trust
su postgres
psql
CREATE DATABASE alfresco
WITH OWNER postgres
ENCODING = 'UTF8'
TABLESPACE = pg_default
TEMPLATE template0;
CREATE ROLE alfresco LOGIN
PASSWORD 'alfresco'
NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE;
GRANT ALL ON DATABASE alfresco TO public;
GRANT ALL ON DATABASE alfresco TO postgres;
GRANT ALL ON DATABASE alfresco TO alfresco;
\q
exit
#restart to make changes live
systemctl restart postgresql
##################################################################################################################
#>Prepare the instances for repo and share, libreoffice stuff and solr6
#>Instance 1 (repo)
cd /opt
unzip /tmp/alfresco-community-distribution-201704.zip
mv alfresco-community-distribution-201704 comAlfresco
mkdir -p /opt/alfresco/alf_data
mkdir /opt/alfresco/bin
mkdir /opt/alfresco/run
mkdir -p /opt/alfresco/modules/platform
mkdir -p /opt/alfresco/tomcat/shared/lib
mkdir /opt/alfresco/tomcat/bin
mkdir /opt/alfresco/tomcat/logs
cp -r /opt/comAlfresco/amps /opt/alfresco
cp /opt/comAlfresco/bin/alfresco-mmt.jar /opt/alfresco/bin
cp /opt/comAlfresco/bin/apply_amps.sh /opt/alfresco/bin
cp /opt/comAlfresco/bin/clean_tomcat.sh /opt/alfresco/bin
cp -r /opt/comAlfresco/alf_data/keystore/ /opt/alfresco/alf_data/
cp -r /opt/comAlfresco/web-server/* /opt/alfresco/tomcat/
#[...]/web-server/lib contains postgresl jdbc, this should be working when copieing to /opt/alfresco/tomcat/
#which is CATALINA_BASE for this instance
#however tomcat won´t find the jar file
#thus moving it to /usr/share/tomcat8/lib which ist CATALINA_HOME
#works fine
cp -r /etc/tomcat8/* /opt/alfresco/tomcat/conf
rm -rf /opt/alfresco/tomcat/webapps/share.war
rm -rf /opt/alfresco/tomcat/webapps/solr4.war
rm -rf /opt/alfresco/tomcat/conf/Catalina/localhost/share.xml
rm -rf /opt/alfresco/tomcat/shared/classes/alfresco/web-extension
mkdir -p /usr/share/tomcat8/common/classes
mkdir -p /usr/share/tomcat8/server/classes
mkdir -p /usr/share/tomcat8/shared/classes
vi /opt/alfresco/tomcat/bin/setenv.sh
#add the following lines
JAVA_OPTS="$JAVA_OPTS -Dalfresco.home=/opt/alfresco"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote"
JAVA_OPTS="$JAVA_OPTS -XX:ReservedCodeCacheSize=128m"
JAVA_OPTS="$JAVAOPTS -Xms1024M -Xmx2048M"
export JAVA_OPTS
chmod u+x /opt/alfresco/tomcat/bin/setenv.sh
cp /opt/comAlfresco/web-server/lib/postgresql-9.4.1211.jre7.jar /var/lib/tomcat8/lib/
#>/var/lib/tomcat8/lib is $CATALINA_HOME/lib making the PSQL-JDBC-Connector available to all instances
vi /opt/alfresco/tomcat/conf/catalina.properties
#common.loader="${catalina.home}/lib","${catalina.home}/lib/*.jar","${catalina.home}/common/classes","${catalina.home}/common/*.jar"
#server.loader=${catalina.home}/server/classes,${catalina.home}/server/*.jar
#shared.loader=${catalina.base}/shared/classes,${catalina.base}/shared/*.jar,${catalina.base}/lib
cp /opt/alfresco/tomcat/shared/classes/alfresco-global.properties.sample /opt/alfresco/tomcat/shared/classes/alfresco-global.properties
vi /opt/alfresco/tomcat/shared/classes/alfresco-global.properties
java -jar /opt/alfresco/bin/alfresco-mmt.jar install /opt/alfresco/amps/ /opt/alfresco/tomcat/webapps/alfresco.war -directory -nobackup
vi /opt/alfresco/tomcat/bin/alfresco-repo.service
#>create service file as in doku
chown -R alfresco:alfresco /opt/alfresco
cp /opt/alfresco/tomcat/bin/alfresco-repo.service /etc/systemd/system
systemctl enable alfresco-repo.service
systemctl daemon-reload
#run and check logs for errors
#>fix log error after first start
vi /opt/alfresco/tomcat/webapps/alfresco/WEB-INF/classes/log4j.properties
#>also see alfresco-global.properties as attached
#>check server.xml as attached
#>with client.auth=want we might need to create /home/alfresco/.keystore
############################################################################################################################################################################
#>Instance 2 (share)
mkdir -p /opt/alfresco-share/tomcat/conf
mkdir /opt/alfresco-share/tomcat/webapps
mkdir /opt/alfresco-share/tomcat/logs
mkdir /opt/alfresco-share/tomcat/work
mkdir /opt/alfresco-share/tomcat/bin
mkdir /opt/alfresco-share/run
cp -r /etc/tomcat8/* /opt/alfresco-share/tomcat/conf/
#second instance of tomcat so we need to make sure to use different ports
#lets jsut put 1 as prefix so eg 8080 will become 18080
vi /opt/alfresco-share/tomcat/conf/server.xml
cp /opt/comAlfresco/web-server/webapps/share.war /opt/alfresco-share/tomcat/webapps/
vi /opt/alfresco-share/tomcat/conf/catalina.properties
#>make this file the same as for the repo
#common.loader="${catalina.home}/lib","${catalina.home}/lib/*.jar","${catalina.home}/common/classes","${catalina.home}/common/*.jar"
#server.loader=${catalina.home}/server/classes,${catalina.home}/server/*.jar
#shared.loader=${catalina.base}/shared/classes,${catalina.base}/shared/*.jar,${catalina.base}/lib
#>create setenv for share instance
vi /opt/alfresco-share/tomcat/bin/setenv.sh
#add the following lines
#JAVA_OPTS="$JAVA_OPTS -Dalfresco.home=/opt/alfresco"
JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote"
JAVA_OPTS="$JAVA_OPTS -XX:ReservedCodeCacheSize=128m"
JAVA_OPTS="$JAVAOPTS -Xms1024M -Xmx2048M"
export JAVA_OPTS
chmod +x /opt/alfresco-share/tomcat/bin/setenv.sh
#>create unit file
vi /opt/alfresco-share/tomcat/bin/alfresco-share.service
chown -R alfresco:alfresco /opt/alfresco-share
cp /opt/alfresco-share/tomcat/bin/alfresco-share.service /etc/systemd/system
systemctl enable alfresco-share.service
systemctl daemon-reload
systemctl start alfresco-share
#>watch logs for errors
#>fix log error after first start with serice stopped
vi /opt/alfresco-share/tomcat/webapps/share/WEB-INF/classes/log4j.properties
#> Solr6
mkdir /opt/solr6
cd /opt/solr6
unzip /tmp/alfresco-search-services-1.0.0.zip
mv alfresco-search-services/* .
rm -r alfresco-search-services/
#>start with
#/opt/solr6/solr/bin/solr start -force -m 2048M -a -Dcreate.alfresco.defaults=alfresco,archive
#>once alfresco-repo and alfresco-share are running
#>LibreOffice
mkdir /opt/libreoffice
cd /opt/libreoffice
wget http://download.documentfoundation.org/libreoffice/stable/5.2.7/deb/x86_64/LibreOffice_5.2.7_Linux_x86-64_deb.tar.gz
tar xvf LibreOffice_5.2.7_Linux_x86-64_deb.tar.gz
mv LibreOffice_5.2.7.2_Linux_x86-64_deb/* .
rm -r LibreOffice_5.2.7.2_Linux_x86-64_deb/
rm LibreOffice_5.2.7_Linux_x86-64_deb.tar.gz
rm /opt/libreoffice/DEBS/*menus*
rm /opt/libreoffice/DEBS/*integration*
dpkg -i /opt/libreoffice/DEBS/*.deb
rm -r /opt/libreoffice
ln -s /opt/libreoffice5.2 /opt/libreoffice
#>start with
#/bin/su -s /bin/bash alfresco -c "/opt/libreoffice/program/soffice.bin \"--accept=socket,host=localhost,port=8100;urp;StarOffice.ServiceManager\" \"-env:UserInstallation=file:///opt/alfresco/alf_data/oouser\" --nologo --headless --nofirststartwizard --norestore --nodefault &" 2>/dev/null
Mit den Konfigurationsdateien im Anhang kann ich sauber starten.
Es werden Warnungen geworfen, die sind aber wohl wegen des SSLs, werden wir wohl nicht verwenden.
Auf die Nutzung von Nginx oder Apache als Proxy habe ich bis jetzt verzichtet, dass kommt dann sobald alles läuft.
Beim Aufruf des Servers über Port 8080 komme ich nun direkt zu 8080/alfresco.
Eigentlich hatte ich erwartet hier irgendwas zu sehen, eine art Landingpage oder gar Login.
Beim Clicken auf "Alfresco Share" werde ich dann wie erwartet zu 18080/share/page geleitet.
Hier ist auch die Login-Page, für die ich jedoch werde User noch Passwort kenne, das ist dann der nächste Schritt.
Über Feedback zu meiner Config würde ich mich freuen, sofern Axel Faust oder noch mal Zeit hätten.
Vielen Dank.
Seit Alfresco 5.0 ist unter /alfresco nur noch eine technische Start- bzw. Indexseite zu finden. Die alte Oberfläche, die früher unter dieser Adresse erreichbar war, wurde endlich nach langer Zeit als EoL bzw. "Deprecated" entfernt. Nun ist /share die einzige Standardoberfläche. Ich stelle in meinen Apache immer eine automatische URL-Weiterleitung/-Umschreibung ein, d.h. wenn jemand auf dms.domain.de zugreift wird automatisch auf dms.domain.de/share/ weitergeleitet. Anwender müssen so nur den DNS Namen kennen und kommen nie "aus Versehen" auf /alfresco.
Der Standardnutzer für Alfresco (Share) ist admin (Passwort: admin).
Für die Log4J Einstellungen empfehle ich diese minimal zu halten. Im Repository kann man unter tomcat/shared/classes/alfresco/extension/custom-log4j.properties nur die Anpassungen zum Standard hinterlegen und sich auf das wesentliche konzentrieren: Die Einstellung des rootLogger und die Konfiguration der Appender. Leider kann Share keine custom-log4j.properties nutzen, daher muss man die Datei in der ausgepackten Webanwendung modifizieren. Da mich das schon immer gestört hat, habe ich mit einem Modul hier Feature-Parität hergestellt.
Im Übrigen empfehle ich immer den Ausschluss des "Console" Appender. Ich mag überhaupt nicht das doppelte Logging der gleichen Meldungen. Für den "File" Appender kann man sich die Angabe eines expliziten Pfades sparen - es geht auch mit ${catalina.base}/logs/alfresco.log bzw ${catalina.base}/logs/share.log (ebenso kann man in den log4j-solr.properties vorgehen).
Bei Verwendung von systemd ist die Nutzung der setenv.sh überflüssig und potentiell verwirrend. Lieber sollte alle Konfiguration der Java-Parameter an einer Stelle, in der systemd-Unit liegen.
In der Tomcat server.xml kann man sich den AJP Connector i.d.R. sparen. Dieser wird maximal von einem vorgelagerten Proxy verwendet und ist auch dann nicht unbedingt notwendig, z.B. kann Apache mit mod_proxy auch ganz normal HTTP statt AJP verwenden.
Wenn ein Proxy verwendet wird und der Server über iptables oder eine sonstige Firewall abgesichert wird, kann man sich auch den HTTPS-Connector sparen. Das Repository und SOLR können auch unverschlüsselt über HTTP konfigurieren, was CPU-technisch günstiger ist. Wenn man über einen Proxy HTTPS anbietet, kann trotztdem ein zweiter Connector notwendig sein (HTTP/AJP) dem man per Konfiguration mitteilt, dass er als sicher betrachtet wird, auch wenn er selber kein SSL unterstützt (SSL-Terminierung im Proxy).
Archive content from product discussions in German.
This group is now closed and content is read-only.
By using this site, you are agreeing to allow us to collect and use cookies as outlined in Alfresco’s Cookie Statement and Terms of Use (and you have a legitimate interest in Alfresco and our products, authorizing us to contact you in such methods). If you are not ok with these terms, please do not use this website.