Added Dockerfiles from seb-server-setup; first CI attempt
This commit is contained in:
		
							parent
							
								
									4ac8f15dca
								
							
						
					
					
						commit
						5e146e5af9
					
				
					 62 changed files with 4938 additions and 0 deletions
				
			
		
							
								
								
									
										33
									
								
								.github/workflows/build_docker_images.yml
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								.github/workflows/build_docker_images.yml
									
										
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1,33 @@ | |||
| name: ci | ||||
| 
 | ||||
| on: | ||||
|   push: | ||||
|     branches: master | ||||
| 
 | ||||
| jobs: | ||||
|   main: | ||||
|     runs-on: ubuntu-latest | ||||
|     steps: | ||||
|       - | ||||
|         name: Set up QEMU | ||||
|         uses: docker/setup-qemu-action@v1 | ||||
|       - | ||||
|         name: Set up Docker Buildx | ||||
|         uses: docker/setup-buildx-action@v1 | ||||
|       - | ||||
|         name: Login to DockerHub | ||||
|         uses: docker/login-action@v1  | ||||
|         with: | ||||
|           username: ${{ secrets.DOCKERHUB_USERNAME }} | ||||
|           password: ${{ secrets.DOCKERHUB_TOKEN }} | ||||
|       - | ||||
|         name: Build and push | ||||
|         id: docker_build | ||||
|         uses: docker/build-push-action@v2 | ||||
|         with: | ||||
|           file: ./docker/demo/Dockerfile | ||||
|           push: true | ||||
|           tags: bengig/seb-server:latest | ||||
|       - | ||||
|         name: Image digest | ||||
|         run: echo ${{ steps.docker_build.outputs.digest }} | ||||
							
								
								
									
										1
									
								
								docker/.gitignore
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								docker/.gitignore
									
										
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1 @@ | |||
| /test/ | ||||
							
								
								
									
										46
									
								
								docker/demo/Dockerfile
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										46
									
								
								docker/demo/Dockerfile
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,46 @@ | |||
| FROM alpine/git | ||||
| 
 | ||||
| ARG SEBSERVER_VERSION | ||||
| ARG GIT_TAG="v${SEBSERVER_VERSION}" | ||||
| 
 | ||||
| WORKDIR /sebserver | ||||
| RUN if [ "x${GIT_TAG}" = "x" ] ; \ | ||||
|     then git clone --depth 1 https://github.com/SafeExamBrowser/seb-server.git ; \ | ||||
|     else git clone -b "$GIT_TAG" --depth 1 https://github.com/SafeExamBrowser/seb-server.git ; fi | ||||
| 
 | ||||
| FROM maven:latest | ||||
| 
 | ||||
| ARG SEBSERVER_VERSION | ||||
| 
 | ||||
| WORKDIR /sebserver | ||||
| COPY --from=0 /sebserver/seb-server /sebserver | ||||
| RUN mvn clean install -DskipTests -Dbuild-version="${SEBSERVER_VERSION}" | ||||
| 
 | ||||
| FROM openjdk:11-jre-stretch | ||||
| 
 | ||||
| ARG SEBSERVER_VERSION | ||||
| ENV SEBSERVER_JAR=${SEBSERVER_VERSION} | ||||
| ENV SERVER_PORT="8080" | ||||
| ENV JMX_PORT="9090" | ||||
| ENV SERVER_PWD= | ||||
| 
 | ||||
| 
 | ||||
| WORKDIR /sebserver | ||||
| COPY --from=1 /sebserver/target/seb-server-"${SEBSERVER_JAR}".jar /sebserver | ||||
| 
 | ||||
| ENTRYPOINT exec java \ | ||||
|     -Dcom.sun.management.jmxremote \ | ||||
|     -Dcom.sun.management.jmxremote.port=9090 \ | ||||
|     -Dcom.sun.management.jmxremote.rmi.port=9090 \ | ||||
|     -Djava.rmi.server.hostname=localhost \ | ||||
|     -Dcom.sun.management.jmxremote.local.only=false \ | ||||
|     -Dcom.sun.management.jmxremote.ssl=false \ | ||||
|     -Dcom.sun.management.jmxremote.authenticate=false \ | ||||
|     -jar seb-server-"${SEBSERVER_JAR}".jar \ | ||||
|     --server.port="${SERVER_PORT}" \ | ||||
|     --spring.profiles.active=ws,gui,demo \ | ||||
|     --spring.config.location=file:/sebserver/config/,classpath:/config/ \ | ||||
|     --sebserver.mariadb.password="${SERVER_PWD}" \ | ||||
|     --sebserver.password="${SERVER_PWD}" | ||||
| 
 | ||||
| EXPOSE $SERVER_PORT $JMX_PORT | ||||
							
								
								
									
										77
									
								
								docker/demo/config/application-demo.properties
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										77
									
								
								docker/demo/config/application-demo.properties
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,77 @@ | |||
| ########################################################## | ||||
| ### Global Server Settings | ||||
| 
 | ||||
| # Server address (set for docker internal) | ||||
| server.address=0.0.0.0 | ||||
| # Server http port | ||||
| server.port=8080 | ||||
| # The servlet context path | ||||
| server.servlet.context-path=/ | ||||
| 
 | ||||
| ### Logging | ||||
| # Default logging level in the form  "logging.level" + namespace=LEVEL  | ||||
| logging.level.ROOT=WARN | ||||
| logging.level.ch=DEBUG | ||||
| # Log file name and location | ||||
| logging.file=/sebserver/log/sebserver.log | ||||
| 
 | ||||
| ########################################################## | ||||
| ### SEB Server Webservice configuration | ||||
| 
 | ||||
| sebserver.test.property=This is a SEB Server Demo Configuration | ||||
| 
 | ||||
| ### webservice initialization | ||||
| sebserver.init.adminaccount.gen-on-init=false | ||||
| sebserver.init.organisation.name= | ||||
| sebserver.init.adminaccount.username= | ||||
| 
 | ||||
| # database | ||||
| datastore.mariadb.server.address=seb-server-mariadb | ||||
| datastore.mariadb.server.port=3306 | ||||
| spring.flyway.enabled=true | ||||
| spring.flyway.locations=classpath:config/sql/base,classpath:config/sql/demo | ||||
| spring.flyway.cleanDisabled=false | ||||
| spring.datasource.hikari.initializationFailTimeout=30000 | ||||
| sebserver.webservice.clean-db-on-startup=true | ||||
| 
 | ||||
| # webservice configuration | ||||
| sebserver.webservice.distributed=false | ||||
| sebserver.webservice.http.external.scheme=http | ||||
| sebserver.webservice.http.external.servername=ralph.ethz.ch | ||||
| sebserver.webservice.http.external.port=${server.port} | ||||
| sebserver.webservice.http.redirect.gui=${sebserver.gui.entrypoint} | ||||
| sebserver.webservice.api.admin.clientId=guiClient | ||||
| sebserver.webservice.api.admin.endpoint=/admin-api/v1 | ||||
| sebserver.webservice.api.admin.accessTokenValiditySeconds=3600 | ||||
| sebserver.webservice.api.admin.refreshTokenValiditySeconds=-1 | ||||
| sebserver.webservice.api.exam.config.init.permittedProcesses=config/initialPermittedProcesses.xml | ||||
| sebserver.webservice.api.exam.config.init.prohibitedProcesses=config/initialProhibitedProcesses.xml | ||||
| sebserver.webservice.api.exam.endpoint=/exam-api | ||||
| sebserver.webservice.api.exam.endpoint.discovery=${sebserver.webservice.api.exam.endpoint}/discovery | ||||
| sebserver.webservice.api.exam.endpoint.v1=${sebserver.webservice.api.exam.endpoint}/v1 | ||||
| sebserver.webservice.api.exam.accessTokenValiditySeconds=86400 | ||||
| sebserver.webservice.api.pagination.maxPageSize=500 | ||||
| # comma separated list of known possible OpenEdX API access token request endpoints | ||||
| sebserver.webservice.lms.openedx.api.token.request.paths=/oauth2/access_token | ||||
| sebserver.webservice.lms.address.alias=lms.mockup.com=ralph.ethz.ch,edx.devstack.lms=ralph.ethz.ch | ||||
| 
 | ||||
| ########################################################## | ||||
| ### SEB Server GUI service configuration | ||||
| sebserver.gui.external.messages=file:/sebserver/config/messages | ||||
| sebserver.gui.multilingual=false | ||||
| sebserver.gui.supported.languages=en | ||||
| sebserver.gui.date.displayformat=de | ||||
| 
 | ||||
| sebserver.gui.entrypoint=/gui | ||||
| sebserver.gui.webservice.protocol=http | ||||
| sebserver.gui.webservice.address=${server.address} | ||||
| sebserver.gui.webservice.port=8080 | ||||
| sebserver.gui.webservice.apipath=/admin-api/v1 | ||||
| sebserver.gui.theme=css/sebserver.css | ||||
| sebserver.gui.list.page.size=20 | ||||
| sebserver.gui.date.displayformat=MM / dd / yyyy | ||||
| sebserver.gui.date.displayformat.time=HH:mm | ||||
| sebserver.gui.date.displayformat.timezone=|ZZ | ||||
| sebserver.gui.seb.client.config.download.filename=SEBServerSettings.seb | ||||
| sebserver.gui.seb.exam.config.download.filename=SebExamSettings.seb | ||||
| #sebserver.gui.defaultLogo=classpath:/static/images/ethz_logo_white.png | ||||
							
								
								
									
										10
									
								
								docker/demo/config/mariadb/config.cnf
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								docker/demo/config/mariadb/config.cnf
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,10 @@ | |||
| [mysqld] | ||||
| # Disabling symbolic-links is recommended to prevent assorted security risks | ||||
| symbolic-links=0 | ||||
| 
 | ||||
| # network | ||||
| connect_timeout = 61 | ||||
| wait_timeout = 28800 | ||||
| max_connections = 100000 | ||||
| max_allowed_packet = 64M | ||||
| max_connect_errors = 1000 | ||||
							
								
								
									
										144
									
								
								docker/demo/config/messages_de.properties
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										144
									
								
								docker/demo/config/messages_de.properties
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,144 @@ | |||
| ################################ | ||||
| # Overall | ||||
| ################################ | ||||
| 
 | ||||
| sebserver.overall.version=SEB Server Version : {0} | ||||
| sebserver.overall.imprint= | ||||
| sebserver.overall.imprint.markup= | ||||
| sebserver.overall.about= | ||||
| sebserver.overall.about.markup= | ||||
| sebserver.overall.help=Dokumentation | ||||
| sebserver.overall.help.link=https://www.safeexambrowser.org/news_de.html | ||||
| 
 | ||||
| sebserver.overall.message.leave.without.save=You are leaving this page without saved changes!\nThe unsaved changes will be lost.\Are you sure to leave the page? | ||||
| sebserver.overall.upload=Bitte Ausw\u00E4hlen | ||||
| sebserver.overall.action.modify.cancel=Abbrechen | ||||
| sebserver.overall.action.modify.cancel.confirm=Nicht gespeicherte Daten gehen verloren. Wirklich abbrechen?  | ||||
| sebserver.overall.action.filter=Filtern | ||||
| sebserver.overall.action.filter.clear=Filter Zur\u00FCcksetzen | ||||
| 
 | ||||
| ################################ | ||||
| # Form validation and messages | ||||
| ################################ | ||||
| 
 | ||||
| sebserver.form.validation.error.title=Validierung | ||||
| sebserver.form.validation.error.message=Einige Daten fehlen oder sind nicht korrekt. | ||||
| sebserver.form.validation.fieldError.size=Der Text muss mindestens {3} und kann h\u00F6chstens {4} Zeichen beinhalten | ||||
| sebserver.form.validation.fieldError.name=Name is mandatory and must have a size between {3} and {4} character | ||||
| sebserver.form.validation.fieldError.urlSuffix=URL Suffix must have a size between {3} and {4} character | ||||
| sebserver.form.validation.fieldError.notNull=Dies ist ein Pflichtfeld | ||||
| sebserver.form.validation.fieldError.username.notunique=Dieser Username ist schon in Gebrauch. Bitte w\u00E4hlen Sie einen anderen. | ||||
| sebserver.form.validation.fieldError.password.wrong=Das (aktuelle) Passwort stimmt nicht | ||||
| sebserver.form.validation.fieldError.password.mismatch=Passwort, neues Passwort und Best\u00E4tigung stimmen nicht \u00FCberein | ||||
| sebserver.error.unexpected=Unerwarteter Fehler | ||||
| sebserver.page.message=Information | ||||
| sebserver.dialog.confirm.title=Best\u00E4tigung | ||||
| 
 | ||||
| sebserver.dialog.confirm.deactivation=Es gibt {0} weitere Objekte die zu diesem Objeckt geh\u00F6ren.<br/>Diese werden bei einer Deaktivierung ebenfalls deaktiviert.<br/><br/>Sollen alle deaktiviert weden? | ||||
| sebserver.dialog.confirm.deactivation.noDependencies=Soll dieses Object wirklich deaktiviert werden? | ||||
| 
 | ||||
| ################################ | ||||
| # Login Page | ||||
| ################################ | ||||
| 
 | ||||
| sebserver.login.username=Benutzer Name | ||||
| sebserver.login.pwd=Passwort | ||||
| sebserver.login.login=Anmelden | ||||
| sebserver.login.failed.title=Anmelden Fehlgeschlagen | ||||
| sebserver.login.failed.message=Zugang verweigert: Falscher Benutzer Name oder Passwort | ||||
| sebserver.logout=Abmelden | ||||
| sebserver.logout.success.message=Sie wurden erfolgreich abgemeldet | ||||
| sebserver.login.password.change=Information | ||||
| sebserver.login.password.change.success=Das Passwort wurde erfoglreich ge\u00E4ndert. Bitte melden Sie sich mit dem neuen Passwort an. | ||||
| 
 | ||||
| ################################ | ||||
| # Main Page | ||||
| ################################ | ||||
| 
 | ||||
| sebserver.logout=Abmelden | ||||
| sebserver.mainpage.maximize.tooltip=Maximieren | ||||
| sebserver.mainpage.minimize.tooltip=Minimieren | ||||
| sebserver.activitiespane.title=Aktivit\u00E4ten | ||||
| sebserver.actionpane.title=Aktionen | ||||
| 
 | ||||
| ################################ | ||||
| # Institution | ||||
| ################################ | ||||
| 
 | ||||
| sebserver.institution.list.title=Institutionen | ||||
| sebserver.institution.list.column.name=Name | ||||
| sebserver.institution.list.column.urlSuffix=URL Suffix | ||||
| sebserver.institution.list.column.active=Aktiv | ||||
| 
 | ||||
