Questo piccola guida illustra l'istallazione di Alfresco 7.4 dal pacchetto ZIP in un server Ubuntu 22 LTS.
Controcorrente rispetto alle architetture container e cloud, questa guida illustra il vecchio processo.
Obiettivo della guida è di abilitare il system manager ad un'installazione stand-alone.
Questa installazione oltre ad esser completamente funzionante è il passo necessario per i nodi di un cluster Alfresco.
In conclusione: una guida necessaria per un uso personale offline, per un sistemista del cluster Alfresco, una guida necessaria per gli informatici esperti Java e cloud per Alfresco.
1. Panoramica
Questa guida ipotizza la seguente situazione:
• un host unico che contiene tutto (spazio, Java, Alfresco e reverseproxy)
• connessioni di rete in coppie di 2 in bond con:
◦ bond 1: su rete di gestione amministrazione
◦ bond 2: su rete del cluster di nodi Alfresco
◦ bond 3: su rete LAN/WAN
• OS: Ubuntu Server 22.04 LTS
• backend:
◦ storage ZFS
◦ DB con MariaDB
◦ Java con JDK OpenJava 11.x
◦ accesso amministrativo via SSH.
Dopo la descrizione iniziale delle configurazioni la guida proseguirà come se non usassimo ZFS, né 3 reti differenti.

