├── .gitignore ├── README.md ├── ansible.cfg ├── copyAlfrescoConfig.yml ├── copyAllAlfrescoConfig.yml ├── copySolrConfig.yml ├── copySolrCoreConfig.yml ├── files ├── alfresco-jmxrmi.access └── web-scripts-config-custom.xml ├── group_vars ├── alfresco_dev │ └── vars ├── alfresco_prod │ └── vars ├── alfresco_test │ └── vars ├── all │ └── vars ├── solr_dev │ └── vars ├── solr_prod │ └── vars └── solr_test │ └── vars ├── installActivemq.yml ├── installAlfresco.yml ├── installSearch.yml ├── inventory ├── local ├── README.md ├── Vagrantfile └── provisioning │ ├── files │ ├── limits.conf │ ├── pg_hba.conf │ └── sysctl.conf │ ├── playbook.yml │ └── tasks │ ├── doInstallImageMagick.yml │ ├── doInstallJava.yml │ ├── doInstallLibreOffice.yml │ └── doInstallPostgres.yml ├── removeSolrIndexMetadata.yml ├── tasks ├── doApplyAmps.yml ├── doCopyActivemqConfig.yml ├── doCopyAlfrescoConfig.yml ├── doCopyAmps.yml ├── doCopyGlobalProperties.yml ├── doCopyLDAPConfig.yml ├── doCopyLicense.yml ├── doCopyShareConfig.yml ├── doCopySolrConfig.yml ├── doCopySolrCoreConfig.yml ├── doCopyTomcatConfig.yml ├── doInstallAOS.yml ├── doInstallActivemq.yml ├── doInstallAlfresco.yml ├── doInstallPDFRenderer.yml ├── doInstallSearch.yml ├── doInstallTomcat.yml └── doSetupDirectories.yml └── templates ├── activemq-env.j2 ├── alfresco-global.properties.j2 ├── alfresco-jmxrmi.password.j2 ├── catalina.sh.j2 ├── ctl.sh.j2 ├── custom-slingshot-application-context.xml.j2 ├── server.xml.j2 ├── setenv.sh.j2 ├── share-config-custom.xml.j2 ├── shared.properties.j2 ├── solr.in.sh.j2 ├── solrconfig.xml.alfresco.j2 ├── solrconfig.xml.archive.j2 ├── solrcore.properties.alfresco.j2 ├── solrcore.properties.archive.j2 └── web.xml.j2 /.gitignore: -------------------------------------------------------------------------------- 1 | files/third-party 2 | local/provisioning/files/third-party 3 | local/.vagrant 4 | .vault-passwd 5 | files/certs 6 | group_vars/all/vault 7 | group_vars/alfresco_dev/vault 8 | group_vars/alfresco_test/vault 9 | group_vars/alfresco_prod/vault 10 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Example Ansible Alfresco Setup 2 | 3 | This project is an example of one way to automate Alfresco installation and 4 | configuration management. 5 | 6 | ## Setup 7 | 8 | Here are the high-level steps you'll need to perform before running any of the 9 | playbooks with Ansible: 10 | 11 | 1. Setup SSH Keys 12 | 2. Clone this project to your local machine. 13 | 3. Edit the inventory file. Add your Alfresco and SOLR hosts to the appropriate 14 | groups. It is okay if the Alfresco and SOLR machine are the same. 15 | 4. Edit the group_vars for the groups you just populated in the inventory file 16 | to override the variables declared in group_var/all with values specific to the 17 | group. 18 | 5. Setup Ansible Vault to encrypt passwords 19 | 6. Collect dependencies such as the ACS distribution zip, ASS distribution zip, 20 | Tomcat, ActiveMQ, and database driver. 21 | 22 | Let's look at some of these setup steps in further detail. 23 | 24 | ### Setup SSH keys 25 | 26 | The easiest way to authenticate with each of the machines in your inventory is 27 | to use SSH keys. For example, if the user you will run Alfresco and SOLR with 28 | is "alfresco" make sure you can ssh to each box in your inventory as the 29 | alfresco user without providing a password. 30 | 31 | The steps to set this up are well-documented online, but it typically involves: 32 | 33 | ssh-keygen -t rsa 34 | ssh-copy-id alfresco@198.51.100.0 35 | 36 | And you may want to edit ~/.ssh/config on your local machine so that you don't 37 | have to specify the SSH key when using ssh or scp: 38 | 39 | Host alfresco.someco.com 40 | IdentityFile ~/.ssh/someco_id_rsa 41 | 42 | ### Edit the inventory file 43 | 44 | The inventory file tells Ansible about your environments, including each host 45 | name and the role it plays in your stack. 46 | 47 | In this project, the ansible.cfg file specifies that our default inventory file 48 | is named "inventory" and lives in the root of the project. 49 | 50 | The inventory file is pre-populated with sample groups that assume you have 51 | three environments, dev, test, and prod. There is one group each for Alfresco 52 | and SOLR per environment for a total of six groups. 53 | 54 | The "local" group is used for testing the playbook using local virtual machines 55 | managed by Vagrant and can be ignored. If you want to learn more about how that 56 | works, see the README.md file in the local directory. 57 | 58 | ### Edit group variables 59 | 60 | Ansible Templates have variables and the value of those variables can differ by 61 | group. The group_vars directory has one folder per group. Within that there is 62 | a vars file and a vault file (see next section on Vault). 63 | 64 | There is a special group named "all". The vars file in the group_vars/all 65 | directory defines default values for all variables. If you introduce new 66 | variables, make sure you add them to group\_vars/all/vars. 67 | 68 | Each group can optionally override the value declared in all by specifying a 69 | new value for that variable in its own group\_vars vars file. 70 | 71 | For example, the default database name is declared as "alfresco" in all: 72 | 73 | alf_db_name: alfresco 74 | 75 | Suppose that in the dev environment we want to name the database something else. 76 | To do that, we'd edit group\_vars/alfresco\_dev/vars with: 77 | 78 | alf_db_name: alfrescodev 79 | 80 | In this example, all templates rendered for all servers in the alfresco_dev 81 | group will have "alfrescodev" set as the value for alf\_db\_name. 82 | 83 | Here are some key variables you should review before running: 84 | 85 | * alf_home: The Alfresco home directory. Typically should be a soft link to a 86 | version specific directory. 87 | * alf_install_dir: A version specific directory where Alfresco is installed. 88 | * alf_archive: The file name of the ACS distribution zip. 89 | * tomcat_archive: The file name of the Apache Tomcat tar file. 90 | * search_archive: The file name of the Alfresco Search Services distribution zip. 91 | * alf_db_driver: The hibernate dialect. 92 | * alf_db_driver_file: The file name of the database driver. 93 | * activemq_archive: The file name of the Apache ActiveMQ tar file. 94 | * alf_java_home: The path to the Java home directory. 95 | 96 | It's best to rely on group_vars as much as possible, but if you need to you can 97 | also have host-specific variables by creating a directory called "host_vars" 98 | and creating directories named for specific hosts below that. 99 | 100 | ### Managing secrets using Ansible Vault 101 | 102 | The [Ansible Vault docs](https://docs.ansible.com/ansible/latest/user_guide/vault.html) 103 | are worth reading, but here's how it works at a high-level: 104 | 105 | * Each group folder has a file called vars for that group's plain-text 106 | variables, and, optionally, a file called vault for that group's encrypted 107 | variables. 108 | * The ansible.cfg file points to the Ansible Vault password file location which 109 | is .vault-passwd. This password should be shared with your team, but don't 110 | check it in to source code control. NOTE: This file is not distributed as part 111 | of this project. You'll need to create your own. To do that, just create a file 112 | named ".vault-passwd" and put it in the root of your project (adjacent to this 113 | README.md file). The file should contain one line with the value of your vault 114 | password. 115 | * Variables that need to be encrypted will have a plain variable name and a 116 | vault variable name. For example, in group_vars/all/vars the following will use 117 | the value from the vault for the Alfresco DB password: 118 | 119 | alf_db_password: "{{ vault_alf_db_password }}" 120 | 121 | * From the root of the project, use `ansible-vault edit group_vars/all/vault` 122 | to edit a vault file (in this example, it is the all group, but each group can 123 | have its own vault file). 124 | * Ansible Vault will launch a configurable editor. On save, the value will be 125 | encrypted using the Ansible Vault password. 126 | * To set values for the vault variables that are used in this project, copy and 127 | paste the following into your vault file (use whatever values you want, these 128 | mimic what used to be set by the installer): 129 | 130 | vault_alf_db_password: admin 131 | vault_alf_initial_admin_password: "209c6174da490caeb422f3fa5a7ae634" 132 | vault_alf_jmx_monitor_password: monitor_password 133 | vault_alf_jmx_control_password: control_password 134 | vault_alf_keystore_password: kT9X6oe68t 135 | vault_alf_truststore_password: kT9X6oe68t 136 | 137 | * When setting up a new vault for the first time use `ansible-vault encrypt group_vars/all/vault` to encrypt the file. After that, just use `ansible-vault edit group_vars/all/vault`. 138 | * You should now have an encrypted vault file that uses your own vault password 139 | that is stored in .vault-passwd. When you do `ansible-vault edit` you should 140 | see the values for the database password, JMX passwords, and key/truststore 141 | passwords. 142 | 143 | Remember that secrets are only encrypted on your local machine. Ansible 144 | decrypts the value in memory when the playbook runs, and then delivers the 145 | value to the target in plain text. 146 | 147 | ### Gathering Dependencies 148 | 149 | If you are using the playbook to install Alfresco Content Services and/or 150 | Alfresco Search Services you will need to gather a few dependencies. Here is 151 | a list of what you need and where they go: 152 | 153 | |File Description|Example|Source|Put It Here| 154 | |----------------|-------|------|-----------| 155 | |ACS Distribution|alfresco-content-services-community-distribution-6.2.0-ga.zip|alfresco.com (or support for Enterprise)|files/third-party| 156 | |Apache Tomcat|apache-tomcat-8.5.34.tar.gz|tomcat.apache.com|files/third-party| 157 | |ASS Distribution|alfresco-search-services-1.4.0.zip|alfresco.com|files/third-party| 158 | |Database driver|postgresql-42.2.1.jar|Database vendor|files/third-party| 159 | |Apache ActiveMQ|apache-activemq-5.15.6-bin.tar.gz|activemq.apache.com|files/third-party| 160 | 161 | You can optionally deploy AMPs as part of installation or as a separate 162 | playbook. Put AMPs in files/third-party/amps or files/third-party/amps_share 163 | depending on what type of AMP it is. 164 | 165 | Note that AOS and Share Services AMPs are shipped with the distribution ZIP so 166 | there is no need to put those in the amps/amps_share directory with custom or 167 | third-party AMPs. 168 | 169 | ## Installing Alfresco and Search 170 | 171 | ### Prepare the target machines 172 | 173 | The installation playbook assumes you do not have root access to the target 174 | machines. It assumes certain tasks have already been performed. You'll need to 175 | perform these tasks before running the install playbook: 176 | 177 | * Create an alfresco user and group 178 | * Create an install directory owned by the alfresco user and group 179 | * Increase file handles 180 | * Install Java 181 | * Install a database (if it is going to be local) 182 | * Install LibreOffice 183 | * Install ImageMagick 184 | * Open appropriate ports in the firewall 185 | * Create init.d/systemctl scripts for Alfresco and ActiveMQ 186 | * Attach and mount any needed NFS mounts or other storage volumes 187 | 188 | If you have root access to the server (either directly or via sudo), you can 189 | modify the playbook to perform all of these tasks for you. 190 | 191 | ### Run the playbook to install Alfresco Content Services 192 | 193 | Once all pre-requisites are in place, install Alfresco by running: 194 | 195 | ansible-playbook installAlfresco.yml --extra-vars="hosts=alfresco_dev" 196 | 197 | Where "alfresco_dev" is the desired group. 198 | 199 | SSH to each Alfresco server and start up ActiveMQ and ACS: 200 | 201 | cd /opt/alfresco 202 | ./activemq/bin/activemq start 203 | ./tomcat/bin/startup.sh 204 | 205 | The startup commands might look a little different if you have init.d/systemctl 206 | scripts in place. 207 | 208 | ### Run the playbook to install Alfresco Search Services 209 | 210 | Now install Alfresco Search Services by running: 211 | 212 | ansible-playbook installSearch.yml --extra-vars="hosts=solr_dev" 213 | 214 | Next, SSH to each SOLR server and start it up so it can init the cores: 215 | 216 | cd /opt/alfresco/alfresco-search-services 217 | ./solr/bin/solr start -a "-Dcreate.alfresco.defaults=alfresco,archive" 218 | 219 | Let it populate the core configurations, then: 220 | 221 | ./solr/bin/solr stop 222 | 223 | Back on your local machine, run a playbook to remove any indices that were 224 | created: 225 | 226 | ansible-playbook removeSolrIndexMetadata.yml --extra-vars="hosts=solr_dev" 227 | 228 | Then, run a playbook to copy the SOLR core config into place: 229 | 230 | ansible-playbook copySolrCoreConfig.yml --extra-vars="hosts=solr_dev" 231 | 232 | Finally, SSH to each SOLR server and start it up: 233 | 234 | cd /opt/alfresco/alfresco-search-services 235 | ./solr/bin/solr start 236 | 237 | ## Copying Configuration Files 238 | 239 | The installation playbooks copy Alfresco and SOLR configuration files to the 240 | servers in the target group for you. Outside of an installation or upgrade you 241 | may need to deploy configuration updates. To do that, run one of the "copy" 242 | playbooks: 243 | 244 | ansible-playbook copyAllAlfrescoConfig.yml --extra-vars="hosts=alfresco_dev" 245 | ansible-playbook copySolrCoreConfig.yml --extra-vars="solr_dev" 246 | 247 | You might consider creating additional playbooks for doing other types of 248 | maintenance such as deploying AMPs. 249 | 250 | ### Dry-run 251 | 252 | Use the `--check` flag to tell Ansible to do a dry-run, like this: 253 | 254 | ansible-playbook copyAllAlfrescoConfig.yml --check --extra-vars="hosts=alfresco_dev" 255 | 256 | The output will show you what *would have* been changed had you not used the 257 | flag. 258 | 259 | Use the `--diff` flag along with `--check` to see the difference between the 260 | configuration in your current project and what is currently on the server, 261 | like this: 262 | 263 | ansible-playbook copyAllAlfrescoConfig.yml --diff --check --extra-vars="hosts=alfresco_dev" 264 | 265 | The output will show you a difference between what is currently on the target 266 | and what would have been deployed without the flags. 267 | 268 | ## Security 269 | 270 | Running the installation playbook as provided in this example setup will result 271 | in an Alfresco server with no SSL certificates configured, either for ACS or 272 | for SOLR. It also uses a "admin" as the admin user password. You will need to 273 | make changes appropriate for your environment to properly secure your install. 274 | -------------------------------------------------------------------------------- /ansible.cfg: -------------------------------------------------------------------------------- 1 | [defaults] 2 | inventory = inventory 3 | vault_password_file = .vault-passwd 4 | remote_tmp = /tmp/.ansible-${USER}/tmp 5 | -------------------------------------------------------------------------------- /copyAlfrescoConfig.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - hosts: '{{ hosts }}' 3 | remote_user: alfresco 4 | tasks: 5 | - include_tasks: tasks/doCopyAlfrescoConfig.yml 6 | -------------------------------------------------------------------------------- /copyAllAlfrescoConfig.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - hosts: '{{ hosts }}' 3 | remote_user: alfresco 4 | tasks: 5 | - include_tasks: tasks/doCopyGlobalProperties.yml 6 | - include_tasks: tasks/doCopyTomcatConfig.yml 7 | - include_tasks: tasks/doCopyShareConfig.yml 8 | - include_tasks: tasks/doCopyAlfrescoConfig.yml 9 | -------------------------------------------------------------------------------- /copySolrConfig.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - hosts: '{{ hosts }}' 3 | remote_user: alfresco 4 | tasks: 5 | - include_tasks: tasks/doCopySolrConfig.yml 6 | -------------------------------------------------------------------------------- /copySolrCoreConfig.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - hosts: '{{ hosts }}' 3 | remote_user: alfresco 4 | tasks: 5 | - include_tasks: tasks/doCopySolrCoreConfig.yml 6 | -------------------------------------------------------------------------------- /files/alfresco-jmxrmi.access: -------------------------------------------------------------------------------- 1 | monitorRole readonly 2 | controlRole readwrite 3 | -------------------------------------------------------------------------------- /files/web-scripts-config-custom.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | GET 7 | /service/enterprise/admin/.* 8 | 9 | 10 | {token} 11 | {token} 12 | 13 | 14 | 15 | 16 | GET 17 | /s/enterprise/admin/.* 18 | 19 | 20 | {token} 21 | {token} 22 | 23 | 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /group_vars/alfresco_dev/vars: -------------------------------------------------------------------------------- 1 | alf_host: alfdev1.metaversant.com 2 | 3 | share_host: alfdev1.metaversant.com 4 | 5 | alf_solr_host: solrdev1.metaversant.com 6 | 7 | alf_db_url: "jdbc:postgresql://alfresco-dev.c8uozf6iuroi.us-east-1.rds.amazonaws.com:5432/${db.name}" 8 | 9 | jodconverter_office_home: /usr/bin 10 | 11 | imagemagick_bin: /usr/bin/convert 12 | -------------------------------------------------------------------------------- /group_vars/alfresco_prod/vars: -------------------------------------------------------------------------------- 1 | alf_host: alfprod1.metaversant.com 2 | 3 | share_host: alfprod1.metaversant.com 4 | 5 | alf_solr_host: solrprod1.metaversant.com 6 | 7 | alf_db_url: "jdbc:postgresql://alfresco-prod.c8uozf6iuroi.us-east-1.rds.amazonaws.com:5432/${db.name}" 8 | 9 | jodconverter_office_home: /usr/bin 10 | 11 | imagemagick_bin: /usr/bin/convert 12 | -------------------------------------------------------------------------------- /group_vars/alfresco_test/vars: -------------------------------------------------------------------------------- 1 | alf_host: alftest1.metaversant.com 2 | 3 | share_host: alftest1.metaversant.com 4 | 5 | alf_solr_host: solrtest1.metaversant.com 6 | 7 | alf_db_url: "jdbc:postgresql://alfresco-test.c8uozf6iuroi.us-east-1.rds.amazonaws.com:5432/${db.name}" 8 | 9 | jodconverter_office_home: /usr/bin 10 | 11 | imagemagick_bin: /usr/bin/convert 12 | -------------------------------------------------------------------------------- /group_vars/all/vars: -------------------------------------------------------------------------------- 1 | alf_home: "/opt/alfresco" 2 | alf_data: "{{ alf_home }}/alf_data" 3 | alf_dir_contentstore: contentstore 4 | alf_dir_contentstore_deleted: contentstore.deleted 5 | 6 | alf_initial_admin_password: "{{ vault_alf_initial_admin_password }}" 7 | alf_context: alfresco 8 | alf_host: 127.0.0.1 9 | alf_port: 8080 10 | alf_protocol: http 11 | 12 | share_context: share 13 | share_host: 127.0.0.1 14 | share_port: 8080 15 | share_protocol: http 16 | 17 | alf_index_subsystem: solr6 18 | alf_solr_host: localhost 19 | alf_solr_port: 8983 20 | 21 | alf_tomcat_protocol: http 22 | alf_tomcat_web_port: 8080 23 | alf_tomcat_ajp_port: 8009 24 | alf_tomcat_access_logs_dir: logs 25 | alf_tomcat_catalina_logs_dir: "{{ alf_home }}/tomcat/logs" 26 | 27 | proxy_enabled: false 28 | proxy_host: localhost 29 | proxy_port: 80 30 | proxy_secure: "false" 31 | proxy_scheme: http 32 | 33 | alf_user: "alfresco" 34 | alf_group: "alfresco" 35 | java_opts_xmx: 15250M 36 | 37 | alf_install_dir: /opt/alfresco-6.2.0-ga 38 | alf_archive: "alfresco-content-services-community-distribution-6.2.0-ga.zip" 39 | alf_archive_root_dir: "alfresco-content-services-community-distribution-6.2.0-ga" 40 | tomcat_archive: "apache-tomcat-8.5.34.tar.gz" 41 | tomcat_dir: "apache-tomcat-8.5.34" 42 | search_archive: "alfresco-search-services-1.4.0.zip" 43 | search_install_dir: '{{ alf_install_dir }}/alfresco-search-services' 44 | 45 | alf_db_driver: org.postgresql.Driver 46 | alf_db_driver_file: postgresql-42.2.5.jar 47 | alf_db_username: alfresco 48 | alf_db_password: "{{ vault_alf_db_password }}" 49 | alf_db_name: alfresco 50 | alf_db_url: "jdbc:postgresql://localhost:5432/${db.name}" 51 | 52 | alf_java_home: "/usr/java/jdk-11.0.1" 53 | 54 | activemq_archive: "apache-activemq-5.15.6-bin.tar.gz" 55 | activemq_dir: "apache-activemq-5.15.6" 56 | activemq_opts_memory: "-Xms64M -Xmx1G" 57 | activemq_user: "{{ alf_user }}" 58 | 59 | alf_clustering_enabled: false 60 | 61 | alf_notification_email: "false" 62 | 63 | alf_smart_folders_enabled: "false" 64 | 65 | alf_aos_base_url: http://localhost/alfresco/aos 66 | 67 | alf_ftp_port: 2121 68 | 69 | alf_jmx_monitor_password: "{{ vault_alf_jmx_monitor_password }}" 70 | alf_jmx_control_password: "{{ vault_alf_jmx_control_password }}" 71 | 72 | imagemagick_root: / 73 | imagemagick_dynlib: /lib 74 | imagemagick_bin: /bin/convert 75 | 76 | jodconverter_enabled: true 77 | jodconverter_office_home: "{{ alf_home }}/libreoffice" 78 | jodconverter_port: 8100 79 | 80 | solr_java_mem: -Xms512m -Xmx512m 81 | solr_port: 8983 82 | solr_content_dir: "{{ alf_home }}/alfresco-search-services" 83 | solr_home: "{{ alf_home }}/alfresco-search-services/solrhome" 84 | solr_java_home: "/usr/java/jdk-11.0.1" 85 | solr_is_primary: true 86 | solr_is_replica: false 87 | solr_primary_host: localhost 88 | solr_primary_port: 8080 89 | solr_alfresco_host: localhost 90 | solr_alfresco_ssl_port: 8443 91 | solr_alfresco_port: 8080 92 | solr_alfresco_secure_comms: none 93 | 94 | audit_enabled: false 95 | trashcan_cleaner_enabled: false 96 | 97 | mail_host: localhost 98 | mail_from: alfresco.donotreply@alfresco.com 99 | 100 | thumbnails_enabled: true 101 | 102 | transformations_enabled: true 103 | 104 | ssl_enabled: false 105 | alf_keystore_key_alias: server 106 | alf_keystore_password: "{{ vault_alf_keystore_password }}" 107 | alf_truststore_password: "{{ vault_alf_truststore_password }}" 108 | -------------------------------------------------------------------------------- /group_vars/solr_dev/vars: -------------------------------------------------------------------------------- 1 | solr_alfresco_host: alfdev1.metaversant.com 2 | -------------------------------------------------------------------------------- /group_vars/solr_prod/vars: -------------------------------------------------------------------------------- 1 | solr_alfresco_host: alfprod1.metaversant.com 2 | -------------------------------------------------------------------------------- /group_vars/solr_test/vars: -------------------------------------------------------------------------------- 1 | solr_alfresco_host: alftest1.metaversant.com 2 | -------------------------------------------------------------------------------- /installActivemq.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - hosts: '{{ hosts }}' 3 | remote_user: alfresco 4 | tasks: 5 | - include_tasks: tasks/doInstallActivemq.yml 6 | - include_tasks: tasks/doCopyActivemqConfig.yml 7 | -------------------------------------------------------------------------------- /installAlfresco.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Installs Alfresco to the specified hosts. 3 | # 4 | # Requires Alfresco distribution archive, Tomcat archive, and AOS archive to 5 | # reside in files/third-party. 6 | # 7 | # Custom AMPs should be placed in files/third-party/amps and files/third-party/amps_share. 8 | # 9 | # Install location depends on alf_home, alf_install_dir, and tomcat_dir. 10 | # 11 | --- 12 | - hosts: '{{ hosts }}' 13 | remote_user: alfresco 14 | tasks: 15 | - include_tasks: tasks/doInstallTomcat.yml 16 | - include_tasks: tasks/doInstallActivemq.yml 17 | - include_tasks: tasks/doInstallAlfresco.yml 18 | - include_tasks: tasks/doInstallPDFRenderer.yml 19 | - include_tasks: tasks/doCopyAmps.yml 20 | - include_tasks: tasks/doApplyAmps.yml 21 | - include_tasks: tasks/doCopyGlobalProperties.yml 22 | - include_tasks: tasks/doCopyTomcatConfig.yml 23 | - include_tasks: tasks/doCopyShareConfig.yml 24 | - include_tasks: tasks/doCopyAlfrescoConfig.yml -------------------------------------------------------------------------------- /installSearch.yml: -------------------------------------------------------------------------------- 1 | # 2 | # Installs Alfresco Search services to the specified hosts. 3 | # 4 | # Requires alfresco-search-services*.zip to be placed in files/third-party. the 5 | # exact file name is specified in search_archive. 6 | # 7 | # Install location depends on alf_home, alf_install_dir, and search_install_dir. 8 | # 9 | --- 10 | - hosts: '{{ hosts }}' 11 | remote_user: alfresco 12 | tasks: 13 | - include_tasks: tasks/doInstallSearch.yml 14 | - include_tasks: tasks/doCopySolrConfig.yml 15 | -------------------------------------------------------------------------------- /inventory: -------------------------------------------------------------------------------- 1 | [alfresco_local] 2 | 192.168.33.10 3 | 4 | [solr_local] 5 | 192.168.33.10 6 | 7 | [alfresco_dev] 8 | alfdev1.metaversant.com 9 | #alfdev2.metaversant.com 10 | #alfdev3.metaversant.com 11 | 12 | [solr_dev] 13 | solrdev1.metaversant.com 14 | #solrdev2.metaversant.com 15 | 16 | [alfresco_test] 17 | alftest1.metaversant.com 18 | #alftest2.metaversant.com 19 | #alftest3.metaversant.com 20 | 21 | [solr_test] 22 | solrtest1.metaversant.com 23 | #solrtest2.metaversant.com 24 | 25 | [alfresco_prod] 26 | alfprod1.metaversant.com 27 | #alfprod2.metaversant.com 28 | #alfprod3.metaversant.com 29 | 30 | [solr_prod] 31 | solrprod1.metaversant.com 32 | #solrprod2.metaversant.com 33 | -------------------------------------------------------------------------------- /local/README.md: -------------------------------------------------------------------------------- 1 | # Local virtual machine test server setup 2 | 3 | This directory is used to configure and run a local virtual machine as a test 4 | server. This is handy for testing out various Ansible playbooks. The goal is for 5 | the virtual machine to be set up similar to how a barebones server is set up 6 | by the infrastructure team. 7 | 8 | ## Pre-requisites 9 | 10 | In addition to Ansible, this setup expects you to have [Vagrant](https://www.vagrantup.com/) 11 | and [VirtualBox](https://www.virtualbox.org/) installed. 12 | 13 | The first time you create the virtual machine, Vagrant will use Ansible to do 14 | some additional configuration. The playbook that does this resides in the 15 | provisioning directory. 16 | 17 | The provisioning playbook will also set up an SSH key for the alfresco user so 18 | that you can ssh without providing a password. The path to the SSH key is 19 | specified as a var in the playbook. 20 | 21 | ## Running 22 | 23 | Before running vagrant, if you are using a Python virtual environment for 24 | Ansible, activate the environment. Vagrant will use Ansible to set up the box. 25 | 26 | To start up the virtual machine, run `vagrant up`. 27 | 28 | If you need to connect you can either use `vagrant ssh` or you can SSH as you 29 | normally would using the virtual machine's IP address (see the Vagrantfile). 30 | 31 | To check on the status of the machine, run `vagrant status`. 32 | 33 | To stop the virtual machine, run `vagrant halt`. 34 | 35 | To completely remove the virtual machine, run `vagrant destroy`. 36 | -------------------------------------------------------------------------------- /local/Vagrantfile: -------------------------------------------------------------------------------- 1 | # -*- mode: ruby -*- 2 | # vi: set ft=ruby : 3 | 4 | # All Vagrant configuration is done below. The "2" in Vagrant.configure 5 | # configures the configuration version (we support older styles for 6 | # backwards compatibility). Please don't change it unless you know what 7 | # you're doing. 8 | Vagrant.configure(2) do |config| 9 | # The most common configuration options are documented and commented below. 10 | # For a complete reference, please see the online documentation at 11 | # https://docs.vagrantup.com. 12 | 13 | # Every Vagrant development environment requires a box. You can search for 14 | # boxes at https://vagrantcloud.com/search. 15 | config.vm.box = "centos/7" 16 | 17 | # Disable automatic box update checking. If you disable this, then 18 | # boxes will only be checked for updates when the user runs 19 | # `vagrant box outdated`. This is not recommended. 20 | # config.vm.box_check_update = false 21 | 22 | # Create a forwarded port mapping which allows access to a specific port 23 | # within the machine from a port on the host machine. In the example below, 24 | # accessing "localhost:8080" will access port 80 on the guest machine. 25 | config.vm.network "forwarded_port", guest: 8080, host: 8080 26 | config.vm.network "forwarded_port", guest: 8443, host: 8443 27 | config.vm.network "forwarded_port", guest: 8983, host: 8983 28 | 29 | # Create a private network, which allows host-only access to the machine 30 | # using a specific IP. 31 | config.vm.network "private_network", ip: "192.168.33.10" 32 | 33 | # Create a public network, which generally matched to bridged network. 34 | # Bridged networks make the machine appear as another physical device on 35 | # your network. 36 | # config.vm.network "public_network" 37 | 38 | # Share an additional folder to the guest VM. The first argument is 39 | # the path on the host to the actual folder. The second argument is 40 | # the path on the guest to mount the folder. And the optional third 41 | # argument is a set of non-required options. 42 | # config.vm.synced_folder "../data", "/vagrant_data" 43 | 44 | # Provider-specific configuration so you can fine-tune various 45 | # backing providers for Vagrant. These expose provider-specific options. 46 | # Example for VirtualBox: 47 | # 48 | config.vm.provider "virtualbox" do |vb| 49 | # Display the VirtualBox GUI when booting the machine 50 | #vb.gui = true 51 | 52 | # Customize the amount of memory on the VM: 53 | vb.memory = "4096" 54 | end 55 | # 56 | # View the documentation for the provider you are using for more 57 | # information on available options. 58 | 59 | # Enable provisioning with a shell script. Additional provisioners such as 60 | # Puppet, Chef, Ansible, Salt, and Docker are also available. Please see the 61 | # documentation for more information about their specific syntax and use. 62 | #config.vm.provision "shell", inline: <<-SHELL 63 | # sudo apt-get update 64 | # sudo apt-get install -y apache2 65 | # SHELL 66 | config.vm.provision "ansible" do |ansible| 67 | ansible.playbook = "provisioning/playbook.yml" 68 | ansible.extra_vars = { ansible_ssh_user: 'vagrant' } 69 | ansible.sudo = true 70 | end 71 | 72 | end 73 | -------------------------------------------------------------------------------- /local/provisioning/files/limits.conf: -------------------------------------------------------------------------------- 1 | # /etc/security/limits.conf 2 | # 3 | #Each line describes a limit for a user in the form: 4 | # 5 | # 6 | # 7 | #Where: 8 | # can be: 9 | # - a user name 10 | # - a group name, with @group syntax 11 | # - the wildcard *, for default entry 12 | # - the wildcard %, can be also used with %group syntax, 13 | # for maxlogin limit 14 | # 15 | # can have the two values: 16 | # - "soft" for enforcing the soft limits 17 | # - "hard" for enforcing hard limits 18 | # 19 | # can be one of the following: 20 | # - core - limits the core file size (KB) 21 | # - data - max data size (KB) 22 | # - fsize - maximum filesize (KB) 23 | # - memlock - max locked-in-memory address space (KB) 24 | # - nofile - max number of open file descriptors 25 | # - rss - max resident set size (KB) 26 | # - stack - max stack size (KB) 27 | # - cpu - max CPU time (MIN) 28 | # - nproc - max number of processes 29 | # - as - address space limit (KB) 30 | # - maxlogins - max number of logins for this user 31 | # - maxsyslogins - max number of logins on the system 32 | # - priority - the priority to run user process with 33 | # - locks - max number of file locks the user can hold 34 | # - sigpending - max number of pending signals 35 | # - msgqueue - max memory used by POSIX message queues (bytes) 36 | # - nice - max nice priority allowed to raise to values: [-20, 19] 37 | # - rtprio - max realtime priority 38 | # 39 | # 40 | # 41 | 42 | #* soft core 0 43 | #* hard rss 10000 44 | #@student hard nproc 20 45 | #@faculty soft nproc 20 46 | #@faculty hard nproc 50 47 | #ftp hard nproc 0 48 | #@student - maxlogins 4 49 | alfresco soft nofile 6000 50 | alfresco hard nofile 65536 51 | alfresco soft nproc 4096 52 | alfresco hard nproc 4096 53 | # End of file 54 | -------------------------------------------------------------------------------- /local/provisioning/files/pg_hba.conf: -------------------------------------------------------------------------------- 1 | # PostgreSQL Client Authentication Configuration File 2 | # =================================================== 3 | # 4 | # Refer to the "Client Authentication" section in the PostgreSQL 5 | # documentation for a complete description of this file. A short 6 | # synopsis follows. 7 | # 8 | # This file controls: which hosts are allowed to connect, how clients 9 | # are authenticated, which PostgreSQL user names they can use, which 10 | # databases they can access. Records take one of these forms: 11 | # 12 | # local DATABASE USER METHOD [OPTIONS] 13 | # host DATABASE USER ADDRESS METHOD [OPTIONS] 14 | # hostssl DATABASE USER ADDRESS METHOD [OPTIONS] 15 | # hostnossl DATABASE USER ADDRESS METHOD [OPTIONS] 16 | # 17 | # (The uppercase items must be replaced by actual values.) 18 | # 19 | # The first field is the connection type: "local" is a Unix-domain 20 | # socket, "host" is either a plain or SSL-encrypted TCP/IP socket, 21 | # "hostssl" is an SSL-encrypted TCP/IP socket, and "hostnossl" is a 22 | # plain TCP/IP socket. 23 | # 24 | # DATABASE can be "all", "sameuser", "samerole", "replication", a 25 | # database name, or a comma-separated list thereof. The "all" 26 | # keyword does not match "replication". Access to replication 27 | # must be enabled in a separate record (see example below). 28 | # 29 | # USER can be "all", a user name, a group name prefixed with "+", or a 30 | # comma-separated list thereof. In both the DATABASE and USER fields 31 | # you can also write a file name prefixed with "@" to include names 32 | # from a separate file. 33 | # 34 | # ADDRESS specifies the set of hosts the record matches. It can be a 35 | # host name, or it is made up of an IP address and a CIDR mask that is 36 | # an integer (between 0 and 32 (IPv4) or 128 (IPv6) inclusive) that 37 | # specifies the number of significant bits in the mask. A host name 38 | # that starts with a dot (.) matches a suffix of the actual host name. 39 | # Alternatively, you can write an IP address and netmask in separate 40 | # columns to specify the set of hosts. Instead of a CIDR-address, you 41 | # can write "samehost" to match any of the server's own IP addresses, 42 | # or "samenet" to match any address in any subnet that the server is 43 | # directly connected to. 44 | # 45 | # METHOD can be "trust", "reject", "md5", "password", "scram-sha-256", 46 | # "gss", "sspi", "ident", "peer", "pam", "ldap", "radius" or "cert". 47 | # Note that "password" sends passwords in clear text; "md5" or 48 | # "scram-sha-256" are preferred since they send encrypted passwords. 49 | # 50 | # OPTIONS are a set of options for the authentication in the format 51 | # NAME=VALUE. The available options depend on the different 52 | # authentication methods -- refer to the "Client Authentication" 53 | # section in the documentation for a list of which options are 54 | # available for which authentication methods. 55 | # 56 | # Database and user names containing spaces, commas, quotes and other 57 | # special characters must be quoted. Quoting one of the keywords 58 | # "all", "sameuser", "samerole" or "replication" makes the name lose 59 | # its special character, and just match a database or username with 60 | # that name. 61 | # 62 | # This file is read on server startup and when the server receives a 63 | # SIGHUP signal. If you edit the file on a running system, you have to 64 | # SIGHUP the server for the changes to take effect, run "pg_ctl reload", 65 | # or execute "SELECT pg_reload_conf()". 66 | # 67 | # Put your actual configuration here 68 | # ---------------------------------- 69 | # 70 | # If you want to allow non-local connections, you need to add more 71 | # "host" records. In that case you will also need to make PostgreSQL 72 | # listen on a non-local interface via the listen_addresses 73 | # configuration parameter, or via the -i or -h command line switches. 74 | 75 | 76 | 77 | # TYPE DATABASE USER ADDRESS METHOD 78 | 79 | # "local" is for Unix domain socket connections only 80 | local all all peer 81 | local all all ident 82 | # IPv4 local connections: 83 | host all all 127.0.0.1/32 trust 84 | # IPv6 local connections: 85 | host all all ::1/128 ident 86 | # Allow replication connections from localhost, by a user with the 87 | # replication privilege. 88 | local replication all peer 89 | host replication all 127.0.0.1/32 ident 90 | host replication all ::1/128 ident 91 | -------------------------------------------------------------------------------- /local/provisioning/files/sysctl.conf: -------------------------------------------------------------------------------- 1 | # Kernel sysctl configuration file for Red Hat Linux 2 | # 3 | # For binary values, 0 is disabled, 1 is enabled. See sysctl(8) and 4 | # sysctl.conf(5) for more details. 5 | 6 | # Controls IP packet forwarding 7 | net.ipv4.ip_forward = 0 8 | 9 | # Controls source route verification 10 | net.ipv4.conf.default.rp_filter = 1 11 | 12 | # Do not accept source routing 13 | net.ipv4.conf.default.accept_source_route = 0 14 | 15 | # Controls the System Request debugging functionality of the kernel 16 | kernel.sysrq = 0 17 | 18 | # Controls whether core dumps will append the PID to the core filename. 19 | # Useful for debugging multi-threaded applications. 20 | kernel.core_uses_pid = 1 21 | 22 | # Controls the use of TCP syncookies 23 | net.ipv4.tcp_syncookies = 1 24 | 25 | # Disable netfilter on bridges. 26 | net.bridge.bridge-nf-call-ip6tables = 0 27 | net.bridge.bridge-nf-call-iptables = 0 28 | net.bridge.bridge-nf-call-arptables = 0 29 | 30 | # Controls the default maxmimum size of a mesage queue 31 | kernel.msgmnb = 65536 32 | 33 | # Controls the maximum size of a message, in bytes 34 | kernel.msgmax = 65536 35 | 36 | # Controls the maximum shared segment size, in bytes 37 | kernel.shmmax = 68719476736 38 | 39 | # Controls the maximum number of shared memory segments, in pages 40 | kernel.shmall = 4294967296 41 | 42 | fs.file-max=10000 43 | vm.max_map_count=262144 44 | -------------------------------------------------------------------------------- /local/provisioning/playbook.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - hosts: all 3 | 4 | vars: 5 | alf_user: "alfresco" 6 | alf_group: "alfresco" 7 | pub_ssh_key: "/Users/jpotts/.ssh/id_rsa.pub" 8 | 9 | tasks: 10 | - name: Install selinux bindings 11 | yum: name=libselinux-python state=present 12 | 13 | - name: Install net-tools 14 | yum: name=net-tools state=present 15 | 16 | - name: Install lsof 17 | yum: name=lsof state=present 18 | 19 | - name: Install unzip 20 | yum: name=unzip state=present 21 | 22 | - name: Create {{ alf_group }} group 23 | user: name={{ alf_group }} 24 | 25 | - name: Create {{ alf_user }} user 26 | user: name={{ alf_user }} shell=/bin/bash group={{ alf_group }} 27 | 28 | - name: Add key to {{ alf_user }}'s authorized keys 29 | authorized_key: user={{ alf_user }} key="{{ lookup('file', pub_ssh_key) }}" 30 | 31 | - name: Create /app directory 32 | file: dest=/app mode=755 owner={{ alf_user }} group={{ alf_group }} state=directory 33 | 34 | - name: Install iptables-services 35 | yum: 36 | name: iptables-services 37 | state: present 38 | 39 | # - name: Get iptables rules 40 | # shell: iptables -L 41 | # register: iptablesrules 42 | # changed_when: false 43 | # become: true 44 | 45 | # - name: Add port 8080 iptable rule 46 | # command: /sbin/iptables -I INPUT 1 -p tcp --dport 8080 -j ACCEPT -m comment --comment "Tomcat HTTP" 47 | # become: true 48 | # when: iptablesrules.stdout.find("Tomcat HTTP") == -1 49 | 50 | # - name: Add port 8443 iptable rule 51 | # command: /sbin/iptables -I INPUT 1 -p tcp --dport 8443 -j ACCEPT -m comment --comment "Tomcat HTTPS" 52 | # become: true 53 | # when: iptablesrules.stdout.find("Tomcat HTTPS") == -1 54 | 55 | # - name: save iptables 56 | # shell: iptables-save > /etc/sysconfig/iptables 57 | # become: true 58 | 59 | # - name: restart iptables 60 | # service: name=iptables state=restarted 61 | # become: true 62 | 63 | - name: Copy limits.conf to set open file limits 64 | copy: src=files/limits.conf dest=/etc/security/limits.conf 65 | 66 | - name: Copy sysctl.conf 67 | copy: src=files/sysctl.conf dest=/etc/sysctl.conf 68 | 69 | - include_tasks: tasks/doInstallImageMagick.yml 70 | - include_tasks: tasks/doInstallLibreOffice.yml 71 | - include_tasks: tasks/doInstallJava.yml 72 | - include_tasks: tasks/doInstallPostgres.yml 73 | 74 | -------------------------------------------------------------------------------- /local/provisioning/tasks/doInstallImageMagick.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: Install ImageMagick 3 | yum: name=ImageMagick state=present 4 | -------------------------------------------------------------------------------- /local/provisioning/tasks/doInstallJava.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: Make Java directory 3 | file: path=/usr/java state=directory 4 | 5 | - name: Copy Java distribution 6 | copy: src=files/third-party/openjdk-11.0.1_linux-x64_bin.tar.gz dest=/tmp/openjdk.tar.gz 7 | 8 | - name: Unzip Java distribution 9 | unarchive: src=/tmp/openjdk.tar.gz dest=/usr/java copy=no 10 | -------------------------------------------------------------------------------- /local/provisioning/tasks/doInstallLibreOffice.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: Install LibreOffice Core 3 | yum: name=libreoffice-core state=present 4 | -------------------------------------------------------------------------------- /local/provisioning/tasks/doInstallPostgres.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: Add PostgreSQL RPM 3 | yum_repository: 4 | name: PostgreSQL 5 | description: PostgreSQL 6 | baseurl: https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm 7 | 8 | - name: Add postgresql 9 | yum: name=postgresql10-server state=present 10 | 11 | - name: Initialize the Database 12 | command: /usr/pgsql-10/bin/postgresql-10-setup initdb 13 | args: 14 | creates: /var/lib/pgsql/10/data 15 | 16 | - name: Copy pg_hba.conf 17 | copy: src=files/pg_hba.conf dest=/var/lib/pgsql/10/data 18 | -------------------------------------------------------------------------------- /removeSolrIndexMetadata.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - hosts: '{{ hosts }}' 3 | remote_user: alfresco 4 | tasks: 5 | - name: Remove index from alfresco core 6 | file: path={{ solr_home }}/alfresco/index state=absent 7 | 8 | - name: Remove snapshot_metadata from alfresco core 9 | file: path={{ solr_home }}/alfresco/snapshot_metadata state=absent 10 | 11 | - name: Remove index from archive core 12 | file: path={{ solr_home }}/archive/index state=absent 13 | 14 | - name: Remove snapshot_metadata from archive core 15 | file: path={{ solr_home }}/archive/snapshot_metadata state=absent 16 | -------------------------------------------------------------------------------- /tasks/doApplyAmps.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: Run Alfresco MMT to install repo tier AMPs 3 | shell: '{{ alf_java_home }}/bin/java -jar {{ alf_home }}/bin/alfresco-mmt*.jar install {{ alf_home }}/amps {{ alf_home }}/{{ tomcat_dir }}/webapps/alfresco.war -directory -nobackup -force' 4 | 5 | - name: Run Alfresco MMT to install Share tier AMPs 6 | shell: '{{ alf_java_home }}/bin/java -jar {{ alf_home }}/bin/alfresco-mmt*.jar install {{ alf_home }}/amps_share {{ alf_home }}/{{ tomcat_dir }}/webapps/share.war -directory -nobackup -force' 7 | -------------------------------------------------------------------------------- /tasks/doCopyActivemqConfig.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: Copy ActiveMQ env config 3 | template: src=templates/activemq-env.j2 dest={{ alf_home }}/{{ activemq_dir }}/bin/env 4 | -------------------------------------------------------------------------------- /tasks/doCopyAlfrescoConfig.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: Create alfresco-jmx directory 3 | file: dest={{ alf_home }}/tomcat/shared/classes/alfresco/extension/alfresco-jmx state=directory 4 | 5 | - name: Copy JMX access 6 | copy: src=files/alfresco-jmxrmi.access dest={{ alf_home }}/tomcat/shared/classes/alfresco/extension/alfresco-jmx/alfresco-jmxrmi.access 7 | 8 | - name: Copy JMX access password 9 | template: src=templates/alfresco-jmxrmi.password.j2 dest={{ alf_home }}/tomcat/shared/classes/alfresco/extension/alfresco-jmx/alfresco-jmxrmi.password 10 | 11 | - name: Copy Web Scripts Config 12 | copy: src=files/web-scripts-config-custom.xml dest={{ alf_home }}/tomcat/shared/classes/alfresco/extension/ 13 | -------------------------------------------------------------------------------- /tasks/doCopyAmps.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: Create amps directory 3 | file: path='{{ alf_home }}/amps' state=directory 4 | 5 | - name: Create amps_share directory 6 | file: path='{{ alf_home }}/amps_share' state=directory 7 | 8 | - name: Copy repository tier amps 9 | copy: 10 | src: "{{ item }}" 11 | dest: '{{ alf_home }}/amps' 12 | with_fileglob: "files/third-party/amps/*" 13 | 14 | - name: Copy Share tier amps 15 | copy: 16 | src: "{{ item }}" 17 | dest: '{{ alf_home }}/amps_share' 18 | with_fileglob: "files/third-party/amps_share/*" 19 | -------------------------------------------------------------------------------- /tasks/doCopyGlobalProperties.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: Copy alfresco global properties file 3 | template: src=templates/alfresco-global.properties.j2 dest={{ alf_home }}/tomcat/shared/classes/alfresco-global.properties 4 | -------------------------------------------------------------------------------- /tasks/doCopyLDAPConfig.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: Create LDAP Config directory (ldap1) 3 | file: dest={{ alf_home }}/tomcat/shared/classes/alfresco/extension/subsystems/Authentication/ldap/ldap1 state=directory 4 | 5 | - name: Copy LDAP Config (ldap1) 6 | template: src=templates/ldap-authentication.properties.ldap1.j2 dest={{ alf_home }}/tomcat/shared/classes/alfresco/extension/subsystems/Authentication/ldap/ldap1/ldap-authentication.properties 7 | -------------------------------------------------------------------------------- /tasks/doCopyLicense.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: Copy license file 3 | copy: src=files/{{ alf_license_file }} dest={{ alf_home }} 4 | -------------------------------------------------------------------------------- /tasks/doCopyShareConfig.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: Copy Share Config Custom 3 | template: src=templates/share-config-custom.xml.j2 dest={{ alf_home }}/tomcat/shared/classes/alfresco/web-extension/share-config-custom.xml 4 | 5 | - name: Copy slingshot app context 6 | template: src=templates/custom-slingshot-application-context.xml.j2 dest={{ alf_home }}/tomcat/shared/classes/alfresco/web-extension/custom-slingshot-application-context.xml 7 | -------------------------------------------------------------------------------- /tasks/doCopySolrConfig.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: Copy SOLR Shared Properties 3 | template: src=templates/shared.properties.j2 dest={{ alf_home }}/alfresco-search-services/solrhome/conf/shared.properties 4 | 5 | - name: Copy SOLR Script 6 | template: src=templates/solr.in.sh.j2 dest={{ alf_home }}/alfresco-search-services/solr.in.sh 7 | 8 | - name: Create data directory 9 | file: path={{ solr_content_dir }} state=directory 10 | -------------------------------------------------------------------------------- /tasks/doCopySolrCoreConfig.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: Copy Alfresco solrcore.properties 3 | template: src=templates/solrcore.properties.alfresco.j2 dest={{ solr_home }}/alfresco/conf/solrcore.properties 4 | 5 | - name: Copy Archive solrcore.properties 6 | template: src=templates/solrcore.properties.archive.j2 dest={{ solr_home }}/archive/conf/solrcore.properties 7 | 8 | - name: Copy Alfresco solrconfig.xml 9 | template: src=templates/solrconfig.xml.alfresco.j2 dest={{ solr_home }}/alfresco/conf/solrconfig.xml 10 | 11 | - name: Copy Archive solrconfig.xml 12 | template: src=templates/solrconfig.xml.archive.j2 dest={{ solr_home }}/archive/conf/solrconfig.xml 13 | 14 | #- name: Copy Alfresco solr truststore 15 | # copy: src=files/ssl.repo.client.truststore dest={{ solr_home }}/alfresco/conf/ssl.repo.client.truststore 16 | 17 | #- name: Copy Archive solr truststore 18 | # copy: src=files/ssl.repo.client.truststore dest={{ solr_home }}/archive/conf/ssl.repo.client.truststore 19 | -------------------------------------------------------------------------------- /tasks/doCopyTomcatConfig.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: Copy JDBC driver 3 | copy: src=files/third-party/{{ alf_db_driver_file }} dest={{ alf_home }}/tomcat/lib 4 | 5 | - name: Copy Tomcat catalina.sh 6 | template: src=templates/catalina.sh.j2 dest={{ alf_home }}/tomcat/bin/catalina.sh 7 | 8 | - name: Copy Tomcat setenv.sh 9 | template: src=templates/setenv.sh.j2 dest={{ alf_home }}/tomcat/bin/setenv.sh 10 | 11 | - name: Copy Tomcat ctl.sh 12 | template: src=templates/ctl.sh.j2 dest={{ alf_home }}/tomcat/scripts/ctl.sh 13 | 14 | - name: Copy Tomcat server.xml 15 | template: src=templates/server.xml.j2 dest={{ alf_home }}/tomcat/conf/server.xml 16 | 17 | - name: Copy web.xml 18 | template: src=templates/web.xml.j2 dest={{ alf_home }}/tomcat/conf/web.xml 19 | 20 | - name: Copy keystore with server-specific cert 21 | copy: src=files/certs/{{ ansible_hostname }}.jks dest={{ alf_home }}/alf_data/keystore/ 22 | when: ssl_enabled 23 | -------------------------------------------------------------------------------- /tasks/doInstallAOS.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: Create Alfresco AOS dist directory to hold unarchived distribution files 3 | file: path={{ alf_home }}/dist/aos state=directory 4 | 5 | - name: Copy Alfresco AOS distribution archive 6 | copy: src=files/third-party/{{ aos_archive }} dest=/tmp/ 7 | 8 | - name: Extract Alfresco archive 9 | unarchive: src=/tmp/{{ aos_archive }} dest={{ alf_home }}/dist/aos copy=no 10 | 11 | - name: Copy AOS AMP 12 | shell: 'cp {{ alf_home }}/dist/aos/*.amp {{ alf_home }}/amps/' 13 | -------------------------------------------------------------------------------- /tasks/doInstallActivemq.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: Copy ActiveMQ archive 3 | copy: src=files/third-party/{{ activemq_archive }} dest=/tmp/ 4 | 5 | - name: Create ActiveMQ folder 6 | file: path={{ alf_home }}/{{ activemq_dir }} state=directory 7 | 8 | - name: Extract ActiveMQ archive 9 | unarchive: src=/tmp/{{ activemq_archive }} dest={{ alf_home }} copy=no 10 | 11 | - name: Create a symlink for the ActiveMQ install dir 12 | file: src={{ alf_home }}/{{ activemq_dir }} dest={{ alf_home }}/activemq state=link 13 | -------------------------------------------------------------------------------- /tasks/doInstallAlfresco.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: Create Alfresco dist directory to hold unarchived distribution files 3 | file: path={{ alf_home }}/dist state=directory 4 | 5 | - name: Create amps directory 6 | file: path={{ alf_home }}/amps state=directory 7 | 8 | - name: Create amps_share directory 9 | file: path={{ alf_home }}/amps_share state=directory 10 | 11 | - name: Create platform modules directory 12 | file: path={{ alf_home }}/modules/platform state=directory 13 | 14 | - name: Create share modules directory 15 | file: path={{ alf_home }}/modules/share state=directory 16 | 17 | - name: Create bin directory 18 | file: path={{ alf_home }}/bin state=directory 19 | 20 | - name: Create alf_data directory 21 | file: path={{ alf_data }} state=directory 22 | 23 | - name: Copy Alfresco distribution archive 24 | copy: src=files/third-party/{{ alf_archive }} dest=/tmp/ 25 | 26 | - name: Extract Alfresco archive 27 | unarchive: src=/tmp/{{ alf_archive }} dest={{ alf_home }}/dist copy=no 28 | 29 | - name: Copy Share Services AMP 30 | shell: 'cp {{ alf_home }}/dist/{{ alf_archive_root_dir }}/amps/alfresco-share-services.amp {{ alf_home }}/amps/' 31 | 32 | - name: Copy bin files 33 | shell: 'for f in {{ alf_home }}/dist/{{ alf_archive_root_dir }}/bin/*; do cp $f {{ alf_home }}/bin/; done' 34 | 35 | - name: Make Alfresco scripts user executable 36 | file: dest="{{ alf_home }}/bin/{{ item }}" mode=u+x 37 | with_items: 38 | - apply_amps.sh 39 | - clean_tomcat.sh 40 | 41 | - name: Copy Tomcat conf, lib, shared, and webapps files 42 | shell: 'for f in {{ alf_home }}/dist/{{ alf_archive_root_dir }}/web-server/*; do cp -R $f {{ alf_home }}/{{ tomcat_dir }}/; done' 43 | 44 | - name: Copy database driver into Tomcat lib 45 | copy: src=files/third-party/{{ alf_db_driver_file }} dest={{ alf_home }}/{{ tomcat_dir }}/lib/ 46 | 47 | - name: Copy Alfresco keystore directory into alf_data 48 | shell: 'cp -R {{ alf_home }}/dist/{{ alf_archive_root_dir }}/alf_data/keystore {{ alf_data }}/' 49 | -------------------------------------------------------------------------------- /tasks/doInstallPDFRenderer.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: Create Alfresco dist directory to hold unarchived distribution files 3 | file: path={{ alf_home }}/dist state=directory 4 | 5 | - name: Copy Alfresco distribution archive 6 | copy: src=files/third-party/{{ alf_archive }} dest=/tmp/ 7 | 8 | - name: Extract Alfresco archive 9 | unarchive: src=/tmp/{{ alf_archive }} dest={{ alf_home }}/dist copy=no 10 | 11 | - name: Create Alfresco common directory 12 | file: path={{ alf_home }}/common state=directory 13 | 14 | - name: Extract PDF Renderer 15 | unarchive: 16 | src: '{{ alf_home }}/dist/{{ alf_archive_root_dir }}/alfresco-pdf-renderer/alfresco-pdf-renderer-1.1-linux.tgz' 17 | dest: '{{ alf_home }}/common' 18 | copy: no 19 | -------------------------------------------------------------------------------- /tasks/doInstallSearch.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: Copy Alfresco Search Services distribution archive 3 | copy: src=files/third-party/{{ search_archive }} dest=/tmp/ 4 | 5 | - stat: 6 | path: '{{ search_install_dir }}' 7 | register: p 8 | 9 | - fail: 10 | msg: Search install directory already exists. Delete or rename it before continuing. 11 | when: p.stat.exists 12 | 13 | - name: Create search install directory 14 | file: path={{ search_install_dir }} state=directory 15 | 16 | - name: Create search temp directory 17 | file: path={{ alf_home }}/temp state=directory 18 | 19 | - name: Extract Alfresco archive 20 | unarchive: src=/tmp/{{ search_archive }} dest={{ alf_home }} copy=no 21 | -------------------------------------------------------------------------------- /tasks/doInstallTomcat.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - name: Create Alfresco home 3 | file: path={{ alf_home }} state=directory 4 | 5 | - name: Copy Tomcat archive 6 | copy: src=files/third-party/{{ tomcat_archive }} dest=/tmp/ 7 | 8 | - name: Create Tomcat folder 9 | file: path={{ alf_home }}/{{ tomcat_dir }} state=directory 10 | 11 | - name: Extract Tomcat archive 12 | unarchive: src=/tmp/{{ tomcat_archive }} dest={{ alf_home }} copy=no 13 | 14 | - name: Create a symlink for the Tomcat install dir 15 | file: src={{ alf_home }}/{{ tomcat_dir }} dest={{ alf_home }}/tomcat state=link 16 | 17 | - name: Delete docs webapp 18 | file: path={{ alf_home }}/{{ tomcat_dir }}/webapps/docs state=absent 19 | 20 | - name: Delete examples webapp 21 | file: path={{ alf_home }}/{{ tomcat_dir }}/webapps/examples state=absent 22 | 23 | - name: Delete host-manager webapp 24 | file: path={{ alf_home }}/{{ tomcat_dir }}/webapps/host-manager state=absent 25 | 26 | - name: Delete manager webapp 27 | file: path={{ alf_home }}/{{ tomcat_dir }}/webapps/manager state=absent 28 | 29 | - name: Delete ROOT webapp 30 | file: path={{ alf_home }}/{{ tomcat_dir }}/webapps/ROOT state=absent 31 | 32 | - name: Create shared loader classes directory 33 | file: path={{ alf_home }}/{{ tomcat_dir }}/shared/classes state=directory 34 | 35 | - name: Create shared loader lib directory 36 | file: path={{ alf_home }}/{{ tomcat_dir }}/shared/lib state=directory 37 | 38 | - name: Configure shared class loader 39 | replace: 40 | path: '{{ alf_home }}/{{ tomcat_dir }}/conf/catalina.properties' 41 | regexp: 'shared.loader=' 42 | replace: 'shared.loader=${catalina.base}/shared/classes/' 43 | 44 | - name: Create Tomcat scripts directory (used by old Alfresco releases) 45 | file: path={{ alf_home }}/{{tomcat_dir }}/scripts state=directory 46 | -------------------------------------------------------------------------------- /tasks/doSetupDirectories.yml: -------------------------------------------------------------------------------- 1 | --- 2 | - stat: 3 | path: '{{ alf_home }}' 4 | register: sym 5 | 6 | - fail: 7 | msg: Alfresco home must be a symbolic link or must not exist 8 | when: sym.stat.islnk is defined and sym.stat.islnk == False 9 | 10 | - name: Remove previous Alfresco home link 11 | file: path={{ alf_home }} state=absent 12 | 13 | - name: Create base Alfresco install directory 14 | file: path={{ alf_install_dir }} state=directory 15 | 16 | - name: Create a symlink that points Alfresco home at the install directory 17 | file: src={{ alf_install_dir }} dest={{ alf_home }} state=link 18 | -------------------------------------------------------------------------------- /templates/activemq-env.j2: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # ------------------------------------------------------------------------ 3 | # Licensed to the Apache Software Foundation (ASF) under one or more 4 | # contributor license agreements. See the NOTICE file distributed with 5 | # this work for additional information regarding copyright ownership. 6 | # The ASF licenses this file to You under the Apache License, Version 2.0 7 | # (the "License"); you may not use this file except in compliance with 8 | # the License. You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | # ------------------------------------------------------------------------ 18 | # 19 | # Configuration file for running Apache Active MQ as standalone provider. 20 | # 21 | # This file overwrites the predefined settings of the sysv init-script. 22 | # You can also use alternate location for default settings - 23 | # invoke the init-script without a argument an review help section "Configuration of this script" 24 | # /etc/default/activemq /.activemqrc /bin/env 25 | 26 | # Active MQ installation dirs 27 | # ACTIVEMQ_HOME="/" 28 | # ACTIVEMQ_BASE="$ACTIVEMQ_HOME" 29 | # ACTIVEMQ_CONF="$ACTIVEMQ_BASE/conf" 30 | # ACTIVEMQ_DATA="$ACTIVEMQ_BASE/data" 31 | # ACTIVEMQ_TMP="$ACTIVEMQ_BASE/tmp" 32 | 33 | # Set jvm memory configuration (minimal/maximum amount of memory) 34 | ACTIVEMQ_OPTS_MEMORY="{{ activemq_opts_memory }}" 35 | 36 | if [ -z "$ACTIVEMQ_OPTS" ] ; then 37 | ACTIVEMQ_OPTS="$ACTIVEMQ_OPTS_MEMORY -Djava.util.logging.config.file=logging.properties -Djava.security.auth.login.config=$ACTIVEMQ_CONF/login.config" 38 | fi 39 | 40 | if [ -z "$ACTIVEMQ_OUT" ]; then 41 | ACTIVEMQ_OUT="/dev/null" 42 | fi 43 | 44 | # Uncomment to enable audit logging 45 | #ACTIVEMQ_OPTS="$ACTIVEMQ_OPTS -Dorg.apache.activemq.audit=true" 46 | 47 | # Set jvm jmx configuration 48 | # This enables jmx access over a configured jmx-tcp-port. 49 | # You have to configure the first four settings if you run a ibm jvm, caused by the 50 | # fact that IBM's jvm does not support VirtualMachine.attach(PID). 51 | # JMX access is needed for quering a running activemq instance to gain data or to 52 | # trigger management operations. 53 | # 54 | # Example for ${ACTIVEMQ_CONF}/jmx.access: 55 | # --- 56 | # # The "monitorRole" role has readonly access. 57 | # # The "controlRole" role has readwrite access. 58 | # monitorRole readonly 59 | # controlRole readwrite 60 | # --- 61 | # 62 | # Example for ${ACTIVEMQ_CONF}/jmx.password: 63 | # --- 64 | # # The "monitorRole" role has password "abc123". 65 | # # # The "controlRole" role has password "abcd1234". 66 | # monitorRole abc123 67 | # controlRole abcd1234 68 | # --- 69 | # 70 | # ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.port=11099 " 71 | # ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.password.file=${ACTIVEMQ_CONF}/jmx.password" 72 | # ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.access.file=${ACTIVEMQ_CONF}/jmx.access" 73 | # ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote.ssl=false" 74 | ACTIVEMQ_SUNJMX_START="$ACTIVEMQ_SUNJMX_START -Dcom.sun.management.jmxremote" 75 | 76 | # Set jvm jmx configuration for controlling the broker process 77 | # You only have to configure the first four settings if you run a ibm jvm, caused by the 78 | # fact that IBM's jvm does not support VirtualMachine.attach(PID) 79 | # (see also com.sun.management.jmxremote.port, .jmx.password.file and .jmx.access.file ) 80 | #ACTIVEMQ_SUNJMX_CONTROL="--jmxurl service:jmx:rmi:///jndi/rmi://127.0.0.1:1099/jmxrmi --jmxuser controlRole --jmxpassword abcd1234" 81 | ACTIVEMQ_SUNJMX_CONTROL="" 82 | 83 | # Specify the queue manager URL for using "browse" option of sysv initscript 84 | if [ -z "$ACTIVEMQ_QUEUEMANAGERURL" ]; then 85 | ACTIVEMQ_QUEUEMANAGERURL="--amqurl tcp://localhost:61616" 86 | fi 87 | 88 | # Set additional JSE arguments 89 | if [ -z "$ACTIVEMQ_SSL_OPTS" ] ; then 90 | #ACTIVEMQ_SSL_OPTS="-Djava.security.properties=$ACTIVEMQ_CONF/java.security" 91 | ACTIVEMQ_SSL_OPTS="" 92 | fi 93 | 94 | # Uncomment to enable remote debugging 95 | #ACTIVEMQ_DEBUG_OPTS="-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005" 96 | 97 | # ActiveMQ tries to shutdown the broker by jmx, 98 | # after a specified number of seconds send SIGKILL 99 | if [ -z "$ACTIVEMQ_KILL_MAXSECONDS" ]; then 100 | ACTIVEMQ_KILL_MAXSECONDS=30 101 | fi 102 | 103 | # Configure a user with non root privileges, if no user is specified do not change user 104 | # (the entire activemq installation should be owned by this user) 105 | ACTIVEMQ_USER="{{ activemq_user }}" 106 | 107 | # location of the pidfile 108 | # ACTIVEMQ_PIDFILE="$ACTIVEMQ_DATA/activemq.pid" 109 | 110 | # Location of the java installation 111 | # Specify the location of your java installation using JAVA_HOME, or specify the 112 | # path to the "java" binary using JAVACMD 113 | # (set JAVACMD to "auto" for automatic detection) 114 | JAVA_HOME="{{ alf_java_home }}" 115 | #JAVACMD="auto" 116 | -------------------------------------------------------------------------------- /templates/alfresco-global.properties.j2: -------------------------------------------------------------------------------- 1 | 2 | dir.root={{ alf_home }}/alf_data 3 | 4 | ### Host Configuration ### 5 | alfresco.context={{ alf_context }} 6 | alfresco.host={{ alf_host }} 7 | alfresco.port={{ alf_port }} 8 | alfresco.protocol={{ alf_protocol }} 9 | share.context={{ share_context }} 10 | share.host={{ share_host }} 11 | share.port={{ share_port }} 12 | share.protocol={{ share_protocol }} 13 | 14 | ### database connection properties ### 15 | db.driver={{ alf_db_driver }} 16 | db.username={{ alf_db_username }} 17 | db.password={{ alf_db_password }} 18 | db.name={{ alf_db_name }} 19 | db.url={{ alf_db_url }} 20 | # Note: your database must also be able to accept at least this many connections. Please see your database documentation for instructions on how to configure this. 21 | db.pool.max=275 22 | db.pool.validate.query= 23 | 24 | # The server mode. Set value here 25 | # UNKNOWN | TEST | BACKUP | PRODUCTION 26 | system.serverMode=UNKNOWN 27 | 28 | ### FTP Server Configuration ### 29 | ftp.port={{ alf_ftp_port }} 30 | 31 | ### RMI registry port for JMX ### 32 | alfresco.rmi.services.port=50500 33 | alfresco.rmi.services.host={{ ansible_hostname }} 34 | monitor.rmi.service.port=50501 35 | alfresco.jmx.connector.enabled=true 36 | alfresco.jmx.dir={{ alf_home }}/tomcat/shared/classes/alfresco/extension/alfresco-jmx 37 | 38 | ### External executable locations ### 39 | ooo.exe={{jodconverter_office_home}}/bin/soffice.bin 40 | ooo.enabled={{ jodconverter_enabled }} 41 | ooo.port={{ jodconverter_port }} 42 | img.root={{ imagemagick_root }} 43 | img.dyn={{ imagemagick_dynlib }} 44 | img.exe={{ imagemagick_bin }} 45 | 46 | alfresco-pdf-renderer.root={{ alf_home }}/common 47 | alfresco-pdf-renderer.exe=${alfresco-pdf-renderer.root}/alfresco-pdf-renderer 48 | 49 | jodconverter.enabled={{ jodconverter_enabled }} 50 | jodconverter.officeHome={{ jodconverter_office_home }} 51 | jodconverter.portNumbers={{ jodconverter_port }} 52 | 53 | ### Initial admin password ### 54 | alfresco_user_store.adminpassword={{ alf_initial_admin_password }} 55 | 56 | ### E-mail site invitation setting ### 57 | notification.email.siteinvite={{ alf_notification_email }} 58 | 59 | ### Outbound mail settings ### 60 | mail.host={{ mail_host }} 61 | mail.from.default={{ mail_from }} 62 | mail.from.enabled=false 63 | 64 | ### License location ### 65 | dir.license.external={{ alf_home }} 66 | 67 | ### Solr indexing ### 68 | index.subsystem.name={{ alf_index_subsystem }} 69 | dir.keystore=${dir.root}/keystore 70 | solr.host={{ alf_solr_host }} 71 | solr.protocol=http 72 | solr.secureComms=none 73 | solr.port={{ alf_solr_port }} 74 | solr.baseUrl=/solr 75 | 76 | ### Smart Folders Config Properties ### 77 | smart.folders.enabled={{ alf_smart_folders_enabled }} 78 | 79 | aos.baseUrlOverwrite={{ alf_aos_base_url }} 80 | 81 | {% if audit_enabled %} 82 | ### Audit Service Settings ### 83 | audit.enabled=true 84 | audit.alfresco-access.enabled=true 85 | audit.alfresco-access.sub-actions.enabled=false 86 | 87 | {% endif %} 88 | 89 | ### Alfresco Cloud Sync ### 90 | sync.mode=OFF 91 | 92 | ### Alfresco Transormation Service Settings ### 93 | 94 | transform.service.enabled=true 95 | local.transform.service.enabled=false 96 | legacy.transform.service.enabled=true 97 | -------------------------------------------------------------------------------- /templates/alfresco-jmxrmi.password.j2: -------------------------------------------------------------------------------- 1 | monitorRole {{ alf_jmx_monitor_password }} 2 | controlRole {{ alf_jmx_control_password }} 3 | -------------------------------------------------------------------------------- /templates/catalina.sh.j2: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # Licensed to the Apache Software Foundation (ASF) under one or more 4 | # contributor license agreements. See the NOTICE file distributed with 5 | # this work for additional information regarding copyright ownership. 6 | # The ASF licenses this file to You under the Apache License, Version 2.0 7 | # (the "License"); you may not use this file except in compliance with 8 | # the License. You may obtain a copy of the License at 9 | # 10 | # http://www.apache.org/licenses/LICENSE-2.0 11 | # 12 | # Unless required by applicable law or agreed to in writing, software 13 | # distributed under the License is distributed on an "AS IS" BASIS, 14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 | # See the License for the specific language governing permissions and 16 | # limitations under the License. 17 | 18 | # ----------------------------------------------------------------------------- 19 | # Control Script for the CATALINA Server 20 | # 21 | # Environment Variable Prerequisites 22 | # 23 | # Do not set the variables in this script. Instead put them into a script 24 | # setenv.sh in CATALINA_BASE/bin to keep your customizations separate. 25 | # 26 | # CATALINA_HOME May point at your Catalina "build" directory. 27 | # 28 | # CATALINA_BASE (Optional) Base directory for resolving dynamic portions 29 | # of a Catalina installation. If not present, resolves to 30 | # the same directory that CATALINA_HOME points to. 31 | # 32 | # CATALINA_OUT (Optional) Full path to a file where stdout and stderr 33 | # will be redirected. 34 | # Default is $CATALINA_BASE/logs/catalina.out 35 | # 36 | # CATALINA_OPTS (Optional) Java runtime options used when the "start", 37 | # "run" or "debug" command is executed. 38 | # Include here and not in JAVA_OPTS all options, that should 39 | # only be used by Tomcat itself, not by the stop process, 40 | # the version command etc. 41 | # Examples are heap size, GC logging, JMX ports etc. 42 | # 43 | # CATALINA_TMPDIR (Optional) Directory path location of temporary directory 44 | # the JVM should use (java.io.tmpdir). Defaults to 45 | # $CATALINA_BASE/temp. 46 | # 47 | # JAVA_HOME Must point at your Java Development Kit installation. 48 | # Required to run the with the "debug" argument. 49 | # 50 | # JRE_HOME Must point at your Java Runtime installation. 51 | # Defaults to JAVA_HOME if empty. If JRE_HOME and JAVA_HOME 52 | # are both set, JRE_HOME is used. 53 | # 54 | # JAVA_OPTS (Optional) Java runtime options used when any command 55 | # is executed. 56 | # Include here and not in CATALINA_OPTS all options, that 57 | # should be used by Tomcat and also by the stop process, 58 | # the version command etc. 59 | # Most options should go into CATALINA_OPTS. 60 | # 61 | # JAVA_ENDORSED_DIRS (Optional) Lists of of colon separated directories 62 | # containing some jars in order to allow replacement of APIs 63 | # created outside of the JCP (i.e. DOM and SAX from W3C). 64 | # It can also be used to update the XML parser implementation. 65 | # This is only supported for Java <= 8. 66 | # Defaults to $CATALINA_HOME/endorsed. 67 | # 68 | # JPDA_TRANSPORT (Optional) JPDA transport used when the "jpda start" 69 | # command is executed. The default is "dt_socket". 70 | # 71 | # JPDA_ADDRESS (Optional) Java runtime options used when the "jpda start" 72 | # command is executed. The default is localhost:8000. 73 | # 74 | # JPDA_SUSPEND (Optional) Java runtime options used when the "jpda start" 75 | # command is executed. Specifies whether JVM should suspend 76 | # execution immediately after startup. Default is "n". 77 | # 78 | # JPDA_OPTS (Optional) Java runtime options used when the "jpda start" 79 | # command is executed. If used, JPDA_TRANSPORT, JPDA_ADDRESS, 80 | # and JPDA_SUSPEND are ignored. Thus, all required jpda 81 | # options MUST be specified. The default is: 82 | # 83 | # -agentlib:jdwp=transport=$JPDA_TRANSPORT, 84 | # address=$JPDA_ADDRESS,server=y,suspend=$JPDA_SUSPEND 85 | # 86 | # JSSE_OPTS (Optional) Java runtime options used to control the TLS 87 | # implementation when JSSE is used. Default is: 88 | # "-Djdk.tls.ephemeralDHKeySize=2048" 89 | # 90 | # CATALINA_PID (Optional) Path of the file which should contains the pid 91 | # of the catalina startup java process, when start (fork) is 92 | # used 93 | # 94 | # LOGGING_CONFIG (Optional) Override Tomcat's logging config file 95 | # Example (all one line) 96 | # LOGGING_CONFIG="-Djava.util.logging.config.file=$CATALINA_BASE/conf/logging.properties" 97 | # 98 | # LOGGING_MANAGER (Optional) Override Tomcat's logging manager 99 | # Example (all one line) 100 | # LOGGING_MANAGER="-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager" 101 | # 102 | # UMASK (Optional) Override Tomcat's default UMASK of 0027 103 | # 104 | # USE_NOHUP (Optional) If set to the string true the start command will 105 | # use nohup so that the Tomcat process will ignore any hangup 106 | # signals. Default is "false" unless running on HP-UX in which 107 | # case the default is "true" 108 | # ----------------------------------------------------------------------------- 109 | 110 | # OS specific support. $var _must_ be set to either true or false. 111 | cygwin=false 112 | darwin=false 113 | os400=false 114 | hpux=false 115 | case "`uname`" in 116 | CYGWIN*) cygwin=true;; 117 | Darwin*) darwin=true;; 118 | OS400*) os400=true;; 119 | HP-UX*) hpux=true;; 120 | esac 121 | 122 | # resolve links - $0 may be a softlink 123 | PRG="$0" 124 | 125 | while [ -h "$PRG" ]; do 126 | ls=`ls -ld "$PRG"` 127 | link=`expr "$ls" : '.*-> \(.*\)$'` 128 | if expr "$link" : '/.*' > /dev/null; then 129 | PRG="$link" 130 | else 131 | PRG=`dirname "$PRG"`/"$link" 132 | fi 133 | done 134 | 135 | # Get standard environment variables 136 | PRGDIR=`dirname "$PRG"` 137 | 138 | # Only set CATALINA_HOME if not already set 139 | [ -z "$CATALINA_HOME" ] && CATALINA_HOME=`cd "$PRGDIR/.." >/dev/null; pwd` 140 | 141 | # Copy CATALINA_BASE from CATALINA_HOME if not already set 142 | [ -z "$CATALINA_BASE" ] && CATALINA_BASE="$CATALINA_HOME" 143 | 144 | # Ensure that any user defined CLASSPATH variables are not used on startup, 145 | # but allow them to be specified in setenv.sh, in rare case when it is needed. 146 | CLASSPATH= 147 | 148 | if [ -r "$CATALINA_BASE/bin/setenv.sh" ]; then 149 | . "$CATALINA_BASE/bin/setenv.sh" 150 | elif [ -r "$CATALINA_HOME/bin/setenv.sh" ]; then 151 | . "$CATALINA_HOME/bin/setenv.sh" 152 | fi 153 | 154 | # For Cygwin, ensure paths are in UNIX format before anything is touched 155 | if $cygwin; then 156 | [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` 157 | [ -n "$JRE_HOME" ] && JRE_HOME=`cygpath --unix "$JRE_HOME"` 158 | [ -n "$CATALINA_HOME" ] && CATALINA_HOME=`cygpath --unix "$CATALINA_HOME"` 159 | [ -n "$CATALINA_BASE" ] && CATALINA_BASE=`cygpath --unix "$CATALINA_BASE"` 160 | [ -n "$CLASSPATH" ] && CLASSPATH=`cygpath --path --unix "$CLASSPATH"` 161 | fi 162 | 163 | # Ensure that neither CATALINA_HOME nor CATALINA_BASE contains a colon 164 | # as this is used as the separator in the classpath and Java provides no 165 | # mechanism for escaping if the same character appears in the path. 166 | case $CATALINA_HOME in 167 | *:*) echo "Using CATALINA_HOME: $CATALINA_HOME"; 168 | echo "Unable to start as CATALINA_HOME contains a colon (:) character"; 169 | exit 1; 170 | esac 171 | case $CATALINA_BASE in 172 | *:*) echo "Using CATALINA_BASE: $CATALINA_BASE"; 173 | echo "Unable to start as CATALINA_BASE contains a colon (:) character"; 174 | exit 1; 175 | esac 176 | 177 | # For OS400 178 | if $os400; then 179 | # Set job priority to standard for interactive (interactive - 6) by using 180 | # the interactive priority - 6, the helper threads that respond to requests 181 | # will be running at the same priority as interactive jobs. 182 | COMMAND='chgjob job('$JOBNAME') runpty(6)' 183 | system $COMMAND 184 | 185 | # Enable multi threading 186 | export QIBM_MULTI_THREADED=Y 187 | fi 188 | 189 | # Get standard Java environment variables 190 | if $os400; then 191 | # -r will Only work on the os400 if the files are: 192 | # 1. owned by the user 193 | # 2. owned by the PRIMARY group of the user 194 | # this will not work if the user belongs in secondary groups 195 | . "$CATALINA_HOME"/bin/setclasspath.sh 196 | else 197 | if [ -r "$CATALINA_HOME"/bin/setclasspath.sh ]; then 198 | . "$CATALINA_HOME"/bin/setclasspath.sh 199 | else 200 | echo "Cannot find $CATALINA_HOME/bin/setclasspath.sh" 201 | echo "This file is needed to run this program" 202 | exit 1 203 | fi 204 | fi 205 | 206 | # Add on extra jar files to CLASSPATH 207 | if [ ! -z "$CLASSPATH" ] ; then 208 | CLASSPATH="$CLASSPATH": 209 | fi 210 | CLASSPATH="$CLASSPATH""$CATALINA_HOME"/bin/bootstrap.jar 211 | 212 | if [ -z "$CATALINA_OUT" ] ; then 213 | #CATALINA_OUT="$CATALINA_BASE"/logs/catalina.out 214 | CATALINA_OUT={{ alf_tomcat_catalina_logs_dir }}/catalina.out 215 | fi 216 | 217 | if [ -z "$CATALINA_TMPDIR" ] ; then 218 | # Define the java.io.tmpdir to use for Catalina 219 | #CATALINA_TMPDIR="$CATALINA_BASE"/temp 220 | CATALINA_TMPDIR={{ alf_home }}/temp 221 | fi 222 | 223 | # Add tomcat-juli.jar to classpath 224 | # tomcat-juli.jar can be over-ridden per instance 225 | if [ -r "$CATALINA_BASE/bin/tomcat-juli.jar" ] ; then 226 | CLASSPATH=$CLASSPATH:$CATALINA_BASE/bin/tomcat-juli.jar 227 | else 228 | CLASSPATH=$CLASSPATH:$CATALINA_HOME/bin/tomcat-juli.jar 229 | fi 230 | 231 | # Bugzilla 37848: When no TTY is available, don't output to console 232 | have_tty=0 233 | if [ "`tty`" != "not a tty" ]; then 234 | have_tty=1 235 | fi 236 | 237 | # For Cygwin, switch paths to Windows format before running java 238 | if $cygwin; then 239 | JAVA_HOME=`cygpath --absolute --windows "$JAVA_HOME"` 240 | JRE_HOME=`cygpath --absolute --windows "$JRE_HOME"` 241 | CATALINA_HOME=`cygpath --absolute --windows "$CATALINA_HOME"` 242 | CATALINA_BASE=`cygpath --absolute --windows "$CATALINA_BASE"` 243 | CATALINA_TMPDIR=`cygpath --absolute --windows "$CATALINA_TMPDIR"` 244 | CLASSPATH=`cygpath --path --windows "$CLASSPATH"` 245 | [ -n "$JAVA_ENDORSED_DIRS" ] && JAVA_ENDORSED_DIRS=`cygpath --path --windows "$JAVA_ENDORSED_DIRS"` 246 | fi 247 | 248 | if [ -z "$JSSE_OPTS" ] ; then 249 | JSSE_OPTS="-Djdk.tls.ephemeralDHKeySize=2048" 250 | fi 251 | JAVA_OPTS="$JAVA_OPTS $JSSE_OPTS" 252 | 253 | # Register custom URL handlers 254 | # Do this here so custom URL handles (specifically 'war:...') can be used in the security policy 255 | JAVA_OPTS="$JAVA_OPTS -Djava.protocol.handler.pkgs=org.apache.catalina.webresources" 256 | 257 | # Set juli LogManager config file if it is present and an override has not been issued 258 | if [ -z "$LOGGING_CONFIG" ]; then 259 | if [ -r "$CATALINA_BASE"/conf/logging.properties ]; then 260 | LOGGING_CONFIG="-Djava.util.logging.config.file=$CATALINA_BASE/conf/logging.properties" 261 | else 262 | # Bugzilla 45585 263 | LOGGING_CONFIG="-Dnop" 264 | fi 265 | fi 266 | 267 | if [ -z "$LOGGING_MANAGER" ]; then 268 | LOGGING_MANAGER="-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager" 269 | fi 270 | 271 | # Set UMASK unless it has been overridden 272 | if [ -z "$UMASK" ]; then 273 | UMASK="0027" 274 | fi 275 | umask $UMASK 276 | 277 | # Java 9 no longer supports the java.endorsed.dirs 278 | # system property. Only try to use it if 279 | # JAVA_ENDORSED_DIRS was explicitly set 280 | # or CATALINA_HOME/endorsed exists. 281 | ENDORSED_PROP=ignore.endorsed.dirs 282 | if [ -n "$JAVA_ENDORSED_DIRS" ]; then 283 | ENDORSED_PROP=java.endorsed.dirs 284 | fi 285 | if [ -d "$CATALINA_HOME/endorsed" ]; then 286 | ENDORSED_PROP=java.endorsed.dirs 287 | fi 288 | 289 | # Make the umask available when using the org.apache.catalina.security.SecurityListener 290 | JAVA_OPTS="$JAVA_OPTS -Dorg.apache.catalina.security.SecurityListener.UMASK=`umask`" 291 | 292 | if [ -z "$USE_NOHUP" ]; then 293 | if $hpux; then 294 | USE_NOHUP="true" 295 | else 296 | USE_NOHUP="false" 297 | fi 298 | fi 299 | unset _NOHUP 300 | if [ "$USE_NOHUP" = "true" ]; then 301 | _NOHUP=nohup 302 | fi 303 | 304 | # Add the JAVA 9 specific start-up parameters required by Tomcat 305 | JDK_JAVA_OPTIONS="$JDK_JAVA_OPTIONS --add-opens=java.base/java.lang=ALL-UNNAMED" 306 | JDK_JAVA_OPTIONS="$JDK_JAVA_OPTIONS --add-opens=java.base/java.io=ALL-UNNAMED" 307 | JDK_JAVA_OPTIONS="$JDK_JAVA_OPTIONS --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED" 308 | export JDK_JAVA_OPTIONS 309 | 310 | # ----- Execute The Requested Command ----------------------------------------- 311 | 312 | # Bugzilla 37848: only output this if we have a TTY 313 | if [ $have_tty -eq 1 ]; then 314 | echo "Using CATALINA_BASE: $CATALINA_BASE" 315 | echo "Using CATALINA_HOME: $CATALINA_HOME" 316 | echo "Using CATALINA_TMPDIR: $CATALINA_TMPDIR" 317 | if [ "$1" = "debug" ] ; then 318 | echo "Using JAVA_HOME: $JAVA_HOME" 319 | else 320 | echo "Using JRE_HOME: $JRE_HOME" 321 | fi 322 | echo "Using CLASSPATH: $CLASSPATH" 323 | if [ ! -z "$CATALINA_PID" ]; then 324 | echo "Using CATALINA_PID: $CATALINA_PID" 325 | fi 326 | fi 327 | 328 | if [ "$1" = "jpda" ] ; then 329 | if [ -z "$JPDA_TRANSPORT" ]; then 330 | JPDA_TRANSPORT="dt_socket" 331 | fi 332 | if [ -z "$JPDA_ADDRESS" ]; then 333 | JPDA_ADDRESS="localhost:8000" 334 | fi 335 | if [ -z "$JPDA_SUSPEND" ]; then 336 | JPDA_SUSPEND="n" 337 | fi 338 | if [ -z "$JPDA_OPTS" ]; then 339 | JPDA_OPTS="-agentlib:jdwp=transport=$JPDA_TRANSPORT,address=$JPDA_ADDRESS,server=y,suspend=$JPDA_SUSPEND" 340 | fi 341 | CATALINA_OPTS="$JPDA_OPTS $CATALINA_OPTS" 342 | shift 343 | fi 344 | 345 | if [ "$1" = "debug" ] ; then 346 | if $os400; then 347 | echo "Debug command not available on OS400" 348 | exit 1 349 | else 350 | shift 351 | if [ "$1" = "-security" ] ; then 352 | if [ $have_tty -eq 1 ]; then 353 | echo "Using Security Manager" 354 | fi 355 | shift 356 | exec "$_RUNJDB" "$LOGGING_CONFIG" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \ 357 | -D$ENDORSED_PROP="$JAVA_ENDORSED_DIRS" \ 358 | -classpath "$CLASSPATH" \ 359 | -sourcepath "$CATALINA_HOME"/../../java \ 360 | -Djava.security.manager \ 361 | -Djava.security.policy=="$CATALINA_BASE"/conf/catalina.policy \ 362 | -Dcatalina.base="$CATALINA_BASE" \ 363 | -Dcatalina.home="$CATALINA_HOME" \ 364 | -Djava.io.tmpdir="$CATALINA_TMPDIR" \ 365 | org.apache.catalina.startup.Bootstrap "$@" start 366 | else 367 | exec "$_RUNJDB" "$LOGGING_CONFIG" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \ 368 | -D$ENDORSED_PROP="$JAVA_ENDORSED_DIRS" \ 369 | -classpath "$CLASSPATH" \ 370 | -sourcepath "$CATALINA_HOME"/../../java \ 371 | -Dcatalina.base="$CATALINA_BASE" \ 372 | -Dcatalina.home="$CATALINA_HOME" \ 373 | -Djava.io.tmpdir="$CATALINA_TMPDIR" \ 374 | org.apache.catalina.startup.Bootstrap "$@" start 375 | fi 376 | fi 377 | 378 | elif [ "$1" = "run" ]; then 379 | 380 | shift 381 | if [ "$1" = "-security" ] ; then 382 | if [ $have_tty -eq 1 ]; then 383 | echo "Using Security Manager" 384 | fi 385 | shift 386 | eval exec "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \ 387 | -D$ENDORSED_PROP="\"$JAVA_ENDORSED_DIRS\"" \ 388 | -classpath "\"$CLASSPATH\"" \ 389 | -Djava.security.manager \ 390 | -Djava.security.policy=="\"$CATALINA_BASE/conf/catalina.policy\"" \ 391 | -Dcatalina.base="\"$CATALINA_BASE\"" \ 392 | -Dcatalina.home="\"$CATALINA_HOME\"" \ 393 | -Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \ 394 | org.apache.catalina.startup.Bootstrap "$@" start 395 | else 396 | eval exec "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \ 397 | -D$ENDORSED_PROP="\"$JAVA_ENDORSED_DIRS\"" \ 398 | -classpath "\"$CLASSPATH\"" \ 399 | -Dcatalina.base="\"$CATALINA_BASE\"" \ 400 | -Dcatalina.home="\"$CATALINA_HOME\"" \ 401 | -Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \ 402 | org.apache.catalina.startup.Bootstrap "$@" start 403 | fi 404 | 405 | elif [ "$1" = "start" ] ; then 406 | 407 | if [ ! -z "$CATALINA_PID" ]; then 408 | if [ -f "$CATALINA_PID" ]; then 409 | if [ -s "$CATALINA_PID" ]; then 410 | echo "Existing PID file found during start." 411 | if [ -r "$CATALINA_PID" ]; then 412 | PID=`cat "$CATALINA_PID"` 413 | ps -p $PID >/dev/null 2>&1 414 | if [ $? -eq 0 ] ; then 415 | echo "Tomcat appears to still be running with PID $PID. Start aborted." 416 | echo "If the following process is not a Tomcat process, remove the PID file and try again:" 417 | ps -f -p $PID 418 | exit 1 419 | else 420 | echo "Removing/clearing stale PID file." 421 | rm -f "$CATALINA_PID" >/dev/null 2>&1 422 | if [ $? != 0 ]; then 423 | if [ -w "$CATALINA_PID" ]; then 424 | cat /dev/null > "$CATALINA_PID" 425 | else 426 | echo "Unable to remove or clear stale PID file. Start aborted." 427 | exit 1 428 | fi 429 | fi 430 | fi 431 | else 432 | echo "Unable to read PID file. Start aborted." 433 | exit 1 434 | fi 435 | else 436 | rm -f "$CATALINA_PID" >/dev/null 2>&1 437 | if [ $? != 0 ]; then 438 | if [ ! -w "$CATALINA_PID" ]; then 439 | echo "Unable to remove or write to empty PID file. Start aborted." 440 | exit 1 441 | fi 442 | fi 443 | fi 444 | fi 445 | fi 446 | 447 | shift 448 | touch "$CATALINA_OUT" 449 | if [ "$1" = "-security" ] ; then 450 | if [ $have_tty -eq 1 ]; then 451 | echo "Using Security Manager" 452 | fi 453 | shift 454 | eval $_NOHUP "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \ 455 | -D$ENDORSED_PROP="\"$JAVA_ENDORSED_DIRS\"" \ 456 | -classpath "\"$CLASSPATH\"" \ 457 | -Djava.security.manager \ 458 | -Djava.security.policy=="\"$CATALINA_BASE/conf/catalina.policy\"" \ 459 | -Dcatalina.base="\"$CATALINA_BASE\"" \ 460 | -Dcatalina.home="\"$CATALINA_HOME\"" \ 461 | -Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \ 462 | org.apache.catalina.startup.Bootstrap "$@" start \ 463 | >> "$CATALINA_OUT" 2>&1 "&" 464 | 465 | else 466 | eval $_NOHUP "\"$_RUNJAVA\"" "\"$LOGGING_CONFIG\"" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \ 467 | -D$ENDORSED_PROP="\"$JAVA_ENDORSED_DIRS\"" \ 468 | -classpath "\"$CLASSPATH\"" \ 469 | -Dcatalina.base="\"$CATALINA_BASE\"" \ 470 | -Dcatalina.home="\"$CATALINA_HOME\"" \ 471 | -Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \ 472 | org.apache.catalina.startup.Bootstrap "$@" start \ 473 | >> "$CATALINA_OUT" 2>&1 "&" 474 | 475 | fi 476 | 477 | if [ ! -z "$CATALINA_PID" ]; then 478 | echo $! > "$CATALINA_PID" 479 | fi 480 | 481 | echo "Tomcat started." 482 | 483 | elif [ "$1" = "stop" ] ; then 484 | 485 | shift 486 | 487 | SLEEP=5 488 | if [ ! -z "$1" ]; then 489 | echo $1 | grep "[^0-9]" >/dev/null 2>&1 490 | if [ $? -gt 0 ]; then 491 | SLEEP=$1 492 | shift 493 | fi 494 | fi 495 | 496 | FORCE=0 497 | if [ "$1" = "-force" ]; then 498 | shift 499 | FORCE=1 500 | fi 501 | 502 | if [ ! -z "$CATALINA_PID" ]; then 503 | if [ -f "$CATALINA_PID" ]; then 504 | if [ -s "$CATALINA_PID" ]; then 505 | kill -0 `cat "$CATALINA_PID"` >/dev/null 2>&1 506 | if [ $? -gt 0 ]; then 507 | echo "PID file found but either no matching process was found or the current user does not have permission to stop the process. Stop aborted." 508 | exit 1 509 | fi 510 | else 511 | echo "PID file is empty and has been ignored." 512 | fi 513 | else 514 | echo "\$CATALINA_PID was set but the specified file does not exist. Is Tomcat running? Stop aborted." 515 | exit 1 516 | fi 517 | fi 518 | 519 | eval "\"$_RUNJAVA\"" $JAVA_OPTS \ 520 | -D$ENDORSED_PROP="\"$JAVA_ENDORSED_DIRS\"" \ 521 | -classpath "\"$CLASSPATH\"" \ 522 | -Dcatalina.base="\"$CATALINA_BASE\"" \ 523 | -Dcatalina.home="\"$CATALINA_HOME\"" \ 524 | -Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \ 525 | org.apache.catalina.startup.Bootstrap "$@" stop 526 | 527 | # stop failed. Shutdown port disabled? Try a normal kill. 528 | if [ $? != 0 ]; then 529 | if [ ! -z "$CATALINA_PID" ]; then 530 | echo "The stop command failed. Attempting to signal the process to stop through OS signal." 531 | kill -15 `cat "$CATALINA_PID"` >/dev/null 2>&1 532 | fi 533 | fi 534 | 535 | if [ ! -z "$CATALINA_PID" ]; then 536 | if [ -f "$CATALINA_PID" ]; then 537 | while [ $SLEEP -ge 0 ]; do 538 | kill -0 `cat "$CATALINA_PID"` >/dev/null 2>&1 539 | if [ $? -gt 0 ]; then 540 | rm -f "$CATALINA_PID" >/dev/null 2>&1 541 | if [ $? != 0 ]; then 542 | if [ -w "$CATALINA_PID" ]; then 543 | cat /dev/null > "$CATALINA_PID" 544 | # If Tomcat has stopped don't try and force a stop with an empty PID file 545 | FORCE=0 546 | else 547 | echo "The PID file could not be removed or cleared." 548 | fi 549 | fi 550 | echo "Tomcat stopped." 551 | break 552 | fi 553 | if [ $SLEEP -gt 0 ]; then 554 | sleep 1 555 | fi 556 | if [ $SLEEP -eq 0 ]; then 557 | echo "Tomcat did not stop in time." 558 | if [ $FORCE -eq 0 ]; then 559 | echo "PID file was not removed." 560 | fi 561 | echo "To aid diagnostics a thread dump has been written to standard out." 562 | kill -3 `cat "$CATALINA_PID"` 563 | fi 564 | SLEEP=`expr $SLEEP - 1 ` 565 | done 566 | fi 567 | fi 568 | 569 | KILL_SLEEP_INTERVAL=5 570 | if [ $FORCE -eq 1 ]; then 571 | if [ -z "$CATALINA_PID" ]; then 572 | echo "Kill failed: \$CATALINA_PID not set" 573 | else 574 | if [ -f "$CATALINA_PID" ]; then 575 | PID=`cat "$CATALINA_PID"` 576 | echo "Killing Tomcat with the PID: $PID" 577 | kill -9 $PID 578 | while [ $KILL_SLEEP_INTERVAL -ge 0 ]; do 579 | kill -0 `cat "$CATALINA_PID"` >/dev/null 2>&1 580 | if [ $? -gt 0 ]; then 581 | rm -f "$CATALINA_PID" >/dev/null 2>&1 582 | if [ $? != 0 ]; then 583 | if [ -w "$CATALINA_PID" ]; then 584 | cat /dev/null > "$CATALINA_PID" 585 | else 586 | echo "The PID file could not be removed." 587 | fi 588 | fi 589 | echo "The Tomcat process has been killed." 590 | break 591 | fi 592 | if [ $KILL_SLEEP_INTERVAL -gt 0 ]; then 593 | sleep 1 594 | fi 595 | KILL_SLEEP_INTERVAL=`expr $KILL_SLEEP_INTERVAL - 1 ` 596 | done 597 | if [ $KILL_SLEEP_INTERVAL -lt 0 ]; then 598 | echo "Tomcat has not been killed completely yet. The process might be waiting on some system call or might be UNINTERRUPTIBLE." 599 | fi 600 | fi 601 | fi 602 | fi 603 | 604 | elif [ "$1" = "configtest" ] ; then 605 | 606 | eval "\"$_RUNJAVA\"" $LOGGING_MANAGER $JAVA_OPTS \ 607 | -D$ENDORSED_PROP="\"$JAVA_ENDORSED_DIRS\"" \ 608 | -classpath "\"$CLASSPATH\"" \ 609 | -Dcatalina.base="\"$CATALINA_BASE\"" \ 610 | -Dcatalina.home="\"$CATALINA_HOME\"" \ 611 | -Djava.io.tmpdir="\"$CATALINA_TMPDIR\"" \ 612 | org.apache.catalina.startup.Bootstrap configtest 613 | result=$? 614 | if [ $result -ne 0 ]; then 615 | echo "Configuration error detected!" 616 | fi 617 | exit $result 618 | 619 | elif [ "$1" = "version" ] ; then 620 | 621 | "$_RUNJAVA" \ 622 | -classpath "$CATALINA_HOME/lib/catalina.jar" \ 623 | org.apache.catalina.util.ServerInfo 624 | 625 | else 626 | 627 | echo "Usage: catalina.sh ( commands ... )" 628 | echo "commands:" 629 | if $os400; then 630 | echo " debug Start Catalina in a debugger (not available on OS400)" 631 | echo " debug -security Debug Catalina with a security manager (not available on OS400)" 632 | else 633 | echo " debug Start Catalina in a debugger" 634 | echo " debug -security Debug Catalina with a security manager" 635 | fi 636 | echo " jpda start Start Catalina under JPDA debugger" 637 | echo " run Start Catalina in the current window" 638 | echo " run -security Start in the current window with security manager" 639 | echo " start Start Catalina in a separate window" 640 | echo " start -security Start in a separate window with security manager" 641 | echo " stop Stop Catalina, waiting up to 5 seconds for the process to end" 642 | echo " stop n Stop Catalina, waiting up to n seconds for the process to end" 643 | echo " stop -force Stop Catalina, wait up to 5 seconds and then use kill -KILL if still running" 644 | echo " stop n -force Stop Catalina, wait up to n seconds and then use kill -KILL if still running" 645 | echo " configtest Run a basic syntax check on server.xml - check exit code for result" 646 | echo " version What version of tomcat are you running?" 647 | echo "Note: Waiting for the process to end and use of the -force option require that \$CATALINA_PID is defined" 648 | exit 1 649 | 650 | fi 651 | -------------------------------------------------------------------------------- /templates/ctl.sh.j2: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | CATALINA_HOME={{ alf_home }}/tomcat 4 | TOMCAT_BINDIR={{ alf_home }}/tomcat/bin 5 | JAVA_HOME=$JAVA_HOME 6 | CATALINA_PID={{ alf_home }}/tomcat/temp/catalina.pid 7 | export CATALINA_PID 8 | TOMCAT_STATUS="" 9 | ERROR=0 10 | PID="" 11 | 12 | start_tomcat() { 13 | is_tomcat_running 14 | RUNNING=$? 15 | if [ $RUNNING -eq 1 ]; then 16 | echo "$0 $ARG: tomcat (pid $PID) already running" 17 | else 18 | rm -f $CATALINA_PID 19 | export JAVA_OPTS="-Xms8G -Xmx16G -XX:+DisableExplicitGC -Djava.awt.headless=true -Dalfresco.home={{ alf_home }} -Dcom.sun.management.jmxremote -Dsun.security.ssl.allowUnsafeRenegotiation=true -XX:ReservedCodeCacheSize=128m" 20 | previousdir=`pwd` 21 | cd $CATALINA_HOME/.. 22 | $TOMCAT_BINDIR/startup.sh 23 | if [ $? -eq 0 ]; then 24 | echo "$0 $ARG: tomcat started" 25 | else 26 | echo "$0 $ARG: tomcat could not be started" 27 | ERROR=1 28 | fi 29 | cd $previousdir 30 | fi 31 | } 32 | 33 | daemon_tomcat() { 34 | export JAVA_OPTS="-Xms8G -Xmx16G -XX:+DisableExplicitGC -Djava.awt.headless=true -Dalfresco.home={{ alf_home }} -Dcom.sun.management.jmxremote -Dsun.security.ssl.allowUnsafeRenegotiation=true -XX:ReservedCodeCacheSize=128m" 35 | $TOMCAT_BINDIR/catalina.sh run 36 | } 37 | 38 | stop_tomcat() { 39 | is_tomcat_running 40 | RUNNING=$? 41 | if [ $RUNNING -eq 0 ]; then 42 | echo "$0 $ARG: $TOMCAT_STATUS" 43 | exit 44 | fi 45 | $TOMCAT_BINDIR/shutdown.sh 300 -force 46 | sleep 2 47 | is_tomcat_running 48 | RUNNING=$? 49 | COUNTER=4 50 | while [ $RUNNING -ne 0 ] && [ $COUNTER -ne 0 ]; do 51 | COUNTER=`expr $COUNTER - 1` 52 | sleep 2 53 | is_tomcat_running 54 | RUNNING=$? 55 | done 56 | if [ $RUNNING -eq 0 ]; then 57 | echo "$0 $ARG: tomcat stopped" 58 | sleep 3 59 | else 60 | echo "$0 $ARG: tomcat could not be stopped" 61 | ERROR=2 62 | fi 63 | } 64 | 65 | get_pid() { 66 | PID="" 67 | PIDFILE=$1 68 | # check for pidfile 69 | if [ -f $PIDFILE ] ; then 70 | PID=`cat $PIDFILE` 71 | fi 72 | } 73 | 74 | get_tomcat_pid() { 75 | get_pid $CATALINA_PID 76 | if [ ! $PID ]; then 77 | return 78 | fi 79 | } 80 | 81 | is_service_running() { 82 | PID=$1 83 | if [ "x$PID" != "x" ] && kill -0 $PID 2>/dev/null ; then 84 | RUNNING=1 85 | else 86 | RUNNING=0 87 | fi 88 | return $RUNNING 89 | } 90 | 91 | is_tomcat_running() { 92 | get_tomcat_pid 93 | is_service_running $PID 94 | RUNNING=$? 95 | if [ $RUNNING -eq 0 ]; then 96 | TOMCAT_STATUS="tomcat not running" 97 | else 98 | TOMCAT_STATUS="tomcat already running" 99 | fi 100 | return $RUNNING 101 | } 102 | 103 | cleanpid() { 104 | rm -f $CATALINA_PID 105 | } 106 | 107 | if [ "x$1" = "xstart" ]; then 108 | start_tomcat 109 | sleep 2 110 | elif [ "x$1" = "xdaemon" ]; then 111 | daemon_tomcat 112 | elif [ "x$1" = "xstop" ]; then 113 | stop_tomcat 114 | sleep 2 115 | elif [ "x$1" = "xstatus" ]; then 116 | is_tomcat_running 117 | echo $TOMCAT_STATUS 118 | elif [ "x$1" = "xcleanpid" ]; then 119 | cleanpid 120 | fi 121 | -------------------------------------------------------------------------------- /templates/custom-slingshot-application-context.xml.j2: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /templates/server.xml.j2: -------------------------------------------------------------------------------- 1 | 2 | 18 | 22 | 23 | 24 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 37 | 38 | 41 | 46 | 47 | 48 | 53 | 54 | 55 | 56 | 60 | 61 | 62 | 69 | 72 | 73 | 74 | {% if proxy_enabled %} 75 | 76 | {% else %} 77 | 78 | {% endif %} 79 | 80 | {% if ssl_enabled %} 81 | 85 | {% endif %} 86 | 87 | 92 | 93 | 96 | 97 | 98 | 101 | 104 | 105 | 107 | 108 | 112 | 114 | 115 | 116 | 118 | 119 | 121 | 124 | 125 | 128 | 131 | {% if proxy_enabled %} 132 | 133 | {% endif %} 134 | 135 | 136 | 137 | 138 | -------------------------------------------------------------------------------- /templates/setenv.sh.j2: -------------------------------------------------------------------------------- 1 | # Load Tomcat Native Library 2 | LD_LIBRARY_PATH={{ alf_home }}/common/lib:$LD_LIBRARY_PATH 3 | 4 | JRE_HOME=$JAVA_HOME 5 | JAVA_OPTS="-XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -Djava.awt.headless=true -Dalfresco.home={{ alf_home }} -XX:ReservedCodeCacheSize=128m $JAVA_OPTS " 6 | JAVA_OPTS="-Xms512M -Xmx{{ java_opts_xmx }} $JAVA_OPTS " # java-memory-settings 7 | JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote " # JMX settings 8 | JAVA_OPTS="$JAVA_OPTS -Djava.io.tmpdir={{ alf_home }}/temp " 9 | export JAVA_HOME 10 | export JRE_HOME 11 | export JAVA_OPTS 12 | export LD_LIBRARY_PATH 13 | -------------------------------------------------------------------------------- /templates/share-config-custom.xml.j2: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 9 | false 10 | 11 | 15 | false 16 | 17 | 18 | 19 | 20 | 21 | 22 | 26 | 27 | 28 | production 29 | 30 | 31 | 32 | 33 | manual 34 | true 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 55 | 56 | 60 | 68 | 69 | 70 | 80 | 81 | 82 | 92 | 93 | 94 | 95 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 113 | false 114 | 115 | 118 | 1000 119 | 120 | 123 | 7000 124 | 125 | 126 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | 171 | 172 | 173 | 174 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 213 | {{ alf_protocol }}://{{ alf_host }}:{{ alf_port }}/alfresco 214 | 215 | 218 | 219 | 222 | false 223 | 224 | 228 | 229 | application/vnd.openxmlformats-officedocument.wordprocessingml.document 230 | application/vnd.openxmlformats-officedocument.spreadsheetml.sheet 231 | application/vnd.ms-powerpoint 232 | 233 | 234 | 235 | 238 | 239 | 245 | true 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 260 | 261 | 262 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 276 | 277 | location.path.documents 278 | 279 | slingshot/doclib/treenode/site/{site}/{container}{path}?children={evaluateChildFoldersSite}&max={maximumFolderCountSite} 280 | 281 | 282 | 283 | 284 | 285 | 286 | 291 | alfresco://company/home 292 | 293 | 294 | 298 | false 299 | 300 | 303 | 500 304 | 305 | 306 | 309 | true 310 | 311 | 312 | 313 | 314 | 315 | 316 | 324 | secret 325 | 328 | ALFRESCO.ORG 329 | 333 | HTTP/repository.server.com@ALFRESCO.ORG 334 | 337 | ShareHTTP 338 | 342 | true 343 | 344 | 345 | 346 | 347 | 352 | 353 | 354 | 355 | 356 | alfresco-noauth 357 | Alfresco - unauthenticated access 358 | Access to Alfresco Repository WebScripts that do not require authentication 359 | alfresco 360 | {{ alf_tomcat_protocol }}://{{ inventory_hostname }}:{{ alf_tomcat_web_port }}/alfresco/s 361 | none 362 | 363 | 364 | 365 | alfresco 366 | Alfresco - user access 367 | Access to Alfresco Repository WebScripts that require user authentication 368 | alfresco 369 | {{ alf_tomcat_protocol }}://{{ inventory_hostname }}:{{ alf_tomcat_web_port }}/alfresco/s 370 | user 371 | 372 | 373 | 374 | alfresco-feed 375 | Alfresco Feed 376 | Alfresco Feed - supports basic HTTP authentication via the EndPointProxyServlet 377 | http 378 | {{ alf_tomcat_protocol }}://{{ inventory_hostname }}:{{ alf_tomcat_web_port }}/alfresco/s 379 | true 380 | user 381 | 382 | 383 | 384 | alfresco-api 385 | alfresco 386 | Alfresco Public API - user access 387 | Access to Alfresco Repository Public API that require user authentication. 388 | This makes use of the authentication that is provided by parent 'alfresco' endpoint. 389 | alfresco 390 | {{ alf_tomcat_protocol }}://{{ inventory_hostname }}:{{ alf_tomcat_web_port }}/alfresco/api 391 | user 392 | 393 | 394 | 395 | 396 | 426 | 427 | 428 | 429 | 494 | 495 | 496 | 497 | 514 | 515 | 516 | -------------------------------------------------------------------------------- /templates/shared.properties.j2: -------------------------------------------------------------------------------- 1 | # Shared Properties file 2 | 3 | #Host details an external client would use to connect to Solr 4 | solr.host=localhost 5 | #If not set then solr.port will be the jetty.port 6 | #solr.port=8983 7 | solr.baseurl=/solr 8 | solr.content.dir={{ alf_home }}/alf_data/solr6 9 | 10 | # Properties treated as identifiers when indexed 11 | 12 | alfresco.identifier.property.0={http://www.alfresco.org/model/content/1.0}creator 13 | alfresco.identifier.property.1={http://www.alfresco.org/model/content/1.0}modifier 14 | alfresco.identifier.property.2={http://www.alfresco.org/model/content/1.0}userName 15 | alfresco.identifier.property.3={http://www.alfresco.org/model/content/1.0}authorityName 16 | alfresco.identifier.property.4={http://www.alfresco.org/model/content/1.0}lockOwner 17 | 18 | # Suggestable Propeties 19 | #alfresco.suggestable.property.0={http://www.alfresco.org/model/content/1.0}name 20 | #alfresco.suggestable.property.1={http://www.alfresco.org/model/content/1.0}title 21 | #alfresco.suggestable.property.2={http://www.alfresco.org/model/content/1.0}description 22 | #alfresco.suggestable.property.3={http://www.alfresco.org/model/content/1.0}content 23 | 24 | # Data types that support cross locale/word splitting/token patterns if tokenised 25 | alfresco.cross.locale.property.0={http://www.alfresco.org/model/content/1.0}name 26 | alfresco.cross.locale.property.1={http://www.alfresco.org/model/content/1.0}lockOwner 27 | 28 | # Data types that support cross locale/word splitting/token patterns if tokenised 29 | # alfresco.cross.locale.datatype.0={http://www.alfresco.org/model/dictionary/1.0}text 30 | # alfresco.cross.locale.datatype.1={http://www.alfresco.org/model/dictionary/1.0}content 31 | # alfresco.cross.locale.datatype.2={http://www.alfresco.org/model/dictionary/1.0}mltext 32 | 33 | alfresco.model.tracker.cron=0/10 * * * * ? * 34 | -------------------------------------------------------------------------------- /templates/solr.in.sh.j2: -------------------------------------------------------------------------------- 1 | # Licensed to the Apache Software Foundation (ASF) under one or more 2 | # contributor license agreements. See the NOTICE file distributed with 3 | # this work for additional information regarding copyright ownership. 4 | # The ASF licenses this file to You under the Apache License, Version 2.0 5 | # (the "License"); you may not use this file except in compliance with 6 | # the License. You may obtain a copy of the License at 7 | # 8 | # http://www.apache.org/licenses/LICENSE-2.0 9 | # 10 | # Unless required by applicable law or agreed to in writing, software 11 | # distributed under the License is distributed on an "AS IS" BASIS, 12 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 | # See the License for the specific language governing permissions and 14 | # limitations under the License. 15 | 16 | # Settings here will override settings in existing env vars or in bin/solr. The default shipped state 17 | # of this file is completely commented. 18 | 19 | # By default the script will use JAVA_HOME to determine which java 20 | # to use, but you can set a specific path for Solr to use without 21 | # affecting other Java applications on your server/workstation. 22 | #SOLR_JAVA_HOME="" 23 | SOLR_JAVA_HOME={{ solr_java_home }} 24 | 25 | # This controls the number of seconds that the solr script will wait for 26 | # Solr to stop gracefully or Solr to start. If the graceful stop fails, 27 | # the script will forcibly stop Solr. If the start fails, the script will 28 | # give up waiting and display the last few lines of the logfile. 29 | #SOLR_STOP_WAIT="180" 30 | 31 | # Increase Java Heap as needed to support your indexing / query needs 32 | #SOLR_HEAP="512m" 33 | 34 | # Expert: If you want finer control over memory options, specify them directly 35 | # Comment out SOLR_HEAP if you are using this though, that takes precedence 36 | #SOLR_JAVA_MEM="-Xms512m -Xmx512m" 37 | SOLR_JAVA_MEM="{{ solr_java_mem }}" 38 | 39 | # Enable verbose GC logging 40 | GC_LOG_OPTS="" 41 | #GC_LOG_OPTS="-verbose:gc -XX:+PrintHeapAtGC -XX:+PrintGCDetails \ 42 | #-XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationStoppedTime" 43 | 44 | # These GC settings have shown to work well for a number of common Solr workloads 45 | #GC_TUNE="-XX:NewRatio=3 -XX:SurvivorRatio=4 etc. 46 | 47 | # Set the ZooKeeper connection string if using an external ZooKeeper ensemble 48 | # e.g. host1:2181,host2:2181/chroot 49 | # Leave empty if not using SolrCloud 50 | #ZK_HOST="" 51 | 52 | # Set the ZooKeeper client timeout (for SolrCloud mode) 53 | #ZK_CLIENT_TIMEOUT="15000" 54 | 55 | # By default the start script uses "localhost"; override the hostname here 56 | # for production SolrCloud environments to control the hostname exposed to cluster state 57 | #SOLR_HOST="192.168.1.1" 58 | 59 | # By default the start script uses UTC; override the timezone if needed 60 | #SOLR_TIMEZONE="UTC" 61 | 62 | # Set to true to activate the JMX RMI connector to allow remote JMX client applications 63 | # to monitor the JVM hosting Solr; set to "false" to disable that behavior 64 | # (false is recommended in production environments) 65 | #ENABLE_REMOTE_JMX_OPTS="false" 66 | 67 | # The script will use SOLR_PORT+10000 for the RMI_PORT or you can set it here 68 | # RMI_PORT=18983 69 | 70 | # Alfresco configuration. This file is automatically included by solr. You can define your custom settings here 71 | SOLR_OPTS="$SOLR_OPTS -Dsolr.jetty.request.header.size=1000000 -Dsolr.jetty.threads.stop.timeout=300000" 72 | SOLR_OPTS="$SOLR_OPTS -Djava.io.tmpdir={{ alf_home }}/temp" 73 | SOLR_OPTS="$SOLR_OPTS -Dsolr.solr.content.dir={{ solr_content_dir }}/contentstore" 74 | 75 | # Anything you add to the SOLR_OPTS variable will be included in the java 76 | # start command line as-is, in ADDITION to other options. If you specify the 77 | # -a option on start script, those options will be appended as well. Examples: 78 | #SOLR_OPTS="$SOLR_OPTS -Dsolr.autoSoftCommit.maxTime=3000" 79 | #SOLR_OPTS="$SOLR_OPTS -Dsolr.autoCommit.maxTime=60000" 80 | #SOLR_OPTS="$SOLR_OPTS -Dsolr.clustering.enabled=true" 81 | 82 | # Location where the bin/solr script will save PID files for running instances 83 | # If not set, the script will create PID files in $SOLR_TIP/bin 84 | #SOLR_PID_DIR= 85 | 86 | # Path to a directory for Solr to store cores and their data. By default, Solr will use server/solr 87 | # If solr.xml is not stored in ZooKeeper, this directory needs to contain solr.xml 88 | #SOLR_HOME= 89 | 90 | # Solr provides a default Log4J configuration properties file in server/resources 91 | # however, you may want to customize the log settings and file appender location 92 | # so you can point the script to use a different log4j.properties file 93 | #LOG4J_PROPS=/var/solr/log4j.properties 94 | 95 | # Changes the logging level. Valid values: ALL, TRACE, DEBUG, INFO, WARN, ERROR, FATAL, OFF. Default is INFO 96 | # This is an alternative to changing the rootLogger in log4j.properties 97 | #SOLR_LOG_LEVEL=INFO 98 | 99 | # Location where Solr should write logs to. Absolute or relative to solr start dir 100 | #SOLR_LOGS_DIR=../../logs 101 | SOLR_LOGS_DIR={{ alf_home }}/alfresco-search-services/logs 102 | #LOG4J_PROPS=$SOLR_LOGS_DIR/log4j.properties 103 | LOG4J_PROPS={{ alf_home }}/alfresco-search-services/logs/log4j.properties 104 | 105 | # Sets the port Solr binds to, default is 8983 106 | SOLR_PORT={{ solr_port }} 107 | 108 | # Uncomment to set SSL-related system properties 109 | # Be sure to update the paths to the correct keystore for your environment 110 | #SOLR_SSL_KEY_STORE=/home/shalin/work/oss/shalin-lusolr/solr/server/etc/solr-ssl.keystore.jks 111 | #SOLR_SSL_KEY_STORE_PASSWORD=secret 112 | #SOLR_SSL_TRUST_STORE=/home/shalin/work/oss/shalin-lusolr/solr/server/etc/solr-ssl.keystore.jks 113 | #SOLR_SSL_TRUST_STORE_PASSWORD=secret 114 | #SOLR_SSL_NEED_CLIENT_AUTH=false 115 | #SOLR_SSL_WANT_CLIENT_AUTH=false 116 | 117 | # Uncomment if you want to override previously defined SSL values for HTTP client 118 | # otherwise keep them commented and the above values will automatically be set for HTTP clients 119 | #SOLR_SSL_CLIENT_KEY_STORE= 120 | #SOLR_SSL_CLIENT_KEY_STORE_PASSWORD= 121 | #SOLR_SSL_CLIENT_TRUST_STORE= 122 | #SOLR_SSL_CLIENT_TRUST_STORE_PASSWORD= 123 | 124 | # Settings for authentication 125 | #SOLR_AUTHENTICATION_CLIENT_CONFIGURER= 126 | #SOLR_AUTHENTICATION_OPTS= 127 | 128 | # Settings for ZK ACL 129 | #SOLR_ZK_CREDS_AND_ACLS="-DzkACLProvider=org.apache.solr.common.cloud.VMParamsAllAndReadonlyDigestZkACLProvider \ 130 | # -DzkCredentialsProvider=org.apache.solr.common.cloud.VMParamsSingleSetCredentialsDigestZkCredentialsProvider \ 131 | # -DzkDigestUsername=admin-user -DzkDigestPassword=CHANGEME-ADMIN-PASSWORD \ 132 | # -DzkDigestReadonlyUsername=readonly-user -DzkDigestReadonlyPassword=CHANGEME-READONLY-PASSWORD" 133 | #SOLR_OPTS="$SOLR_OPTS $SOLR_ZK_CREDS_AND_ACLS" 134 | 135 | SOLR_SOLR_CONTENT_DIR={{ solr_content_dir }} 136 | -------------------------------------------------------------------------------- /templates/solrconfig.xml.archive.j2: -------------------------------------------------------------------------------- 1 | 2 | 18 | 19 | 23 | 24 | 31 | 32 | 38 | 4.9 39 | 40 | 60 | 61 | 65 | 68 | 69 | 76 | ${data.dir.root}/${data.dir.store} 77 | 78 | 92 | 93 | 95 | 96 | 97 | 98 | 107 | 108 | 109 | 129 | 130 | 131 | 138 | 139 | 143 | 144 | 145 | 146 | 150 | 151 | 152 | 155 | 156 | 157 | 165 | 166 | 167 | 168 | 174 | 180 | 181 | 189 | 192 | 193 | 199 | 200 | 201 | ${merger.maxMergeCount:6} 202 | ${merger.maxThreadCount:3} 203 | 204 | 205 | 206 | 225 | ${solr.lock.type:native} 226 | 227 | 236 | 239 | 240 | 243 | 244 | 245 | 250 | 253 | 254 | 265 | 268 | 269 | 270 | 271 | 272 | 276 | 280 | 283 | 284 | 293 | true 294 | 295 | 296 | 297 | 306 | 307 | 310 | 311 | 312 | 314 | 315 | 316 | 317 | 318 | 324 | 329 | 330 | 351 | 352 | 353 | ${solr.autoCommit.maxTime:-1} 354 | false 355 | 356 | 357 | 362 | 363 | 364 | ${solr.autoSoftCommit.maxTime:-1} 365 | 366 | 367 | 375 | 385 | 389 | 398 | 399 | 400 | 401 | 423 | 428 | 431 | 437 | 438 | 441 | 442 | 455 | ${solr.maxBooleanClauses:10000} 456 | 457 | 458 | 469 | 470 | 489 | 493 | 494 | 499 | 503 | 504 | 510 | 514 | 515 | 516 | 522 | 523 | 529 | 535 | 536 | 545 | 554 | 555 | 556 | 562 | 563 | 569 | 570 | 576 | 577 | 584 | 585 | 592 | 593 | 601 | true 602 | 603 | 616 | 619 | 620 | 629 | ${solr.queryResultWindowSize:512} 630 | 631 | 634 | ${solr.queryResultMaxDocsCached:2048} 635 | 636 | 652 | 655 | 656 | 657 | 661 | 662 | 663 | 664 | 665 | 672 | false 673 | 674 | 683 | 2 684 | 685 | 686 | 687 | 688 | 707 | 708 | 738 | 742 | 743 | 750 | 751 | 760 | 765 | 790 | 796 | 797 | 798 | 817 | 826 | 827 | 828 | 829 | 830 | afts 831 | explicit 832 | 10 833 | suggest 834 | 835 | 836 | setLocale 837 | rewriteFacetParameters 838 | consistencyComponent 839 | query 840 | facet 841 | mlt 842 | highlight 843 | stats 844 | debug 845 | clearLocale 846 | rewriteFacetCounts 847 | 848 | spellcheck 849 | spellcheckbackcompat 850 | setProcessedDenies 851 | 852 | 853 | 854 | 855 | 856 | 859 | 860 | explicit 861 | 10 862 | suggest 863 | 864 | 865 | 866 | 867 | setLocale 868 | rewriteFacetParameters 869 | consistencyComponent 870 | query 871 | facet 872 | mlt 873 | highlight 874 | stats 875 | debug 876 | clearLocale 877 | rewriteFacetCounts 878 | 879 | setProcessedDenies 880 | 881 | 882 | 883 | 884 | 885 | 886 | 887 | 888 | explicit 889 | json 890 | true 891 | suggest 892 | 893 | 894 | 895 | 896 | 897 | 908 | 909 | 910 | true 911 | json 912 | true 913 | 914 | 915 | 916 | 917 | 918 | 927 | 928 | 929 | explicit 930 | 931 | 932 | velocity 933 | browse 934 | layout 935 | Solritas 936 | 937 | 938 | edismax 939 | 940 | text^0.5 features^1.0 name^1.2 sku^1.5 id^10.0 manu^1.1 cat^1.4 941 | title^10.0 description^5.0 keywords^5.0 author^2.0 resourcename^1.0 942 | 943 | text 944 | 100% 945 | *:* 946 | 10 947 | *,score 948 | 949 | 950 | text^0.5 features^1.0 name^1.2 sku^1.5 id^10.0 manu^1.1 cat^1.4 951 | title^10.0 description^5.0 keywords^5.0 author^2.0 resourcename^1.0 952 | 953 | text,features,name,sku,id,manu,cat,title,description,keywords,author,resourcename 954 | 3 955 | 956 | 957 | on 958 | cat 959 | manu_exact 960 | content_type 961 | author_s 962 | ipod 963 | GB 964 | 1 965 | cat,inStock 966 | after 967 | price 968 | 0 969 | 600 970 | 50 971 | popularity 972 | 0 973 | 10 974 | 3 975 | manufacturedate_dt 976 | NOW/YEAR-10YEARS 977 | NOW 978 | +1YEAR 979 | before 980 | after 981 | 982 | 983 | on 984 | content features title name 985 | html 986 | <b> 987 | </b> 988 | 0 989 | title 990 | 0 991 | name 992 | 3 993 | 200 994 | content 995 | 750 996 | 997 | 998 | on 999 | false 1000 | 5 1001 | 2 1002 | 5 1003 | true 1004 | true 1005 | 5 1006 | 3 1007 | 1008 | 1009 | 1010 | 1011 | spellcheck 1012 | 1013 | 1014 | 1015 | 1016 | 1034 | 1035 | 1039 | 1044 | 1045 | 1046 | 1047 | 1048 | 1049 | application/json 1050 | 1051 | 1052 | 1053 | 1054 | application/csv 1055 | 1056 | 1057 | 1058 | 1063 | 1066 | 1067 | true 1068 | ignored_ 1069 | 1070 | 1071 | true 1072 | links 1073 | ignored_ 1074 | 1075 | 1076 | 1077 | 1078 | 1096 | 1099 | 1100 | 1101 | 1131 | 1134 | 1135 | 1136 | 1137 | 1138 | explicit 1139 | true 1140 | 1141 | 1142 | 1143 | 1156 | 1157 | 1163 | {% if solr_is_primary %} 1164 | 1165 | commit 1166 | startup 1167 | schema.xml,stopwords.txt 1168 | 1169 | {% endif %} 1170 | {% if solr_is_replica %} 1171 | 1172 | http://{{ solr_primary_host }}:{{ solr_primary_port }}/solr/archive/replication 1173 | 00:00:20 1174 | internal 1175 | 5000 1176 | 10000 1177 | 1178 | {% endif %} 1179 | 1180 | 1181 | 1223 | 1224 | 1231 | 1232 | 1233 | text_shingle 1234 | 1235 | 1238 | 1239 | 1240 | 1241 | default 1242 | suggest 1243 | solr.DirectSolrSpellChecker 1244 | 1245 | internal 1246 | 1247 | 0.5 1248 | 1249 | 2 1250 | 1251 | 1 1252 | 1253 | 5 1254 | 1255 | 4 1256 | 1257 | 0.01 1258 | 1261 | 1262 | 1263 | 1264 | 1265 | wordbreak 1266 | suggest 1267 | solr.WordBreakSolrSpellChecker 1268 | true 1269 | true 1270 | 10 1271 | 5 1272 | 1273 | 1274 | 1275 | 1276 | 1277 | 1278 | 1279 | 1292 | 1293 | 1294 | suggest 1295 | 1299 | default 1300 | wordbreak 1301 | on 1302 | true 1303 | 10 1304 | 5 1305 | 5 1306 | true 1307 | true 1308 | 10 1309 | 5 1310 | 1311 | 1312 | spellcheck 1313 | spellcheckbackcompat 1314 | 1315 | 1316 | 1317 | 1318 | 1319 | 1320 | shingleBasedSuggestions 1321 | ${solr.suggester.enabled:true} 1322 | 1323 | org.apache.solr.spelling.suggest.fst.WFSTLookupFactory 1324 | suggest 1325 | text_shingle 1326 | true 1327 | 1328 | 1329 | 1330 | 1331 | 1332 | true 1333 | 10 1334 | shingleBasedSuggestions 1335 | 1336 | 1337 | suggest 1338 | 1339 | 1340 | 1341 | 1342 | 1343 | 1344 | 1348 | 1349 | 1350 | 1357 | 1358 | 1359 | text 1360 | true 1361 | 1362 | 1363 | tvComponent 1364 | 1365 | 1366 | 1367 | 1377 | 1379 | 1380 | lingo 1381 | 1382 | 1394 | org.carrot2.clustering.lingo.LingoClusteringAlgorithm 1395 | 1396 | 1408 | clustering/carrot2 1409 | 1410 | 1411 | 1412 | 1413 | stc 1414 | org.carrot2.clustering.stc.STCClusteringAlgorithm 1415 | 1416 | 1417 | 1418 | 1419 | kmeans 1420 | org.carrot2.clustering.kmeans.BisectingKMeansClusteringAlgorithm 1421 | 1422 | 1423 | 1424 | 1431 | 1435 | 1436 | true 1437 | true 1438 | 1439 | mltext@m___t@{http://www.alfresco.org/model/content/1.0}title 1440 | 1441 | id 1442 | 1443 | content@s___t@{http://www.alfresco.org/model/content/1.0}content 1444 | 1445 | true 1446 | 1447 | 1448 | 1449 | false 1450 | 1451 | 1452 | edismax 1453 | 1454 | text^0.5 features^1.0 name^1.2 sku^1.5 id^10.0 manu^1.1 cat^1.4 1455 | 1456 | *:* 1457 | 10 1458 | *,score 1459 | 1460 | 1461 | clustering 1462 | 1463 | 1464 | 1465 | 1472 | 1473 | 1474 | 1475 | 1476 | 1477 | true 1478 | false 1479 | 1480 | 1481 | terms 1482 | 1483 | 1484 | 1485 | 1486 | 1494 | 1495 | 1496 | text___ 1497 | elevate.xml 1498 | 1499 | 1500 | 1501 | 1502 | 1503 | explicit 1504 | suggest 1505 | 1506 | 1507 | elevator 1508 | 1509 | 1510 | 1511 | 1515 | 1516 | 1517 | 1518 | 1519 | 1522 | 1523 | 100 1524 | 1525 | 1526 | 1527 | 1530 | 1532 | 1533 | 1534 | 70 1535 | 1536 | 0.5 1537 | 1538 | [-\w ,/\n\"']{20,200} 1539 | 1540 | 1541 | 1542 | 1543 | 1546 | 1547 | ]]> 1548 | ]]> 1549 | 1550 | 1551 | 1552 | 1553 | 1555 | 1556 | 1557 | 1559 | 1560 | 1561 | 1563 | 1564 | 1565 | 1568 | 1569 | 1570 | 1573 | 1578 | 1579 | 1580 | 1581 | 1583 | 1584 | ,, 1586 | ,, 1587 | ,, 1588 | ,, 1589 | ,]]> 1590 | ]]> 1591 | 1592 | 1593 | 1594 | 1597 | 1598 | 10 1599 | .,!? 1600 | 1601 | 1602 | 1603 | 1605 | 1606 | 1607 | WORD 1608 | 1609 | 1610 | en 1611 | US 1612 | 1613 | 1614 | 1615 | 1616 | 1617 | 1626 | 1635 | 1648 | 1649 | 1659 | 1670 | 1671 | 1677 | 1688 | 1689 | 1700 | 1703 | 1715 | 1716 | 1717 | 1721 | text/plain; charset=UTF-8 1722 | 1723 | 1724 | 1727 | 1728 | 1729 | 1730 | 1734 | 1735 | 5 1736 | 1737 | 1738 | 1746 | 1747 | 1750 | 1751 | 1758 | 1759 | 1763 | 1764 | 1765 | 1768 | 1788 | 1789 | 1790 | 1791 | 1792 | 1793 | 1794 | 1795 | 1796 | 1797 | 1798 | *:* 1799 | 1800 | 1801 | 1802 | 1803 | 1804 | 1805 | alfresco 1806 | 1807 | 1808 | setLocale 1809 | rewriteFacetParameters 1810 | consistencyComponent 1811 | query 1812 | facet 1813 | mlt 1814 | highlight 1815 | stats 1816 | debug 1817 | clearLocale 1818 | rewriteFacetCounts 1819 | 1820 | setProcessedDenies 1821 | 1822 | 1823 | 1824 | 1825 | 1826 | 1827 | 1828 | fingerprint 1829 | 1830 | 1831 | 1832 | 1833 | 1834 | afts 1835 | 1836 | false 1837 | false 1838 | 5 1839 | 2 1840 | 5 1841 | true 1842 | true 1843 | 5 1844 | 3 1845 | 1846 | mltext@m___t@{http://www.alfresco.org/model/content/1.0}title 1847 | id 1848 | content@s___t@{http://www.alfresco.org/model/content/1.0}content 1849 | true 1850 | false 1851 | 1852 | {!alfrescoReRank reRankQuery=$rqq reRankDocs=500 scale=true reRankWeight=3} 1853 | {!rrafts}RERANK_QUERY_FROM_CONTEXT 1854 | 1855 | rrafts 1856 | 1857 | 1858 | setLocale 1859 | rewriteFacetParameters 1860 | consistencyComponent 1861 | query 1862 | facet 1863 | mlt 1864 | highlight 1865 | stats 1866 | debug 1867 | clearLocale 1868 | rewriteFacetCounts 1869 | 1870 | spellcheck 1871 | spellcheckbackcompat 1872 | setProcessedDenies 1873 | clustering 1874 | 1875 | 1876 | 1877 | 1878 | 1879 | 1880 | cmis 1881 | 1882 | 1883 | setLocale 1884 | rewriteFacetParameters 1885 | consistencyComponent 1886 | query 1887 | facet 1888 | mlt 1889 | highlight 1890 | stats 1891 | debug 1892 | clearLocale 1893 | rewriteFacetCounts 1894 | 1895 | setProcessedDenies 1896 | 1897 | 1898 | 1899 | 1900 | 1901 | 1902 | 1903 | QUERY_PHASE 1904 | 1905 | 1906 | RERANK_PHASE 1907 | 1908 | 1909 | 1910 | 1911 | 1912 | conf/mime_types.csv 1913 | 1914 | 1915 | 1916 | 1 1917 | 10 1918 | 1919 | 1920 | 1921 | 1922 | 1923 | 1924 | 1925 | 1926 | 1927 | 1928 | 1929 | 1930 | -------------------------------------------------------------------------------- /templates/solrcore.properties.alfresco.j2: -------------------------------------------------------------------------------- 1 | ### Replication 2 | {% if solr_is_primary %} 3 | enable.master=true 4 | enable.slave=false 5 | {% else %} 6 | enable.master=false 7 | enable.slave=true 8 | {% endif %} 9 | 10 | data.dir.root={{ solr_content_dir }} 11 | #point to any one of alfresco share node or balancer 12 | alfresco.host={{ solr_alfresco_host }} 13 | alfresco.port.ssl={{ solr_alfresco_ssl_port }} 14 | alfresco.port={{ solr_alfresco_port }} 15 | alfresco.secureComms={{ solr_alfresco_secure_comms }} 16 | enable.alfresco.tracking=true 17 | 18 | alfresco.commitInterval=2000 19 | alfresco.contentStreamLimit=10000000 20 | alfresco.stores=workspace\://SpacesStore 21 | alfresco.changeSetAclsBatchSize=500 22 | solr.pathCache.size=256 23 | solr.pathCache.initialSize=128 24 | solr.deniedCache.size=128 25 | solr.documentCache.autowarmCount=512 26 | solr.documentCache.initialSize=1024 27 | solr.filterCache.size=256 28 | solr.suggester.minSecsBetweenBuilds=3600 29 | solr.readerCache.initialSize=64 30 | #alfresco.port.ssl=8443 31 | solr.ownerCache.autowarmCount=0 32 | alfresco.encryption.ssl.keystore.passwordFileLocation=ssl-keystore-passwords.properties 33 | alfresco.encryption.ssl.truststore.passwordFileLocation=ssl-truststore-passwords.properties 34 | alfresco.transactionDocsBatchSize=500 35 | solr.authorityCache.size=128 36 | alfresco.recordUnindexedNodes=false 37 | solr.documentCache.size=1024 38 | solr.filterCache.initialSize=128 39 | solr.maxBooleanClauses=10000 40 | data.dir.store=alfresco 41 | solr.queryResultMaxDocsCached=2048 42 | alfresco.doPermissionChecks=true 43 | alfresco.contentUpdateBatchSize=1000 44 | solr.deniedCache.initialSize=64 45 | alfresco.threadDaemon=true 46 | alfresco.baseUrl=/alfresco 47 | solr.queryResultCache.initialSize=1024 48 | solr.readerCache.size=128 49 | alfresco.newSearcherInterval=3000 50 | alfresco.encryption.ssl.keystore.provider= 51 | alfresco.encryption.ssl.truststore.type=JCEKS 52 | alfresco.batch.count=5000 53 | alfresco.topTermSpanRewriteLimit=1000 54 | alfresco.encryption.ssl.truststore.provider= 55 | alfresco.encryption.ssl.keystore.type=JCEKS 56 | alfresco.maximumPoolSize=-1 57 | solr.ownerCache.size=128 58 | solr.pathCache.autowarmCount=32 59 | alfresco.maxHostConnections=200 60 | alfresco.metadata.ignore.datatype.1=app\:configurations 61 | alfresco.metadata.ignore.datatype.0=cm\:person 62 | solr.authorityCache.initialSize=64 63 | solr.queryResultCache.autowarmCount=4 64 | alfresco.threadPriority=5 65 | alfresco.corePoolSize=8 66 | alfresco.metadata.skipDescendantDocsForSpecificAspects=false 67 | solr.readerCache.autowarmCount=0 68 | alfresco.metadata.skipDescendantDocsForSpecificTypes=false 69 | alfresco.encryption.ssl.keystore.location=ssl.repo.client.keystore 70 | solr.filterCache.autowarmCount=32 71 | alfresco.socketTimeout=720000 72 | alfresco.template=rerank 73 | alfresco.keepAliveTime=120 74 | solr.queryResultCache.size=1024 75 | alfresco.maxTotalConnections=200 76 | alfresco.hole.retention=3600000 77 | alfresco.version=5.2.1 78 | alfresco.contentReadBatchSize=100 79 | solr.deniedCache.autowarmCount=0 80 | alfresco.lag=1000 81 | alfresco.workQueueSize=-1 82 | alfresco.hole.check.after=300000 83 | alfresco.cron=0/10 * * * * ? * 84 | alfresco.aclBatchSize=100 85 | alfresco.encryption.ssl.truststore.location=ssl.repo.client.truststore 86 | solr.queryResultWindowSize=512 87 | solr.authorityCache.autowarmCount=4 88 | alfresco.postfilter=true 89 | solr.ownerCache.initialSize=64 90 | shard.method=DB_ID 91 | solr.suggester.enabled=false 92 | alfresco.nodeBatchSize=100 93 | -------------------------------------------------------------------------------- /templates/solrcore.properties.archive.j2: -------------------------------------------------------------------------------- 1 | ### Replication 2 | {% if solr_is_primary %} 3 | enable.master=true 4 | enable.slave=false 5 | {% else %} 6 | enable.master=false 7 | enable.slave=true 8 | {% endif %} 9 | 10 | data.dir.root={{ solr_content_dir }} 11 | #point to any one of alfresco share node or balancer 12 | alfresco.host={{ solr_alfresco_host }} 13 | alfresco.port.ssl={{ solr_alfresco_ssl_port }} 14 | alfresco.port={{ solr_alfresco_port }} 15 | alfresco.secureComms={{ solr_alfresco_secure_comms }} 16 | {% if solr_is_primary %} 17 | enable.alfresco.tracking=true 18 | {% else %} 19 | enable.alfresco.tracking=false 20 | {% endif %} 21 | 22 | alfresco.commitInterval=2000 23 | alfresco.contentStreamLimit=10000000 24 | alfresco.stores=archive\://SpacesStore 25 | alfresco.changeSetAclsBatchSize=500 26 | solr.pathCache.size=256 27 | solr.pathCache.initialSize=128 28 | solr.deniedCache.size=128 29 | solr.documentCache.autowarmCount=512 30 | solr.documentCache.initialSize=1024 31 | solr.filterCache.size=256 32 | solr.suggester.minSecsBetweenBuilds=3600 33 | solr.readerCache.initialSize=64 34 | #alfresco.port.ssl=8443 35 | solr.ownerCache.autowarmCount=0 36 | alfresco.encryption.ssl.keystore.passwordFileLocation=ssl-keystore-passwords.properties 37 | alfresco.encryption.ssl.truststore.passwordFileLocation=ssl-truststore-passwords.properties 38 | alfresco.transactionDocsBatchSize=500 39 | solr.authorityCache.size=128 40 | alfresco.recordUnindexedNodes=false 41 | solr.documentCache.size=1024 42 | solr.filterCache.initialSize=128 43 | solr.maxBooleanClauses=10000 44 | data.dir.store=archive 45 | solr.queryResultMaxDocsCached=2048 46 | alfresco.doPermissionChecks=true 47 | alfresco.contentUpdateBatchSize=1000 48 | solr.deniedCache.initialSize=64 49 | alfresco.threadDaemon=true 50 | alfresco.baseUrl=/alfresco 51 | solr.queryResultCache.initialSize=1024 52 | solr.readerCache.size=128 53 | alfresco.newSearcherInterval=3000 54 | alfresco.encryption.ssl.keystore.provider= 55 | alfresco.encryption.ssl.truststore.type=JCEKS 56 | alfresco.batch.count=5000 57 | alfresco.topTermSpanRewriteLimit=1000 58 | alfresco.encryption.ssl.truststore.provider= 59 | alfresco.encryption.ssl.keystore.type=JCEKS 60 | alfresco.maximumPoolSize=-1 61 | solr.ownerCache.size=128 62 | solr.pathCache.autowarmCount=32 63 | alfresco.maxHostConnections=200 64 | alfresco.metadata.ignore.datatype.1=app\:configurations 65 | alfresco.metadata.ignore.datatype.0=cm\:person 66 | solr.authorityCache.initialSize=64 67 | solr.queryResultCache.autowarmCount=4 68 | alfresco.threadPriority=5 69 | alfresco.corePoolSize=8 70 | alfresco.metadata.skipDescendantDocsForSpecificAspects=false 71 | solr.readerCache.autowarmCount=0 72 | alfresco.metadata.skipDescendantDocsForSpecificTypes=false 73 | alfresco.encryption.ssl.keystore.location=ssl.repo.client.keystore 74 | solr.filterCache.autowarmCount=32 75 | alfresco.socketTimeout=720000 76 | alfresco.template=rerank 77 | alfresco.keepAliveTime=120 78 | solr.queryResultCache.size=1024 79 | alfresco.maxTotalConnections=200 80 | alfresco.hole.retention=3600000 81 | alfresco.version=5.2.1 82 | alfresco.contentReadBatchSize=100 83 | solr.deniedCache.autowarmCount=0 84 | alfresco.lag=1000 85 | alfresco.workQueueSize=-1 86 | alfresco.hole.check.after=300000 87 | alfresco.cron=0/10 * * * * ? * 88 | alfresco.aclBatchSize=100 89 | alfresco.encryption.ssl.truststore.location=ssl.repo.client.truststore 90 | solr.queryResultWindowSize=512 91 | solr.authorityCache.autowarmCount=4 92 | alfresco.postfilter=true 93 | solr.ownerCache.initialSize=64 94 | shard.method=DB_ID 95 | solr.suggester.enabled=false 96 | alfresco.nodeBatchSize=100 97 | --------------------------------------------------------------------------------