diff --git a/howtos/INSTALL b/howtos/INSTALL deleted file mode 100644 index ed0110c..0000000 --- a/howtos/INSTALL +++ /dev/null @@ -1,42 +0,0 @@ -To install (and run) this application from the source code the following prerequisites have to be met: - -- maven installed (tested with different version of 3.5.x) - INFO : maven issues error messages concerning the version if a too old one is used -- git -- java 1.8 or newer - -1. clone repository from scc github -git clone https://git.scc.kit.edu/DEM-PSE/PSE-SoSe2018/Implementierung.git - -2. cd into local repo and run maven -mvn clean verify -INFO: Should tests not run without errors use --DskipTests (not happening with version tagged pse-final) -INFO: Some operating system may have problems with some special charactes in the UTF-8 encoded filenames. - This has happened on FreeBSD 11.2. These files are not needed and kept in the same repo just because - no separate one existed back then. Just delete them. - -3. This creates the application jar under target/ - -4. Copy this jar to the folder where the product should be installed. -This may be a different host. To run the jar, only java >= 1.8 is needed. -This folder should be empty. If not, auto-installation does not work and has to be manually started via --install - -5. Follow the installation procedure, all steps are explained there. - -To start the server afterwards run java -jar xxx.jar where xxx.jar is the file created under step 3 - -ATTENTION: Some OS do not allow normal users to listen to "low" ports. It may be necessary to start the application -with admin/root privileges then, depending on the ports used. - -This procedure has been tested with version tagged pse-final on: -- Windows 10 x64 -- Windows 7 x32 -- Windows Server 2012 R2 x64 -- Windows Server 2016 x64 -- Centos 6.10 x32 (maven needs manual install, Centos version is too old) -- Centos 7.5 x64 (maven needs manual install, Centos version is too old) -- Ubuntu 18.04 x64 -- FreeBSD 11.2 x64 (Problems with special characters in the Document folder exist. These files are not needed to generate the application, delete them) -- MacOS High Sierra version 10.13.6 x64 (manual install mode needed via --install as MacOS auto-creates .DSstore file) - -All were on the newest update state on September 16th 2018. \ No newline at end of file diff --git a/howtos/build-from-source.md b/howtos/build-from-source.md new file mode 100644 index 0000000..f0ca0d3 --- /dev/null +++ b/howtos/build-from-source.md @@ -0,0 +1,35 @@ +--- +absorb: true +--- + +## Prerequisites + +* git +* maven installed (tested 3.5.x) +* OpenJDK 8+ + +## Building the WAP Server + +At first, you have to clone the software repository and change to the project folder: + +``` +user@localhost:/home/user/$ git clone https://github.com/kit-data-manager/wap-server.git +[...] +user@localhost:/home/user/$ cd wap-server +user@localhost:/home/user/wap-server$ +``` + +The build can now be started via: + +``` +user@localhost:/home/user/wap-server$ mvn clean verify +[...] +``` + +Now, copy the final jar file from the *target/* folder to an empty folder in order to prepare the first start of the service. + +``` +user@localhost:/home/user/wap-server$ mkdir /home/user/wap-instance +user@localhost:/home/user/wap-server$ cp target/PSE-AA-0.0.1-SNAPSHOT.jar /home/user/wap-instance +[...] +``` \ No newline at end of file diff --git a/howtos/configuration.md b/howtos/configuration.md new file mode 100644 index 0000000..0ebb8dc --- /dev/null +++ b/howtos/configuration.md @@ -0,0 +1,32 @@ +--- +absorb: true +--- + +| Property | Description | Default | +|---------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------| +| JsonLdCachedProfileValidityInMs | The time in ms a cached JSON-LD profile is regarded up to date. If elapsed, the registry performs an update-download. | 86400000 | +| ShouldAppendStackTraceToErrorMessages | Should stack traces be appended to http error messages. Of great help during debugging. | false | +| DataBasePath | The path where the database gets stored. | ./production_db | +| EnableMandatorySlugInContainerPost | Is the Slug header mandatory when creating containers via POST. | false | +| EnableValidation | Is validation of Annotation and Container during POST active. | true | +| WebClientFolder | The folder where the web client is located. | /webcontent | +| JsonLdProfileFolder | The folder where the JSON-LD profiles are locally cached. | ./profiles | +| SparqlReadIp | The IP of the SPARQL read-only endpoint. Either a specific one (including localhost) or * for all | * | +| EnableContentNegotiation | Is content negotiation active. | true | +| SparqlReadPort | The port of the SPARQL read-only endpoint. Use -1 to disable this endpoint. | 3330 | +| FallbackValidation | Is fallback validation active. When posting elements in a format that has no specific validator implementation, the data is converted to JSON-LD and validated in this format before it gets posted. | true | +| Hostname | The hostname under which this server can be reached. It has to be translated to the IP set in WapIp by DNS. This setting has influence on the root IRI and cannot be changed after a database has been created. For details refers to the Root Container section later. | localhost | +| CorsAllowedOriginsPath | The file where CORS allowed origins are stored. If the file does not exist on application startup, it is autocreated using the default setting to allow CORS for all origins. For details refers to the Cors section later. | ./cors_allowed_origins.conf | +| WapIp | The IP of the WAP endpoint. Either a specific one (including localhost) or * for all. | * | +| EnableMandatoryLabelInContainers | Are labels mandatory when creating containers via POST. | false | +| JavaDocFolder | The folder where the javadoc is stored. | ./doc | +| EnableHttps | Is HTTPS active. HTTPS has additional dependencies. This setting has influence on the root IRI and cannot be changed after a database has been created. For details refer so the SSL section later. | false | +| JsonLdFrameFolder | The folder where the JSON-LD frames are stored. | ./profiles | +| JsonLdValidator_SchemaFolder | The folder where the JSON-LD schemas are stored. | ./schemas | +| SimpleFormatters | The string configuring simple formats. For details refer to the Formats section later. | NTRIPLES\*application/n-triples | RDF_JSON\*application/rdf+json | +| SparqlWritePort | The port of the SPARQL read-write endpoint. Use -1 to disable this endpoint. | 3331 | +| SparqlWriteIp | The IP of the SPARQL read-write endpoint. Either a specific one (including localhost) or * for all. | localhost | +| PageSize | The count of annotations that lie within one PAGE in responses. | 20 | +| MultipleAnnotationPost | Is posting multiple annotations in one request possible. | true | +| WapPort | The port under which the WAP service is reachable. This port is used for HTTP and HTTPS service. When 80 is set and a http service is used, the port is omitted. The same applies to HTTPS and port 443. This setting has influence on the root IRI and cannot be changed after a database has been created. For details refer to the Root Container section. | 80 | +| RdfBackendImplementation | The qualifier of the used RDF backend implementation. The default backend is 'jena'. | jena | diff --git a/howtos/configuration.txt b/howtos/configuration.txt deleted file mode 100644 index 32376e5..0000000 --- a/howtos/configuration.txt +++ /dev/null @@ -1,106 +0,0 @@ -This file lists all configuration parameters and their options. -If the config file is missing, the main application can be run with --create-config -This will create the default config file and exit the application. -This way there is time to adapt the parameters before application startup. -Those affecting the root IRI cannot be changed afterwards. Details see root_container.txt. - - -#Parameter=default value -JsonLdCachedProfileValidityInMs=86400000 -The time in ms a cached JSON-LD profile is regarded up to date. If elapsed, the registry performs an update-download. - -ShouldAppendStackTraceToErrorMessages=false -Should stack traces be appended to http error messages. Of great help during debugging. - -DataBasePath=./production_db -The path where the database gets stored - -EnableMandatorySlugInContainerPost=false -Is the Slug header mandatory when creating containers via POST - -EnableValidation=true -Is validation of Annotation and Container during POST active - -WebClientFolder=./webcontent -The folder where the web client is located - -JsonLdProfileFolder=./profiles -The folder where the JSON-LD profiles are locally cached - -SparqlReadIp=* -The IP of the SPARQL read-only endpoint. Either a specific one (including localhost) or * for all - -EnableContentNegotiation=true -Is content negotiation active - -SparqlReadPort=3330 -The port of the SPARQL read-only endpoint. Use -1 to disable this endpoint. - -FallbackValidation=true -Is fallback validation active. When posting elements in a format that has no specific validator implementation, -the data is converted to JSON-LD and validated in this format before it gets posted. - -Hostname=localhost -The hostname under which this server can be reached. It has to be translated to the IP set in WapIp by DNS. -This setting has influence on the root IRI and cannot be changed after a database has been created. -See root_container.txt - -CorsAllowedOriginsPath=./cors_allowed_origins.conf -The file where CORS allowed origins are stored. If the file does not exist -on application startup, it is autocreated using the default setting to allow CORS for all origins. -Details see cors.txt - -WapIp=* -The IP of the WAP endpoint. Either a specific one (including localhost) or * for all - -EnableMandatoryLabelInContainers=false -Are labels mandatory when creating containers via POST - -JavaDocFolder=./doc -The folder where the javadoc is stored - -EnableHttps=false -Is HTTPS active. HTTPS has additional dependencies, see ssl.txt. -This setting has influence on the root IRI and cannot be changed after a database has been created. -See root_container.txt - -JsonLdFrameFolder=./profiles -The folder where the JSON-LD frames are stored. - -JsonLdValidator_SchemaFolder=./schemas -The folder where the JSON-LD schemas are stored - -SimpleFormatters=NTRIPLES*application/n-triples|RDF_JSON*application/rdf+json -The string configuring simple formats. Details see formats.txt - -SparqlWritePort=3331 -The port of the SPARQL read-write endpoint. Use -1 to disable this endpoint. - -SparqlWriteIp=localhost -The IP of the SPARQL read-write endpoint. Either a specific one (including localhost) or * for all - -PageSize=20 -The count of annotations that lie within one PAGE in responses - -MultipleAnnotationPost=true -Is posting multiple annotations in one request possible - -WapPort=80 -The port under which the WAP service is reachable. This port is used for HTTP and HTTPS service. -When 80 is set and a http service is used, the port is omitted. The same applies to HTTPS and port 443. -This setting has influence on the root IRI and cannot be changed after a database has been created. -See root_container.txt - -RdfBackendImplementation=jena -The qualifier of the used RDF backend implementation. The default backend is 'jena'. In addition, -a second backend 'jena+jdbc' is supported storing sequence information to a relational database. This -gets relevant from the performance perspective, if you plan to use very large annotation container -(more than 10.000 elements). If 'jena+jdbc' is configured, you to add JDBC connection information to -the configuration. For the sake of simplicity, you may just copy and uncomment the following configuration: - -#spring.datasource.driver-class-name=org.h2.Driver -#spring.datasource.url=jdbc:h2:file:./sequence_db.h2;DB_CLOSE_DELAY=-1;MVCC=TRUE -#spring.datasource.username=sa -#spring.datasource.password=sa -#spring.jpa.hibernate.dialect=org.hibernate.dialect.H2Dialect -#spring.jpa.hibernate.ddl-auto=update diff --git a/howtos/cors.txt b/howtos/cors.md similarity index 60% rename from howtos/cors.txt rename to howtos/cors.md index e17609d..a265938 100644 --- a/howtos/cors.txt +++ b/howtos/cors.md @@ -1,25 +1,34 @@ -Regarding CORS, there is only the option to specify: the allowed hosts. -To configure this the file denoted in CorsAllowedOriginsPath (default = ./cors_allowed_origins.txt) is used. -If it is not found during application startup, it get's autocreated with the default value of allowing all hosts. - ------ the default text -#default CORS allowed origins file, * means allow all -#www.example.org ==> allows http://www.example.org and https://www.example.org -* ------ the default text - -If CORS should be disabled, either remove all lines from the file or comment out everything. -If a * is found, all other lines are ignored (since everything is then allowed anyway). - -Only paths should be given and not the protocol like http and https. -Entering allowed.org leads to http://alowed.org and https://allowed.org to be acceptable. - -The other parameters are all implemented in a fashion that is either explicitly * or resembles it in the best way. -- All requested methods are allowed (as long as the endpoint allows them in the usual Allow header) -- All headers present in the response are exposed. -- All headers are allowed to be used in requests. The server may reject/ignore the actual requests - using these headers if has no idea what to do with them. - -Info : The SPARQL endpoints do not add CORS headers if CORS is disabled or the origin not allowed. -BUG : The WAP service always allows preflight requests. This behavior is yet not known to be changeable. - The actual requests then will be answered by an 403 if either CORS is disabled or the origin not allowed. \ No newline at end of file +--- +absorb: true +--- + +Regarding CORS, there is only the option to specify the allowed hosts. +To configure this the file denoted in CorsAllowedOriginsPath (default = ./cors_allowed_origins.txt) is used. +If it is not found during application startup, it gets autocreated with the default value of allowing all hosts and has +the following content. + +``` +#default CORS allowed origins file, * means allow all +#www.example.org ==> allows http://www.example.org and https://www.example.org +* +``` + +If CORS should be disabled, either remove all lines from the file or comment out everything. +If a * is found, all other lines are ignored (since everything is then allowed anyway). + +Only paths should be given and not the protocol like http and https. +Entering allowed.org leads to http://alowed.org and https://allowed.org to be acceptable. + +The other parameters are all implemented in a fashion that is either explicitly * or resembles it in the best way. +- All requested methods are allowed (as long as the endpoint allows them in the usual Allow header) +- All headers present in the response are exposed. +- All headers are allowed to be used in requests. The server may reject/ignore the actual requests + using these headers if the server has no idea what to do with them. + +The actual requests then will be answered by an 403 if either CORS is disabled or the origin not allowed. + +--- +**NOTE** +The CORS configuration does not apply to direct SPARQL endpoints. Therefore, it is recommended not to make these endpoints publicly available. + +--- \ No newline at end of file diff --git a/howtos/formats.md b/howtos/formats.md new file mode 100644 index 0000000..890e86e --- /dev/null +++ b/howtos/formats.md @@ -0,0 +1,28 @@ +--- +absorb: true +--- + +Simple formats are those that do have a Mimetype representation in Accept or Content-Type headers +that needs no additional processing. Examples ist TURTLE (text/turtle). A counter example would be JSON-LD including a profile. +Simple formats can be specified directly in the application.properties using the parameter SimpleFormatters. + +Example SimpleFormatters=NTRIPLES\*application/n-triples | RDF_JSON\*application/rdf+json + +1. The String is split at the | + +- NTRIPLES\*application/n-triples +- RDF_JSON\*application/rdf+json + +2. The parts then at the * + +- NTRIPLES and application/n-triples +- RDF_JSON and application/rdf+json + +The first part then must be identical to the Format name in the enum Formats (it gets determined by Formats.valueOf()) +The second part is the String to recognize it in Accept/Content-Type. + +- Format.NTRIPPLES and format String = application/n-triples +- Format.RDF_JSON and format String = applictaion/rdf+json + +Since there is no way to further process any additional information in the format String this way, this can only be +done with these "simple formats" \ No newline at end of file diff --git a/howtos/formats.txt b/howtos/formats.txt deleted file mode 100644 index 8698af5..0000000 --- a/howtos/formats.txt +++ /dev/null @@ -1,24 +0,0 @@ -Simple formats: Simple formats are those that do have an Mimetype representation in Accept or Content-Type headers -that needs no additional processing. Examples ist TURTLE (text/turtle). Anti-example: JSON-LD with its profiles. -These simple formats can be specified directly in the application.properties using the parameter SimpleFormatters. - -Example SimpleFormatters=NTRIPLES*application/n-triples|RDF_JSON*application/rdf+json - -1. The String is split at the | - -- NTRIPLES*application/n-triples -- RDF_JSON*application/rdf+json - -2. The parts then at the * - -- NTRIPLES and application/n-triples -- RDF_JSON and applictaion/rdf+json - -The first part then must be identical to the Format name in the enum Formats (it gets determined by Formats.valueOf()) -The second part is the String to recognize it in Accept/Content-Type. - -- Format.NTRIPPLES and format String = application/n-triples -- Format.RDF_JSON and format String = applictaion/rdf+json - -Since there is no way to further process any additional information in the format String this way, this can only be -done with these "simple formats" \ No newline at end of file diff --git a/howtos/install.md b/howtos/install.md new file mode 100644 index 0000000..9bdd963 --- /dev/null +++ b/howtos/install.md @@ -0,0 +1,28 @@ +--- +absorb: true +--- + +--- +**NOTE** +Please make sure, that the folder where you want to run the WAP Server from is empty. Otherwise, the installation procedure +automatically performed on first startup won't work and has to be started manually by providing the argument *--install* + in the next step. + +--- + +In order to start the service, change to the service folder and call: + +``` +user@localhost:/home/user/wap-server$ cd /home/user/wap-instance +user@localhost:/home/user/wap-server$ java -jar PSE-AA-0.0.1-SNAPSHOT.jar +Part found : PSE-AA-0.0.1-SNAPSHOT.jar! +Part found : PSE-AA-0.0.1-SNAPSHOT.jar! +################################# +### Starting installation +################################# +[...] +``` + +This will guide you through the installation of the service where you can initially configure your server. At the end of the process +you can either directly start the server or end the installation to adapt certain configuration properties, which can be found in the +file *application.properties*, which was created by the installation procedure. diff --git a/howtos/intro.md b/howtos/intro.md new file mode 100644 index 0000000..6847d08 --- /dev/null +++ b/howtos/intro.md @@ -0,0 +1,2 @@ +On this page, installation and configuration of the Web Annotation Protocol Server are described. +All information you can find here are also available in the [source code repository at GitHub](https://github.com/kit-data-manager/wap-server/tree/master/howtos). \ No newline at end of file diff --git a/howtos/root_container.txt b/howtos/root_container.md similarity index 77% rename from howtos/root_container.txt rename to howtos/root_container.md index dfdbbf6..db18484 100644 --- a/howtos/root_container.txt +++ b/howtos/root_container.md @@ -1,34 +1,43 @@ -Whenever the application is first started (== the database folder is empty), the database is created using -a root container IRI that is determined from the configuration found at this time. It cannot be changed afterwards -because the root container IRI is a prefix to all stored elements IRIs. When it changes, they all would have to change. - -The only way to get the application to work again is then to completely remove the database and have it recreated. -No access to any data created before exists then anymore. - -The root container IRI is created using the following parameters: -- Hostname -- EnableHttps -- WapPort - -Example 1: Hostname=localhost, EnableHttps=false, WapPort=8080 - ===> root IRI = http://localhost:8080/wap/ - -Example 2: Hostname=example.org, EnableHttps=false, WapPort=80 - ===> root IRI = http://example.org/wap/ (port is omitted because it is the default for HTTP) - -Example 3: Hostname=localhost, EnableHttps=true, WapPort=1443 - ===> root IRI = https://localhost:1443/wap/ - -Example 4: Hostname=host1.example.org, EnableHttps=true, WapPort=443 - ===> root IRI = https://host1.example.org/wap/ (port is omitted because it is the default for HTTPS) - -When using the installer (via --install or by starting the jar in an empty folder) it asks for this base configuration -and shows its consequences on the root container IRI. - -If changing any of those parameters with an already running server is necessary, a deletion of the database is needed. -It gets recreated on first startup after the configuration has been changed. - -Using manual database manipulation, a conversion of the database to fit the new root container IRI can be achieved, -but this is not implemented in the application. The easiest way to achieve this would be to have the database -been backed up to NQUADS (which retains the named graphs) and then run a simple text replacement of old IRI ==> new IRI. -This has never been tested and should be regarded as a good starting point at best. \ No newline at end of file +--- +absorb: true +--- + +Whenever the application is first started, the database is created using +a root container IRI that is determined from the configuration found at this time. It cannot be changed afterwards +because the root container IRI is a prefix to all stored elements IRIs. When it changes, they all would have to change. + +The only way to get the application to work again is then to completely remove the database and have it recreated. +No access to any data created before exists then anymore. + +The root container IRI is created using the following parameters: +- Hostname +- EnableHttps +- WapPort + +Example 1: Hostname=localhost, EnableHttps=false, WapPort=8080 +===> root IRI = http://localhost:8080/wap/ + +Example 2: Hostname=example.org, EnableHttps=false, WapPort=80 +===> root IRI = http://example.org/wap/ (port is omitted because it is the default for HTTP) + +Example 3: Hostname=localhost, EnableHttps=true, WapPort=1443 +===> root IRI = https://localhost:1443/wap/ + +Example 4: Hostname=host1.example.org, EnableHttps=true, WapPort=443 +===> root IRI = https://host1.example.org/wap/ (port is omitted because it is the default for HTTPS) + +When using the installer (via --install or by starting the jar in an empty folder) it asks for this base configuration +and shows its consequences on the root container IRI. + +If changing any of those parameters with an already running server is necessary, a deletion of the database is needed. +It gets recreated on first startup after the configuration has been changed. + +--- + +**NOTE** +Using manual database manipulation, a conversion of the database to fit the new root container IRI can be achieved, +but this is not implemented in the application. The easiest way to achieve this would be to have the database +been backed up to NQUADS (which retains the named graphs) and then run a simple text replacement of old IRI ==> new IRI. +This has never been tested and should be regarded as a good starting point at best. + +--- \ No newline at end of file diff --git a/howtos/ssl.md b/howtos/ssl.md new file mode 100644 index 0000000..0e984f2 --- /dev/null +++ b/howtos/ssl.md @@ -0,0 +1,53 @@ +--- +absorb: true +--- + +To run the WAP Server with HTTPS, a valid key-store has to exist in a folder *./ssl/* relative to the server's installation folder. + +Here are example steps that can be used with openssl to create a self-signed certificate for this purpose. +It has to be adapted to use officially signed certificates. Since these are usually created by provider-dependent tools, +consult the documentation of the registry selected to provide them. + +Create key file, enter the key password twice. You are asked for a password, further written as **PrivateKeyPw**. + +``` +openssl genrsa -aes256 -out wap.key 4096 +``` + +Create certificate file. numerous question getting asked. Either fill them appropriately or just accept defaults. +When asked for common name, you may provide the hostname you have entered before. This is not required. +The argument -days provides the validity in days. + +``` +openssl req -new -x509 -key wap.key -out wap.crt -days 3650 +``` + +Convert the files to pkcs12 format. You are again asked for a password, further written as **KeyStorePw**. + +``` +openssl pkcs12 -inkey wap.key -in wap.crt -export -out wap.pkcs12 +``` + +Finally, copy the keystore to *./ssl/* in case you did not execute the previous commands already in this directory. + +Within the file *./ssl.conf* created during server installation, replace the values as needed. The default content +of the file is listed below: + +``` +key-store-file=wap.pkcs12 +key-store-password=KeyStorePw +key-password=PrivateKeyPw +server.ssl.alias=1 + +``` + +The key alias is 1 if imported without any further options. if it does not fit or has been changed, adapt it. + +## Possible Questions + +**Question** : I do not know the alias of the key ? +**Answer** : To list the aliases in a store type keytool -list -keystore .\wap.pkcs12 + +**Question** : I get a "cannot recover the key" Exception ? +**Answer** : There are some posts out there telling that the two passwords need to be the same +to solve this problem. We never had this issue. \ No newline at end of file diff --git a/howtos/ssl.txt b/howtos/ssl.txt deleted file mode 100644 index eb1df55..0000000 --- a/howtos/ssl.txt +++ /dev/null @@ -1,45 +0,0 @@ -To run the WAP Server with HTTPS, a valid key-store has to exist under ssl/ - -Here are example steps that can be used with openssl to create a self signed certificate for this purpose. -It has to be adapted to use officially signed certificates. Since these are usually created by provider-dependent tools, -consult the documentation of the registry selected to provide them. - -# Create key file, enter the key password twice -# You are asked for a password, further written as PrivateKeyPw -openssl genrsa -aes256 -out wap.key 4096 - -# Create certificate file. numerous question getting asked. Either fill them appropriately or just accept defaults -# When asked for common name, you may provide the hostname you have entered before. This is not required. -# -days provides the validity in days -openssl req -new -x509 -key wap.key -out wap.crt -days 3650 - -# Convert the files to pkcs12 -# You are again asked for a password, further written as KeyStorePw -openssl pkcs12 -inkey wap.key -in wap.crt -export -out wap.pkcs12 - -Finally copy the keystore to ssl/ (or execute openssl in this directory) - -Within the autocreated ssl.conf, replace the values as needed. - -Default text for ssl.conf: - -key-store-file=wap.pkcs12 -key-store-password=KeyStorePw -key-password=PrivateKeyPw -server.ssl.alias=1 - -The key alias is 1 if imported without any further options. if it does not fit or has been changed, adapt it. - - -#################################### - -Problems: - -Question : I do not know the alias of the key ? -Answer : To list the aliases in a store type keytool -list -keystore .\wap.pkcs12 - -Question : I get an "cannot recover the key" Exception ? -Answer: There are some posts out there telling that the two passwords need to be the same - to solve this problem. We never had this issue. - - diff --git a/howtos/summary.md b/howtos/summary.md new file mode 100644 index 0000000..cd3f145 --- /dev/null +++ b/howtos/summary.md @@ -0,0 +1,18 @@ +--- +title: Installation +breadcrumbs: /wap-server/documentation/ +layout: default +description: A service for annotating digital content. +repository_url: https://github.com/kit-data-manager/wap-server +repository_name: kit-data-manager/wap-server +navigation_id: wap-server_index +--- + +- [How to start](intro.md) + - [Build from source](build-from-source.md) + - [Installation](install.md) + - [Configuration Properties](configuration.md) + - [Root Container](root_container.md) + - [Cross-Origin Resource Sharing (CORS)](cors.md) + - [SSL](ssl.md) + - [Formats](formats.md) \ No newline at end of file