| sebserver.institution.action.list=Institution | ||||
| sebserver.institution.action.form=Institution | ||||
| sebserver.institution.action.new=Neue Institution | ||||
| sebserver.institution.action.list.view=Ausgew\u00E4hlte Ansehen | ||||
| sebserver.institution.action.modify=Institution Editieren | ||||
| sebserver.institution.action.list.modify=Ausgew\u00E4hlte Editieren | ||||
| sebserver.institution.action.save=Institution Speichern | ||||
| sebserver.institution.action.activate=Aktiv | ||||
| sebserver.institution.action.deactivate=Aktiv | ||||
| sebserver.institution.action.delete=Institution L\u00F6schen | ||||
| 
 | ||||
| 
 | ||||
| sebserver.institution.info.pleaseSelect=Bitte zuerst eine Instiiution aus der List ausw\u00E4hlen. | ||||
| sebserver.institution.form.title.new=Neue Institution | ||||
| sebserver.institution.form.title=Institution : {0} | ||||
| 
 | ||||
| sebserver.institution.form.name=Name | ||||
| sebserver.institution.form.urlSuffix=URL Suffix | ||||
| sebserver.institution.form.logoImage=Logo Bild | ||||
| 
 | ||||
| 
 | ||||
| ################################ | ||||
| # User Account | ||||
| ################################ | ||||
| 
 | ||||
| sebserver.useraccount.role.SEB_SERVER_ADMIN=SEB Server Administrator | ||||
| sebserver.useraccount.role.INSTITUTIONAL_ADMIN=Institution Administrator | ||||
| sebserver.useraccount.role.EXAM_ADMIN=Examen Administrator | ||||
| sebserver.useraccount.role.EXAM_SUPPORTER=Examen Supporter | ||||
| 
 | ||||
| sebserver.useraccount.list.title=Benutzer Konto | ||||
| sebserver.useraccount.list.column.name=Name | ||||
| sebserver.useraccount.list.column.username=Benutzer Name | ||||
| sebserver.useraccount.list.column.email=E-Mail | ||||
| sebserver.useraccount.list.column.language=Sprache | ||||
| sebserver.useraccount.list.column.active=Aktiv | ||||
| 
 | ||||
| sebserver.useraccount.action.list=Benutzer Konto | ||||
| sebserver.useraccount.action.form=Benutzer Konto | ||||
| sebserver.useraccount.action.new=Neues Benutzer Konto | ||||
| sebserver.useraccount.action.view=Ausgew\u00E4hlter Ansehen | ||||
| sebserver.useraccount.action.list.modify=Ausgew\u00E4hlter Editieren | ||||
| sebserver.useraccount.action.modify=Editieren | ||||
| sebserver.useraccount.action.save=Benutzer Konto Speichern | ||||
| sebserver.useraccount.action.activate=Aktiv | ||||
| sebserver.useraccount.action.deactivate=Aktiv | ||||
| sebserver.useraccount.action.delete=Benutzer Konto L\u00F6schen | ||||
| sebserver.useraccount.action.change.password=Passwort Ändern | ||||
| sebserver.useraccount.action.change.password.save=Passwort Speichern | ||||
| 
 | ||||
| sebserver.useraccount.info.pleaseSelect=Bitte zuerst ein Benutzer Konto aus der List ausw\u00E4hlen. | ||||
| 
 | ||||
| sebserver.useraccount.form.title=Benutzer Konto : {0} | ||||
| sebserver.useraccount.form.title.new=Neues Benutzer Konto | ||||
| sebserver.useraccount.form.institution=Institution | ||||
| sebserver.useraccount.form.name=Name | ||||
| sebserver.useraccount.form.username=Benutzer Name | ||||
| sebserver.useraccount.form.mail=E-Mail | ||||
| sebserver.useraccount.form.language=Sprache | ||||
| sebserver.useraccount.form.timezone=Zeit Zone | ||||
| sebserver.useraccount.form.roles=Benutzer Rollen | ||||
| sebserver.useraccount.form.password=Passwort | ||||
| sebserver.useraccount.form.password.confirm=Passwort Best\u00E4tigen | ||||
| 
 | ||||
| sebserver.useraccount.form.pwchange.title=Passwort \u00C4ndern : {0} | ||||
| sebserver.useraccount.form.password.old=Altes Passwort | ||||
| sebserver.useraccount.form.password.new=Neues Passwort | ||||
| sebserver.useraccount.form.password.new.confirm=Neues Password Best\u00E4tigen | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
							
								
								
									
										6
									
								
								docker/demo/config/messages_en.properties
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								docker/demo/config/messages_en.properties
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,6 @@ | |||
| sebserver.overall.about=About | ||||
| sebserver.overall.about.markup=<span style='font-family: Arial, Helvetica,sans-serif;font-size: 25px;font-weight: normal;font-style: normal;color: rgb(31, 64, 122);'>SEB Server About</span><br/><br/><span style='font-family: Arial, Helvetica,sans-serif;font-size: 18px;font-weight: bold;font-style: normal;'>1. Installation.</span><br/><br/><span style='font-family: Arial, Helvetica,sans-serif;font-size: 14px;font-weight: normal;font-style: normal;'>This is a SEB Server demo setup, ideal for testing or demonstrations.</span> | ||||
| sebserver.overall.help=Documentation | ||||
| sebserver.overall.help.link=https://seb-server.readthedocs.io/en/latest/index.html | ||||
| 
 | ||||
| sebserver.monitoring.exam.connection.action.disable=Mark as Canceled | ||||
							
								
								
									
										44
									
								
								docker/demo/docker-compose.yml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										44
									
								
								docker/demo/docker-compose.yml
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,44 @@ | |||
| version: '3' | ||||
| services: | ||||
|   mariadb:  | ||||
|     image: "mariadb/server:10.3" | ||||
|     container_name: seb-server-mariadb | ||||
|     environment: | ||||
|         MYSQL_ROOT_PASSWORD: somePW | ||||
|     volumes: | ||||
|         - seb-server-mariadb-data:/var/lib/mysql | ||||
|         - ./config/mariadb:/etc/mysql/conf.d | ||||
|     ports: | ||||
|         - 3306:3306 | ||||
|     networks: | ||||
|         - ralph | ||||
|     restart: unless-stopped | ||||
| 
 | ||||
|   seb-server: | ||||
|       build: | ||||
|           context: . | ||||
|           args: | ||||
|               - SEBSERVER_VERSION=1.0-latest | ||||
|       container_name: seb-server | ||||
|       environment: | ||||
|           - SERVER_PORT=8080 | ||||
|           - SERVER_PWD=somePW | ||||
|       volumes: | ||||
|         - ./config:/sebserver/config | ||||
|         - seb-server-logs:/sebserver/log | ||||
| 
 | ||||
|       ports: | ||||
|           - 8080:8080 | ||||
|           - 9090:9090 | ||||
|       networks: | ||||
|           - ralph | ||||
|       depends_on: | ||||
|           - "mariadb" | ||||
|       restart: unless-stopped | ||||
|              | ||||
| networks: | ||||
|   ralph: | ||||
|    | ||||
| volumes: | ||||
|   seb-server-mariadb-data: | ||||
|   seb-server-logs: | ||||
							
								
								
									
										2
									
								
								docker/prod/bundled/basic/config/jmx/jmxremote.access
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								docker/prod/bundled/basic/config/jmx/jmxremote.access
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,2 @@ | |||
| admin readwrite | ||||
| user  readonly | ||||
							
								
								
									
										0
									
								
								docker/prod/bundled/basic/config/jmx/jmxremote.password
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								docker/prod/bundled/basic/config/jmx/jmxremote.password
									
										
									
									
									
										Normal file
									
								
							
							
								
								
									
										15
									
								
								docker/prod/bundled/basic/config/mariadb/config.cnf
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								docker/prod/bundled/basic/config/mariadb/config.cnf
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,15 @@ | |||
| [mysqld] | ||||
| # Disabling symbolic-links is recommended to prevent assorted security risks | ||||
| symbolic-links=0 | ||||
| 
 | ||||
| # network | ||||
| connect_timeout = 61 | ||||
| wait_timeout = 28800 | ||||
| max_connections = 100000 | ||||
| max_allowed_packet = 256M | ||||
| max_connect_errors = 1000000 | ||||
| 
 | ||||
| skip_external_locking | ||||
| 
 | ||||
