Come installare Alfresco 25 da pacchetto ZIP con DB di backend MariaDB.
Alfresco (da poco tempo "Hyland Alfresco") è un'ottimo software ECM (Enterprise Content Management).
Realizzato in Java è indipendente dal sistema operativo, è scalabile, ha un motore di ricerca interno ed è altamente personalizzabile e integrabile.
Nasce come progetto opnesource ed esiste tutt'ora una distribuzione community.
Questa guida descrive l'installazione partendo dal pacchetto ZIP deplyato in Tomcat in un server Ubuntu 24.
Premessa
L'installazione che stiamo per iniziare ha le seguenti caratteristiche:
Hostname: alf.example.com
IP: 10.10.10.10
FQDN: alf.example.com
CNAME: www.example.com
JDK: 17.0.16
ActiveMQ: 5.19.0
Tomcat: 10.1.44
Motore di ricerca: Solr
DataBaase: MariaDB 12.0.2
Libreoffice: 24.2.7.2
Reverse: Nginx
TLS: Certbot\Autofirmato
Directory di installazione: /opt
Opereremo normalmente da una console alfanumerica senza ambiente grafico.
Infine la configurazione di Alfresco sarà minimale, ma completamente funzionante.
L'installazione avverrà con i seguenti passi:
- preparazione del sistema operativo
- installazione di ActiveMQ
- installazione di Tomcat
- installazione di Alfresco
- installazione di Solr
- installazione del servizio di trasformazione
- installazione di ACA (Alfresco Content App)
- installazione di Nginx come reverse
- script per avvio automatico.
Personalizzazione OS
- Iniziamo aggiornando il sistema operativo
sudo apt update && apt upgrade -y && apt autoremove -y && systemctl reboot
- installiamo i tool necessari
sudo apt install -y htop iftop neofetch lnav wget curl net-tools nmap apt-transport-https unzip openssl gitsudo 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-itsudo apt install -y tesseract-ocr tesseract-ocr-ita tesseract-ocr-eng tesseract-ocr-spa tesseract-ocr-fra
- settiamo la rete. Iniziamo creando una copia della configurazione e invocando l'editor
sudo cp -p /etc/netplan/00-installer-config.yaml{,.ORG}sudo nano /etc/netplan/00-installer-config.yaml
- aggiorniamo la configurazione
network: ethernets: enp1s0: dhcp4: no addresses: - 10.10.10.10/24 nameservers: addresses: - 8.8.8.8 search: [] routes: - to: default via: 10.10.10.1 version: 2
- applichiamo l'aggiornamento
sudo netplan trysudo netplan apply
- installiamo NTP
sudo apt install -y ntp ntpdate
- editare /etc/ntpsec/ntp.conf
sudo nano /etc/ntpsec/ntp.conf
- e aggiorniamo con gli NTP server italiani
[ ... ]# 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, sincronizziamo l'ora e verifichiamo
systemctl stop ntpntpdate -q 'server 0.it.pool.ntp.org iburst'ntpdate -q 'server 0.it.pool.ntp.org iburst'systemctl restart ntpntpq -p
- installiamo unoconv
apt install -y unoconv
- installiamo LibreOffice
apt install -y libreoffice
- installiamo ImageMagick
apt install -y imagemagick
- installiamo ExifTool
apt install -y exiftool
- installiamo ffmpeg
apt install -y ffmpeg
- procediamo installando MariaDB. Iniziamo scaricando il DEB per usare i repo ufficiali di MariaDB
wget https://r.mariadb.com/downloads/mariadb_repo_setupsudo bash ./mariadb_repo_setup
- installiamo MariaDB
apt install -y mariadb-server
- attiviamo e avviamo MariaDB
systemctl disable mariadbsystemctl restart mariadbsystemctl status mariadb
- verifichieamo la versione
mariadb --version
- securizziamo MariaDB
mariadb-secure-installationSwitch to unix_socket authentication [Y/n]Change the root password? [Y/n]New password: MiaPass32Prova!Re-enter new password: MiaPass32Prova![ ... ]
- settiamo MariaDB editando /etc/mysql/mariadb.conf.d/50-server.cnf
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
- aggiorniamo come segue
[ ... ]#max_connections = 100max_connections = 275[ ... ]
- riavviamo MariaDB
systemctl restart mariadb
- creare il DB per Alfresco
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;
- installiamo il JDK ed il JRE 17
NB: rimuoviamo il JDK e JRE 21 preinstallato di default e precalente sull'installazione del 17
apt remove -y openjdk-21-jdk openjdk-21-jdk-headlessapt remove -y openjdk-21-jre openjdk-21-jre-headlessapt install -y openjdk-17-jdk openjdk-17-jdk-headless && apt install -y openjdk-17-jre openjdk-17-jre-headless
- verificare la versione installata
java --version
Installazione di ActiveMQ
- Aggiungiamo l'utente di sistema per ActiveMQ
useradd -m -U -d /opt/activemq -s /bin/false activemq
- scarichiamo il pacchetto
cd Tempwget https://dlcdn.apache.org/activemq/5.19.0/apache-activemq-5.19.0-bin.tar.gz
- estraiamo e sistemiamo la sicurezza
sudo tar xfz apache-activemq-5.19.0-bin.tar.gz -C /opt/sudo rm -R /opt/activemqsudo mv /opt/apache-activemq-5.19.0 /opt/activemqsudo chown activemq:activemq -R /opt/activemq
- editiamo il file di configurazione
sudo nano /opt/activemq/conf/jetty.xml
- e aggiorniamolo come segue
NB: con questo cambio ActiveMQ sarà accessibile anche dalla rete
[ ... ] <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 nano /usr/lib/systemd/system/activemq.service
- e inseriamo le seguenti stringhe
[Unit]Description=Apache ActiveMQ Message BrokerAfter=network.target mariadb.service
[Service]Type=forking
User=activemqGroup=activemq
WorkingDirectory=/opt/activemq/binEnvironment="JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64"Environment="ACTIVEMQ_HOME=/opt/activemq"Environment="ACTIVEMQ_BASE=/opt/activemq"Environment="ACTIVEMQ_CONF=/opt/activemq/conf"Environment="ACTIVEMQ_DATA=/opt/activemq/data"
ExecStart=/opt/activemq/bin/activemq startExecStop=/opt/activemq/bin/activemq stop
[Install]WantedBy=multi-user.target
- avviamo e verifichiamo ActiveMQ
sudo systemctl daemon-reloadsudo systemctl start activemqsudo systemctl status activemq
- verifichiamo ActiveMQ accedendo al pannello di controllo all'URL http://alf.example.com:8161/admin e autenticandoci con
Username: admin
Password: admin
- spegniamo e disattiviamo ActiveMQ
sudo systemctl stop activemqsudo systemctl disable activemq
- riportiamo in sicurezza ActiveMQ
sudo nano /opt/activemq/conf/jetty.xml
- e ripristiniamo la precedente configurazione
[ ... ] <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>[ ... ]
Installazione di Tomcat 10
- Scarichiamo la versione 9 di Tomcat
mkdir Tempcd Tempwget https://dlcdn.apache.org/tomcat/tomcat-10/v10.1.44/bin/apache-tomcat-10.1.44.tar.gz
- creiamo l'utente dedicato
mkdir /opt/alfrescouseradd -m -U -d /opt/alfresco/tomcat -s /bin/false tomcat
- estraiamo il pacchetto Tomact e sistemiamo nomi e permessi
sudo tar xfz apache-tomcat-10.1.44.tar.gz -C /opt/alfrescosudo mv /opt/alfresco/apache-tomcat-10.1.44 /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 nano /usr/lib/systemd/system/tomcat.service
- e inseriamo le seguenti stringhe
[Unit]Description=Tomcat 10 servlet containerAfter=network.target alfrescots.service
[Service]Type=forking
User=tomcatGroup=tomcat
Environment="JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64"Environment="CATALINA_PID=/opt/alfresco/tomcat/temp/tomcat.pid"Environment="CATALINA_BASE=/opt/alfresco/tomcat"Environment="CATALINA_HOME=/opt/alfresco/tomcat"# Environment="CATALINA_OPTS=-Xms2048M -Xmx3072M -server -XX:MinRAMPercentage=50 -XX:MaxRAMPercentage=80"Environment="JAVA_OPTS=-Djava.awt.headless=true -Djava.security.egd=file:/dev/./urandom"Environment="JAVA_TOOL_OPTIONS=-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"
ExecStart=/opt/alfresco/tomcat/bin/startup.shExecStop=/opt/alfresco/tomcat/bin/shutdown.sh
[Install]WantedBy=multi-user.target
- carichiamo la nuova unit e testiamola
sudo systemctl daemon-reloadsudo systemctl start tomcatsudo systemctl status tomcat
- verifichiamo il funzionamento di Tomcat accedendo all'URL: http://alf.example.com:8080/
- stoppiamo Tomcat
systemctl stop tomcat
Installazione di Alfresco
- Scaricamento e pubblichiamo il connector MariaDB
cd ~/Tempwget wget https://repo1.maven.org/maven2/org/mariadb/jdbc/mariadb-java-client/2.7.9/mariadb-java-client-2.7.9.jarsudo cp mariadb-java-client-2.7.9.jar /opt/alfresco/tomcat/lib/sudo chown tomcat:tomcat /opt/alfresco/tomcat/lib/mariadb-java-client-2.7.9.jar
- scarichiamo lo zip Alfresco
wget https://nexus.alfresco.com/nexus/repository/releases/org/alfresco/alfresco-content-services-community-distribution/25.2.0/alfresco-content-services-community-distribution-25.2.0.zip
- estraiamo il pacchetto
sudo mkdir /opt/alfresco_datamkdir alfresco-content-services-community-distribution-25.2.0cp alfresco-content-services-community-distribution-25.2.0.zip alfresco-content-services-community-distribution-25.2.0/cd alfresco-content-services-community-distribution-25.2.0unzip alfresco-content-services-community-distribution-25.2.0.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/
- aggiungiamo la classpath per Alfresco
sudo sed -i 's|^shared.loader=$|shared.loader=${catalina.base}/shared/classes,${catalina.base}/shared/lib/*.jar|' /home/ubuntu/tomcat/conf/catalina.properties
- impostiamo il connector di Tomcat
sudo nano /opt/alfresco/tomcat/conf/server.xml
- e personalizziamo come segue
[ ... ] <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" maxHttpHeaderSize="32768" />[ ... ]
- dimensioniamo la RAM
NB: la dimensione della RAM dipende molto dall'uso reale e dalle specifiche del server
sudo nano /opt/alfresco/tomcat/bin/setenv.sh
- e aggiorniamo come segue
[...]## Dimensionamento RAM: necessario aumentarla per gli indici# Farlo anche in Solr altrimenti crasha durante l'attivitàCATALINA_OPTS="-Xms6G -Xmx8G -server -XX:MinRAMPercentage=50 -XX:MaxRAMPercentage=80" # java-memory-settings[...]
- correggiamo la sicurezza
sudo chmod +x /opt/alfresco/tomcat/bin/setenv.shsudo chown tomcat:tomcat /opt/alfresco/tomcat/bin/setenv.sh
- creiamo la configurazione globale di Alfresco
sudo nano /opt/alfresco/tomcat/shared/classes/alfresco-global.properties
- e inseriamo le seguenti stringhe
# The server mode. Set value here# UNKNOWN | TEST | BACKUP | PRODUCTION# system.serverMode=TESTsystem.serverMode=TEST
## Custom content and index data location#dir.root=/opt/alfresco_datadir.keystore=/opt/alfresco_data/keystore/
## Database connection properties#db.name=alfrescodb.username=alfrescodb.password=alfrescodb.host=localhostdb.port=3306#db.pool.max=275db.driver=org.mariadb.jdbc.Driverdb.url=jdbc:mysql://${db.host}:${db.port}/${db.name}?useUnicode=yes&characterEncoding=UTF-8
## Licenze# dir.license.external=/opt/alfresco/licenses
## Solr Configuration#solr.secureComms=secretsolr.sharedSecret=secretsolr.host=localhostsolr.port=8983index.subsystem.name=solr6
# # Transform Configuration#transform.service.enabled=truelocal.transform.service.enabled=truelocalTransform.core-aio.url=http://localhost:8090/
## Events Configuration#messaging.broker.url=failover:(nio://localhost:61616)?timeout=3000&jms.useCompression=true
## URL Generation Parameters#alfresco.context=alfrescoalfresco.host=localhostalfresco.port=8080alfresco.protocol=httpshare.context=shareshare.host=localhostshare.port=8080share.protocol=httpopencmis.context.override=falseopencmis.context.value=opencmis.servletpath.override=falseopencmis.servletpath.value=opencmis.server.override=trueopencmis.server.value=localhost
- installiamo alfresco-share-services.amp
NB: se non fatto Alfresco parte regolarmente, si accede anche a Share, ma non si ha accesso né possibilità di gestione delle directory e non si può caricare-gestire alcun file! In pratica gli manca il modulo share.
sudo java -jar /opt/alfresco/bin/alfresco-mmt.jar install /opt/alfresco/amps /opt/alfresco/tomcat/webapps/alfresco.war -directorysudo java -jar /opt/alfresco/bin/alfresco-mmt.jar list /opt/alfresco/tomcat/webapps/alfresco.war
- setting i log di Alfresco e Share
sudo mkdir /opt/alfresco/tomcat/webapps/alfresco && unzip /opt/alfresco/tomcat/webapps/alfresco.war -d /opt/alfresco/tomcat/webapps/alfrescosudo mkdir /opt/alfresco/tomcat/webapps/share && unzip /opt/alfresco/tomcat/webapps/share.war -d /opt/alfresco/tomcat/webapps/sharesudo sed -i 's|^appender\.rolling\.fileName=alfresco\.log|appender.rolling.fileName=/opt/alfresco/tomcat/logs/alfresco.log|' /opt/alfresco/tomcat/webapps/alfresco/WEB-INF/classes/log4j2.propertiessudo sed -i 's|^appender\.rolling\.fileName=share\.log|appender.rolling.fileName=/opt/alfresco/tomcat/logs/share.log|' /opt/alfresco/tomcat/webapps/share/WEB-INF/classes/log4j2.properties
- rimnuoviamo i pacchetti war
sudo rm /opt/alfresco/tomcat/webapps/alfresco.warsudo rm /opt/alfresco/tomcat/webapps/share.war
- correggiamo la sicurezza
sudo mkdir -p /opt/alfresco/modules/platformsudo mkdir -p /opt/alfresco/modules/sharesudo chown tomcat:tomcat -R /opt/alfresco_data /opt/alfresco
Installiamo Solr
- Scarichiamo il pacchetto Search
cd ~/Tempwget https://nexus.alfresco.com/nexus/repository/releases/org/alfresco/alfresco-search-services/2.0.16/alfresco-search-services-2.0.16.zip
- estraiamo il pacchetto
unzip alfresco-search-services-2.0.16.zip
- creiamo l'utente
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
- editiamo /opt/solr/solrhome/conf/shared.properties
sudo nano /opt/solr/solrhome/conf/shared.properties
- aggiorniamo la configurazione come segue
#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}namealfresco.cross.locale.property.1={http://www.alfresco.org/model/content/1.0}lockOwner
# 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: quando si porta in produzione la memoria XMS e XMX va aumentata almeno a 4GB altrimenti crascia durante l'indicizzazione!
sudo nano /opt/solr/solr.in.sh
- aggiorniamo il file conme segue
[...]SOLR_JAVA_MEM="-Xms4G -Xmx6G"[...]
- aggiorniamo la configurazione di Alfresco
sudo nano /opt/alfresco/tomcat/shared/classes/alfresco-global.properties
- e aggiungiamo le seguenti stringhe
[ ... ]
## Solr Configuration#index.recovery.mode=AUTOindex.subsystem.name=solr6solr.secureComms=secretsolr.sharedSecret=secretsolr.host=localhostsolr.port=8983#solr.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
- creaiamo la unit di avvio per SystemD
sudo nano /usr/lib/systemd/system/solr.service
- popoliamo il file con le seguenti stringhe
[Unit]Description=Alfresco search service SolrAfter=network.target tomcat.serviceRequires=tomcat.service
[Service]Type=forking
User=solrGroup=solr
Environment="JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64"
ExecStart=/opt/solr/solr/bin/solr start -a "-Dcreate.alfresco.defaults=alfresco,archive -Dalfresco.secureComms=secret -Dalfresco.secureComms.secret=secret"ExecStop=/opt/solr/solr/bin/solr stop -all
[Install]WantedBy=multi-user.target
- carichiamo la unit e facciamo un avvio ed un test di accesso di verifica al pannello di Solr
sudo systemctl daemon-reloadsudo systemctl start solrsudo systemctl status solrsudo systemctl stop solrsudo systemctl disable solr
Installiamo il Servizio di Trasformazione
- Installiamo alfresco-pdf-renderer
cd ~/Tempwget https://nexus.alfresco.com/nexus/repository/releases/org/alfresco/alfresco-pdf-renderer/1.3.0-76/alfresco-pdf-renderer-1.3.0-76-linux.tgztar xfz alfresco-pdf-renderer-1.3.0-76-linux.tgzsudo cp 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
wget https://nexus.alfresco.com/nexus/repository/releases/org/alfresco/alfresco-transform-core-aio/5.2.1/alfresco-transform-core-aio-5.2.1.jar
- e copiamolo in /opt/alfresco/bin
sudo cp alfresco-transform-core-aio-5.2.1.jar /opt/alfresco/bin/sudo chmod -x /opt/alfresco/bin/alfresco-transform-core-aio-5.2.1.jarsudo chown tomcat:tomcat /opt/alfresco/bin/alfresco-transform-core-aio-5.2.1.jar
- creiamo lo script di avvio
sudo nano /opt/alfresco/bin/alfrescots.sh
- e popoliamolo come segue
#!/bin/bash
## ver 25.0#
## 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_PDFRENDERER=/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.12/modules-Q16/coders
# -DIMAGEMAGICK_CONFIGTS_IMAGEMAGICK_CONVERT_CONFIG=/usr/lib/x86_64-linux-gnu/ImageMagick-6.9.12/config-Q16
# alfresco-transform-core-aio-5.2.1.jarTS_JAR=/opt/alfresco/bin/alfresco-transform-core-aio-5.2.1.jar
## Function Start Transform Service#TsStart(){nohup java -XX:MinRAMPercentage=50 -XX:MaxRAMPercentage=80 \ -DPDFRENDERER_EXE="$TS_PDFRENDERER" \ -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>> /opt/alfresco/alfrescots.log >>/opt/alfresco/tomcat/log/alfrescots.log \ & echo $! > $PID_PATH_NAME
# /tmp 2>> /dev/null >>/dev/null \
}
## 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 per lo script
sudo chmod +x /opt/alfresco/bin/alfrescots.shsudo chown tomcat:tomcat /opt/alfresco/bin/alfrescots.sh
- infine creiamo e carichiamo la unit per il servizio di trasformazione
sudo nano /usr/lib/systemd/system/alfrescots.service
- e popoliamolo con le seguenti stringhe
[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
Per testare il servizio di trasformazione
- avviare il servizio
sudo systemctl start alfrescots.service
- accediamo all'url http://alf.example.com:8090
- stoppiamo il servizio
sudo systemctl stop alfrescots.service
- riprovare ad accedere all'url http://alf.example.com:8090
Installazione di ACA (Alfresco Content App)
- Installiamo Node.js ed npm
cd ~/Tempcurl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -sudo apt install -y nodejs
- verifichiamo
node -vnpm -v
- cloniamo il git di ACA
cd ~/Tempgit clone https://github.com/Alfresco/alfresco-content-app.gitcd alfresco-content-app
- check dell'ultima versionelatest_tag=$(git ls-remote --tags --sort="v:refname" https://github.com/Alfresco/alfresco-content-app.git \ | grep -o 'refs/tags/[0-9]*\.[0-9]*\.[0-9]*' \ | tail -n 1 \ | sed 's/refs\/tags\///')
# Checkout to the latest version tagecho "Checking out to the latest version: $latest_tag"git checkout tags/$latest_tag -b $latest_tag
- installiamo ACA
npm installnpm run build
Installazione di Nginx come reverse
- Installiamo Nginx
sudo apt install -y nginx
- creiamo le directory per
sudo mkdir -p /opt/www/example.com/{conf,data,html,log,ssl,temp}
- configuriamo Nginx
sudo nano /etc/nginx/sites-available/example.com
- popoliamolo come segue
server { listen 80; server_name www.example.com alf.example.com;
client_max_body_size 0;
set \$allowOriginSite *; proxy_pass_request_headers on; proxy_pass_header Set-Cookie;
proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504; proxy_redirect off; proxy_buffering off; proxy_set_header Host \$host:\$server_port; proxy_set_header X-Real-IP \$remote_addr; proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for; proxy_pass_header Set-Cookie;
root /opt/www/example.com/html; index index.html;
location / { try_files \$uri \$uri/ /index.html; }
location /alfresco/ { proxy_pass http://localhost:8080; }
location /share/ { proxy_pass http://localhost:8080; } }
- attiviamo la configurazione
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/
- controlliamo la corretteza della configurazione
sudo nginx -t
- creiamo una home-page provvisoria
sudo nano /opt/www/example.com/html/index.html
- inseriamo il seguente codice html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="it_IT" xml:lang="it_IT"><head> <title>Alfresco 25</title></head>
<body><p> <h1>Alfresco 25</h1></p><hr><p> <ul> <li><a href="http://www.example.com/alfresco">Alfresco 25</a></li> </ul></p><hr></body></html>
- correggiamo i permessi
sudo chown www-data:www-data /opt/www/kbsb.dsb/html/index.php
Script per avvio automatico
A questo punto creiamo lo script che farà avviare automaticamente tutto lo stack di applicazioni in modo corretto e lo imposteremo per l'avvio automatico all'accensione del server.
- Disattiviamo e stoppiamo le applicazioni dello stack
sudo systemctl stop nginxsudo systemctl stop alfrescotssudo systemctl stop solrsudo systemctl stop tomcatsudo systemctl stop mariadbsudo systemctl stop activemqsudo systemctl disable nginxsudo systemctl disable alfrescotssudo systemctl disable solrsudo systemctl disable tomcatsudo systemctl disable mariadbsudo systemctl disable activemq
- creiamo lo script
sudo nano /etc/init.d/alfresco-stack
- e inseriamo le seguenti stringhe
#!/bin/bash#### BEGIN INIT INFO# Provides: alfresco-stack# Required-Start: $all# Required-Stop:# Default-Start: 2 3 4 5# Default-Stop:# Short-Description: to start automatcly Alfresco### END INIT INFO### 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 systemctl start nginx
return 0}
## Stop dello stack Alfresco#stStop(){ systemctl stop nginx 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 Nginx # systemctl status nginx > /dev/null 2>&1;AS_STATUS=$? if [ "$AS_STATUS" != "3" ] && [ "$ST_ERR" = "0" ]; then ST_ERR=1 fi
# # 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
- impostiamo i permessi per lo script
chmod 754 /etc/init.d/alfresco-stackchown root:root /etc/init.d/alfresco-stack
- aggiorniamo la configurazione di systemd
systemctl daemon-reload
- e testiamo l'avvio dello stack tramite SystemD
systemctl start alfresco-stack
- verifichiamo il funzionamento collegandoci all'URL http://alf.example.com/alfresco .
Le credenziali defaul per autenticarsi sono:
Username: admin
Password: admin
Conclusione
A questo punto tutta l'installazione e la configura dello stack Alfresco per funzionare come singolo nodo è pronta.
Per impostarlo in avvio automatico al boot del server
systemctl enable alfresco-stack
Per disattivarlo come avvio automatico:
systemctl disable alfresco-stack
Per perfezionare l'installazione manca l'aggiunta del certificato TLS per avere connessioni https .
Per fare questo possiamo unasere certbot seguendo uno degli howto in rete come questi
- https://www.hostwinds.it/tutorials/nginx-reverse-proxy-with-ssl
- https://dev.to/yousufbasir/setting-up-nginx-with-certbot-for-https-on-your-web-application-n1i
A questo dobbiamo aggiungere un perfezionamento della configurazione di Alfresco:
- editiamo alfresco-global.properties
sudo nano /opt/alfresco/tomcat/shared/classes/alfresco-global.properties
- e aggiorniamo come segue
[...]alfresco.context=alfrescoalfresco.host=localhostalfresco.port=8080alfresco.protocol=httpsshare.context=shareshare.host=localhostshare.port=8080share.protocol=httpsopencmis.context.override=falseopencmis.context.value=opencmis.servletpath.override=falseopencmis.servletpath.value=opencmis.server.override=trueopencmis.server.value=localhost[...]
- disattiviamo il CSRF decommentando il condition="CSRFPolic
vim /opt/alfresco/tomcat/shared/classes/alfresco/web-extension/share-config-custom.xml
- e aggiorniamo come segue
[...] <!-- Disable the CSRF Token Filter --> <!-- --> <config evaluator="string-compare" condition="CSRFPolicy" replace="true"> <filter/> </config> <!-- -->[...]
A questo punto dobbiamo far ripartire lo stack.
Per completezza possiamo pensare a creare un certificato autofirmato. Questo approccio è l'unico fattibile se la nostra installazione non ha un reale FQDN con la noia che dovremmo al nostro browser ogni volta che il sito va bene anche se il certificato non ha una firma valida.