apt install git docker docker-compose maven mkdir myrepos cd myrepos # you need proxy for git,docker and wget ? # git config --global http.proxy http://myproxy:3128 # git config --global https.proxy http://myproxy:3128 # export https_proxy='myproxy:3128' # echo "HTTPS_PROXY=http://myproxy:3128" >>/etc/default/docker # echo "HTTP_PROXY=http://myproxy:3128" >>/etc/default/docker systemctl restart docker git clone https://github.com/Alfresco/acs-deployment.git cd acs-deployment-master/docker-compose wget https://borwinius.de/wiki/lib/exe/fetch.php?media=linux:alfresco:acs_dk-compose.tar.gz -O acs_dk-compose.tar.gz tar xvfz acs_dk-compose.tar.gz # im tgz sind javascript-,totp-,systemmessages-AMPs drin. # einmaliges Einsetzen des fqdn für SSl nötig sed -i -e 's|mysrv.my.dom.ain|meintollerServer.meineDomain.com|g' share/Dockerfile docker build share -t docker.io/alfresco/alfresco-share:25.2.0 -t docker.io/alfresco/alfresco-share-mytest:25.2.0 docker build repository -t alfresco/alfresco-content-repository-community:25.2.0 -t alfresco/acr-community-mytest:25.2.0
jetzt die Imagebezeichnungen und andere Einträge in compose.yaml entsprechend abändern
sowie eigene Zertifikate konfigurieren.
compose.yaml:
alfresco:
...
-Dshare.host=meintollerServer.meineDomain.com
-Dshare.port=443
-Dshare.protocol=https
-Dalfresco.host=meintollerServer.meineDomain.com
-Dalfresco.port=8080
...
proxy:
image: alfresco/alfresco-acs-nginx:3.4.2
environment:
DOMAIN: "meintollerServer.meineDomain.com"
USE_SSL: "true"
ports:
- "443:443"
volumes:
- /var/dockerconfigs/nginx/etc/nginx/ssl/meintollerServer.key:/etc/nginx/ssl/cert.key
- /var/dockerconfigs/nginx/etc/nginx/ssl/meintollerServer.crt:/etc/nginx/ssl/cert.crt
dann probieren ob der Dockercontainer hochfährt.
docker-compose up
webseite: https://meintollerServer.meineDomain.com
acs_dk-compose.tar.gz
Voraussetzung: Du hast als proxy das Image „alfresco/alfresco-acs-nginx:3.4.2“ installiert
Downloade, entpacke die Datei entrypoint.zip nach /var/dockerconfigs/nginx/ und mache sie ausführbar.
füge in der Datei compose.yaml unter proxy die Umgebungsvariable REWRITE_TO „/share“ unter environment: hinzu.
proxy: ... environment: ... REWRITE_TO "/share" ...
füge in der Datei compose.yaml die Zeile /var/dockerconfigs/nginx/entrypoint.sh:/entrypoint.sh unter volumes: hinzu.
volumes: ... /var/dockerconfigs/nginx/entrypoint.sh:/entrypoint.sh ...
starte docker neu und prüfe ob die Umleitung von https://myalfsrv nach https://myalfsrv/share funktioniert.
Ende
AMP-Datei für die Erstellung von Projektseiten:

createprojectsites_share.amp.zip
.zip am Ende der Datei entfernen.amps_share kopieren und mit /bin/apply_amps.sh oder mitjava -jar bin/alfresco-mmt.jar install amps_share/createprojectsites_share.amp tomcat/webapps/share.war
AMP-Datei getestet mit acs 6.2, 7.0, 25.2.0(auf docker).
wenn benötigt, sollte die Site RM für Recordsmanagement vorher installiert worden sein.
cmisabfrage nach Projektseiten:
SELECT P.cmis:name FROM st:site AS P JOIN st:sites AS S on P.st:sitePreset = S.st:sitePreset WHERE P.st:sitePreset = 'Projectsite'
Die einfachen Benutzer sollen selbst keine Sites erstellen können.
Die AMPS von https://github.com/jpotts/share-site-creators funktionieren manchmal nicht.
Dann muss man sich mit der Anleitung von http://blog.ingen.at/2014/02/alfresco-share-remove-create-site-link.html?m=1 behelfen.
Dadurch wird der Menüpunkt entfernt.
Die vier Dateien müssen in das Verzeichnis docker-compose/share/configs/ kopiert werden.
<extension> <modules> <module> <id>Remove create site menu option for non admin users</id> <version>1.0</version> <customizations> <customization> <targetPackageRoot>org.alfresco.share.header</targetPackageRoot> <sourcePackageRoot>rmcreatesite.header</sourcePackageRoot> </customization> <customization> <targetPackageRoot>org.alfresco.components.dashlets</targetPackageRoot> <sourcePackageRoot>rmcreatesite.dashlets</sourcePackageRoot> </customization> </customizations> </module> </modules> </extension>
//Find the "Sites" menu...
var sitesMenu = widgetUtils.findObject(model.jsonModel, "id", "HEADER_SITES_MENU");
if (sitesMenu != null) {
if (!user.isAdmin) {
sitesMenu.config.showCreateSite = false;
}
}
if (!user.isAdmin) {
model.showCreateSite = false;
}
if (args.dashboardType == "user" && !user.isAdmin) {
model.columns[1].actionMsg = null;
model.columns[1].actionHref = null;
}
anschließend muss das share/Dockerfile angepasst werden damit die Dateien richtig platziert werden:
... RUN mkdir -p $TOMCAT_DIR/shared/classes/alfresco/web-extension/site-data/extension RUN mkdir -p $TOMCAT_DIR/shared/classes/alfresco/web-extension/site-webscripts/rmcreatesite/header RUN mkdir -p $TOMCAT_DIR/shared/classes/alfresco/web-extension/site-webscripts/rmcreatesite/dashlets ADD ./configs/remove-create-site-extension.xml $TOMCAT_DIR/shared/classes/alfresco/web-extension/site-data/extension/ ADD ./configs/share-header.get.js $TOMCAT_DIR/shared/classes/alfresco/web-extension/site-webscripts/rmcreatesite/header/ ADD ./configs/my-sites.get.js $TOMCAT_DIR/shared/classes/alfresco/web-extension/site-webscripts/rmcreatesite/dashlets/ ADD ./configs/dynamic-welcome.get.js $TOMCAT_DIR/shared/classes/alfresco/web-extension/site-webscripts/rmcreatesite/dashlets/ ...
dann muss natürlich noch ein docker build erfolgen.
cd mygitrepos/acs-deployment-master/docker-compose/ docker build share -t docker.io/alfresco/alfresco-share:25.2.0 -t docker.io/alfresco/alfresco-share-mytest:25.2.0 docker-compose up -d
Damit kann ein versierter benutzer aber immer noch per Curl einen neue Site erstellen.
Ende
Die Datei „mytomcat/webapps/share/WEB-INF/classes/alfresco/site-webscripts/org/alfresco/components/footer/footer.get_de.properties“
rauskopieren, anpassen und angepasste Datei kopieren nach:
mygitrepos/acs-deployment-master/docker-compose/share/configs/
Datei in share-Dockerfile integrieren mittels:
ADD ./conf/footer.get_de.properties $TOMCAT_DIR/webapps/share/WEB-INF/classes/alfresco/site-webscripts/org/alfresco/components/footer/
dann noch ein Docker build durchführen:
cd acs-deployment-master/docker-compose docker build share -t docker.io/alfresco/alfresco-share:25.2.0 -t docker.io/alfresco/alfresco-share-mytest:25.2.0 docker-compose down docker-compose up -d
Ende
alle 10 Minuten Dateien ermitteln, die den Aspect „generalclassifiable“ noch nicht haben und diesen zufügen.
Dazu die folgende Datei in das Verzeichnis mytomcat/shared/classes/alfresco/extension/ reinkopieren und neustarten.
<?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'> <beans> <!-- Define the model factory used to generate object models suitable for use with freemarker templates. --> <bean id="templateActionModelFactory" class="org.alfresco.repo.action.scheduled.FreeMarkerWithLuceneExtensionsModelFactory"> <property name="serviceRegistry"> <ref bean="ServiceRegistry"/> </property> </bean> <!-- An example action template that defines an action to add the generalclassifiable aspect to all nodes that do not have and add a category defined by path. --> <bean id="addClassifiableAspectAction" class="org.alfresco.repo.action.scheduled.SimpleTemplateActionDefinition"> <property name="actionName"> <value>add-features</value> </property> <property name="parameterTemplates"> <map> <entry> <key> <value>aspect-name</value> </key> <value>{http://www.alfresco.org/model/content/1.0}generalclassifiable</value> </entry> <entry> <key> <value>{http://www.alfresco.org/model/content/1.0}categories</value> </key> <!-- Note - FreeMarker ${..} entries must be escaped in Spring context files <value>\$\{selectSingleNode('workspace://SpacesStore', 'lucene', 'PATH:"/cm:generalclassifiable/cm:Languages/cm:English"' )\}</value> --> <value>\$\{selectSingleNode('workspace://SpacesStore', 'lucene', 'PATH:"/cm:generalclassifiable"' )\}</value> </entry> </map> </property> <property name="templateActionModelFactory"> <ref bean="templateActionModelFactory"/> </property> <property name="dictionaryService"> <ref bean="DictionaryService"/> </property> <property name="actionService"> <ref bean="ActionService"/> </property> <property name="templateService"> <ref bean="TemplateService"/> </property> </bean> <!-- ######################################################################### --> <bean id="addClassifiableAspectEveryTenMinutes" class="org.alfresco.repo.action.scheduled.CronScheduledQueryBasedTemplateActionDefinition"> <property name="transactionMode"> <value>UNTIL_FIRST_FAILURE</value> </property> <property name="compensatingActionMode"> <value>IGNORE</value> </property> <property name="searchService"> <ref bean="SearchService"/> </property> <property name="templateService"> <ref bean="TemplateService"/> </property> <property name="queryLanguage"> <value>lucene</value> </property> <property name="stores"> <list> <value>workspace://SpacesStore</value> </list> </property> <!-- Find all nodes that do not have the aspect --> <property name="queryTemplate"> <value>PATH:"//\*" -ASPECT:"{http://www.alfresco.org/model/content/1.0}generalclassifiable"</value> </property> <property name="cronExpression"> <value>0 0/10 * * * ?</value> </property> <property name="jobName"> <value>jobeveryTenMinutes</value> </property> <property name="jobGroup"> <value>jobGroup</value> </property> <property name="triggerName"> <value>triggerA</value> </property> <property name="triggerGroup"> <value>triggerGroup</value> </property> <property name="scheduler"> <ref bean="schedulerFactory"/> </property> <property name="actionService"> <ref bean="ActionService"/> </property> <property name="templateActionModelFactory"> <ref bean="templateActionModelFactory"/> </property> <property name="templateActionDefinition"> <ref bean="addClassifiableAspectAction"/> </property> <property name="transactionService"> <ref bean="TransactionService"/> </property> <property name="runAsUser"> <value>System</value> </property> </bean> </beans>
Ende
Fehler: nach einer Alfresoanpassung startet Docker nicht mehr. Auch die Rücknahme der Anpassung bringt keine Änderung.
Lösung: alle Volumes löschen und neu aus dem Internet ziehen.
docker volume prune docker system prune -a
dann repository und share neu builden und wieder starten.
cd acs-deployment-master/docker-compose docker build repository -t alfresco/alfresco-content-repository-community:25.2.0 -t alfresco/acr-community-mytest:25.2.0 docker build share -t docker.io/alfresco/alfresco-share:25.2.0 -t docker.io/alfresco/alfresco-share-mytest:25.2.0 docker-compose down docker-compose up -d
—-
/etc/mc/mc.ext.ini erweitern mit:
[jar-by-shell] Shell=.jar ShellIgnoreCase=true Open=%cd %p/uzip:// View=%view{ascii} /usr/lib/mc/ext.d/archive.sh view zip [amp-by-shell] Shell=.amp ShellIgnoreCase=true Open=%cd %p/uzip:// View=%view{ascii} /usr/lib/mc/ext.d/archive.sh view zip
ps -eo pid,comm,lstart,args | grep java
https://localhost:8443/solr
http://localhost:8080/solr4/admin/cores?action=FIX http://localhost:8080/solr4/admin/cores?action=REINDEX&txid=1&acltxid=2&nodeid=3&aclid=4
../solr/bin/solr start -a "-Dcreate.alfresco.defaults=alfresco,archive"
apt install libreoffice imagemagick-6.q16hdri
start und restart der Datei localTransformationService.sh anpassen:
...
LOCAL_LIBREOFFICE=/usr/lib/libreoffice
LOCAL_IMAGEMAGICK=/usr/lib/x86_64-linux-gnu/ImageMagick-6.9.11
...
nohup java -XX:MinRAMPercentage=30 -XX:MaxRAMPercentage=50 \
-DPDFRENDERER_EXE="$LOCAL_TRANSFORM_SERVICE_HOME/alfresco-pdf-renderer/alfresco-pdf-renderer" \
-DLIBREOFFICE_HOME="$LOCAL_LIBREOFFICE" \
-DIMAGEMAGICK_ROOT="$LOCAL_IMAGEMAGICK" \
-DIMAGEMAGICK_DYN="$LOCAL_IMAGEMAGICK" \
-DIMAGEMAGICK_EXE="/usr/bin/convert" \
-DIMAGEMAGICK_CODERS="$LOCAL_IMAGEMAGICK/modules-Q16HDRI/coders" \
-DIMAGEMAGICK_CONFIG="$LOCAL_IMAGEMAGICK/config-Q16HDRI" \
-DACTIVEMQ_URL="failover:(tcp://localhost:61616)?timeout=3000" \
-jar $LOCAL_TRANSFORM_SERVICE_HOME/bin/alfresco-transform-core-aio-boot-2.4.0.jar /tmp 2>> /dev/null >>/dev/null & echo $! > $PID_PATH_NAME
...
/usr/share/tomcat6/shared/alfresco/extension/license verschieben.java -jar /opt/alfresco/bin/alfresco-mmt.jar list /opt/alfresco/tomcat/webapps/alfresco.war
Abfrage auf 20000 vergrößern: in Datei alfresco-global.properties 2 Zeilen einfügen und alfresco neustarten
Achtung! die Abfragen belasten das System
system.acl.maxPermissionChecks=20000 solr.query.maqximumResultsFromUnlimitedQuery=20000
synchronization.import.cron=0 0/30 * * 1-5 ?
alf_data/solr/archive-SpaceStore/conf/solrcore.properties alf_data/solr/workspace-SpaceStore/conf/solrcore.properties
solr testweise im Vordergrund starten:
alfresco-search-service/solr/bin/solr start -f -force
solr status anzeigen:
alfresco-search-service/solr/bin/solr status
import org.apache.chemistry.opencmis.commons.* import org.apache.chemistry.opencmis.commons.data.* import org.apache.chemistry.opencmis.commons.enums.* import org.apache.chemistry.opencmis.client.api.* import org.apache.chemistry.opencmis.client.util.* Document file = (Document) session.GetObject("workspace://SpaceStore/abcde1234-5678-hijk-..."); def cmis = new scripts.CMIS(session) cmis.download(file, "c:\\test\\DOKTEST.docx")
curl -v -X DELETE "http://myadmin:mypassword@myalfresco:8080/alfresco/service/slingshot/doclib/action/file/site/mysite/documentLibrary/myfile.txt"
oder über selenium:
//vorher: export CLASSPATH=".:selenium-server-standalone-3.13.0.jar" import java.io.IOException; import org.openqa.selenium.chrome.ChromeOptions; import org.openqa.selenium.chrome.ChromeDriver; import org.openqa.selenium.*; public class DelMyFile { public static void main(String[] args) throws IOException, InterruptedException { String sPage = "https://myalfresco.my.dom.ain/share/page/"; String sUser = "myuser"; String sPass = "mypassword"; String sDokp = "https://myalfresco.my.dom.ain/share/page/site/mysite/document-details?nodeRef=workspace://SpacesStore/abcd1234-76de-444b-9ff5-4e93faaa2c35"; String delbutton = "/html/body/div[2]/div[1]/div[3]/span/span[1]/span/button"; System.setProperty("webdriver.chrome.driver", "/usr/bin/chromedriver"); ChromeOptions chromeOptions = new ChromeOptions(); chromeOptions.addArguments("--headless"); chromeOptions.addArguments("--no-sandbox"); WebDriver driver = new ChromeDriver(chromeOptions); driver.get(sPage); String titlelogin = driver.getTitle(); System.out.println("The title of the Webpage is: " +titlelogin); WebElement userfield = driver.findElement(By.id("username")); WebElement passfield = driver.findElement(By.id("password")); WebElement loginbutton = driver.findElement(By.id("btn-login")); if (driver.getPageSource().contains("username")) { System.out.println("enter username"); userfield.clear(); userfield.sendKeys(sUser); System.out.println("enter password"); passfield.clear(); passfield.sendKeys(sPass); System.out.println("enter loginbutton"); Thread.sleep(1000); loginbutton.click(); String title = driver.getTitle(); System.out.println("The title of the Webpage is: " +title); System.out.println("User "+sUser+" logged in successfully"); // öffne Dokumentenwebseite und lösche diese driver.get(sDokp); title = driver.getTitle(); System.out.println("The title of the Webpage is: " +title); System.out.println("Deleting file : " +sDokp); WebElement deletefield = driver.findElement(By.linkText("Delete Document")); deletefield.click(); deletefield = driver.findElement(By.xpath(delbutton)); deletefield.click(); } else { System.out.println("Fail"); } driver.close(); driver.quit(); } }
ändern der rowsPerPage von 50 auf 100 in Datei tomcatshare/webapps/share/components/console/trashcan.js und der trashcan-min.js .
dann auf https://myalfrescosrv/alfresco/service/index Refresh Webscripts und Clear Cache.
* auf dem alfrescoserver im tmp/-Verzeichnis ein Unterverzeichnis(z.B. import/) erstellen und mit Verzeichnissen und Dateien füllen und dafür Leserechte für tomcat konfigurieren.
* Website https://myecms.my.dom.ain/alfresco/service/bulkfsimport aufrufen und anmelden
"Import directory:" /tmp/import/ "Target space(Noderef or Path):" /Company Home/Sites/exitierendeSite/documentLibrary/ [Initiate Bulk import]
* Prüfen ob die Verzeichnisse und Dateien in die Site importiert wurden.
* importierte Verzeichnisse in „import“ wieder löschen.
oder
* auf dem alfrescoserver im …contentstore/-Verzeichnis ein Unterverzeichnis(z.B. import/) erstellen und mit Verzeichnissen und Dateien füllen und dafür Leserechte für tomcat konfigurieren.
* Webseite https://myecms.my.dom.ain/alfresco/service/bulkfsimport/inplace aufrufen und anmelden
"Importverzeichnispath, relativ zum Store:" import "Content Store:" default "Pfad im Ziel Repository:" /Company Home/Sites/exitierendeSite/documentLibrary/ [Massenimport starten]
* Prüfen ob die Verzeichnisse und Dateien in die Site importiert wurden. * importierte Verzeichnisse in „import“ wieder löschen.
curl -u admin:geheim "http://localhost:8080/alfresco/service/api/audit/control"
Eintrag in alfresco-global.properties:
server.allowWrite=false
Eintrag in alfresco-global.properties:
server.allowedusers=John,Paul,George,Ringo
ldap.synchronization.full=true ldap.synchronization.full.cronExpression 0 0/4 * * ?
SELECT D.* FROM cmis:document as D JOIN cm:checkedOut as T ON D.cmis:objectID = T.cmis.objectId
oder in der Website nach „Arbeitskopie“ suchen und das Bearbeiten abbrechen
in Webseite „View Working Copy“ / „Cancel Editing“
curl -u admin:meinpasswort "http://localhost:8080/alfresco/s/api/people?maxResults=2500" curl -u admin:admin "http://localhost:8080/alfresco/s/api/people?maxResults=2500" | grep userName | wc -l