It is a very common requirement to use different set of available port (s) as per company policy rather than using default port (s) for the applications.
Background:
Before container based environments, we had to follow below given steps in order to change the ports (these points still applies to an environment setup via distribution package):
- Update default connector ports 8080, 8443, 8009 and 8005 to required ports.
- Sometimes we use JPDA_ADDRESS for remote debug which is default '8000' in $ALFRESCO_INSTALL_DIR/tomcat/bin/catalina.sh. If we use remote debug, them update to required port as needed.
- Update the required 'alfresco' and 'share' ports in $ALFRESCO_INSTALL_DIR/tomcat/shared/classes/alfresco-global.properties
- Update the required 'alfresco' ports in $ALFRESCO_INSTALL_DIR/tomcat/shared/classes/alfresco/web-extension/share-config-custom.xml for remote configuration (<config evaluator="string-compare" condition="Remote">).
- http://localhost:{REQUIRED_PORT}/alfresco/s --> DEFAULT: 8080
- Update 'alfresco' endpoint url:
- http://localhost:{REQUIRED_PORT}/alfresco/s --> DEFAULT: 8080
- Update 'alfresco-feed' endpoint url:
- http://localhost:{REQUIRED_PORT}/alfresco/s --> DEFAULT: 8080
- Update 'alfresco-api' endpoint url:
- http://localhost:{REQUIRED_PORT}/alfresco/api --> DEFAULT: 8080
- Update the required 'alfresco' port in 'solrcore.properties' file.
- Find the 'alfresco.port' property in solrcore.properties file and update:
- alfresco.port=<requiredPort>, default : 8080
- For SOLR4, we used below paths:
- $ALFRESCO_INSTALL_DIR/solr4/workspace-SpacesStore/conf/solrcore.properties
- $ALFRESCO_INSTALL_DIR/solr4/archive-SpacesStore/conf/solrcore.properties
- $SOLR_HOME/solrhome/alfresco/conf/solrcore.properties
- $SOLR_HOME/solrhome/archive/conf/solrcore.properties
All the above given steps will be almost same for ACS 6.x as well if you are using standalone installation and not managing the services, images and containers via docker based deployment.
When using docker based deployment, we use docker-compose.yml file to configure all the services which will be used as a base for launching the corresponding containers. We configure all the required ports (host and container ports) in the docker-compose.yml file and expose any ports if required either via docker-compose.yml or DockerFile.
It is possible to change the host ports via docker-compose.yml file but default ports (container ports) which are exposed within docker images (specially connector ports in tomcat which is shipped with acs and share images) can't be changed via docker-compose.yml alone. We have to take help of DockerFile, which can be used to update required ports at the time of build process.
Similarly, if you are using proxy (nginx) then 'ngnix.conf' configuration also needs an update to reference the required ports. By default ngnix will try to forward all requests to '8080' which is default port for acs and share.
It will be like re-builing the original images (acs, share, proxy etc. images) with updated ports and containers will be launced using the updated images.
For some of the servives such as 'postgres', you can change the default port directly from docker-compose.yml as it gets access to command line, it is like executing 'postgres -p 5433' via command line.
We can simply pass the command line param '-p <requiredPort>' or use 'expose' option in docker-compose.yml in the 'postgres' service definition.
For 'solr6 (alfresco-search-service)', we can either update the startup script or update the shared.properties via DockerFile or add SOLR_PORT environment variable in docker-compose.yml. This env variable will be used by jetty server to start service on required port.
Additionally, you can also pass Jvm param using JAVA_OPTS, e.g. -Djetty.port=9999
Change Alfresco, Share, Nginx (Proxy), Solr and Database (postgres) ports with help of DockerFile and docker-compose.yml:
Considering the aforementioned steps for changing the ports, we need to follow the same approach for docker based deployment as well but with help of docker-compose.yml and DockerFile.
I will be using port '7080' instead of '8080' for acs, share and proxy. I will also update the tomcat connector ports to 7005, 7009 and 7443. I will use '5555' instead of '5432' for postgres and '9999' instead of '8983' for solr6.
Here are default ports:
Service
|
Default Ports
|
Note
|
Tomcat connector ports
|
8005, 8080, 8443, 8009
|
Default within tomcat shipped with alfresco
and share images.
|
alfresco
|
8080
|
|
share
|
8080
|
|
proxy
|
80, 8080 -> 8080
|
Default port on proxy(nginx) is 80, where port
8080 is exposed for providing access to alfresco and share. nginx forwards
requests on 8080 (host port) to alfresco’s and share’s port 8080.
We can change the host port to any
other port as well easily. E.g. 81 -> 8080 (Request will come on port 81
which nginx will forward to 8080)
|
postgres
|
5432
|
|
solr6
|
8083 -> 8983
|
8083 is host port and 8983 is container
port. Alfresco uses 8983 to communicate with solr6. To access solr admin,
administrators use 8083
Access via browser: http://localhost:8083/
|
transform-core-aio
|
8090-> 8090
|
Both host and container ports are same
here.
Alfresco uses 8090 to communicate with transformation
services.
We can use the port 8090 to access the transformation
services via browser.
Access via browser: http://localhost:8090/
|
activemq
|
8161 -> 8161 # Web Console
|
Both host and container ports are same
here.
port 8161 can be used for accessing the ‘Web Console’ via browser and alfresco would use the
same port to communicate with activemq.
Access WebConsole via browser: http://localhost:8161/
|
This post has been updated to match the latest ACS version (ACS 7.3) as well.
Let's create some directories for keeping the DockerFile and required configs which will be used for re-building the updated images from OOTB images.
- Create a directory 'configs-to-override' in the same directory where you have kept your 'docker-compose.yml' file.
- Under 'configs-to-override' directory, create following directories:
- Create 'alfresco' directory --> It will be used to keep 'DockerFile' for acs image
- Create an empty 'DockerFile' file which we will use to put build instructions for 'alfresco' service
- Create 'share' directory --> It will be used to keep 'DockerFile' for share image
- Create an empty 'DockerFile' file which we will use to put build instructions for 'share' service
- Create 'proxy' directory --> It will be used to keep 'DockerFile' and 'nginx.conf' file for nginx image
- Create an empty 'DockerFile' file which we will use to put build instructions for 'proxy' service
- Create an empty 'nginx.conf' file which we will use to put proxy configuration for services