| #memory | ||||
| innodb_buffer_pool_size=2G | ||||
							
								
								
									
										14
									
								
								docker/prod/bundled/basic/config/nginx/app.conf
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								docker/prod/bundled/basic/config/nginx/app.conf
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,14 @@ | |||
| server { | ||||
|     listen 80; | ||||
|     charset utf-8; | ||||
|     access_log off; | ||||
| 
 | ||||
|     location / { | ||||
|         proxy_pass http://seb-server:8080; | ||||
|         proxy_set_header Host $host:$server_port; | ||||
|         proxy_set_header X-Forwarded-Host $server_name; | ||||
|         proxy_set_header X-Real-IP $remote_addr; | ||||
|         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; | ||||
|     } | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,83 @@ | |||
| ########################################################## | ||||
| ### Global Server Settings | ||||
| 
 | ||||
| # Server address (set for docker internal) | ||||
| server.address=0.0.0.0 | ||||
| # Server http port | ||||
| server.port=8080 | ||||
| # The servlet context path | ||||
| server.servlet.context-path=/ | ||||
| 
 | ||||
| # Logging | ||||
| # Default logging level in the form  "logging.level" + namespace=LEVEL  | ||||
| logging.level.ROOT=WARN | ||||
| logging.level.ch=INFO | ||||
| logging.file=/sebserver/log/sebserver.log | ||||
| logging.config=/sebserver/config/spring/logback-prod.xml | ||||
| 
 | ||||
| ########################################################## | ||||
| ### SEB Server Webservice configuration | ||||
| 
 | ||||
| sebserver.test.property=This is a basic bundled productive setup | ||||
| 
 | ||||
| # webservice database server connection | ||||
| datastore.mariadb.server.address=seb-server-mariadb | ||||
| datastore.mariadb.server.port=3306 | ||||
| 
 | ||||
| # data source configuration | ||||
| spring.datasource.hikari.initializationFailTimeout=30000 | ||||
| spring.datasource.hikari.connectionTimeout=30000 | ||||
| spring.datasource.hikari.idleTimeout=600000 | ||||
| spring.datasource.hikari.maxLifetime=1800000 | ||||
| 
 | ||||
| ### webservice networking | ||||
| sebserver.webservice.distributed=false | ||||
| sebserver.webservice.http.external.scheme=https | ||||
| sebserver.webservice.http.external.servername= | ||||
| sebserver.webservice.http.external.port= | ||||
| sebserver.webservice.http.redirect.gui=/gui | ||||
| sebserver.http.client.connect-timeout=150000 | ||||
| sebserver.http.client.connection-request-timeout=100000 | ||||
| sebserver.http.client.read-timeout=200000 | ||||
| 
 | ||||
| # webservice API | ||||
| sebserver.webservice.api.admin.endpoint=/admin-api/v1 | ||||
| sebserver.webservice.api.admin.accessTokenValiditySeconds=3600 | ||||
| sebserver.webservice.api.admin.refreshTokenValiditySeconds=25200 | ||||
| sebserver.webservice.api.exam.config.init.permittedProcesses=config/initialPermittedProcesses.xml | ||||
| sebserver.webservice.api.exam.config.init.prohibitedProcesses=config/initialProhibitedProcesses.xml | ||||
| sebserver.webservice.api.exam.endpoint=/exam-api | ||||
| sebserver.webservice.api.exam.endpoint.discovery=${sebserver.webservice.api.exam.endpoint}/discovery | ||||
| sebserver.webservice.api.exam.endpoint.v1=${sebserver.webservice.api.exam.endpoint}/v1 | ||||
| sebserver.webservice.api.exam.accessTokenValiditySeconds=3600 | ||||
| sebserver.webservice.api.exam.event-handling-strategy=ASYNC_BATCH_STORE_STRATEGY | ||||
| sebserver.webservice.api.exam.enable-indicator-cache=true | ||||
| sebserver.webservice.api.pagination.maxPageSize=500 | ||||
| # comma separated list of known possible OpenEdX API access token request endpoints | ||||
| sebserver.webservice.lms.openedx.api.token.request.paths=/oauth2/access_token | ||||
| 
 | ||||
| management.server.port=${server.port} | ||||
| management.endpoints.web.base-path=/management | ||||
| management.endpoints.web.exposure.include=logfile,loggers | ||||
| 
 | ||||
| ########################################################## | ||||
| ### SEB Server GUI configuration | ||||
| sebserver.gui.external.messages=file:/sebserver/config/spring/messages | ||||
| sebserver.gui.multilingual=false | ||||
| sebserver.gui.supported.languages=en | ||||
| sebserver.gui.theme=css/sebserver.css | ||||
| sebserver.gui.list.page.size=20 | ||||
| sebserver.gui.date.displayformat=de | ||||
| 
 | ||||
| sebserver.gui.entrypoint=/gui | ||||
| sebserver.gui.webservice.protocol=http | ||||
| sebserver.gui.webservice.address=localhost | ||||
| sebserver.gui.webservice.port=8080 | ||||
| # defines the polling interval that is used to poll the webservice for client connection data on a monitored exam page | ||||
| sebserver.gui.webservice.poll-interval=1000 | ||||
| sebserver.gui.webservice.mock-lms-enabled=true | ||||
| sebserver.gui.webservice.edx-lms-enabled=true | ||||
| sebserver.gui.webservice.moodle-lms-enabled=false | ||||
| 
 | ||||
| sebserver.gui.seb.client.config.download.filename=SEBServerSettings.seb | ||||
| sebserver.gui.seb.exam.config.download.filename=SEBExamSettings.seb | ||||
							
								
								
									
										27
									
								
								docker/prod/bundled/basic/config/spring/logback-prod.xml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								docker/prod/bundled/basic/config/spring/logback-prod.xml
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,27 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <configuration debug="false" scan="false"> | ||||
| 
 | ||||
|     <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> | ||||
|       <encoder> | ||||
|         <pattern>%d{HH:mm:ss.SSS} %-5level [%thread]:[%logger] %msg%n</pattern> | ||||
|       </encoder> | ||||
|     </appender> | ||||
|      | ||||
|     <appender name="FILE" class="ch.qos.logback.core.FileAppender"> | ||||
|       <file>log/sebserver.log</file> | ||||
|       <append>true</append> | ||||
|       <encoder> | ||||
|          <pattern>%d{HH:mm:ss.SSS} %-5level [%thread]:[%logger] %msg%n</pattern> | ||||
|       </encoder> | ||||
|    </appender> | ||||
|    | ||||
|   <springProfile name="prod"> | ||||
| 
 | ||||
|     <root level="WARN" additivity="true"> | ||||
|       <appender-ref ref="STDOUT" /> | ||||
|       <appender-ref ref="FILE" /> | ||||
|     </root> | ||||
|      | ||||
|   </springProfile> | ||||
|    | ||||
| </configuration> | ||||
							
								
								
									
										1476
									
								
								docker/prod/bundled/basic/config/spring/messages_en.properties
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1476
									
								
								docker/prod/bundled/basic/config/spring/messages_en.properties
									
										
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										84
									
								
								docker/prod/bundled/basic/docker-compose.yml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										84
									
								
								docker/prod/bundled/basic/docker-compose.yml
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,84 @@ | |||
| version: '3.5' | ||||
| services: | ||||
|   seb-server-setup: | ||||
|     build: | ||||
|         context: . | ||||
|         dockerfile: setup.Dockerfile | ||||
|     container_name: seb-server-setup | ||||
|     volumes: | ||||
|         - seb-server-config:/config | ||||
|         - ./config:/host/config | ||||
| 
 | ||||
|   mariadb:  | ||||
|     image: "mariadb/server:10.3" | ||||
|     container_name: seb-server-mariadb | ||||
|     environment: | ||||
|         - MYSQL_ROOT_PASSWORD_FILE=/etc/mysql/conf.d/secret | ||||
|     ports: | ||||
|         - 3306:3306 | ||||
|     volumes: | ||||
|         - seb-server-config:/etc/mysql/conf.d | ||||
|         - seb-server-mariadb:/var/lib/mysql | ||||
|         - ./config/mariadb/config.cnf:/etc/mysql/conf.d/config.cnf | ||||
|     networks: | ||||
|         - seb-server-network | ||||
|     depends_on: | ||||
|         - "seb-server-setup" | ||||
|     restart: unless-stopped | ||||
| 
 | ||||
|   seb-server: | ||||
|       build: | ||||
|           context: . | ||||
|           dockerfile: sebserver.Dockerfile | ||||
|           args: | ||||
|               - SEBSERVER_VERSION=1.0-latest | ||||
|       container_name: seb-server | ||||
|       volumes: | ||||
|         - seb-server-config:/sebserver/config | ||||
|         - ./config/spring:/sebserver/config/spring | ||||
|         - seb-server-logs:/sebserver/log | ||||
|       environment: | ||||
|         - MONITORING_MODE=false | ||||
|       # - JMX_PORT=9090 | ||||
|       # Connect this port to host if you want to use JMX (MONITORING_MODE=true) | ||||
|       #ports: | ||||
|       #  - 9090:9090 | ||||
|       logging: | ||||
|         driver: "json-file" | ||||
|         options: | ||||
|             mode: "non-blocking" | ||||
|             max-size: "200k" | ||||
|             max-file: "10" | ||||
|       networks: | ||||
|           - seb-server-network | ||||
|       depends_on: | ||||
|           - "mariadb" | ||||
|           - "seb-server-setup" | ||||
|       restart: unless-stopped | ||||
| 
 | ||||
|   reverse-proxy: | ||||
|     image: "nginx:latest" | ||||
|     container_name: seb-server-proxy | ||||
|     volumes: | ||||
|       - ./config/nginx:/etc/nginx/conf.d | ||||
|     ports: | ||||
|       - 80:80 | ||||
|     networks: | ||||
|       - seb-server-network | ||||
|     depends_on: | ||||
|       - "mariadb" | ||||
|       - "seb-server" | ||||
|       - "seb-server-setup" | ||||
|     restart: unless-stopped | ||||
| 
 | ||||
| networks: | ||||
|   seb-server-network: | ||||
|     name: seb-server-network | ||||
| 
 | ||||
| volumes: | ||||
|   seb-server-config: | ||||
|     name: seb-server-config | ||||
|   seb-server-mariadb: | ||||
|     name: seb-server-mariadb | ||||
|   seb-server-logs: | ||||
|     name: seb-server-logs | ||||
							
								
								
									
										59
									
								
								docker/prod/bundled/basic/sebserver.Dockerfile
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								docker/prod/bundled/basic/sebserver.Dockerfile
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,59 @@ | |||
| FROM alpine/git | ||||
| 
 | ||||
| ARG SEBSERVER_VERSION | ||||
| ARG GIT_TAG="v${SEBSERVER_VERSION}" | ||||
| 
 | ||||
| WORKDIR /sebserver | ||||
| RUN if [ "x${GIT_TAG}" = "x" ] ; \ | ||||
|     then git clone --depth 1 https://github.com/SafeExamBrowser/seb-server.git ; \ | ||||
|     else git clone -b "$GIT_TAG" --depth 1 https://github.com/SafeExamBrowser/seb-server.git ; fi | ||||
| 
 | ||||
| FROM maven:latest | ||||
| 
 | ||||
| ARG SEBSERVER_VERSION | ||||
| 
 | ||||
| WORKDIR /sebserver | ||||
| COPY --from=0 /sebserver/seb-server /sebserver | ||||
| RUN mvn clean install -DskipTests -Dbuild-version="${SEBSERVER_VERSION}" | ||||
| 
 | ||||
| FROM openjdk:11-jre-stretch | ||||
| 
 | ||||
| ARG SEBSERVER_VERSION | ||||
| ENV SEBSERVER_JAR="seb-server-${SEBSERVER_VERSION}.jar" | ||||
| ENV SERVER_PORT="8080" | ||||
| ENV JMX_PORT= | ||||
| 
 | ||||
| WORKDIR /sebserver | ||||
| COPY --from=1 /sebserver/target/"${SEBSERVER_JAR}" /sebserver | ||||
| 
 | ||||
| CMD if [ "x${JMX_PORT}" = "x" ] ; \ | ||||
|         then secret=$(cat /sebserver/config/secret) && exec java \ | ||||
|             -Xms64M \ | ||||
|             -Xmx1G \ | ||||
|             -jar "${SEBSERVER_JAR}" \ | ||||
|             --spring.profiles.active=ws,gui,prod,prod-gui,prod-ws \ | ||||
|             --spring.config.location=file:/sebserver/config/spring/,classpath:/config/ \ | ||||
|             --sebserver.certs.password="${secret}" \  | ||||
|             --sebserver.mariadb.password="${secret}" \ | ||||
|             --sebserver.password="${secret}" ; \ | ||||
|         else secret=$(cat /sebserver/config/secret) && exec java \ | ||||
|             -Xms64M \ | ||||
|             -Xmx1G \ | ||||
|             -Dcom.sun.management.jmxremote \ | ||||
|             -Dcom.sun.management.jmxremote.port=${JMX_PORT} \ | ||||
|             -Dcom.sun.management.jmxremote.rmi.port=${JMX_PORT} \ | ||||
|             -Djava.rmi.server.hostname=localhost \ | ||||
|             -Dcom.sun.management.jmxremote.local.only=false \ | ||||
|             -Dcom.sun.management.jmxremote.ssl=false \ | ||||
|             -Dcom.sun.management.jmxremote.authenticate=true \ | ||||
|             -Dcom.sun.management.jmxremote.password.file=/sebserver/config/jmx/jmxremote.password \ | ||||
|             -Dcom.sun.management.jmxremote.access.file=/sebserver/config/jmx/jmxremote.access \ | ||||
|             -jar "${SEBSERVER_JAR}" \ | ||||
|             --spring.profiles.active=ws,gui,prod,prod-gui,prod-ws \ | ||||
|             --spring.config.location=file:/sebserver/config/spring/,classpath:/config/ \ | ||||
|             --sebserver.certs.password="${secret}" \  | ||||
|             --sebserver.mariadb.password="${secret}" \ | ||||
|             --sebserver.password="${secret}" ; \ | ||||
|         fi | ||||
| 
 | ||||
| EXPOSE $SERVER_PORT $JMX_PORT | ||||
							
								
								
									
										6
									
								
								docker/prod/bundled/basic/setup.Dockerfile
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								docker/prod/bundled/basic/setup.Dockerfile
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,6 @@ | |||
| FROM alpine:latest | ||||
| 
 | ||||
| CMD cp -a /host/config/. /config/ \ | ||||
|     && secret=$(cat /config/secret) \ | ||||
|     && rm /host/config/secret \ | ||||
|     && sudo chmod 777 /host/config/secret | ||||
							
								
								
									
										2
									
								
								docker/prod/bundled/tls/config/jmx/jmxremote.access
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								docker/prod/bundled/tls/config/jmx/jmxremote.access
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,2 @@ | |||
| admin readwrite | ||||
| user  readonly | ||||
							
								
								
									
										0
									
								
								docker/prod/bundled/tls/config/jmx/jmxremote.password
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								docker/prod/bundled/tls/config/jmx/jmxremote.password
									
										
									
									
									
										Normal file
									
								
							
							
								
								
									
										16
									
								
								docker/prod/bundled/tls/config/mariadb/config.cnf
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								docker/prod/bundled/tls/config/mariadb/config.cnf
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,16 @@ | |||
| [mysqld] | ||||
| # Disabling symbolic-links is recommended to prevent assorted security risks | ||||
| symbolic-links=0 | ||||
| 
 | ||||
| # network | ||||
| connect_timeout = 61 | ||||
| wait_timeout = 28800 | ||||
| max_connections = 100000 | ||||
| max_allowed_packet = 256M | ||||
| max_connect_errors = 1000000 | ||||
| 
 | ||||
| skip_external_locking | ||||
| skip_name_resolve | ||||
| 
 | ||||
| #memory | ||||
| innodb_buffer_pool_size=2G | ||||
							
								
								
									
										30
									
								
								docker/prod/bundled/tls/config/nginx/app.conf
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								docker/prod/bundled/tls/config/nginx/app.conf
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,30 @@ | |||
| ssl_session_cache   shared:SSL:10m; | ||||
| ssl_session_timeout 10m; | ||||
| 
 | ||||
| 
 | ||||
| server { | ||||
|     listen              443 ssl; | ||||
|     charset utf-8; | ||||
|     access_log off; | ||||
|     keepalive_timeout   70; | ||||
|      | ||||
|     server_name         localhost; | ||||
|     ssl_certificate     /sebserver/config/certs/localhost.crt; | ||||
|     ssl_certificate_key /sebserver/config/certs/localhost.key; | ||||
|     ssl_protocols       TLSv1 TLSv1.1 TLSv1.2; | ||||
|     ssl_ciphers         HIGH:!aNULL:!MD5; | ||||
|      | ||||
|     location / { | ||||
|         proxy_pass http://seb-server:8080; | ||||
|         proxy_set_header Host $host:$server_port; | ||||
|         proxy_set_header X-Forwarded-Host $server_name; | ||||
|         proxy_set_header X-Real-IP $remote_addr; | ||||
|         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| server { | ||||
|     listen 80; | ||||
|     server_name _; | ||||
|     return 301 https://$host$request_uri; | ||||
| } | ||||
							
								
								
									
										20
									
								
								docker/prod/bundled/tls/config/nginx/certs/localhost.crt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								docker/prod/bundled/tls/config/nginx/certs/localhost.crt
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,20 @@ | |||
| -----BEGIN CERTIFICATE----- | ||||
| MIIDXDCCAkSgAwIBAgIJAJYb2nNBXHKCMA0GCSqGSIb3DQEBCwUAMEMxCzAJBgNV | ||||
| BAYTAkNIMQ8wDQYDVQQIDAZadXJpY2gxDzANBgNVBAcMBlp1cmljaDESMBAGA1UE | ||||
| AwwJbG9jYWxob3N0MB4XDTIwMDQzMDEzMDI0OVoXDTIxMDQzMDEzMDI0OVowQzEL | ||||
| MAkGA1UEBhMCQ0gxDzANBgNVBAgMBlp1cmljaDEPMA0GA1UEBwwGWnVyaWNoMRIw | ||||
| EAYDVQQDDAlsb2NhbGhvc3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB | ||||
| AQDLwuUqViIl8RtzQoYiZ6vHM49UlhgrD51sziO1PuDIfZo7R3M3NFuCmwsOlXoH | ||||
| vHagcFFpplG3br/akbMCiIbZaWCJiNluZy+b1eFNHmPo8KvCFhRZfAUtKbzku2zL | ||||
| 53O7/oMBUbhJILXC5is832K0qswh/QEmndySTO8sb4IZ3EZV4krQ7UlDgbvRruvL | ||||
| PrqEn25jiuhe5SnrkmI4rlaClvgOJ18qq+L4op90fd0W2V11WV9AJLk7boqVtCwT | ||||
| ee++SpVxS1W5EsCiZwKVrmrxUXPpC+Q67MNO+GJzW1xivcnz6fpOjoCRisudRtEb | ||||
| /GRO2jLVr3KvmyftJMk02d5xAgMBAAGjUzBRMB0GA1UdDgQWBBQQmfmkV++5QA0r | ||||
| uP7xbegL02qLkTAfBgNVHSMEGDAWgBQQmfmkV++5QA0ruP7xbegL02qLkTAPBgNV | ||||
| HRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQC5nt2yexZjt0yaociBiveF | ||||
| Y1ePyT3QVdDEzaAzMHNJxPA0DcsaJdViv/K8Ri9a7aZgjI7tGR93rTUSs8EgxoYQ | ||||
| ZUn6Av4xwTHIAoGbIS24pd6wljkehB6G4xGK4D8R51AHqHPwlV9pe/9FhqnIwagr | ||||
| RMXJurEiKf1EiX/4ryrs5hFzSauUGEhnq7HTGRygK1boN0LNqLx5G4vLtYzOCDuN | ||||
| GnshMJJvXkQe6Fre1rFnVoBtcbhoEqkp3LLr3eHSiAf7gy4iXjzhGCw/LX0pbEqr | ||||
| B0Zt+ouuTfga0Pvj3MNEWyI+3CWqXldB/RvonZxWXUhh6ONU2qzRYenewI8gDfIZ | ||||
| -----END CERTIFICATE----- | ||||
							
								
								
									
										28
									
								
								docker/prod/bundled/tls/config/nginx/certs/localhost.key
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								docker/prod/bundled/tls/config/nginx/certs/localhost.key
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,28 @@ | |||
| -----BEGIN PRIVATE KEY----- | ||||
| MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDLwuUqViIl8Rtz | ||||
| QoYiZ6vHM49UlhgrD51sziO1PuDIfZo7R3M3NFuCmwsOlXoHvHagcFFpplG3br/a | ||||
| kbMCiIbZaWCJiNluZy+b1eFNHmPo8KvCFhRZfAUtKbzku2zL53O7/oMBUbhJILXC | ||||
| 5is832K0qswh/QEmndySTO8sb4IZ3EZV4krQ7UlDgbvRruvLPrqEn25jiuhe5Snr | ||||
| kmI4rlaClvgOJ18qq+L4op90fd0W2V11WV9AJLk7boqVtCwTee++SpVxS1W5EsCi | ||||
| ZwKVrmrxUXPpC+Q67MNO+GJzW1xivcnz6fpOjoCRisudRtEb/GRO2jLVr3Kvmyft | ||||
| JMk02d5xAgMBAAECggEALXh7rXv1OORaTNlel5TtB5Ig/S5VjF56sgo6e7rhbLxi | ||||
| y7HBK2OavEWfLQz8Y3eSPXFzKZF9EOM9GyiCeyE+fov+iBKq+vE59ZvAIHaUsynq | ||||
| GnDU77c2bIKw7ZZJzCMFd8FvOL8k0eTjyu+UXIw5OboXvcn5FMYLr/ZNNWxY6y4P | ||||
| 33fR63HUAQOglxkvzqfCYcWqiBr3fowQcKfeVjSveeTMEHMDq/EWcq1+xmGRs037 | ||||
| cWfLw8A2Vo6lN4CSJvXMJXzNgd3uKG4EI+nTzrO7WaH6KpxIkGkD/u50J868tR+C | ||||
| TmQnQIvMkjGSiulGHHZhQ3v8zEXzSU3ramxnBM9O8QKBgQDszx7Z5Cioc1RK4dKt | ||||
| qLhvbQYXQC3XF0WWOjuG6NTxA/cKejQ9fpLzu0UnRYsUfsyiahtB+umGsWxO1yAp | ||||
| aVf25CYp2lTTvP3EDo9wzOfp9NBqiKSkTTmYvp7i9idGU4Tg8gYUQcG9F63L1M3X | ||||
| 6Xb8ZWylJoypegz2CeDWIh+RXQKBgQDcRikZYaGKsMgCxRVyxeHOFbml4Fk0wH+C | ||||
| YsrOHMV29Ck/8t/Ajy8+42TmnrmCFsTK4OVG9L87CF9TNxBU8WBAG2YqmiQbH49i | ||||
| UEaxBSfcmOqgPFGy62EQadUTn4f+HbZJKPyaeMhnKJseIIWy2i+a0Q6+0GX+Gke6 | ||||
| Qe6FWkeMJQKBgQDJ8ZcNmVRS0ob/lLRlA4zE+ORIz6JH2sCs69v3oHZ3UjpJ5QzH | ||||
| pDkNQJYod1WzlK5Nks7L5X1gL819Lldu+TbahJVG+7l7F6AQoZoRR6w+B1f0gbJl | ||||
| qrWDXIuCYQf9IRwf+ETW4XymFJtRR5iCl8WwV43fCJDLthl3d9UUxuTEwQKBgQDb | ||||
| dRNRdFHLqeE70TtTRA96kW6K8wAtbHQdZWwE+elKYGwQiFugr4c0sr0+f3j3QNQE | ||||
| BRipHwK/P9IpSDz/RBTPCf06CKRcWY8zNiOYDjjusXNg/XewOI5WGfruOAz3goaw | ||||
| USOKizeuf2g8Fc7eqD6xkgOM3HghN/GqgjGvroiF+QKBgQDQZRljdl/dTi5GijFb | ||||
| FJwDGEhTpDYEBKb9AwWa5xP0u7JoqCv+0eP8/9eLmjzgawKTjtPHVMaeBmzMeW4O | ||||
| E+x4114yQthVTs1e8TnoprkapEQNlvDGxJsYycJ4ADrrgOzA+HeddUj9GrWEfd8f | ||||
| t7TrY/khzS4yDWvTFYG5wag+5Q== | ||||
| -----END PRIVATE KEY----- | ||||
|  | @ -0,0 +1,79 @@ | |||
| ########################################################## | ||||
| ### Global Server Settings | ||||
| 
 | ||||
| # Server address (set for docker internal) | ||||
| server.address=0.0.0.0 | ||||
| # Server http port | ||||
| server.port=8080 | ||||
| # The servlet context path | ||||
| server.servlet.context-path=/ | ||||
| 
 | ||||
| # Logging | ||||
| # Default logging level in the form  "logging.level" + namespace=LEVEL  | ||||
| logging.level.ROOT=WARN | ||||
| logging.level.ch=INFO | ||||
| logging.file=/sebserver/log/sebserver.log | ||||
| logging.config=/sebserver/config/spring/logback-prod.xml | ||||
| 
 | ||||
| ########################################################## | ||||
| ### SEB Server Webservice configuration | ||||
| 
 | ||||
| sebserver.test.property=This is a basic bundled productive setup | ||||
| 
 | ||||
| # webservice database server connection | ||||
| datastore.mariadb.server.address=seb-server-mariadb | ||||
| datastore.mariadb.server.port=3306 | ||||
| 
 | ||||
| # data source configuration | ||||
| spring.datasource.hikari.initializationFailTimeout=30000 | ||||
| spring.datasource.hikari.connectionTimeout=30000 | ||||
| spring.datasource.hikari.idleTimeout=600000 | ||||
| spring.datasource.hikari.maxLifetime=1800000 | ||||
| 
 | ||||
| ### webservice networking | ||||
| sebserver.webservice.distributed=false | ||||
| sebserver.webservice.http.external.scheme=https | ||||
| sebserver.webservice.http.external.servername= | ||||
| sebserver.webservice.http.external.port= | ||||
| sebserver.webservice.http.redirect.gui=/gui | ||||
| sebserver.http.client.connect-timeout=150000 | ||||
| sebserver.http.client.connection-request-timeout=100000 | ||||
| sebserver.http.client.read-timeout=200000 | ||||
| 
 | ||||
| # webservice API | ||||
| sebserver.webservice.api.admin.endpoint=/admin-api/v1 | ||||
| sebserver.webservice.api.admin.accessTokenValiditySeconds=3600 | ||||
| sebserver.webservice.api.admin.refreshTokenValiditySeconds=25200 | ||||
| sebserver.webservice.api.exam.config.init.permittedProcesses=config/initialPermittedProcesses.xml | ||||
| sebserver.webservice.api.exam.config.init.prohibitedProcesses=config/initialProhibitedProcesses.xml | ||||
| sebserver.webservice.api.exam.endpoint=/exam-api | ||||
| sebserver.webservice.api.exam.endpoint.discovery=${sebserver.webservice.api.exam.endpoint}/discovery | ||||
| sebserver.webservice.api.exam.endpoint.v1=${sebserver.webservice.api.exam.endpoint}/v1 | ||||
| sebserver.webservice.api.exam.accessTokenValiditySeconds=3600 | ||||
| sebserver.webservice.api.exam.event-handling-strategy=ASYNC_BATCH_STORE_STRATEGY | ||||
| sebserver.webservice.api.exam.enable-indicator-cache=true | ||||
| sebserver.webservice.api.pagination.maxPageSize=500 | ||||
| # comma separated list of known possible OpenEdX API access token request endpoints | ||||
| sebserver.webservice.lms.openedx.api.token.request.paths=/oauth2/access_token | ||||
| 
 | ||||
| ########################################################## | ||||
| ### SEB Server GUI configuration | ||||
| sebserver.gui.external.messages=file:/sebserver/config/spring/messages | ||||
| sebserver.gui.multilingual=false | ||||
| sebserver.gui.supported.languages=en | ||||
| sebserver.gui.theme=css/sebserver.css | ||||
| sebserver.gui.list.page.size=20 | ||||
| sebserver.gui.date.displayformat=de | ||||
| 
 | ||||
| sebserver.gui.entrypoint=/gui | ||||
| sebserver.gui.webservice.protocol=http | ||||
| sebserver.gui.webservice.address=localhost | ||||
| sebserver.gui.webservice.port=8080 | ||||
| # defines the polling interval that is used to poll the webservice for client connection data on a monitored exam page | ||||
| sebserver.gui.webservice.poll-interval=1000 | ||||
| sebserver.gui.webservice.mock-lms-enabled=true | ||||
| sebserver.gui.webservice.edx-lms-enabled=true | ||||
| sebserver.gui.webservice.moodle-lms-enabled=false | ||||
| 
 | ||||
| sebserver.gui.seb.client.config.download.filename=SEBServerSettings.seb | ||||
| sebserver.gui.seb.exam.config.download.filename=SEBExamSettings.seb | ||||
							
								
								
									
										27
									
								
								docker/prod/bundled/tls/config/spring/logback-prod.xml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								docker/prod/bundled/tls/config/spring/logback-prod.xml
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,27 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <configuration debug="false" scan="false"> | ||||
| 
 | ||||
|     <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> | ||||
|       <encoder> | ||||
|         <pattern>%d{HH:mm:ss.SSS} %-5level [%thread]:[%logger] %msg%n</pattern> | ||||
|       </encoder> | ||||
|     </appender> | ||||
|      | ||||
|     <appender name="FILE" class="ch.qos.logback.core.FileAppender"> | ||||
|       <file>log/sebserver.log</file> | ||||
|       <append>true</append> | ||||
|       <encoder> | ||||
|          <pattern>%d{HH:mm:ss.SSS} %-5level [%thread]:[%logger] %msg%n</pattern> | ||||
|       </encoder> | ||||
|    </appender> | ||||
|    | ||||
|   <springProfile name="prod"> | ||||
| 
 | ||||
|     <root level="WARN" additivity="true"> | ||||
|       <appender-ref ref="STDOUT" /> | ||||
|       <appender-ref ref="FILE" /> | ||||
|     </root> | ||||
|      | ||||
|   </springProfile> | ||||
|    | ||||
| </configuration> | ||||
							
								
								
									
										1476
									
								
								docker/prod/bundled/tls/config/spring/messages_en.properties
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1476
									
								
								docker/prod/bundled/tls/config/spring/messages_en.properties
									
										
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load diff
											
										
									
								
							
							
								
								
									
										83
									
								
								docker/prod/bundled/tls/docker-compose.yml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										83
									
								
								docker/prod/bundled/tls/docker-compose.yml
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,83 @@ | |||
| version: '3.5' | ||||
| services: | ||||
|   seb-server-setup: | ||||
|     build: | ||||
|         context: . | ||||
|         dockerfile: setup.Dockerfile | ||||
|     container_name: seb-server-setup | ||||
|     volumes: | ||||
|         - seb-server-config:/config | ||||
|         - ./config:/host/config | ||||
| 
 | ||||
|   mariadb:  | ||||
|     image: "mariadb/server:10.3" | ||||
|     container_name: seb-server-mariadb | ||||
|     environment: | ||||
|         - MYSQL_ROOT_PASSWORD_FILE=/etc/mysql/conf.d/secret | ||||
|     ports: | ||||
|         - 3306:3306 | ||||
|     volumes: | ||||
|         - seb-server-config:/etc/mysql/conf.d | ||||
|         - seb-server-mariadb:/var/lib/mysql | ||||
|         - ./config/mariadb/config.cnf:/etc/mysql/conf.d/config.cnf | ||||
|     networks: | ||||
|         - seb-server-network | ||||
|     restart: unless-stopped | ||||
| 
 | ||||
|   seb-server: | ||||
|       build: | ||||
|           context: . | ||||
|           dockerfile: sebserver.Dockerfile | ||||
|           args: | ||||
|               - SEBSERVER_VERSION=1.0.0 | ||||
|       container_name: seb-server | ||||
|       volumes: | ||||
|         - seb-server-config:/sebserver/config | ||||
|         - ./config/spring:/sebserver/config/spring | ||||
|         - seb-server-logs:/sebserver/log | ||||
|       environment: | ||||
|         - MONITORING_MODE=false | ||||
|       # - JMX_PORT=9090 | ||||
|       # Connect this port to host if you want to use JMX (MONITORING_MODE=true) | ||||
|       #ports: | ||||
|       #  - 9090:9090 | ||||
|       logging: | ||||
|         driver: "json-file" | ||||
|         options: | ||||
|             mode: "non-blocking" | ||||
|             max-size: "200k" | ||||
|             max-file: "10" | ||||
|       networks: | ||||
|           - seb-server-network | ||||
|       depends_on: | ||||
|           - "mariadb" | ||||
|           - "seb-server-setup" | ||||
|       restart: unless-stopped | ||||
| 
 | ||||
|   reverse-proxy: | ||||
|     image: "nginx:latest" | ||||
|     container_name: seb-server-proxy | ||||
|     volumes: | ||||
|       - ./config/nginx:/etc/nginx/conf.d | ||||
|       - ./config/nginx/certs:/sebserver/config/certs | ||||
|     ports: | ||||
|       - 443:443 | ||||
|     networks: | ||||
|       - seb-server-network | ||||
|     depends_on: | ||||
|       - "mariadb" | ||||
|       - "seb-server" | ||||
|       - "seb-server-setup" | ||||
|     restart: unless-stopped | ||||
| 
 | ||||
| networks: | ||||
|   seb-server-network: | ||||
|     name: seb-server-network | ||||
| 
 | ||||
| volumes: | ||||
|   seb-server-config: | ||||
|     name: seb-server-config | ||||
|   seb-server-mariadb: | ||||
|     name: seb-server-mariadb | ||||
|   seb-server-logs: | ||||
|     name: seb-server-logs | ||||
							
								
								
									
										59
									
								
								docker/prod/bundled/tls/sebserver.Dockerfile
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								docker/prod/bundled/tls/sebserver.Dockerfile
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,59 @@ | |||
| FROM alpine/git | ||||
| 
 | ||||
| ARG SEBSERVER_VERSION | ||||
| ARG GIT_TAG="v${SEBSERVER_VERSION}" | ||||
| 
 | ||||
| WORKDIR /sebserver | ||||
| RUN if [ "x${GIT_TAG}" = "x" ] ; \ | ||||
|     then git clone --depth 1 https://github.com/SafeExamBrowser/seb-server.git ; \ | ||||
|     else git clone -b "$GIT_TAG" --depth 1 https://github.com/SafeExamBrowser/seb-server.git ; fi | ||||
| 
 | ||||
| FROM maven:latest | ||||
| 
 | ||||
| ARG SEBSERVER_VERSION | ||||
| 
 | ||||
| WORKDIR /sebserver | ||||
| COPY --from=0 /sebserver/seb-server /sebserver | ||||
| RUN mvn clean install -DskipTests -Dbuild-version="${SEBSERVER_VERSION}" | ||||
| 
 | ||||
| FROM openjdk:11-jre-stretch | ||||
| 
 | ||||
| ARG SEBSERVER_VERSION | ||||
| ENV SEBSERVER_JAR="seb-server-${SEBSERVER_VERSION}.jar" | ||||
| ENV SERVER_PORT="8080" | ||||
| ENV JMX_PORT= | ||||
| 
 | ||||
| WORKDIR /sebserver | ||||
| COPY --from=1 /sebserver/target/"${SEBSERVER_JAR}" /sebserver | ||||
| 
 | ||||
| CMD if [ "x${JMX_PORT}" = "x" ] ; \ | ||||
|         then secret=$(cat /sebserver/config/secret) && exec java \ | ||||
|             -Xms64M \ | ||||
|             -Xmx1G \ | ||||
|             -jar "${SEBSERVER_JAR}" \ | ||||
|             --spring.profiles.active=ws,gui,prod,prod-gui,prod-ws \ | ||||
|             --spring.config.location=file:/sebserver/config/spring/,classpath:/config/ \ | ||||
|             --sebserver.certs.password="${secret}" \  | ||||
|             --sebserver.mariadb.password="${secret}" \ | ||||
|             --sebserver.password="${secret}" ; \ | ||||
|         else secret=$(cat /sebserver/config/secret) && exec java \ | ||||
|             -Xms64M \ | ||||
|             -Xmx1G \ | ||||
|             -Dcom.sun.management.jmxremote \ | ||||
|             -Dcom.sun.management.jmxremote.port=${JMX_PORT} \ | ||||
|             -Dcom.sun.management.jmxremote.rmi.port=${JMX_PORT} \ | ||||
|             -Djava.rmi.server.hostname=localhost \ | ||||
|             -Dcom.sun.management.jmxremote.local.only=false \ | ||||
|             -Dcom.sun.management.jmxremote.ssl=false \ | ||||
|             -Dcom.sun.management.jmxremote.authenticate=true \ | ||||
|             -Dcom.sun.management.jmxremote.password.file=/sebserver/config/jmx/jmxremote.password \ | ||||
|             -Dcom.sun.management.jmxremote.access.file=/sebserver/config/jmx/jmxremote.access \ | ||||
|             -jar "${SEBSERVER_JAR}" \ | ||||
|             --spring.profiles.active=ws,gui,prod,prod-gui,prod-ws \ | ||||
|             --spring.config.location=file:/sebserver/config/spring/,classpath:/config/ \ | ||||
|             --sebserver.certs.password="${secret}" \  | ||||
|             --sebserver.mariadb.password="${secret}" \ | ||||
|             --sebserver.password="${secret}" ; \ | ||||
|         fi | ||||
| 
 | ||||
| EXPOSE $SERVER_PORT $JMX_PORT | ||||
							
								
								
									
										6
									
								
								docker/prod/bundled/tls/setup.Dockerfile
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								docker/prod/bundled/tls/setup.Dockerfile
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,6 @@ | |||
| FROM alpine:latest | ||||
| 
 | ||||
| CMD cp -a /host/config/. /config/ \ | ||||
|     && secret=$(cat /config/secret) \ | ||||
|     && rm /host/config/secret \ | ||||
|     && sudo chmod 777 /host/config/secret | ||||
							
								
								
									
										2
									
								
								docker/testing/basic/config/jmx/jmxremote.access
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								docker/testing/basic/config/jmx/jmxremote.access
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,2 @@ | |||
| admin readwrite | ||||
| user  readonly | ||||
							
								
								
									
										0
									
								
								docker/testing/basic/config/jmx/jmxremote.password
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								docker/testing/basic/config/jmx/jmxremote.password
									
										
									
									
									
										Normal file
									
								
							
							
								
								
									
										15
									
								
								docker/testing/basic/config/mariadb/config.cnf
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								docker/testing/basic/config/mariadb/config.cnf
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,15 @@ | |||
| [mysqld] | ||||
| # Disabling symbolic-links is recommended to prevent assorted security risks | ||||
| symbolic-links=0 | ||||
| 
 | ||||
| # network | ||||
| connect_timeout = 61 | ||||
| wait_timeout = 28800 | ||||
| max_connections = 100000 | ||||
| max_allowed_packet = 256M | ||||
| max_connect_errors = 1000000 | ||||
| 
 | ||||
| skip_external_locking | ||||
| 
 | ||||
| #memory | ||||
| innodb_buffer_pool_size=1G | ||||
							
								
								
									
										14
									
								
								docker/testing/basic/config/nginx/app.conf
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								docker/testing/basic/config/nginx/app.conf
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,14 @@ | |||
| server { | ||||
|     listen 80; | ||||
|     charset utf-8; | ||||
|     access_log off; | ||||
| 
 | ||||
|     location / { | ||||
|         proxy_pass http://seb-server:8080; | ||||
|         proxy_set_header Host $host:$server_port; | ||||
|         proxy_set_header X-Forwarded-Host $server_name; | ||||
|         proxy_set_header X-Real-IP $remote_addr; | ||||
|         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; | ||||
|     } | ||||
| 
 | ||||
| } | ||||
|  | @ -0,0 +1,72 @@ | |||
| ########################################################## | ||||
| ### Global Server Settings | ||||
| 
 | ||||
| # Server address (set for docker internal) | ||||
| server.address=0.0.0.0 | ||||
| # Server http port | ||||
| server.port=8080 | ||||
| # The servlet context path | ||||
| server.servlet.context-path=/ | ||||
| 
 | ||||
| # Logging | ||||
| # Default logging level in the form  "logging.level" + namespace=LEVEL  | ||||
| logging.level.ch=DEBUG | ||||
| logging.file=/sebserver/log/sebserver.log | ||||
| 
 | ||||
| ########################################################## | ||||
| ### SEB Server Webservice configuration | ||||
| 
 | ||||
| sebserver.test.property=This is a staging/testing setup with no encryption | ||||
| 
 | ||||
| # webservice database server connection | ||||
| datastore.mariadb.server.address=seb-server-mariadb | ||||
| datastore.mariadb.server.port=3306 | ||||
| 
 | ||||
| # data source configuration | ||||
| spring.datasource.hikari.initializationFailTimeout=30000 | ||||
| spring.datasource.hikari.connectionTimeout=30000 | ||||
| spring.datasource.hikari.idleTimeout=600000 | ||||
| spring.datasource.hikari.maxLifetime=1800000 | ||||
| 
 | ||||
| ### webservice networking | ||||
| sebserver.webservice.distributed=false | ||||
| sebserver.webservice.http.external.scheme=http | ||||
| sebserver.webservice.http.external.servername= | ||||
| sebserver.webservice.http.external.port= | ||||
| sebserver.webservice.http.redirect.gui=/gui | ||||
| 
 | ||||
| # webservice API | ||||
| sebserver.webservice.api.admin.endpoint=/admin-api/v1 | ||||
| sebserver.webservice.api.admin.accessTokenValiditySeconds=3600 | ||||
| sebserver.webservice.api.admin.refreshTokenValiditySeconds=25200 | ||||
| sebserver.webservice.api.exam.config.init.permittedProcesses=config/initialPermittedProcesses.xml | ||||
| sebserver.webservice.api.exam.config.init.prohibitedProcesses=config/initialProhibitedProcesses.xml | ||||
| sebserver.webservice.api.exam.endpoint=/exam-api | ||||
| sebserver.webservice.api.exam.endpoint.discovery=${sebserver.webservice.api.exam.endpoint}/discovery | ||||
| sebserver.webservice.api.exam.endpoint.v1=${sebserver.webservice.api.exam.endpoint}/v1 | ||||
| sebserver.webservice.api.exam.accessTokenValiditySeconds=3600 | ||||
| sebserver.webservice.api.exam.event-handling-strategy=ASYNC_BATCH_STORE_STRATEGY | ||||
| sebserver.webservice.api.exam.enable-indicator-cache=true | ||||
| sebserver.webservice.api.pagination.maxPageSize=500 | ||||
| # comma separated list of known possible OpenEdX API access token request endpoints | ||||
| sebserver.webservice.lms.openedx.api.token.request.paths=/oauth2/access_token | ||||
| 
 | ||||
| ########################################################## | ||||
| ### SEB Server GUI configuration | ||||
| sebserver.gui.external.messages=file:/sebserver/config/spring/messages | ||||
| sebserver.gui.multilingual=false | ||||
| sebserver.gui.supported.languages=en | ||||
| sebserver.gui.theme=css/sebserver.css | ||||
| sebserver.gui.list.page.size=20 | ||||
| sebserver.gui.date.displayformat=de | ||||
| 
 | ||||
| sebserver.gui.entrypoint=/gui | ||||
| sebserver.gui.webservice.protocol=http | ||||
| sebserver.gui.webservice.address=localhost | ||||
| sebserver.gui.webservice.port=8080 | ||||
| # defines the polling interval that is used to poll the webservice for client connection data on a monitored exam page | ||||
| sebserver.gui.webservice.poll-interval=1000 | ||||
| sebserver.gui.webservice.mock-lms-enabled=true | ||||
| 
 | ||||
| sebserver.gui.seb.client.config.download.filename=SEBServerSettings.seb | ||||
| sebserver.gui.seb.exam.config.download.filename=SEBExamSettings.seb | ||||
							
								
								
									
										8
									
								
								docker/testing/basic/config/spring/messages.properties
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								docker/testing/basic/config/spring/messages.properties
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,8 @@ | |||
| sebserver.overall.imprint= | ||||
| sebserver.overall.imprint.markup= | ||||
| sebserver.overall.about=About | ||||
| sebserver.overall.about.markup=<span style='font-family: Arial, Helvetica,sans-serif;font-size: 25px;font-weight: normal;font-style: normal;color: rgb(31, 64, 122);'>SEB Server About Example</span><br/><br/><span style='font-family: Arial, Helvetica,sans-serif;font-size: 18px;font-weight: bold;font-style: normal;'>1. This is an example of how an About-Page can look like.</span><br/><br/><span style='font-family: Arial, Helvetica,sans-serif;font-size: 14px;font-weight: normal;font-style: normal;'>By simply define the markup HTML content within the messages.propertie configuration of specified language</span> | ||||
| sebserver.overall.help=Documentation | ||||
| sebserver.overall.help.link=https://seb-server.readthedocs.io/en/latest/index.html | ||||
| 
 | ||||
| sebserver.monitoring.exam.connection.action.disable=Mark as Canceled | ||||
							
								
								
									
										76
									
								
								docker/testing/basic/docker-compose.yml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										76
									
								
								docker/testing/basic/docker-compose.yml
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,76 @@ | |||
| version: '3' | ||||
| services: | ||||
|   seb-server-setup: | ||||
|     build: | ||||
|         context: . | ||||
|         dockerfile: setup.Dockerfile | ||||
|     container_name: seb-server-setup | ||||
|     volumes: | ||||
|         - seb-server-config:/config | ||||
|         - ./config:/host/config | ||||
| 
 | ||||
|   mariadb:  | ||||
|     image: "mariadb/server:10.3" | ||||
|     container_name: seb-server-mariadb | ||||
|     environment: | ||||
|         - MYSQL_ROOT_PASSWORD_FILE=/etc/mysql/conf.d/secret | ||||
|         # workaround: https://github.com/docker-library/mariadb/issues/262  | ||||
|         # TODO this seems to be fixed now... try to remove and test | ||||
|         - MYSQL_INITDB_SKIP_TZINFO=1     | ||||
|     ports: | ||||
|         - 3306:3306 | ||||
|     volumes: | ||||
|         - seb-server-config:/etc/mysql/conf.d | ||||
|         - seb-server-mariadb:/var/lib/mysql | ||||
|         - ./config/mariadb/config.cnf:/etc/mysql/conf.d/config.cnf | ||||
|     networks: | ||||
|         - seb-server-network | ||||
|     restart: unless-stopped | ||||
| 
 | ||||
|   seb-server: | ||||
|       build: | ||||
|           context: . | ||||
|           dockerfile: sebserver.Dockerfile | ||||
|           args: | ||||
|               - SEBSERVER_VERSION=1.0-latest | ||||
|       container_name: seb-server | ||||
|       volumes: | ||||
|         - seb-server-config:/sebserver/config | ||||
|         - ./config/spring:/sebserver/config/spring | ||||
|       environment: | ||||
|         - JMX_PORT=9090 | ||||
|       ports: | ||||
|         - 9090:9090 | ||||
|       logging: | ||||
|         driver: "json-file" | ||||
|         options: | ||||
|             max-size: "200k" | ||||
|             max-file: "10" | ||||
|       networks: | ||||
|           - seb-server-network | ||||
|       depends_on: | ||||
|           - "mariadb" | ||||
|           - "seb-server-setup" | ||||
|       restart: unless-stopped | ||||
| 
 | ||||
|   reverse-proxy: | ||||
|     image: "nginx:latest" | ||||
|     container_name: seb-server-proxy | ||||
|     volumes: | ||||
|       - ./config/nginx:/etc/nginx/conf.d | ||||
|     ports: | ||||
|       - 80:80 | ||||
|     networks: | ||||
|       - seb-server-network | ||||
|     depends_on: | ||||
|       - "mariadb" | ||||
|       - "seb-server" | ||||
|       - "seb-server-setup" | ||||
|     restart: unless-stopped | ||||
| 
 | ||||
| networks: | ||||
|   seb-server-network: | ||||
| 
 | ||||
| volumes: | ||||
|   seb-server-config: | ||||
|   seb-server-mariadb: | ||||
							
								
								
									
										59
									
								
								docker/testing/basic/sebserver.Dockerfile
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								docker/testing/basic/sebserver.Dockerfile
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,59 @@ | |||
| FROM alpine/git | ||||
| 
 | ||||
| ARG SEBSERVER_VERSION | ||||
| ARG GIT_TAG="v${SEBSERVER_VERSION}" | ||||
| 
 | ||||
| WORKDIR /sebserver | ||||
| RUN if [ "x${GIT_TAG}" = "x" ] ; \ | ||||
|     then git clone --depth 1 https://github.com/SafeExamBrowser/seb-server.git ; \ | ||||
|     else git clone -b "$GIT_TAG" --depth 1 https://github.com/SafeExamBrowser/seb-server.git ; fi | ||||
| 
 | ||||
| FROM maven:latest | ||||
| 
 | ||||
| ARG SEBSERVER_VERSION | ||||
| 
 | ||||
| WORKDIR /sebserver | ||||
| COPY --from=0 /sebserver/seb-server /sebserver | ||||
| RUN mvn clean install -DskipTests -Dbuild-version="${SEBSERVER_VERSION}" | ||||
| 
 | ||||
| FROM openjdk:11-jre-stretch | ||||
| 
 | ||||
| ARG SEBSERVER_VERSION | ||||
| ENV SEBSERVER_JAR="seb-server-${SEBSERVER_VERSION}.jar" | ||||
| ENV SERVER_PORT="8080" | ||||
| ENV JMX_PORT= | ||||
| 
 | ||||
| WORKDIR /sebserver | ||||
| COPY --from=1 /sebserver/target/"${SEBSERVER_JAR}" /sebserver | ||||
| 
 | ||||
| CMD if [ "x${JMX_PORT}" = "x" ] ; \ | ||||
|         then secret=$(cat /sebserver/config/secret) && exec java \ | ||||
|             -Xms64M \ | ||||
|             -Xmx1G \ | ||||
|             -jar "${SEBSERVER_JAR}" \ | ||||
|             --spring.profiles.active=ws,gui,prod,prod-gui,prod-ws \ | ||||
|             --spring.config.location=file:/sebserver/config/spring/,classpath:/config/ \ | ||||
|             --sebserver.certs.password="${secret}" \  | ||||
|             --sebserver.mariadb.password="${secret}" \ | ||||
|             --sebserver.password="${secret}" ; \ | ||||
|         else secret=$(cat /sebserver/config/secret) && exec java \ | ||||
|             -Xms64M \ | ||||
|             -Xmx1G \ | ||||
|             -Dcom.sun.management.jmxremote \ | ||||
|             -Dcom.sun.management.jmxremote.port=${JMX_PORT} \ | ||||
|             -Dcom.sun.management.jmxremote.rmi.port=${JMX_PORT} \ | ||||
|             -Djava.rmi.server.hostname=localhost \ | ||||
|             -Dcom.sun.management.jmxremote.local.only=false \ | ||||
|             -Dcom.sun.management.jmxremote.ssl=false \ | ||||
|             -Dcom.sun.management.jmxremote.authenticate=true \ | ||||
|             -Dcom.sun.management.jmxremote.password.file=/sebserver/config/jmx/jmxremote.password \ | ||||
|             -Dcom.sun.management.jmxremote.access.file=/sebserver/config/jmx/jmxremote.access \ | ||||
|             -jar "${SEBSERVER_JAR}" \ | ||||
|             --spring.profiles.active=ws,gui,prod,prod-gui,prod-ws \ | ||||
|             --spring.config.location=file:/sebserver/config/spring/,classpath:/config/ \ | ||||
|             --sebserver.certs.password="${secret}" \  | ||||
|             --sebserver.mariadb.password="${secret}" \ | ||||
|             --sebserver.password="${secret}" ; \ | ||||
|         fi | ||||
| 
 | ||||
| EXPOSE $SERVER_PORT $JMX_PORT | ||||
							
								
								
									
										6
									
								
								docker/testing/basic/setup.Dockerfile
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								docker/testing/basic/setup.Dockerfile
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,6 @@ | |||
| FROM alpine:latest | ||||
| 
 | ||||
| CMD cp -a /host/config/. /config/ \ | ||||
|     && secret=$(cat /config/secret) \ | ||||
|     && rm /host/config/secret \ | ||||
|     && sudo chmod 777 /host/config/secret | ||||
							
								
								
									
										26
									
								
								docker/testing/distributed/db/docker-compose.yml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								docker/testing/distributed/db/docker-compose.yml
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,26 @@ | |||
| version: '3.5' | ||||
| services: | ||||
|   mariadb:  | ||||
|     image: "mariadb/server:10.3" | ||||
|     container_name: seb-server-mariadb | ||||
|     environment: | ||||
|         - MYSQL_ROOT_PASSWORD=somePW | ||||
|         # workaround: https://github.com/docker-library/mariadb/issues/262  | ||||
|         # TODO this seems to be fixed now... try to remove and test | ||||
|         - MYSQL_INITDB_SKIP_TZINFO=1 | ||||
|     volumes: | ||||
|         - mariadb-data:/var/lib/mysql | ||||
|         - ./mariadb:/etc/mysql/conf.d | ||||
|     ports: | ||||
|         - 3306:3306 | ||||
|     networks: | ||||
|         - seb-server-network | ||||
|     restart: unless-stopped | ||||
| 
 | ||||
| volumes: | ||||
|   mariadb-data: | ||||
|     name: seb-server-data | ||||
|    | ||||
| networks: | ||||
|   seb-server-network: | ||||
|     name: seb-server-network | ||||
							
								
								
									
										10
									
								
								docker/testing/distributed/db/mariadb/config.cnf
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								docker/testing/distributed/db/mariadb/config.cnf
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,10 @@ | |||
| [mysqld] | ||||
| # Disabling symbolic-links is recommended to prevent assorted security risks | ||||
| symbolic-links=0 | ||||
| 
 | ||||
| # network | ||||
| connect_timeout = 61 | ||||
| wait_timeout = 28800 | ||||
| max_connections = 100000 | ||||
| max_allowed_packet = 64M | ||||
| max_connect_errors = 1000 | ||||
|  | @ -0,0 +1,44 @@ | |||
| spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration | ||||
| 
 | ||||
| ########################################################## | ||||
| ### Global Server Settings | ||||
| 
 | ||||
| # Server address (set for docker internal) | ||||
| server.address=0.0.0.0 | ||||
| # Server http port | ||||
| server.port=8080 | ||||
| # The servlet context path | ||||
| server.servlet.context-path=/ | ||||
| 
 | ||||
| # Logging | ||||
| # Default logging level in the form  "logging.level" + namespace=LEVEL  | ||||
| logging.level.ROOT=WARN | ||||
| logging.level.ch=DEBUG | ||||
| logging.file=/sebserver/log/sebserver.log | ||||
| logging.config=/sebserver/config/spring/logback-prod.xml | ||||
| 
 | ||||
| ########################################################## | ||||
| ### SEB Server GUI configuration | ||||
| sebserver.gui.http.external.scheme=TO-SET | ||||
| sebserver.gui.http.external.servername=TO-SET | ||||
| sebserver.gui.http.external.port=TO-SET | ||||
| 
 | ||||
| sebserver.gui.external.messages=file:/sebserver/config/spring/messages | ||||
| sebserver.gui.multilingual=false | ||||
| sebserver.gui.supported.languages=en | ||||
| sebserver.gui.theme=css/sebserver.css | ||||
| sebserver.gui.list.page.size=20 | ||||
| sebserver.gui.date.displayformat=de | ||||
| 
 | ||||
| sebserver.gui.entrypoint=/gui | ||||
| sebserver.gui.webservice.protocol=http | ||||
| sebserver.gui.webservice.address=seb-server-proxy | ||||
| sebserver.gui.webservice.port=80 | ||||
| # defines the polling interval that is used to poll the webservice for client connection data on a monitored exam page | ||||
| sebserver.gui.webservice.poll-interval=1000 | ||||
| sebserver.gui.webservice.mock-lms-enabled=true | ||||
| 
 | ||||
| sebserver.gui.seb.client.config.download.filename=SEBServerSettings.seb | ||||
| sebserver.gui.seb.exam.config.download.filename=SEBExamSettings.seb | ||||
| 
 | ||||
| 
 | ||||
|  | @ -0,0 +1,27 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <configuration debug="false" scan="false"> | ||||
| 
 | ||||
|     <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> | ||||
|       <encoder> | ||||
|         <pattern>%d{HH:mm:ss.SSS} %-5level [%thread]:[%logger] %msg%n</pattern> | ||||
|       </encoder> | ||||
|     </appender> | ||||
|      | ||||
|     <appender name="FILE" class="ch.qos.logback.core.FileAppender"> | ||||
|       <file>log/sebserver.log</file> | ||||
|       <append>true</append> | ||||
|       <encoder> | ||||
|          <pattern>%d{HH:mm:ss.SSS} %-5level [%thread]:[%logger] %msg%n</pattern> | ||||
|       </encoder> | ||||
|    </appender> | ||||
|    | ||||
|   <springProfile name="prod"> | ||||
| 
 | ||||
|     <root level="DEBUG" additivity="true"> | ||||
|       <appender-ref ref="STDOUT" /> | ||||
|       <appender-ref ref="FILE" /> | ||||
|     </root> | ||||
|      | ||||
|   </springProfile> | ||||
|    | ||||
| </configuration> | ||||
|  | @ -0,0 +1,8 @@ | |||
| sebserver.overall.imprint= | ||||
| sebserver.overall.imprint.markup= | ||||
| sebserver.overall.about=About | ||||
| sebserver.overall.about.markup=<span style='font-family: Arial, Helvetica,sans-serif;font-size: 25px;font-weight: normal;font-style: normal;color: rgb(31, 64, 122);'>SEB Server About Example</span><br/><br/><span style='font-family: Arial, Helvetica,sans-serif;font-size: 18px;font-weight: bold;font-style: normal;'>1. This is an example of how an About-Page can look like.</span><br/><br/><span style='font-family: Arial, Helvetica,sans-serif;font-size: 14px;font-weight: normal;font-style: normal;'>By simply define the markup HTML content within the messages.propertie configuration of specified language</span> | ||||
| sebserver.overall.help=Documentation | ||||
| sebserver.overall.help.link=https://seb-server.readthedocs.io/en/latest/index.html | ||||
| 
 | ||||
| sebserver.monitoring.exam.connection.action.disable=Mark as Canceled | ||||
							
								
								
									
										36
									
								
								docker/testing/distributed/guiservice/docker-compose.yml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								docker/testing/distributed/guiservice/docker-compose.yml
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,36 @@ | |||
| version: '3.5' | ||||
| services: | ||||
|   seb-guiservice: | ||||
|       build: | ||||
|           context: . | ||||
|           dockerfile: sebguiservice.Dockerfile | ||||
|           args: | ||||
|             - GIT_TAG=development | ||||
|             - SEBSERVER_VERSION=1.0.1 | ||||
|       container_name: seb-guiservice | ||||
|       volumes: | ||||
|         - seb-server-config:/sebserver/config | ||||
|         - ./config/spring:/sebserver/config/spring | ||||
|         - seb-server-logs:/sebserver/log | ||||
|       environment: | ||||
|         - SECRET=somePW | ||||
|       ports: | ||||
|         - 80:8080 | ||||
|       logging: | ||||
|         driver: "json-file" | ||||
|         options: | ||||
|             mode: "non-blocking" | ||||
|             max-size: "200k" | ||||
|             max-file: "10" | ||||
|       networks: | ||||
|         - seb-server-network | ||||
|       restart: unless-stopped | ||||
| 
 | ||||
| volumes: | ||||
|   seb-server-config: | ||||
|   seb-server-logs: | ||||
|     name: seb-guiservice-logs | ||||
| 
 | ||||
| networks: | ||||
|   seb-server-network: | ||||
|     name: seb-server-network | ||||
|  | @ -0,0 +1,37 @@ | |||
| FROM alpine/git | ||||
| 
 | ||||
| ARG SEBSERVER_VERSION | ||||
| ARG GIT_TAG="v${SEBSERVER_VERSION}" | ||||
| 
 | ||||
| WORKDIR /sebserver | ||||
| RUN if [ "x${GIT_TAG}" = "x" ] ; \ | ||||
|     then git clone --depth 1 https://github.com/SafeExamBrowser/seb-server.git ; \ | ||||
|     else git clone -b "$GIT_TAG" --depth 1 https://github.com/SafeExamBrowser/seb-server.git ; fi | ||||
| 
 | ||||
| FROM maven:latest | ||||
| 
 | ||||
| ARG SEBSERVER_VERSION | ||||
| 
 | ||||
| WORKDIR /sebserver | ||||
| COPY --from=0 /sebserver/seb-server /sebserver | ||||
| RUN mvn clean install -DskipTests -Dbuild-version="${SEBSERVER_VERSION}" | ||||
| 
 | ||||
| FROM openjdk:11-jre-stretch | ||||
| 
 | ||||
| ARG SEBSERVER_VERSION | ||||
| ENV SEBSERVER_JAR="seb-server-${SEBSERVER_VERSION}.jar" | ||||
| ENV SERVER_PORT="8080" | ||||
| ENV SECRET=somePW | ||||
| 
 | ||||
| WORKDIR /sebserver | ||||
| COPY --from=1 /sebserver/target/"${SEBSERVER_JAR}" /sebserver | ||||
| 
 | ||||
| CMD exec java \ | ||||
|     -Xms64M \ | ||||
|     -Xmx1G \ | ||||
|     -jar "${SEBSERVER_JAR}" \ | ||||
|     --spring.profiles.active=gui,prod,prod-gui \ | ||||
|     --spring.config.location=file:/sebserver/config/spring/,classpath:/config/ \ | ||||
|     --sebserver.password="${SECRET}" ;  | ||||
| 
 | ||||
| EXPOSE 8080 | ||||
							
								
								
									
										21
									
								
								docker/testing/distributed/webservice/config/nginx/app.conf
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								docker/testing/distributed/webservice/config/nginx/app.conf
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,21 @@ | |||
| upstream backend { | ||||
|     ip_hash; | ||||
|     server seb-webservice1:8080; | ||||
|     server seb-webservice2:8080; | ||||
|     server seb-webservice3:8080; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| server { | ||||
|     listen 80; | ||||
|     charset utf-8; | ||||
|     access_log off; | ||||
| 
 | ||||
|     location / { | ||||
|         proxy_pass http://backend; | ||||
|         proxy_set_header Host $host:$server_port; | ||||
|         proxy_set_header X-Forwarded-Host $server_name; | ||||
|         proxy_set_header X-Real-IP $remote_addr; | ||||
|         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; | ||||
|     } | ||||
| } | ||||
|  | @ -0,0 +1,54 @@ | |||
| ########################################################## | ||||
| ### Global Server Settings | ||||
| 
 | ||||
| # Server address (set for docker internal) | ||||
| server.address=0.0.0.0 | ||||
| # Server http port | ||||
| server.port=8080 | ||||
| # The servlet context path | ||||
| server.servlet.context-path=/ | ||||
| 
 | ||||
| # Logging | ||||
| # Default logging level in the form  "logging.level" + namespace=LEVEL  | ||||
| logging.level.ROOT=WARN | ||||
| logging.level.ch=DEBUG | ||||
| logging.file=/sebserver/log/sebserver.log | ||||
| logging.config=/sebserver/config/spring/logback-prod.xml | ||||
| 
 | ||||
| ########################################################## | ||||
| ### SEB Server Webservice configuration | ||||
| 
 | ||||
| sebserver.test.property=This is a basic single-webservice productive setup | ||||
| 
 | ||||
| # webservice database server connection | ||||
| datastore.mariadb.server.address=seb-server-mariadb | ||||
| datastore.mariadb.server.port=3306 | ||||
| 
 | ||||
| # data source configuration | ||||
| spring.datasource.hikari.initializationFailTimeout=30000 | ||||
| spring.datasource.hikari.connectionTimeout=30000 | ||||
| spring.datasource.hikari.idleTimeout=600000 | ||||
| spring.datasource.hikari.maxLifetime=1800000 | ||||
| 
 | ||||
| ### webservice networking | ||||
| sebserver.webservice.distributed=true | ||||
| sebserver.webservice.http.external.scheme=http | ||||
| sebserver.webservice.http.external.servername=localhost | ||||
| sebserver.webservice.http.external.port=8080 | ||||
| sebserver.webservice.http.redirect.gui=/gui | ||||
| 
 | ||||
| # webservice API | ||||
| sebserver.webservice.api.admin.endpoint=/admin-api/v1 | ||||
| sebserver.webservice.api.admin.accessTokenValiditySeconds=3600 | ||||
| sebserver.webservice.api.admin.refreshTokenValiditySeconds=25200 | ||||
| sebserver.webservice.api.exam.config.init.permittedProcesses=config/initialPermittedProcesses.xml | ||||
| sebserver.webservice.api.exam.config.init.prohibitedProcesses=config/initialProhibitedProcesses.xml | ||||
| sebserver.webservice.api.exam.endpoint=/exam-api | ||||
| sebserver.webservice.api.exam.endpoint.discovery=${sebserver.webservice.api.exam.endpoint}/discovery | ||||
| sebserver.webservice.api.exam.endpoint.v1=${sebserver.webservice.api.exam.endpoint}/v1 | ||||
| sebserver.webservice.api.exam.accessTokenValiditySeconds=3600 | ||||
| sebserver.webservice.api.exam.event-handling-strategy=ASYNC_BATCH_STORE_STRATEGY | ||||
| sebserver.webservice.api.exam.enable-indicator-cache=true | ||||
| sebserver.webservice.api.pagination.maxPageSize=500 | ||||
| # comma separated list of known possible OpenEdX API access token request endpoints | ||||
| sebserver.webservice.lms.openedx.api.token.request.paths=/oauth2/access_token | ||||
|  | @ -0,0 +1,27 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | ||||
| <configuration debug="false" scan="false"> | ||||
| 
 | ||||
|     <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> | ||||
|       <encoder> | ||||
|         <pattern>%d{HH:mm:ss.SSS} %-5level [%thread]:[%logger] %msg%n</pattern> | ||||
|       </encoder> | ||||
|     </appender> | ||||
|      | ||||
|     <appender name="FILE" class="ch.qos.logback.core.FileAppender"> | ||||
|       <file>log/sebserver.log</file> | ||||
|       <append>true</append> | ||||
|       <encoder> | ||||
|          <pattern>%d{HH:mm:ss.SSS} %-5level [%thread]:[%logger] %msg%n</pattern> | ||||
|       </encoder> | ||||
|    </appender> | ||||
|    | ||||
|   <springProfile name="prod"> | ||||
| 
 | ||||
|     <root level="DEBUG" additivity="true"> | ||||
|       <appender-ref ref="STDOUT" /> | ||||
|       <appender-ref ref="FILE" /> | ||||
|     </root> | ||||
|      | ||||
|   </springProfile> | ||||
|    | ||||
| </configuration> | ||||
							
								
								
									
										93
									
								
								docker/testing/distributed/webservice/docker-compose.yml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										93
									
								
								docker/testing/distributed/webservice/docker-compose.yml
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,93 @@ | |||
| version: '3.5' | ||||
| services: | ||||
|   seb-webservice1: | ||||
|       build: | ||||
|           context: . | ||||
|           dockerfile: sebwebservice.Dockerfile | ||||
|           args: | ||||
|               - GIT_TAG=development | ||||
|               - SEBSERVER_VERSION=1.0.1 | ||||
|       container_name: seb-webservice1 | ||||
|       volumes: | ||||
|         - seb-server-config:/sebserver/config | ||||
|         - ./config/spring:/sebserver/config/spring | ||||
|         - seb-server-logs:/sebserver/log | ||||
|       environment: | ||||
|         - SECRET=somePW | ||||
|       logging: | ||||
|         driver: "json-file" | ||||
|         options: | ||||
|             mode: "non-blocking" | ||||
|             max-size: "200k" | ||||
|             max-file: "10" | ||||
|       networks: | ||||
|         - seb-server-network | ||||
|       restart: unless-stopped | ||||
|        | ||||
|   seb-webservice2: | ||||
|       build: | ||||
|           context: . | ||||
|           dockerfile: sebwebservice.Dockerfile | ||||
|           args: | ||||
|               - GIT_TAG=development | ||||
|               - SEBSERVER_VERSION=1.0.1 | ||||
|       container_name: seb-webservice2 | ||||
|       volumes: | ||||
|         - seb-server-config:/sebserver/config | ||||
|         - ./config/spring:/sebserver/config/spring | ||||
|         - seb-server-logs:/sebserver/log | ||||
|       environment: | ||||
|         - SECRET=somePW | ||||
|       logging: | ||||
|         driver: "json-file" | ||||
|         options: | ||||
|             mode: "non-blocking" | ||||
|             max-size: "200k" | ||||
|             max-file: "10" | ||||
|       networks: | ||||
|         - seb-server-network | ||||
|       restart: unless-stopped | ||||
|        | ||||
|   seb-webservice3: | ||||
|       build: | ||||
|           context: . | ||||
|           dockerfile: sebwebservice.Dockerfile | ||||
|           args: | ||||
|               - GIT_TAG=development | ||||
|               - SEBSERVER_VERSION=1.0.1 | ||||
|       container_name: seb-webservice3 | ||||
|       volumes: | ||||
|         - seb-server-config:/sebserver/config | ||||
|         - ./config/spring:/sebserver/config/spring | ||||
|         - seb-server-logs:/sebserver/log | ||||
|       environment: | ||||
|         - SECRET=somePW | ||||
|       logging: | ||||
|         driver: "json-file" | ||||
|         options: | ||||
|             mode: "non-blocking" | ||||
|             max-size: "200k" | ||||
|             max-file: "10" | ||||
|       networks: | ||||
|         - seb-server-network | ||||
|       restart: unless-stopped | ||||
|        | ||||
|   reverse-proxy: | ||||
|     image: "nginx:latest" | ||||
|     container_name: seb-server-proxy | ||||
|     volumes: | ||||
|       - ./config/nginx:/etc/nginx/conf.d | ||||
|     ports: | ||||
|       - 8081:80 | ||||
|     networks: | ||||
|       - seb-server-network | ||||
|     restart: unless-stopped | ||||
| 
 | ||||
| volumes: | ||||
|   seb-server-config: | ||||
|   seb-server-logs: | ||||
|     name: seb-webservice-logs | ||||
| 
 | ||||
| networks: | ||||
|   seb-server-network: | ||||
|     name: seb-server-network | ||||
|  | @ -0,0 +1,38 @@ | |||
| FROM alpine/git | ||||
| 
 | ||||
| ARG SEBSERVER_VERSION | ||||
| ARG GIT_TAG="v${SEBSERVER_VERSION}" | ||||
| 
 | ||||
| WORKDIR /sebserver | ||||
| RUN if [ "x${GIT_TAG}" = "x" ] ; \ | ||||
|     then git clone --depth 1 https://github.com/SafeExamBrowser/seb-server.git ; \ | ||||
|     else git clone -b "$GIT_TAG" --depth 1 https://github.com/SafeExamBrowser/seb-server.git ; fi | ||||
| 
 | ||||
| FROM maven:latest | ||||
| 
 | ||||
| ARG SEBSERVER_VERSION | ||||
| 
 | ||||
| WORKDIR /sebserver | ||||
| COPY --from=0 /sebserver/seb-server /sebserver | ||||
| RUN mvn clean install -DskipTests -Dbuild-version="${SEBSERVER_VERSION}" | ||||
| 
 | ||||
| FROM openjdk:11-jre-stretch | ||||
| 
 | ||||
| ARG SEBSERVER_VERSION | ||||
| ENV SEBSERVER_JAR="seb-server-${SEBSERVER_VERSION}.jar" | ||||
| ENV SERVER_PORT="8080" | ||||
| ENV SECRET=somePW | ||||
| 
 | ||||
| WORKDIR /sebserver | ||||
| COPY --from=1 /sebserver/target/"${SEBSERVER_JAR}" /sebserver | ||||
| 
 | ||||
| CMD exec java \ | ||||
|     -Xms64M \ | ||||
|     -Xmx1G \ | ||||
|     -jar "${SEBSERVER_JAR}" \ | ||||
|     --spring.profiles.active=ws,prod,prod-ws \ | ||||
|     --spring.config.location=file:/sebserver/config/spring/,classpath:/config/ \ | ||||
|     --sebserver.mariadb.password="${SECRET}" \ | ||||
|     --sebserver.password="${SECRET}" ;  | ||||
| 
 | ||||
| EXPOSE $SERVER_PORT | ||||
							
								
								
									
										2
									
								
								docker/testing/tls/config/jmx/jmxremote.access
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								docker/testing/tls/config/jmx/jmxremote.access
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,2 @@ | |||
| admin readwrite | ||||
| user  readonly | ||||
							
								
								
									
										0
									
								
								docker/testing/tls/config/jmx/jmxremote.password
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								docker/testing/tls/config/jmx/jmxremote.password
									
										
									
									
									
										Normal file
									
								
							
							
								
								
									
										16
									
								
								docker/testing/tls/config/mariadb/config.cnf
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								docker/testing/tls/config/mariadb/config.cnf
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,16 @@ | |||
| [mysqld] | ||||
| # Disabling symbolic-links is recommended to prevent assorted security risks | ||||
| symbolic-links=0 | ||||
| 
 | ||||
| # network | ||||
| connect_timeout = 61 | ||||
| wait_timeout = 28800 | ||||
| max_connections = 100000 | ||||
| max_allowed_packet = 256M | ||||
| max_connect_errors = 1000000 | ||||
| 
 | ||||
| skip_external_locking | ||||
| skip_name_resolve | ||||
| 
 | ||||
| #memory | ||||
| innodb_buffer_pool_size=2G | ||||
							
								
								
									
										25
									
								
								docker/testing/tls/config/nginx/app.conf
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								docker/testing/tls/config/nginx/app.conf
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,25 @@ | |||
| ssl_session_cache   shared:SSL:10m; | ||||
| ssl_session_timeout 10m; | ||||
| 
 | ||||
| 
 | ||||
| server { | ||||
|     listen              443 ssl; | ||||
|     charset utf-8; | ||||
|     access_log off; | ||||
|     keepalive_timeout   70; | ||||
|      | ||||
|     server_name         localhost; | ||||
|     ssl_certificate     /sebserver/config/certs/localhost.crt; | ||||
|     ssl_certificate_key /sebserver/config/certs/localhost.key; | ||||
|     ssl_protocols       TLSv1 TLSv1.1 TLSv1.2; | ||||
|     ssl_ciphers         HIGH:!aNULL:!MD5; | ||||
|      | ||||
|     location / { | ||||
|         proxy_pass http://seb-server:8080; | ||||
|         proxy_set_header Host $host:$server_port; | ||||
|         proxy_set_header X-Forwarded-Host $server_name; | ||||
|         proxy_set_header X-Real-IP $remote_addr; | ||||
|         proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; | ||||
|     } | ||||
| } | ||||
|      | ||||
							
								
								
									
										20
									
								
								docker/testing/tls/config/nginx/certs/localhost.crt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										20
									
								
								docker/testing/tls/config/nginx/certs/localhost.crt
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,20 @@ | |||
| -----BEGIN CERTIFICATE----- | ||||
| MIIDXDCCAkSgAwIBAgIJAJYb2nNBXHKCMA0GCSqGSIb3DQEBCwUAMEMxCzAJBgNV | ||||
| BAYTAkNIMQ8wDQYDVQQIDAZadXJpY2gxDzANBgNVBAcMBlp1cmljaDESMBAGA1UE | ||||
| AwwJbG9jYWxob3N0MB4XDTIwMDQzMDEzMDI0OVoXDTIxMDQzMDEzMDI0OVowQzEL | ||||
| MAkGA1UEBhMCQ0gxDzANBgNVBAgMBlp1cmljaDEPMA0GA1UEBwwGWnVyaWNoMRIw | ||||
| EAYDVQQDDAlsb2NhbGhvc3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB | ||||
| AQDLwuUqViIl8RtzQoYiZ6vHM49UlhgrD51sziO1PuDIfZo7R3M3NFuCmwsOlXoH | ||||
| vHagcFFpplG3br/akbMCiIbZaWCJiNluZy+b1eFNHmPo8KvCFhRZfAUtKbzku2zL | ||||
| 53O7/oMBUbhJILXC5is832K0qswh/QEmndySTO8sb4IZ3EZV4krQ7UlDgbvRruvL | ||||
| PrqEn25jiuhe5SnrkmI4rlaClvgOJ18qq+L4op90fd0W2V11WV9AJLk7boqVtCwT | ||||
| ee++SpVxS1W5EsCiZwKVrmrxUXPpC+Q67MNO+GJzW1xivcnz6fpOjoCRisudRtEb | ||||
| /GRO2jLVr3KvmyftJMk02d5xAgMBAAGjUzBRMB0GA1UdDgQWBBQQmfmkV++5QA0r | ||||
| uP7xbegL02qLkTAfBgNVHSMEGDAWgBQQmfmkV++5QA0ruP7xbegL02qLkTAPBgNV | ||||
| HRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4IBAQC5nt2yexZjt0yaociBiveF | ||||
| Y1ePyT3QVdDEzaAzMHNJxPA0DcsaJdViv/K8Ri9a7aZgjI7tGR93rTUSs8EgxoYQ | ||||
| ZUn6Av4xwTHIAoGbIS24pd6wljkehB6G4xGK4D8R51AHqHPwlV9pe/9FhqnIwagr | ||||
| RMXJurEiKf1EiX/4ryrs5hFzSauUGEhnq7HTGRygK1boN0LNqLx5G4vLtYzOCDuN | ||||
| GnshMJJvXkQe6Fre1rFnVoBtcbhoEqkp3LLr3eHSiAf7gy4iXjzhGCw/LX0pbEqr | ||||
| B0Zt+ouuTfga0Pvj3MNEWyI+3CWqXldB/RvonZxWXUhh6ONU2qzRYenewI8gDfIZ | ||||
| -----END CERTIFICATE----- | ||||
							
								
								
									
										28
									
								
								docker/testing/tls/config/nginx/certs/localhost.key
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								docker/testing/tls/config/nginx/certs/localhost.key
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,28 @@ | |||
| -----BEGIN PRIVATE KEY----- | ||||
| MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDLwuUqViIl8Rtz | ||||
| QoYiZ6vHM49UlhgrD51sziO1PuDIfZo7R3M3NFuCmwsOlXoHvHagcFFpplG3br/a | ||||
| kbMCiIbZaWCJiNluZy+b1eFNHmPo8KvCFhRZfAUtKbzku2zL53O7/oMBUbhJILXC | ||||
| 5is832K0qswh/QEmndySTO8sb4IZ3EZV4krQ7UlDgbvRruvLPrqEn25jiuhe5Snr | ||||
| kmI4rlaClvgOJ18qq+L4op90fd0W2V11WV9AJLk7boqVtCwTee++SpVxS1W5EsCi | ||||
| ZwKVrmrxUXPpC+Q67MNO+GJzW1xivcnz6fpOjoCRisudRtEb/GRO2jLVr3Kvmyft | ||||
| JMk02d5xAgMBAAECggEALXh7rXv1OORaTNlel5TtB5Ig/S5VjF56sgo6e7rhbLxi | ||||
| y7HBK2OavEWfLQz8Y3eSPXFzKZF9EOM9GyiCeyE+fov+iBKq+vE59ZvAIHaUsynq | ||||
| GnDU77c2bIKw7ZZJzCMFd8FvOL8k0eTjyu+UXIw5OboXvcn5FMYLr/ZNNWxY6y4P | ||||
| 33fR63HUAQOglxkvzqfCYcWqiBr3fowQcKfeVjSveeTMEHMDq/EWcq1+xmGRs037 | ||||
| cWfLw8A2Vo6lN4CSJvXMJXzNgd3uKG4EI+nTzrO7WaH6KpxIkGkD/u50J868tR+C | ||||
| TmQnQIvMkjGSiulGHHZhQ3v8zEXzSU3ramxnBM9O8QKBgQDszx7Z5Cioc1RK4dKt | ||||
| qLhvbQYXQC3XF0WWOjuG6NTxA/cKejQ9fpLzu0UnRYsUfsyiahtB+umGsWxO1yAp | ||||
| aVf25CYp2lTTvP3EDo9wzOfp9NBqiKSkTTmYvp7i9idGU4Tg8gYUQcG9F63L1M3X | ||||
| 6Xb8ZWylJoypegz2CeDWIh+RXQKBgQDcRikZYaGKsMgCxRVyxeHOFbml4Fk0wH+C | ||||
| YsrOHMV29Ck/8t/Ajy8+42TmnrmCFsTK4OVG9L87CF9TNxBU8WBAG2YqmiQbH49i | ||||
| UEaxBSfcmOqgPFGy62EQadUTn4f+HbZJKPyaeMhnKJseIIWy2i+a0Q6+0GX+Gke6 | ||||
| Qe6FWkeMJQKBgQDJ8ZcNmVRS0ob/lLRlA4zE+ORIz6JH2sCs69v3oHZ3UjpJ5QzH | ||||
| pDkNQJYod1WzlK5Nks7L5X1gL819Lldu+TbahJVG+7l7F6AQoZoRR6w+B1f0gbJl | ||||
| qrWDXIuCYQf9IRwf+ETW4XymFJtRR5iCl8WwV43fCJDLthl3d9UUxuTEwQKBgQDb | ||||
| dRNRdFHLqeE70TtTRA96kW6K8wAtbHQdZWwE+elKYGwQiFugr4c0sr0+f3j3QNQE | ||||
| BRipHwK/P9IpSDz/RBTPCf06CKRcWY8zNiOYDjjusXNg/XewOI5WGfruOAz3goaw | ||||
| USOKizeuf2g8Fc7eqD6xkgOM3HghN/GqgjGvroiF+QKBgQDQZRljdl/dTi5GijFb | ||||
| FJwDGEhTpDYEBKb9AwWa5xP0u7JoqCv+0eP8/9eLmjzgawKTjtPHVMaeBmzMeW4O | ||||
| E+x4114yQthVTs1e8TnoprkapEQNlvDGxJsYycJ4ADrrgOzA+HeddUj9GrWEfd8f | ||||
| t7TrY/khzS4yDWvTFYG5wag+5Q== | ||||
| -----END PRIVATE KEY----- | ||||
							
								
								
									
										73
									
								
								docker/testing/tls/config/spring/application-prod.properties
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										73
									
								
								docker/testing/tls/config/spring/application-prod.properties
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,73 @@ | |||
| ########################################################## | ||||
| ### Global Server Settings | ||||
| 
 | ||||
| # Server address (set for docker internal) | ||||
| server.address=0.0.0.0 | ||||
| # Server http port | ||||
| server.port=8080 | ||||
| # The servlet context path | ||||
| server.servlet.context-path=/ | ||||
| 
 | ||||
| # Logging | ||||
| # Default logging level in the form  "logging.level" + namespace=LEVEL  | ||||
| logging.level.ROOT=WARN | ||||
| logging.level.ch=INFO | ||||
| logging.file=/sebserver/log/sebserver.log | ||||
| 
 | ||||
| ########################################################## | ||||
| ### SEB Server Webservice configuration | ||||
| 
 | ||||
| sebserver.test.property=This is a basic bundled productive setup | ||||
| 
 | ||||
| # webservice database server connection | ||||
| datastore.mariadb.server.address=seb-server-mariadb | ||||
| datastore.mariadb.server.port=3306 | ||||
| 
 | ||||
| # data source configuration | ||||
| spring.datasource.hikari.initializationFailTimeout=30000 | ||||
| spring.datasource.hikari.connectionTimeout=30000 | ||||
| spring.datasource.hikari.idleTimeout=600000 | ||||
| spring.datasource.hikari.maxLifetime=1800000 | ||||
| 
 | ||||
| ### webservice networking | ||||
| sebserver.webservice.distributed=false | ||||
| sebserver.webservice.http.external.scheme=http | ||||
| sebserver.webservice.http.external.servername= | ||||
| sebserver.webservice.http.external.port= | ||||
| sebserver.webservice.http.redirect.gui=/gui | ||||
| 
 | ||||
| # webservice API | ||||
| sebserver.webservice.api.admin.endpoint=/admin-api/v1 | ||||
| sebserver.webservice.api.admin.accessTokenValiditySeconds=3600 | ||||
| sebserver.webservice.api.admin.refreshTokenValiditySeconds=25200 | ||||
| sebserver.webservice.api.exam.config.init.permittedProcesses=config/initialPermittedProcesses.xml | ||||
| sebserver.webservice.api.exam.config.init.prohibitedProcesses=config/initialProhibitedProcesses.xml | ||||
| sebserver.webservice.api.exam.endpoint=/exam-api | ||||
| sebserver.webservice.api.exam.endpoint.discovery=${sebserver.webservice.api.exam.endpoint}/discovery | ||||
| sebserver.webservice.api.exam.endpoint.v1=${sebserver.webservice.api.exam.endpoint}/v1 | ||||
| sebserver.webservice.api.exam.accessTokenValiditySeconds=3600 | ||||
| sebserver.webservice.api.exam.event-handling-strategy=ASYNC_BATCH_STORE_STRATEGY | ||||
| sebserver.webservice.api.exam.enable-indicator-cache=true | ||||
| sebserver.webservice.api.pagination.maxPageSize=500 | ||||
| # comma separated list of known possible OpenEdX API access token request endpoints | ||||
| sebserver.webservice.lms.openedx.api.token.request.paths=/oauth2/access_token | ||||
| 
 | ||||
| ########################################################## | ||||
| ### SEB Server GUI configuration | ||||
| sebserver.gui.external.messages=file:/sebserver/config/spring/messages | ||||
| sebserver.gui.multilingual=false | ||||
| sebserver.gui.supported.languages=en | ||||
| sebserver.gui.theme=css/sebserver.css | ||||
| sebserver.gui.list.page.size=20 | ||||
| sebserver.gui.date.displayformat=de | ||||
| 
 | ||||
| sebserver.gui.entrypoint=/gui | ||||
| sebserver.gui.webservice.protocol=http | ||||
| sebserver.gui.webservice.address=localhost | ||||
| sebserver.gui.webservice.port=8080 | ||||
| # defines the polling interval that is used to poll the webservice for client connection data on a monitored exam page | ||||
| sebserver.gui.webservice.poll-interval=1000 | ||||
| sebserver.gui.webservice.mock-lms-enabled=true | ||||
| 
 | ||||
| sebserver.gui.seb.client.config.download.filename=SEBServerSettings.seb | ||||
| sebserver.gui.seb.exam.config.download.filename=SEBExamSettings.seb | ||||
							
								
								
									
										6
									
								
								docker/testing/tls/config/spring/messages_en.properties
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										6
									
								
								docker/testing/tls/config/spring/messages_en.properties
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,6 @@ | |||
| sebserver.overall.imprint= | ||||
| sebserver.overall.imprint.markup= | ||||
| sebserver.overall.about=About | ||||
| sebserver.overall.about.markup=<span style='font-family: Arial, Helvetica,sans-serif;font-size: 25px;font-weight: normal;font-style: normal;color: rgb(31, 64, 122);'>SEB Server About Example</span><br/><br/><span style='font-family: Arial, Helvetica,sans-serif;font-size: 18px;font-weight: bold;font-style: normal;'>1. This is an example of how an About-Page can look like.</span><br/><br/><span style='font-family: Arial, Helvetica,sans-serif;font-size: 14px;font-weight: normal;font-style: normal;'>By simply define the markup HTML content within the messages.propertie configuration of specified language</span> | ||||
| sebserver.overall.help=Documentation | ||||
| sebserver.overall.help.link=https://seb-server.readthedocs.io/en/latest/index.html | ||||
							
								
								
									
										74
									
								
								docker/testing/tls/docker-compose.yml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										74
									
								
								docker/testing/tls/docker-compose.yml
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,74 @@ | |||
| version: '3' | ||||
| services: | ||||
|   seb-server-setup: | ||||
|     build: | ||||
|         context: . | ||||
|         dockerfile: setup.Dockerfile | ||||
|     container_name: seb-server-setup | ||||
|     volumes: | ||||
|         - seb-server-config:/config | ||||
|         - ./config:/host/config | ||||
| 
 | ||||
|   mariadb:  | ||||
|     image: "mariadb/server:10.3" | ||||
|     container_name: seb-server-mariadb | ||||
|     environment: | ||||
|         - MYSQL_ROOT_PASSWORD_FILE=/etc/mysql/conf.d/secret | ||||
|     ports: | ||||
|         - 3306:3306 | ||||
|     volumes: | ||||
|         - seb-server-config:/etc/mysql/conf.d | ||||
|         - seb-server-mariadb:/var/lib/mysql | ||||
|         - ./config/mariadb/config.cnf:/etc/mysql/conf.d/config.cnf | ||||
|     networks: | ||||
|         - seb-server-network | ||||
|     restart: unless-stopped | ||||
| 
 | ||||
|   seb-server: | ||||
|       build: | ||||
|           context: . | ||||
|           dockerfile: sebserver.Dockerfile | ||||
|           args: | ||||
|               - SEBSERVER_VERSION=1.0-latest | ||||
|       container_name: seb-server | ||||
|       volumes: | ||||
|         - seb-server-config:/sebserver/config | ||||
|         - ./config/spring:/sebserver/config/spring | ||||
|         - seb-server-logs:/sebserver/log | ||||
|       environment: | ||||
|         - JMX_PORT=9090 | ||||
|       ports: | ||||
|         - 9090:9090 | ||||
|       logging: | ||||
|         driver: "json-file" | ||||
|         options: | ||||
|             max-size: "200k" | ||||
|             max-file: "10" | ||||
|       networks: | ||||
|           - seb-server-network | ||||
|       depends_on: | ||||
|           - "mariadb" | ||||
|           - "seb-server-setup" | ||||
| 
 | ||||
|   reverse-proxy: | ||||
|     image: "nginx:latest" | ||||
|     container_name: seb-server-proxy | ||||
|     volumes: | ||||
|       - ./config/nginx:/etc/nginx/conf.d | ||||
|       - ./config/nginx/certs:/sebserver/config/certs | ||||
|     ports: | ||||
|       - 443:443 | ||||
|     networks: | ||||
|       - seb-server-network | ||||
|     depends_on: | ||||
|       - "mariadb" | ||||
|       - "seb-server" | ||||
|       - "seb-server-setup" | ||||
| 
 | ||||
| networks: | ||||
|   seb-server-network: | ||||
| 
 | ||||
| volumes: | ||||
|   seb-server-config: | ||||
|   seb-server-mariadb: | ||||
|   seb-server-logs: | ||||
							
								
								
									
										61
									
								
								docker/testing/tls/sebserver.Dockerfile
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										61
									
								
								docker/testing/tls/sebserver.Dockerfile
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,61 @@ | |||
| # Clone git repository form specified tag | ||||
| FROM alpine/git | ||||
| 
 | ||||
| ARG SEBSERVER_VERSION | ||||
| ARG GIT_TAG="v${SEBSERVER_VERSION}" | ||||
| 
 | ||||
| WORKDIR /sebserver | ||||
| RUN if [ "x${GIT_TAG}" = "x" ] ; \ | ||||
|     then git clone --depth 1 https://github.com/SafeExamBrowser/seb-server.git ; \ | ||||
|     else git clone -b "$GIT_TAG" --depth 1 https://github.com/SafeExamBrowser/seb-server.git ; fi | ||||
| 
 | ||||
| # Build with maven (skip tests) | ||||
| FROM maven:latest | ||||
| 
 | ||||
| ARG SEBSERVER_VERSION | ||||
| 
 | ||||
| WORKDIR /sebserver | ||||
| COPY --from=0 /sebserver/seb-server /sebserver | ||||
| RUN mvn clean install -DskipTests | ||||
| 
 | ||||
| FROM openjdk:11-jre-stretch | ||||
| 
 | ||||
| ARG SEBSERVER_VERSION | ||||
| ENV SEBSERVER_JAR="seb-server-${SEBSERVER_VERSION}.jar" | ||||
| ENV SERVER_PORT="8080" | ||||
| ENV JMX_PORT= | ||||
| 
 | ||||
| WORKDIR /sebserver | ||||
| COPY --from=1 /sebserver/target/"$SEBSERVER_JAR" /sebserver | ||||
| 
 | ||||
| CMD if [ "x${JMX_PORT}" = "x" ] ; \ | ||||
|         then secret=$(cat /sebserver/config/secret) && exec java \ | ||||
|             -Xms64M \ | ||||
|             -Xmx1G \ | ||||
|             -jar "${SEBSERVER_JAR}" \ | ||||
|             --spring.profiles.active=prod,prod-gui,prod-ws \ | ||||
|             --spring.config.location=file:/sebserver/config/spring/,classpath:/config/ \ | ||||
|             --sebserver.certs.password="${secret}" \  | ||||
|             --sebserver.mariadb.password="${secret}" \ | ||||
|             --sebserver.password="${secret}" ; \ | ||||
|         else secret=$(cat /sebserver/config/secret) && exec java \ | ||||
|             -Xms64M \ | ||||
|             -Xmx1G \ | ||||
|             -Dcom.sun.management.jmxremote \ | ||||
|             -Dcom.sun.management.jmxremote.port=${JMX_PORT} \ | ||||
|             -Dcom.sun.management.jmxremote.rmi.port=${JMX_PORT} \ | ||||
|             -Djava.rmi.server.hostname=localhost \ | ||||
|             -Dcom.sun.management.jmxremote.local.only=false \ | ||||
|             -Dcom.sun.management.jmxremote.ssl=false \ | ||||
|             -Dcom.sun.management.jmxremote.authenticate=true \ | ||||
|             -Dcom.sun.management.jmxremote.password.file=/sebserver/config/jmx/jmxremote.password \ | ||||
|             -Dcom.sun.management.jmxremote.access.file=/sebserver/config/jmx/jmxremote.access \ | ||||
|             -jar "${SEBSERVER_JAR}" \ | ||||
|             --spring.profiles.active=prod,prod-gui,prod-ws \ | ||||
|             --spring.config.location=file:/sebserver/config/spring/,classpath:/config/ \ | ||||
|             --sebserver.certs.password="${secret}" \  | ||||
|             --sebserver.mariadb.password="${secret}" \ | ||||
|             --sebserver.password="${secret}" ; \ | ||||
|         fi | ||||
| 
 | ||||
| EXPOSE $SERVER_PORT $JMX_PORT | ||||
							
								
								
									
										7
									
								
								docker/testing/tls/setup.Dockerfile
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										7
									
								
								docker/testing/tls/setup.Dockerfile
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,7 @@ | |||
| FROM alpine:latest | ||||
| 
 | ||||
| CMD cp -a /host/config/. /config/ \ | ||||
|     && secret=$(cat /config/secret) \ | ||||
|     && rm /host/config/secret \ | ||||
|     && printf "monitorRoleUser  ${secret}\ncontrolRoleUser  ${secret}" > /config/jmxremote.password \ | ||||
|     && chmod 700 /config/jmxremote.password | ||||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 Bengt Giger
						Bengt Giger