2. Installazione OS
Installiamo Ubuntu come sopra illustrato:
• / l'OS
• /var i log
• /opt tutto il resto per Alfresco e lo storage.
3. Alfresco
3.1. Installazione
Dopo aver installato Ubuntu Server 22.04 LTS secondo le indicazioni sopra esposte procediamo a configurare l'ambiente come segue:
• Hostname: alfresco1
• nel file /etc/hosts inseriti questi record
NB 1: IP e hostname sono da personalizzare per la propria situazione
NB 2: si inserisce anche un presunto record DNS MX. Di seguito non si descrive né l'implementazione di un mail server, né la configurazione e registrazione DNS.
[ ... ]Alias srv1.example.com srv1Alias www.example.com wwwAlias mx1.example.com
• aggiorniamo
apt update && apt upgrade -y && apt autoremove -y && systemctl reboot
3.2. Tool
• Installiamo un set di tool base
sudo apt install -y vim tmux mc htop iftop neofetch mc iotop lnav wget curl net-tools nmap && apt install -y ethtool net-tools lsof apt-transport-https unzip ethtool openssl
• configuriamo sudo
sudo vim /etc/sudoers.d/sudo
[ ... ]# %sudo ALL= NOPASSWD: ALL%sudo ALL=(ALL:ALL) ALL
• settare la rete:
◦ installiamo le parti terze e carichiamo il modulo bonding
sudo apt install -y ifenslavesudo modprobe bondingsudo lsmod | grep bondingsudo echo 'bonding' | sudo tee -a /etc/modules
◦ creare il descrittore della configurazione
NB: personalizzare IP e route in base alla propria rete
sudo mv /etc/netplan/00-installer-config.yaml{,.ORG}sudo vim /etc/netplan/01-bonding-config.yaml
network: version: 2 ethernets: enp1s0: dhcp4: no match: macaddress: 52:54:00:05:d4:44 wakeonlan: true enp11s0: dhcp4: no match: macaddress: 52:54:00:E5:b7:04 wakeonlan: true enp12s0: dhcp4: no enp13s0: dhcp4: no enp14s0: dhcp4: no enp15s0: dhcp4: no
bonds: bond0: interfaces: [enp1s0, enp11s0] addresses: - 192.168.122.90/24
nameservers: addresses: - 192.168.122.1 search: [] routes: - to: default via: 192.168.122.1 parameters: mode: 802.3ad transmit-hash-policy: layer3+4 mii-monitor-interval: 1
bond1: interfaces: [enp12s0, enp13s0] addresses: - 192.168.100.90/24 parameters: mode: 802.3ad transmit-hash-policy: layer3+4 mii-monitor-interval: 1
bond2: interfaces: [enp14s0, enp15s0] dhcp4: yes dhcp6: yes parameters: mode: 802.3ad transmit-hash-policy: layer3+4 mii-monitor-interval: 1
sudo netplan trysudo netplan applysudo systemctl restart networking
• personalizzazione di /etc/hosts
sudo vim /etc/hosts
[ ... ]127.0.0.1 srv1[ ... ]192.168.122.2 srv1.example.com192.168.122.2 www.example.com www192.168.122.2 mx1.example.com mx1
3.3. Storage ZFS
A titolo d'esempio provvediamo a creare un dataset ZRAID che monteremo in /opt .
• Installiamo ZFS
sudo apt install zfsutils-linux -y
• creiamo il dataset data
sudo zpool create -m /opt data raid2 /dev/sdc /dev/sdd /dev/sde /dev/sdf /dev/sdg /dev/sdh /dev/sdi /dev/sdj spare /dev/sdk /dev/sdl
• verifichiamo il pool creato
sudo zpool list
3.4. NTP
• Installiamo l'NTP chrony e settiamolo
sudo apt install -y chrony
• editiamo /etc/chrony/chrony.conf
sudo vim /etc/chrony/chrony.conf
[ ... ]# pool ntp.ubuntu.com iburst maxsources 4# pool 0.ubuntu.pool.ntp.org iburst maxsources 1# pool 1.ubuntu.pool.ntp.org iburst maxsources 1# pool 2.ubuntu.pool.ntp.org iburst maxsources 2server 0.it.pool.ntp.org iburstserver 1.it.pool.ntp.org iburstserver 2.it.pool.ntp.org iburstserver 3.it.pool.ntp.org iburst[ ... ]
• riavviamo e verifichiamo lo stato
sudo systemctl stop chronysudo chronyd -q 'server 0.it.pool.ntp.org iburst'sudo chronyd -q 'server 0.it.pool.ntp.org iburst'sudo systemctl restart chronysudo chronyc sources -vsudo chronyc sourcestats
4. Parti terze
4.1. Applicativi generali
Installiamo le parti terze che servono ad Alfresco.
• Installiamo e settiamo lm-sensor
sudo apt install -y lm-sensorssudo sensors-detectsudo systemctl restart kmodsudo sensors
• installiamo alcune utility
sudo apt install -y wamerican-huge wspanish wogerman witalian fonts-crosextra-caladea fonts-crosextra-carlito sudo apt install -y hunspell hunspell-es hunspell-de-de hunspell-en-us hunspell-it
• Installiamo unoconv
sudo apt install -y unoconv
• installiamo LibreOffice
sudo apt install -y libreoffice
• installiamo ImageMagick
sudo apt install -y imagemagick
• installiamo ExifTool
sudo apt install -y exiftool
• installiamo ffmpeg
sudo apt install -y ffmpeg
4.2. Java JDK
• Installiamo il JDK ed il JRE 1.11
NB: Alfresco CE non gira OpenJDK 17
sudo apt install -y openjdk-11-jdk openjdk-11-jdk-headless && apt install -y openjdk-11-jre openjdk-11-jre-headless
• verificare la versione installata
java --version
4.3. Apache Tomcat
Procediamo installando Tomcat 09.
NB: procediamo prima con l'installazione standard. Al momento di deployare il WAR di Alfresco faremo le personalizzazioni del caso con la rimozione del tool di gestione dell'AS.
• Scarichiamo la versione 9 di Tomcat
mkdir Tempcd Tempwget https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.80/bin/apache-tomcat-9.0.80.tar.gz
• creiamo l'utente dedicato
sudo mkdir /opt/alfrescosudo useradd -m -U -d /opt/alfresco/tomcat -s /bin/false tomcat
• estraiamo il pacchetto Tomcat e sistemiamo nomi e permessi
sudo tar xfz apache-tomcat-9.0.80.tar.gz -C /opt/alfrescosudo mv /opt/alfresco/apache-tomcat-9.0.80 /opt/alfresco/tomcatsudo chown tomcat:tomcat -R /opt/alfresco/tomcatsudo chmod +x /opt/alfresco/tomcat/bin/*shsudo rm /opt/alfresco/tomcat/bin/*bat
• creiamo la unit
sudo vim /usr/lib/systemd/system/tomcat.service
[Unit]Description=Tomcat 10 servlet containerAfter=network.target
[Service]Type=forking
User=tomcatGroup=tomcat
Environment="JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64"Environment="JAVA_OPTS=-Djava.security.egd=file:///dev/urandom -Djava.awt.headless=true"
Environment="CATALINA_BASE=/opt/alfresco/tomcat"Environment="CATALINA_HOME=/opt/alfresco/tomcat"Environment="CATALINA_PID=/opt/alfresco/tomcat/temp/tomcat.pid"Environment="CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC"
ExecStart=/opt/alfresco/tomcat/bin/startup.shExecStop=/opt/alfresco/tomcat/bin/shutdown.sh
[Install]WantedBy=multi-user.target
sudo systemctl daemon-reloadsudo systemctl start tomcatsudo systemctl status tomcat
• verifichiamo il corretto avvio connettendoci all'URL http://www.server.com:8080/
• stoppiamo Tomcat
systemctl stop tomcat
4.4. MariaDB
• Installiamo i certificati
sudo curl -fsSL http://mirror.mariadb.org/PublicKey_v2 | sudo gpg --dearmor | sudo tee /usr/share/keyrings/mariadb.gpg > /dev/null
• Installiamo i repo
sudo echo "deb [arch=amd64,arm64,ppc64el signed-by=/usr/share/keyrings/mariadb.gpg] http://mirror.mariadb.org/repo/11.1/ubuntu/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/mariadb.list
• e installiamo MariaDB
sudo apt install -y mariadb-server
• attiviamo e avviamo MariaDB
sudo systemctl enable mariadbsudo systemctl restart mariadbsudo systemctl status mariadb
• verifichiamo la versione
mariadb --version
• securizziamo MariaDB
sudo mariadb-secure-installation
[ ... ]Switch to unix_socket authentication [Y/n] n[ ... ]Change the root password? [Y/n][ ... ]New password: <standard easy>Re-enter new password: <standard easy>[ ... ]
4.5. ActiveMQ
Ubuntu ha nei repo la 5.16, ma serve almeno la 5.17, pertanto installiamo a mano 5.18.2 (attualmente la più recente).
• Aggiungiamo l'utente riservato per ActiveMQ
sudo useradd -m -U -d /opt/activemq -s /bin/false activemq
• scarichiamo il pacchetto
wget https://dlcdn.apache.org//activemq/5.18.2/apache-activemq-5.18.2-bin.tar.gz
• estraiamo e sistemiamo la sicurezza
sudo tar xfz apache-activemq-5.18.2-bin.tar.gz -C /opt/sudo mv /opt/apache-activemq-5.18.2 /opt/activemqsudo chown activemq:activemq -R /opt/activemq
• personalizziamo la configurazione
NB: nel portarlo in produzione rimetterlo su localhost!!
sudo vim /opt/activemq/conf/jetty.xml
[ ... ] <bean id="jettyPort" class="org.apache.activemq.web.WebConsolePort" init-method="start"> <!-- the default port number for the web console --> <!-- property name="host" value="127.0.0.1"/ --> <property name="host" value="0.0.0.0"/> <property name="port" value="8161"/> </bean>[ ... ]
• creiamo la unit systemd
sudo vim /usr/lib/systemd/system/activemq.service
[Unit]Description=Apache ActiveMQ Message BrokerAfter=network-online.target
[Service]Type=forking
User=activemqGroup=activemq
WorkingDirectory=/opt/activemq/binExecStart=/opt/activemq/bin/activemq startExecStop=/opt/activemq/bin/activemq stopRestart=on-abort
[Install]WantedBy=multi-user.target
• avviare e verificare ActiveMQ
sudo systemctl daemon-reloadsudo systemctl start activemqsudo systemctl status activemq
• verificare accedendo al pannello di controllo
http://vm09.kbsb.loc:8161/admin
Username: admin
Password: admin
• spegnere e disattivare ActiveMQ
sudo systemctl stop activemqsudo systemctl disable activemq
• cambiare la password
sudo vim /opt/activemq/conf/jetty-realm.properties
[ ... ]admin: activePass23, admin#user: user, useralfresco: alfrescoPass, user
5. Install Alfresco
5.1. Attività preparatorie
• Installiamo Tesseract con alcune lingue
sudo apt install -y tesseract-ocr tesseract-ocr-ita tesseract-ocr-eng tesseract-ocr-spa tesseract-ocr-fra
• Impostiamo MariaDB e creiamo il DB:
◦ editiamo /etc/mysql/mariadb.conf.d/50-server.cnf
sudo vim /etc/mysql/mariadb.conf.d/50-server.cnf
◦ impostiamo max_connections a 275 come segue
[ ... ]#max_connections = 100max_connections = 275[ ... ]
◦ e riavviamo MariaDB
sudo systemctl restart mariadb
• creare il DB
mariadb -h localhost -u root
CREATE DATABASE alfresco DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;GRANT ALL PRIVILEGES ON alfresco.* TO alfresco@localhost IDENTIFIED BY 'alfresco';FLUSH PRIVILEGES;quit;
• scaricamento e pubblicazione connector
wget https://repo1.maven.org/maven2/org/mariadb/jdbc/mariadb-java-client/2.2.6/mariadb-java-client-2.2.6.jarsudo cp mariadb-java-client-2.2.6.jar /opt/alfresco/tomcat/lib/sudo chown tomcat:tomcat /opt/alfresco/tomcat/lib/mariadb-java-client-2.2.6.jar
5.2. Preparazione Alfresco
• Scarichiamo lo zip Alfresco
• estrarre il pacchetto
sudo mkdir /opt/alfresco_datamkdir alfresco-content-services-community-distribution-7.4cp alfresco-content-services-community-distribution-7.4.0.1.zip alfresco-content-services-community-distribution-7.4/cd alfresco-content-services-community-distribution-7.4unzip alfresco-content-services-community-distribution-7.4.0.1.zipsudo rm -R /opt/alfresco/tomcat/webapps/*sudo cp -r web-server/conf/* /opt/alfresco/tomcat/conf/sudo cp -r web-server/lib/* /opt/alfresco/tomcat/lib/sudo cp -r web-server/shared /opt/alfresco/tomcat/sharedsudo mkdir /opt/alfresco/tomcat/shared/libsudo cp -r web-server/webapps/* /opt/alfresco/tomcat/webapps/sudo cp -r amps /opt/alfresco/sudo cp -r bin /opt/alfresco/sudo cp -r licenses /opt/alfresco/sudo cp -r keystore /opt/alfresco_datasudo cp ../mariadb-java-client-2.2.6.jar /opt/alfresco/tomcat/lib/
• aggiungere il classpath per Alfresco
sudo vim /opt/alfresco/tomcat/conf/catalina.properties
[ ... ]shared.loader=${catalina.base}/shared/classes,${catalina.base}/shared/lib/*.jar[ ... ]
• impostare il connector di Tomcat
sudo vim /opt/alfresco/tomcat/conf/server.xml
[ ... ] <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" maxParameterCount="1000" URIEncoding="UTF-8" maxHttpHeaderSize="32768" />[ ... ]
• creare setenv.sh e impostare le variabili per lo store di criptazione
NB 1: tipo e password del keystore sono nel file keystore-passwords.properties
NB 2: questo settaggio fino alla versione 6.x non era necessario. Dalla 7.x la criptazione è obbligatoria
NB 3: per creare nuovi keystore usare il programma https://github.com/Alfresco/alfresco-ssl-generator
NB 4: la manualistica indica di usare la variabile JAVA_TOOL_OPTIONS per passare i parametri del keystore alla JVM. In Linux con Tomcat bisogna usare JAVA_OPTS
sudo vim /opt/alfresco/tomcat/bin/setenv.sh
## Settaggio e chiavi per la criptazione
JAVA_OPTS="$JAVA_OPTS -Dencryption.keystore.type=JCEKS -Dencryption.cipherAlgorithm=DESede/CBC/PKCS5Padding -Dencryption.keyAlgorithm=DESede -Dencryption.keystore.location=/opt/alfresco_data/keystore/metadata-keystore/keystore -Dmetadata-keystore.password=mp6yc0UD9e -Dmetadata-keystore.aliases=metadata -Dmetadata-keystore.metadata.password=oKIWzVdEdA -Dmetadata-keystore.metadata.algorithm=DESede"
## Dimensionamento RAM: necessario aumentarla per gli indici# Farlo anche in Solr altrimenti crasha durante l'attività
JAVA_OPTS="-Xms1G -Xmx5G $JAVA_OPTS " # java-memory-settings
• impostiamo le proprietà globali come segue
sudo cp /opt/alfresco/tomcat/shared/classes/alfresco-global.properties.sample /opt/alfresco/tomcat/shared/classes/alfresco-global.properties
sudo vim /opt/alfresco/tomcat/shared/classes/alfresco-global.properties
# The server mode. Set value here# UNKNOWN | TEST | BACKUP | PRODUCTIONsystem.serverMode=TEST
## Solr connection# solr.secureComms=https
## Criptation store#alfresco.secureComms=none
## Content and index data location and keystore to crypt#dir.root=/opt/alfresco_data/dir.keystore=/opt/alfresco_data/keystore
## Setting to keystore
db.schema.update=true
db.name=alfrescodb.username=alfrescodb.password=alfrescodb.host=localhostdb.port=3306db.pool.max=275db.driver=org.mariadb.jdbc.Driverdb.url=jdbc:mysql://${db.host}:${db.port}/${db.name}?useUnicode=yes&characterEncoding=UTF-8
dir.license.external=/opt/licenses
alfresco.context=alfresco alfresco.host=${localname} alfresco.port=8080 alfresco.protocol=http
share.context=share share.host=${localname} share.port=8080 share.protocol=http
• sistemare i permessi
sudo chown tomcat:tomcat -R /opt/alfresco_data /opt/alfresco
5.3. Applicare share.amp
NB: se non si pubblica il modulo share.amp Alfresco parte regolarmente, si accede anche a Share, ma non si ha accesso e possibilità di gestione alle directory e non si può caricare-gestire alcun file!
sudo su - -s /bin/bash tomcatcd /opt/alfresco/binbash apply_amps.shexit
5.4. Ultimi setting
• Creiamo le directory dei moduli
mkdir -p /opt/alfresco/modules/platformmkdir -p /opt/alfresco/modules/sharechown tomcat:tomcat -R /opt/alfresco
• impostiamo i log di Alfresco
sudo su - -s /bin/bash tomcat
cd /opt/alfresco/tomcat/webapps/mkdir alfrescocp alfresco.war alfresco/cd alfresco/jar -xvf alfresco.warrm alfresco.warvim WEB-INF/classes/log4j2.properties
[ ... ]# appender.rolling.fileName=alfresco.log# appender.rolling.filePattern=alfresco.log.%d{yyyy-MM-dd}appender.rolling.fileName=/opt/alfresco/tomcat/logs/alfresco.logappender.rolling.filePattern=/opt/alfresco/tomcat/logs/alfresco.log.%d{yyyy-MM-dd}[ ... ]
• impostiamo i log di Share
cd /opt/alfresco/tomcat/webapps/mkdir sharecp share.war share/cd share/jar -xvf share.warrm share.warvim WEB-INF/classes/log4j2.properties
[ ... ]# appender.rolling.fileName=share.log# appender.rolling.filePattern=share.log.%d{yyyy-MM-dd}appender.rolling.fileName=/opt/alfresco/tomcat/logs/share.logappender.rolling.filePattern=/opt/alfresco/tomcat/logs/share.log.%d{yyyy-MM-dd}[ ... ]
exit
5.5. Installiamo il Servizio di Trasformazione
NB: a differenza delle versioni fino alla 6.x il servizio trasformazione dei file non è più nel core e istanziato dal file di configurazione principale: è diventato un servizio esterno.
• Installiamo alfresco-pdf-renderer
wget https://nexus.alfresco.com/nexus/service/local/repositories/releases/content/org/alfresco/alfresco-pdf-renderer/1.1/alfresco-pdf-renderer-1.1-linux.tgztar xfz alfresco-pdf-renderer-1.1-linux.tgzcp alfresco-pdf-renderer /opt/alfresco/bin/sudo chown tomcat:tomcat /opt/alfresco/bin/alfresco-pdf-renderersudo chmod +x /opt/alfresco/bin/alfresco-pdf-renderer
• scarichiamo il servizio
• e copiamolo in /opt/alfresco/bin
cp alfresco-transform-core-aio-boot-2.7.0-A1.jar /opt/alfresco/bin/sudo chmod -x /opt/alfresco/bin/alfresco-transform-core-aio-boot-2.7.0-A1.jarsudo chown tomcat:tomcat /opt/alfresco/bin/alfresco-transform-core-aio-boot-2.7.0-A1.jar
• creiamo lo script di avvio-configurazione
sudo vim /opt/alfresco/bin/alfrescots.sh
#!/bin/bash
## Set global variables#SERVICE_NAME=LTS_-_Local_Tranfromation_ServiceLOCAL_TRANSFORM_SERVICE_HOME=/opt/alfrescoPID_PATH_NAME=$LOCAL_TRANSFORM_SERVICE_HOME/tomcat/temp/LTS.pid
## Set Variables of run application#
# -DPDFRENDERER_EXETS_PDF-RENDERER=/opt/alfresco/bin/alfresco-pdf-renderer
# -DLIBREOFFICE_HOMETS_OFFICE=/usr/lib/libreoffice
# -DIMAGEMAGICK_ROOT -DIMAGEMAGICK_DYNTS_IMAGEMAGICK=/usr/bin
# -DIMAGEMAGICK_EXETS_IMAGEMAGICK_CONVERT=/usr/bin/convert
# -DIMAGEMAGICK_CODERSTS_IMAGEMAGICK_CONVERT_CODERS=/usr/lib/x86_64-linux-gnu/ImageMagick-6.9.11/modules-Q16/coders
# -DIMAGEMAGICK_CONFIGTS_IMAGEMAGICK_CONVERT_CONFIG=/usr/lib/x86_64-linux-gnu/ImageMagick-6.9.11/config-Q16
# alfresco-transform-core-aio-boot-2.7.0-A1.jarTS_JAR=/opt/alfresco/bin/alfresco-transform-core-aio-boot-2.7.0-A1.jar
## Function Start Transform Service#TsStart(){nohup java -XX:MinRAMPercentage=50 -XX:MaxRAMPercentage=80 \ -DPDFRENDERER_EXE="$TS_PDF-RENDERER" \ -DLIBREOFFICE_HOME="$TS_OFFICE" \ -DIMAGEMAGICK_ROOT="$TS_IMAGEMAGICK" \ -DIMAGEMAGICK_DYN="$TS_IMAGEMAGICK" \ -DIMAGEMAGICK_EXE="$TS_IMAGEMAGICK_CONVERT" \ -DIMAGEMAGICK_CODERS="$TS_IMAGEMAGICK_CONVERT_CODERS" \ -DIMAGEMAGICK_CONFIG="$TS_IMAGEMAGICK_CONVERT_CONFIG" \ -DACTIVEMQ_URL="failover:(tcp://localhost:61616)?timeout=3000" \ -jar $TS_JAR \ /tmp 2>> /dev/null >>/dev/null \ & echo $! > $PID_PATH_NAME }
## Function Stop Transform Service#TsStop(){ # PID=$(cat $PID_PATH_NAME); # printf "\n $SERVICE_NAME stoping ... \n" /bin/kill $PID; # printf "\n $SERVICE_NAME stopped ...\n" # rm $PID_PATH_NAME }
echo "Process id path: $PID_PATH_NAME"
case $1 in start) echo "Starting $SERVICE_NAME ..." if [ ! -f $PID_PATH_NAME ]; then TsStart printf "\n $SERVICE_NAME started ...\n" else printf "\n $SERVICE_NAME is already running ...\n" fi;;
stop) if [ -f $PID_PATH_NAME ]; then PID=$(cat $PID_PATH_NAME); printf "\n $SERVICE_NAME stoping ... \n" TsStop printf "\n $SERVICE_NAME stopped ...\n" rm $PID_PATH_NAME else printf "\n $SERVICE_NAME is not running ...\n" fi ;; restart) if [ -f $PID_PATH_NAME ]; then # # Process Stop PID=$(cat $PID_PATH_NAME); printf "\n Stoping $SERVICE_NAME ... \n" TsStop printf "\n Stopped $SERVICE_NAME ...\n" rm $PID_PATH_NAME # # Process Start echo "Starting $SERVICE_NAME ..." TsStart printf "\n Started $SERVICE_NAME ...\n" else printf "\n $SERVICE_NAME is not running ...\n" fi esac
• settiamo i permessi dello script
sudo chmod +x /opt/alfresco/bin/alfrescots.shsudo chown tomcat:tomcat /opt/alfresco/bin/alfrescots.sh
• infine creiamo e carichiamo la unit di avvio
sudo vim /usr/lib/systemd/system/alfrescots.service
[Unit]Description=Alfresco Transform ServiceAfter=network.target
[Service]Type=forkingRestart=always
User=tomcatGroup=tomcat
ExecStart=/opt/alfresco/bin/alfrescots.sh startExecStop=/opt/alfresco/bin/alfrescots.sh stop
[Install]WantedBy=multi-user.target
• abilitiamo la nuova unit
sudo systemctl daemon-reload
• aggiungiamo le seguenti righe di configurazione in /opt/alfresco/tomcat/shared/classes/alfresco-global.properties
sudo vim /opt/alfresco/tomcat/shared/classes/alfresco-global.properties
[ ... ]#This property is default true, here it it for information purpose.local.transform.service.enabled=true
localTransform.core-aio.url=http://localhost:8090/
Testiamo il servizio di trasformazione
• avviare il servizio
sudo systemctl start alfrescots.service
• accedere all'URL http://localhost:8090: vedremo una finestra con le impostazioni e la possibilità di caricare file da trasformare di formato
• stoppiamo il servizio
sudo systemctl stop alfrescots.service
5.6. Installiamo il Servizio di Ricerca
NB: la documentazione Community non sembra completamente è corretta
• Scaricare il pacchetto Search
• estraiamo il pacchetto
unzip alfresco-search-services-2.0.7.zip
• creiamo l'utente dedicato
sudo useradd -r -U -d /opt/solr -s /bin/false solr
• copiamo Solr in /opt/
sudo cp -R alfresco-search-services /opt/sudo mv /opt/alfresco-search-services /opt/solr
• personalizziamo /opt/solr/solrhome/templates/rerank/conf/solrcore.properties come segue
vim /opt/solr/solrhome/templates/rerank/conf/solrcore.properties
[ ... ]alfresco.secureComms=secret[ ... ]
• personalizziamo /opt/solr/solrhome/conf/shared.properties come segue
vim /opt/solr/solrhome/conf/shared.properties
#Host details an external client would use to connect to Solrsolr.host=localhost
#If not set then solr.port will be the jetty.port#solr.port=8983solr.baseurl=/solr
# Properties treated as identifiers when indexedalfresco.identifier.property.0={http://www.alfresco.org/model/content/1.0}creatoralfresco.identifier.property.1={http://www.alfresco.org/model/content/1.0}modifieralfresco.identifier.property.2={http://www.alfresco.org/model/content/1.0}userNamealfresco.identifier.property.3={http://www.alfresco.org/model/content/1.0}authorityName
# Suggestable Propertiesalfresco.suggestable.property.0={http://www.alfresco.org/model/content/1.0}namealfresco.suggestable.property.1={http://www.alfresco.org/model/content/1.0}titlealfresco.suggestable.property.2={http://www.alfresco.org/model/content/1.0}descriptionalfresco.suggestable.property.3={http://www.alfresco.org/model/content/1.0}content
# Data types that support cross locale/word splitting/token patterns if tokenisedalfresco.cross.locale.property.0={http://www.alfresco.org/model/content/1.0}name
# Data types that support cross locale/word splitting/token patterns if tokenisedalfresco.cross.locale.datatype.0={http://www.alfresco.org/model/dictionary/1.0}textalfresco.cross.locale.datatype.1={http://www.alfresco.org/model/dictionary/1.0}contentalfresco.cross.locale.datatype.2={http://www.alfresco.org/model/dictionary/1.0}mltext
• settiamo la configurazione di avvio di Solr
NB: la password per securizzare il dialogo tra Alfresco e Solr va impostata prima del primo lancio del servizio. Durante il l'avvio vengono create le istanze alfresco e archive con la password scelta. Dopo il primo avvio non è più possibile cambiare la password a meno di cancellare le due istanze, farle ricreare e ri-indicizzare tutto.
sudo vim /opt/solr/solr.in.sh
SOLR_JAVA_MEM="-Xms2g -Xmx2g"SOLR_OPTS="$SOLR_OPTS -Dsolr.jetty.request.header.size=1000000 -Dsolr.jetty.threads.stop.timeout=300000 -Ddisable.configEdit=true"SOLR_LOGS_DIR=../../logsLOG4J_PROPS=$SOLR_LOGS_DIR/log4j.propertiesSOLR_SOLR_HOST=localhostSOLR_SOLR_PORT=8983SOLR_SOLR_BASEURL=/solrSOLR_ALFRESCO_HOST=localhostSOLR_ALFRESCO_PORT=8080SOLR_ALFRESCO_BASEURL=/alfrescoSOLR_ALFRESCO_SECURECOMMS=secretexport JAVA_TOOL_OPTIONS="-Dalfresco.secureComms.secret=secret"
• aggiorniamo la configurazione di Alfresco
sudo vim /opt/alfresco/tomcat/shared/classes/alfresco-global.properties
[ ... ]## Index Setting#
#index.recovery.mode=AUTOindex.subsystem.name=solr6solr.secureComms=secretsolr.sharedSecret=secretsolr.host=localhostsolr.port=8983solr.base.url=/solr
• correggiamo i permessi
sudo chown solr:solr -R /opt/solrsudo chmod +x /opt/solr/solr.in.shsudo rm /opt/solr/solr.in.cmd
• primo avvio: lo faremo manualmente in modo da avere subito il feedback di funzionamento
sudo su - solr -s /bin/bash/opt/solr/solr/bin/solr start -a "-Dcreate.alfresco.defaults=alfresco,archive"
• stoppiamo Solr
sudo /opt/solr/solr/bin/solr stop -all
• creiamo la unit di avvio per SystemD
sudo vim /usr/lib/systemd/system/solr.service
[Unit]Description=Alfresco search service Solr#ConditionPathExists=/opt/solrAfter=network.target
[Service]Type=forkingRestart=always
User=solrGroup=solr
LimitNOFILE=8192:65536
ExecStart=/opt/solr/solr/bin/solr start -a '-Dcreate.alfresco.defaults=alfresco,archive'ExecStop=/opt/solr/solr/bin/solr stop -all
[Install]WantedBy=multi-user.target
• carichiamo la unit
systemctl daemon-reload
• facciamo il primo avvio di tutto lo stack Alfresco
systemctl start activemqsystemctl start mariadbsystemctl start tomcatsystemctl start solrsystemctl start alfrescots
NB: il completamento dell'avvio di Alfresco impiega anche qualche minuto: dipende dalla velocità e dalla potenza di calcolo del computer su cui gira.
• accediamo all'URL http://<ipserver|fqdn>:8080/ "-> Alfresco Repository -> Alfresco Share"
• autentichiamoci con l'utente default:
Username: admin Password: admin
• dopo l'accesso cambiare la password dell'utente admin e uscire
• stoppiamo lo stack
systemctl stop alfrescotssystemctl stop solrsystemctl stop tomcatsystemctl stop mariadbsystemctl stop activemq
• creiamo lo script per l'avvio e lo stop automatico di tutto lo stack
sudo vim /etc/init.d/alfresco-stack
#!/bin/bash
## Definizione variabili#AS_ACT=$1AS_STATUS=AS_ERR=0AS_RESTART=ST_S=0ST_MAX=4ST_COUNT=0RTN=0
## Definizione funzioni start, stop, restart#
## Avvio dello stack Alfresco#stStart(){ systemctl start activemq systemctl start mariadb systemctl start tomcat sleep 20 systemctl start solr sleep 20 systemctl start alfrescots
return 0}
## Stop dello stack Alfresco#stStop(){ systemctl stop alfrescots systemctl stop solr systemctl stop tomcat systemctl stop mariadb systemctl stop activemq
return 0}
## Verifica la reale terminazione dei servizi#stCheck(){ # # Reset status del check # ST_ERR=0 AS_STATUS=0
# # Check ActiveMQ # systemctl status activemq > /dev/null 2>&1;AS_STATUS=$? if [ "$AS_STATUS" != "3" ] && [ "$ST_ERR" = "0" ]; then ST_ERR=1 fi
# # Check MariaDB # systemctl status mariadb > /dev/null 2>&1;AS_STATUS=$? if [ "$AS_STATUS" != "3" ] && [ "$ST_ERR" = "0" ]; then ST_ERR=1 fi
# # Check Tomcat # systemctl status tomcat > /dev/null 2>&1;AS_STATUS=$? if [ "$AS_STATUS" != "3" ] && [ "$ST_ERR" = "0" ]; then ST_ERR=1 fi
# # Check Solr # systemctl status solr > /dev/null 2>&1;AS_STATUS=$? if [ "$AS_STATUS" != "3" ] && [ "$ST_ERR" = "0" ]; then ST_ERR=1 fi
# # Check AlfrescoTS # systemctl status alfrescots > /dev/null 2>&1;AS_STATUS=$? if [ "$AS_STATUS" != "3" ] && [ "$ST_ERR" = "0" ]; then ST_ERR=1 fi
# # ritorna lo stato: # 0 = tutti i servizi sono stoppati # 1 = uno o più serivi sono ancora running # echo "$ST_ERR" return $ST_ERR}
case "$AS_ACT" in start) echo "Starting ..." stStart echo "Started" ;; stop) echo "Stopping ..." stStop echo "Stopped" ;; restart) echo "Stopping ..." stStop
# Attesa per fine terminazione servizi sleep 30
# verivica terminazione completa con piccolo loop # 0 = tutto STOP # 1 = uno o più RUNNING ST_S=$(stCheck)
while [ "$ST_S" = "1" ] && [ "$ST_COUNT" -le "$ST_MAX" ]; do ((ST_COUNT++)) sleep 30 ST_S=$(stCheck) done
case "$ST_S" in 0) # Avvio dei servizi echo "Sttopped" echo "Starting ..." stStart echo "Started" RTN=0 ;; 1) # errore!! echo "ERROR: Alfresco Stack no sttoped." echo "Try by hand again or contact to system administrator." RTN=1 ;; esac ;; *) echo "alfresco-stack.sh run, stop or restart the Alfresco stack (ActiveMQ+MariaDB+Tomcat-Alfresco-Share+Solr+AlfrescoTransformationService)" echo "Usage:" echo -e "\n\talfresco-stack.sh (start|stop|restart|help)" echo -e "\nstart" echo -e "\tStart all Alfresco stack services" echo -e "\nstop" echo -e "\tStop all Alfresco stack services" echo -e "\nrestart" echo -e "\tStop and Restart the services" echo -e "\nhelp" echo -e "\tPrint this help" ;;esac
# return $RTNexit $RTN
sudo chmod 754 /etc/init.d/alfresco-stacksudo chown root:root /etc/init.d/alfresco-stack
sudo systemctl daemon-reload
• testiamo l'avvio tramite SystemD, ci colleghiamo e stoppiamo sempre tramite SystemD
sudo systemctl start alfresco-stack
URL http://<ipserver|fqdn>:8080/
sudo systemctl stop alfresco-stack
A questo punto tutta l'installazione e la configura dello Stack Alfresco è pronta e funzionante come singolo nodo.
Impostarlo per l'avvio automatico
sudo systemctl enable alfresco-stack
Per disattivarlo come avvio automatico:
sudo systemctl disable alfresco-stack
6. Completamento
Dopo aver portato in produzione il cuore di Alfresco procediamo con alcuni completamenti e perfezionamenti.
Iniziamo con il mettere un ReverseProxy \davanti\ ad Alfresco e attiviamo il firewall securizzando il server.
Successivamente procediamo con alcune configurazioni di Alfresco e di alcuni suoi componenti.
6.1. ReverseProxy
Per il reverseproxy useremo Nginx. L'FQDN del nostro server è www.server.com .
Successivamente accenneremo all'attivazione del protocollo HTTPS usando sempre il reverseproxy come frontend per la securizzazione con CertBot (https://certbot.eff.org/) per avere un certificato valido.
• Installiamo Nginx
sudo apt install -y nginx
• creiamo il file di configurazione per il server
sudo vim /etc/nginx/sites-available/www.server.com.conf
# Set proxy cache configproxy_buffering on;proxy_cache_path /var/cache/nginx keys_zone=alfresco-cache:1512m inactive=1d;proxy_cache_key "$scheme$request_method$host$request_uri";
# tomcats we're forwarding toupstream tomcat_server_https { server 127.0.0.1:8080 fail_timeout=0;}upstream tomcat_server_http { server 127.0.0.1:8080 fail_timeout=0;}upstream sharepoint { server 127.0.0.1:7070 fail_timeout=0;}
server { listen 80 default_server; listen [::]:80 default_server;
root /var/www/html;
index index.html index.htm index.nginx-debian.html;
server_name _;
location / { try_files $uri $uri/ =404; }
location /share { proxy_pass http://tomcat_server_http/share; include /etc/nginx/proxy_params; proxy_cache alfresco-cache; # add_header X-Proxy-Cache $upstream_cache_status; }
location /alfresco { proxy_pass http://tomcat_server_http/alfresco; include /etc/nginx/proxy_params; proxy_cache alfresco-cache; # add_header X-Proxy-Cache $upstream_cache_status; }
location ~ (^/share/.*\.js$|^/share/.*\.css$|^/share/.*\.gif$|^/share/.*\.png$|^/share/.*\.woff$|^/share/.*\.ttf$|^/share/.*\.eot$|^/share/.*/images/|^/share/.*icons/) { add_header Cache-Control public; #add_header Cache-Control "public, must-revalidate, proxy-revalidate"; expires 7d ;
include /etc/nginx/proxy_params; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://tomcat_server_https; proxy_cache alfresco-cache; add_header X-Proxy-Cache $upstream_cache_status; }
location ~ (^/share/.*/thumbnails/.*$) { proxy_cache_valid 200 301 302 10m ; proxy_cache_valid 404 1m; include /etc/nginx/proxy_params; expires 20m ; proxy_cache alfresco-cache; #add_header X-Proxy-Cache $upstream_cache_status; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://tomcat_server_https; }}
• abilitiamo la configurazione appena fatta
sudo ln -s /etc/nginx/sites-available/vm09.kbsb.loc /etc/nginx/sites-enabled/vm09.kbsb.locsudo rm /etc/nginx/sites-enabled/default
• cambiamo l'index default
NB: il file qui di seguito è solo un esempio
sudo vim /var/www/html/index.html
<!doctype html><html lang="en"><head> <meta charset="utf-8"> <title>Home - Alfresco Reverseproxy</title></head><body> <h1 style="text-align: center;">Home - Alfresco Reverseproxy</h1> <p><a href="/alfresco">Alfresco</a><br> <a href="/share">Share</a></p></body></html>
sudo chown www-data:www-data /var/www/html/index.html
• lanciamo Nginx
sudo systemctl start nginx
• avviamo lo stack Alfresco
sudo systemctl start alfresco-stack
• verifichiamo il reverse accedendo all'URL http://www.server.com
• verificato il funzionamento del reverse spegniamo lo stack ed Nginx
sudo systemctl stop alfresco-stacksudo systemctl stop nginx
• impostiamo Nginx come servizio default
sudo systemctl enable nginx
6.2. Attivazione HTTPS
Prima di passare alla parte esecutiva è necessario fare delle puntualizzazioni perché il servizio funzioni:
• in questa architettura la criptazione SSL/TLS è gestita da Nginx, non da Tomcat
• per funzionare è necessario che l'hostname sia FQDN (cioè deve essere reale, ovvero su un DNS pubblico)
• i certificati SSL sono generati da Let’s Encrypt (https://letsencrypt.org/) e gestiti tramite CertBot (https://certbot.eff.org/)
• la parte circa l'installazione e l'attivazione di CertBot non verrà trattata e rimandiamo a queste guide:
• Certbot Instructions (https://certbot.eff.org/instructions?ws=nginx&os=ubuntufocal)
• How To Secure Apache with Let's Encrypt on Ubuntu 22.04 (https://www.digitalocean.com/community/tutorials/how-to-secure-apache-with-let-s-encrypt-on-ubuntu-22-04)
• infine ipotizziamo che il nome FQDN sia www.example.com .
Iniziamo installando CertBot e creando il certificato, come illustrato dalle guida sopra indicate.
A questo punto aggiorniamo il file di configurazione del reverse:
• creiamo il file /etc/nginx/sites-available/www.example.com.conf
sudo vim /etc/nginx/sites-available/www.example.com.conf
# Set proxy cache configproxy_buffering on;proxy_cache_path /var/cache/nginx keys_zone=alfresco-cache:1512m inactive=1d;proxy_cache_key "$scheme$request_method$host$request_uri";
# tomcats we're forwarding toupstream tomcat_server_https { server 127.0.0.1:8080 fail_timeout=0;}upstream tomcat_server_http { server 127.0.0.1:8080 fail_timeout=0;}upstream sharepoint { server 127.0.0.1:7070 fail_timeout=0;}
# Default Redirect HTTP --> HTTPSserver { listen 80 default_server; # access_log /var/www/digitaldsb.it/log/www.example.com_access.log;
server_name www.example.com;
return 301 https://www.example.com$request_uri;}
server { listen 443 ssl default_server; access_log /var/www/digitaldsb.it/log/www.example.com_access.log;
server_name www.example.com;
root /var/www/digitaldsb.it/html; index index.html index.htm index.nginx-debian.html;
ssl_certificate /etc/letsencrypt/live/www.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/www.example.com/privkey.pem; ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5;
location /errorpage { root /var/www/digitaldsb.it/html/error; }
#redirect server error pages to the static page /50x.html error_page 502 503 504 /errorpage/maintenance.html; location = /errorpage/maintenance.html { root /var/www/digitaldsb.it/html/error; }
location / { try_files $uri $uri/ =404; }
location /share { proxy_pass http://tomcat_server_https/share; include /etc/nginx/proxy_params; proxy_set_header X-Forwarded-Proto $scheme; proxy_cache alfresco-cache; #add_header X-Proxy-Cache $upstream_cache_status; }
location /alfresco { proxy_pass http://tomcat_server_https/alfresco; include /etc/nginx/proxy_params; proxy_set_header X-Forwarded-Proto $scheme; proxy_cache alfresco-cache; #add_header X-Proxy-Cache $upstream_cache_status; }
## Forcing Web Browsers to Cache CSS , JS , etc location ~ (^/share/.*\.js$|^/share/.*\.css$|^/share/.*\.gif$|^/share/.*\.png$|^/share/.*\.woff$|^/share/.*\.ttf$|^/share/.*\.eot$|^/share/.*/images/|^/share/.*icons/) { add_header Cache-Control public; #add_header Cache-Control "public, must-revalidate, proxy-revalidate"; expires 7d ; include /etc/nginx/proxy_params; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://tomcat_server_https; proxy_cache alfresco-cache; #add_header X-Proxy-Cache $upstream_cache_status; }
## Forcing Nginx to cache Document Thumbnail Images on Disk , but NOT by the Web Browser
location ~ (^/share/.*/thumbnails/.*$) { proxy_cache_valid 200 301 302 10m ; proxy_cache_valid 404 1m; include /etc/nginx/proxy_params; expires 20m ; proxy_cache alfresco-cache; add_header X-Proxy-Cache $upstream_cache_status; proxy_set_header X-Forwarded-Proto $scheme; proxy_pass http://tomcat_server_https; } # sharepoint config location ~ (^/spp|^/_vti_bin/|^/_vti_history/|^/_vti_inf.html$) { proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-Host $http_host; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-By $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_redirect off; proxy_next_upstream error timeout invalid_header http_500 http_502 http_503; client_max_body_size 0; client_body_buffer_size 128k; proxy_connect_timeout 500; proxy_send_timeout 500; proxy_read_timeout 500; proxy_buffers 32 4k; proxy_headers_hash_max_size 1024; proxy_headers_hash_bucket_size 128; proxy_http_version 1.1; proxy_pass http://sharepoint; proxy_buffering off; }}
• abilitiamo la nuova configurazione appena fatta
sudo ln -s /etc/nginx/sites-available/www.example.com.conf /etc/nginx/sites-enabled/www.example.com.confsudo rm /etc/nginx/sites-enabled/default
• ricarichiamo Nginx
sudo systemctl restart nginx
• avviamo lo stack Alfresco
sudo systemctl start alfresco-stack
• verifichiamo il reverse accedendo all'URL https://www.example.com
• verificato spegniamo lo stack ed Nginx
sudo systemctl stop alfresco-stacksudo systemctl stop nginx
• impostiamo Nginx come servizio default
sudo systemctl enable nginx
6.3. Attivare e Settare il Firewall
Di default Ubuntu ha il firewall non attivo.
Cosa buona e saggia è attivarlo. Terremmo aperte le sole porte 22 (SSH), 80 (HTTP) e 443 (HTTPS):
• installiamo ufw, qualora non fosse ancora installato
sudo apt install ufw
• apriamo le porte 22, 80 e 443
sudo ufw allow sshsudo ufw allow httpsudo ufw allow https
• abilitiamo ufw
sudo ufw enable
• verifichiamo lo stato del firewall
sudo ufw status
7. Tuning di performance
Facciamo alcune azioni di fine tuning.
7.1. Eliminazione .WAR
L'operazione va fatto dopo il deploy e dopo aver fatto girare Alfresco.
Questa operazione alleggerisce Tomcat e accelera l'avvio:
• eliminiamo i WAR
sudo rm /opt/alfresco/tomcat/webapps/*.WAR
• eliminiamo i backup
sudo rm /opt/alfresco/tomcat/webapps/*.bak
• puliamo Tomcat
sudo rm -R /opt/alfresco/tomcat/work/Catalina/localhost/*
7.2. Rimuovere gli AMP
Dopo aver applicato i moduli aggiuntivi possiamo rimuovere i file AMP.
NB: i moduli non si possono applicare 2 volte. Pertanto è saggio rimuovere gli AMP dopo l'applicazione.
sudo rm /opt/alfresco/amps/*sudo rm /opt/alfresco/amps_share/*
7.3. Password secret
Per mettere in produzione un'installazione Alfresco non possiamo tenere le password messe come esempio nella manualistica.
Pertanto la password "secret" usata in questa guida è da cambiare.
Alcuni accorgimenti:
• scegliere e impostare la password prima del primo lancio di Alfresco e di Solr
• se cambiamo la password dopo il primo avvio ricordarsi di:
• pulire Tomcat prima di avviarlo
• cancellare alfresco e archive
• inserire la nuova password in solr.in.sh
• inserire la nuova password in alfresco-global.properties
7.4. Log
I log consumano risorse. Possiamo migliorare le performance riducendo o togliendo i log.
L'alternativa, per un'architettura in produzione, è avere un collect con tool di navigazione e ricerca come ELK, Grafana, ecc...
Procediamo togliendo i log dalle configurazioni in modo da poterli ripristinare al bisogno:
• aggiornare /opt/alfresco/tomcat/bin/catalina.sh come segue
sudo vim /opt/alfresco/tomcat/bin/catalina.sh
[ ... ] # CATALINA_OUT="$CATALINA_BASE"/logs/catalina.out CATALINA_OUT=/dev/null[ ... ]
• aggiornare /opt/alfresco/tomcat/webapps/alfresco/WEB-INF/classes/log4j2.properties
sudo vim /opt/alfresco/tomcat/webapps/alfresco/WEB-INF/classes/log4j2.properties
[ ... ]# appender.rolling.fileName=/opt/alfresco/tomcat/logs/alfresco.logappender.rolling.fileName=/dev/null[ ... ]
• aggiornare ``/opt/alfresco/tomcat/webapps/share/WEB-INF/classes/log4j2.properties``
sudo vim /opt/alfresco/tomcat/webapps/share/WEB-INF/classes/log4j2.properties
[ ... ]# appender.rolling.fileName=/opt/alfresco/tomcat/logs/share.logappender.rolling.fileName=/dev/null[ ... ]
• puliamo Tomcat
sudo rm /opt/alfresco/tomcat/work/Catalina/localhost/*
• aggiorniamo /opt/solr/logs/log4j.properties
sudo vim /opt/solr/logs/log4j.properties
[ ... ]# log4j.appender.file.File=${solr.log}/solr.loglog4j.appender.file.File=/dev/null[ ... ]
7.5. Impostare Xmx Xms per Solr
Il sistema di ricerca Solr è preimpostato con 2GB di Xms e 2GB di Xmx.
Il dimensionamento va bene per un uso base, ma può essere troppo piccolo per un uso in produzione.
Quando il carico d'indicizzazione cresce viene saturata l'Xms e Solr crascia.
Per ovviare al problema basta aumentare la RAM assegnata. Per la quantità giusta è bene procedere in modo empirico con un periodo di monitoraggio del sistema in produzione. Suggeriamo, comunque, di partire da un dimensionamento a 4GB.
Cf.: https://docs.alfresco.com/content-services/community/config/repository/#effects-of-newsize
Per apportare il cambio:
• aggiorniamo /opt/solr/solr.in.sh
sudo vim /opt/solr/solr.in.sh
SOLR_JAVA_MEM="-Xms4g -Xmx4g"[ ... ]
• riavviamo Solr
systemctl restart solr
8. Conclusione
L'installazione e prima configurazione descritta in queste pagine permette di avere un nodo completamente funzionante.
Pur potendolo da subito usare l'installazione come un nodo di produzione bisogna osservare:
• possono essere utili personalizzazioni ulteriori qui non descritte
• a seconda dello scopo possono essere necessarie l'aggiunta di moduli specifici
• l'architettura qui descritta presuppone una situazione semplice.
A valle di questo l'esperienza che si matura con un deploy completamente manuale permette di raggiungere una expertice importate che non si ha con le tecniche docker e\o consultando la documentazione community.
9. Appendice
9.1. Requisiti
Le indicazioni al momento riportate nella documentazione pubblica non sembrano sempre corrette per la versione community.
Cf.: https://docs.alfresco.com/content-services/7.4/support/
Con la versione usata in questa guida l'ambiente e le parti che risultano corrette sono le seguenti:
• Tomcat: versione 9.0.x
• JDK: OpenJava 11.x
• ActiveMQ: 5.17 o superiore
• MariaDB Server: 10.x e 11.x
• MariaDB Connector Java: 2.2.6 o precedenti
Inoltre la guida ufficiale descrive, per l'installazione con Tomcat, la personalizzazione di catalina.bat.
La pratica fa riferimento all'ambiente Windows, non sembra ci sia un riferimento ufficiale a Unix\Mac\Linux. Per quest'ultimo ambiente una buona pratica, apparentemente non documentata, è di usare catalina.sh passando i parametri tramite la variabile JAVA_OPTS=.
Infine, a seconda dei moduli che si desidera aggiungere, è necessario creare anche directory amps_share non presente nel pacchetto ZIP, né descritta nella documentazione.
9.2. Extra
Vale la pena citare alcuni elementi che saranno oggetto di una futura guida.
Sono elementi che non impattano sulla funzionalità, ma servono per le configurazioni di dettaglio e la gestione avanzata.
• JMX: monitoraggio delle risorse impiegate
• Alfresco Administration Console: console di manipolazione e ispezione del singolo nodo e della rete di nodi
• Alfresco WebScripts Home: console di manipolazione e ispezione di Java Script del/i nodo/i
• WebDav: connessione per caricare-scaricare file tramite il protocollo WebDav.
10. Repo, risorse e Webgrafia
10.1. Repo
https://artifacts.alfresco.com/nexus/#nexus-search;gav~org.alfresco~alfresco-content-services-community*~7.4.0~~
https://nexus.alfresco.com/nexus/service/local/repositories/releases/content/org/alfresco/alfresco-content-services-community-distribution/7.4.0.1/alfresco-content-services-community-distribution-7.4.0.1.zip
https://nexus.alfresco.com/nexus/service/local/repositories/releases/content/org/alfresco/alfresco-content-services-share-distribution/7.4.0.1/alfresco-content-services-share-distribution-7.4.0.1.zip
https://nexus.alfresco.com/nexus/service/local/repositories/releases/content/org/alfresco/alfresco-search-services/2.0.7/alfresco-search-services-2.0.7.zip
https://nexus.alfresco.com/nexus/service/local/repositories/releases/content/org/alfresco/alfresco-transform-core-aio/3.1.0/alfresco-transform-core-aio-3.1.0.jar
https://docs.alfresco.com/process-automation/latest/model/connectors/database/#mariadb
10.2. Risorse
Guide
https://javaworld-abhinav.blogspot.com/2021/06/setup-acs70-ass201-and-transformation-service.html
https://javaworld-abhinav.blogspot.com/2022/05/setup-acs-7-ass-2-and-local-windows.html
https://github.com/abhinavmishra14/alfresco7-solr-localtransform-dist-setup
https://docs.alfresco.com/content-services/community/install/zip/
Post Install
https://docs.alfresco.com/content-services/community/install/zip/additions/#post-installation-checks
Certificate SSL/TLS
https://docs.alfresco.com/content-services/community/config/repository/#ssl-repo
Setting, Fixing, ...
https://docs.alfresco.com/content-services/community/config/repository/#effects-of-newsize
ReverseProxy
alfresco-reverse-proxy, https://github.com/ecm4u/alfresco-reverse-proxy
Configure Community Edition to work with a web proxy, https://docs.alfresco.com/content-services/community/config/repository/#configure-community-edition-to-work-with-a-web-proxy
How To Configure Nginx as a Reverse Proxy on Ubuntu 22.04, https://www.digitalocean.com/community/tutorials/how-to-configure-nginx-as-a-reverse-proxy-on-ubuntu-22-04
https://github.com/ecm4u/alfresco-reverse-proxy/tree/master
https://serverfault.com/questions/472491/how-to-set-up-alfresco-share-behind-apache-reverse-proxy
https://www.eisenvault.com/forum/alfresco-community-q-a/how-to-setup-apache-as-a-reverse-proxy-for-alfresco-with-ssl-encryption
https://stackoverflow.com/questions/67303045/how-to-configure-alfresco-6-community-behind-proxy
Netplan + WOL
https://netplan.readthedocs.io/en/0.105/examples.html
https://wiki.ubuntu.com/Netplan/Design
https://askubuntu.com/questions/1244785/trouble-with-wakeonlan-with-ubuntu-20-04
https://www.golinuxcloud.com/wake-on-lan-ubuntu/
https://vitux.com/how-to-configure-networking-with-netplan-on-ubuntu/
MIME type
https://docs.alfresco.com/content-services/community/config/repository/#add-a-mime-type
Impostare cron
https://docs.alfresco.com/content-services/community/config/repository/#defer-the-start-of-cron-based-jobs
Impostare l'FTP interno ad Alfresco
https://docs.alfresco.com/content-services/community/config/file-servers/#configuring-the-ftp-file-server
Chrony
https://ubuntu.com/server/docs/how-to-serve-the-network-time-protocol-with-chrony
Tomcat
https://linuxize.com/post/how-to-install-tomcat-10-on-ubuntu-22-04/
https://docs.alfresco.com/content-services/community/install/zip/tomcat/
MariaDB
https://www.linuxcapable.com/how-to-install-mariadb-on-ubuntu-linux/
https://docs.alfresco.com/content-services/community/config/databases/#mysql-and-mariadb
ActiveMQ
https://docs.alfresco.com/content-services/community/config/activemq/
https://activemq.apache.org/installation.html
https://tecadmin.net/how-to-install-apache-activemq-on-ubuntu-22-04/
Alfresco
https://hub.alfresco.com/t5/alfresco-content-services-blog/alfresco-community-edition-7-4-release-notes/ba-p/316162
https://docs.alfresco.com/content-services/community/install/zip/
https://www.alfresco.com/it/thank-you/thank-you-downloading-alfresco-community-edition
https://hub.alfresco.com/t5/alfresco-content-services-blog/alfresco-community-edition-7-4-release-notes/ba-p/316162
https://nexus.alfresco.com/nexus/#nexus-search;quick~alfresco-content-services-community-distribution
https://docs.alfresco.com/content-services/7.4/support/
Alfresco Transform Service
Install Transform Service, https://docs.alfresco.com/transform-service/latest/install/
Setup ACS-7.x, ASS-2.x and Local Transformation Service using distribution package step by step Part-1, https://javaworld-abhinav.blogspot.com/2021/06/setup-acs70-ass201-and-transformation-service.html
Alfresco 7.3 - Upgrading to Transform Core 3.0.0, https://hub.alfresco.com/t5/alfresco-content-services-blog/alfresco-7-3-upgrading-to-transform-core-3-0-0/ba-p/315364
Alfresco Search Service
Alfresco Search Services, https://docs.alfresco.com/search-services/latest/install/
Setup ACS7.x, ASS2.x and transformation service using distribution package step by step on Linux platform, https://javaworld-abhinav.blogspot.com/2021/06/setup-acs70-ass201-and-transformation-service.html
Setup ACS7.x, ASS2.x and transformation service using distribution package step by step on Windows platform, https://javaworld-abhinav.blogspot.com/2022/05/setup-acs-7-ass-2-and-local-windows.html
Effects of NewSize, https://docs.alfresco.com/content-services/community/config/repository/#effects-of-newsize
Extention
https://nexus.alfresco.com/nexus/content/repositories/releases/org/alfresco/extension-inspector/
https://github.com/Alfresco/alfresco-extension-inspector
https://github.com/Alfresco/docs-alfresco
Keystore
NB: dalla versione 7.x l'uso delle chiavi di criptazione è obbligatoria. Senza Alfresco non si avvia.
https://github.com/Alfresco/alfresco-ssl-generator
https://hub.alfresco.com/t5/alfresco-content-services-forum/getting-error-while-starting-acs-7-0-keystores-are-invalid/m-p/306500#M23919
https://docs.alfresco.com/search-services/latest/config/keys/
https://docs.alfresco.com/content-services/latest/config/mtls/
https://github.com/Alfresco/alfresco-ssl-generator