Moved production setup to manage service.

This commit is contained in:
Norman Jäckel 2021-07-09 15:36:15 +02:00
parent 6192e2347c
commit de2d5eb030
5 changed files with 666 additions and 1257 deletions

View File

@ -45,7 +45,7 @@ Setup initial-data:
$ ./manage initial-data $ ./manage initial-data
Now you can open http://localhost:8000 and use OpenSlides. Now you can open https://localhost:8000 and use OpenSlides. # TODO: Enable HTTPS support
To stop OpenSlides run: To stop OpenSlides run:

View File

@ -1,270 +0,0 @@
dnl This is a YAML template file. Simply translate it with m4 to create
dnl a standard configuration. Customizations can and should be added in .env
dnl by setting the appropriate variables.
dnl
dnl Usage:
dnl m4 docker-compose.yml.m4 > docker-compose.yml
dnl ( set -a; source .env; m4 docker-compose.yml.m4 ) > docker-compose.yml
dnl
dnl ----------------------------------------
divert(-1)dnl
define(`read_env', `esyscmd(`printf "%s" "$$1"')')
define(`ifenvelse', `ifelse(read_env(`$1'),, `$2', read_env(`$1'))')
define(`BACKEND_IMAGE',
ifenvelse(`DEFAULT_DOCKER_REGISTRY', openslides)/dnl
ifenvelse(`DOCKER_OPENSLIDES_BACKEND_NAME', openslides-backend):dnl
ifenvelse(`DOCKER_OPENSLIDES_BACKEND_TAG', latest-4))
define(`PROXY_IMAGE',
ifenvelse(`DEFAULT_DOCKER_REGISTRY', openslides)/dnl
ifenvelse(`DOCKER_OPENSLIDES_PROXY_NAME', openslides-proxy):dnl
ifenvelse(`DOCKER_OPENSLIDES_PROXY_TAG', latest-4))
define(`CLIENT_IMAGE',
ifenvelse(`DEFAULT_DOCKER_REGISTRY', openslides)/dnl
ifenvelse(`DOCKER_OPENSLIDES_CLIENT_NAME', openslides-client):dnl
ifenvelse(`DOCKER_OPENSLIDES_CLIENT_TAG', latest-4))
define(`AUTH_IMAGE',
ifenvelse(`DEFAULT_DOCKER_REGISTRY', openslides)/dnl
ifenvelse(`DOCKER_OPENSLIDES_AUTH_NAME', openslides-auth):dnl
ifenvelse(`DOCKER_OPENSLIDES_AUTH_TAG', latest-4))
define(`AUTOUPDATE_IMAGE',
ifenvelse(`DEFAULT_DOCKER_REGISTRY', openslides)/dnl
ifenvelse(`DOCKER_OPENSLIDES_AUTOUPDATE_NAME', openslides-autoupdate):dnl
ifenvelse(`DOCKER_OPENSLIDES_AUTOUPDATE_TAG', latest-4))
define(`ICC_IMAGE',
ifenvelse(`DEFAULT_DOCKER_REGISTRY', openslides)/dnl
ifenvelse(`DOCKER_OPENSLIDES_ICC_NAME', openslides-icc):dnl
ifenvelse(`DOCKER_OPENSLIDES_ICC_TAG', latest-4))
define(`DATASTORE_READER_IMAGE',
ifenvelse(`DEFAULT_DOCKER_REGISTRY', openslides)/dnl
ifenvelse(`DOCKER_OPENSLIDES_DATASTORE_READER_NAME', openslides-datastore-reader):dnl
ifenvelse(`DOCKER_OPENSLIDES_DATASTORE_READER_TAG', latest-4))
define(`DATASTORE_WRITER_IMAGE',
ifenvelse(`DEFAULT_DOCKER_REGISTRY', openslides)/dnl
ifenvelse(`DOCKER_OPENSLIDES_DATASTORE_WRITER_NAME', openslides-datastore-writer):dnl
ifenvelse(`DOCKER_OPENSLIDES_DATASTORE_WRITER_TAG', latest-4))
define(`MEDIA_IMAGE',
ifenvelse(`DEFAULT_DOCKER_REGISTRY', openslides)/dnl
ifenvelse(`DOCKER_OPENSLIDES_MEDIA_NAME', openslides-media):dnl
ifenvelse(`DOCKER_OPENSLIDES_MEDIA_TAG', latest-4))
define(`MANAGE_IMAGE',
ifenvelse(`DEFAULT_DOCKER_REGISTRY', openslides)/dnl
ifenvelse(`DOCKER_OPENSLIDES_MANAGE_NAME', openslides-manage):dnl
ifenvelse(`DOCKER_OPENSLIDES_MANAGE_TAG', latest-4))
define(`PERMISSION_IMAGE',
ifenvelse(`DEFAULT_DOCKER_REGISTRY', openslides)/dnl
ifenvelse(`DOCKER_OPENSLIDES_PERMISSION_NAME', openslides-permission):dnl
ifenvelse(`DOCKER_OPENSLIDES_PERMISSION_TAG', latest-4))
define(`PROJECT_DIR', ifdef(`PROJECT_DIR',PROJECT_DIR,.))
define(`ADMIN_SECRET_AVAILABLE', `syscmd(`test -f 'PROJECT_DIR`/secrets/admin.env')sysval')
divert(0)dnl
dnl ----------------------------------------
# This configuration was created from a template file. Before making changes,
# please make sure that you do not have a process in place that would override
# your changes in the future. The accompanying .env file might be the correct
# place for customizations instead.
version: '3.4'
services:
proxy:
image: PROXY_IMAGE
depends_on:
- client
- backend
- autoupdate
- auth
- media
networks:
- uplink
- frontend
ports:
- "127.0.0.1:ifenvelse(`EXTERNAL_HTTP_PORT', 8000):8000"
client:
image: CLIENT_IMAGE
networks:
- frontend
depends_on:
- backend
- autoupdate
backend:
image: BACKEND_IMAGE
depends_on:
- datastore-reader
- datastore-writer
env_file: services.env
networks:
- frontend
- backend
secrets:
- auth_token_key
- auth_cookie_key
datastore-reader:
image: DATASTORE_READER_IMAGE
depends_on:
- postgres
env_file: services.env
environment:
- NUM_WORKERS=8
networks:
- backend
- datastore-reader
- postgres
datastore-writer:
image: DATASTORE_WRITER_IMAGE
depends_on:
- postgres
- message-bus
env_file: services.env
networks:
- backend
- postgres
- message-bus
environment:
- COMMAND=create_initial_data
- DATASTORE_INITIAL_DATA_FILE=/data/initial-data.json
volumes:
- ./initial-data.json:/data/initial-data.json
postgres:
image: postgres:11
environment:
- POSTGRES_USER=openslides
- POSTGRES_PASSWORD=openslides
- POSTGRES_DB=openslides
networks:
- postgres
autoupdate:
image: AUTOUPDATE_IMAGE
depends_on:
- datastore-reader
- message-bus
- auth
env_file: services.env
networks:
- frontend
- backend
- message-bus
secrets:
- auth_token_key
- auth_cookie_key
icc:
image: ICC_IMAGE
depends_on:
- datastore-reader
- message-bus
- auth
enc_file: services.env
networks:
- frontend
- backend
- message-bus
secrets:
- auth_token_key
- auth_cookie_key
auth:
image: AUTH_IMAGE
depends_on:
- datastore-reader
- message-bus
- cache
env_file: services.env
networks:
- datastore-reader
- frontend
- message-bus
- auth
secrets:
- auth_token_key
- auth_cookie_key
cache:
image: redis:latest
networks:
- auth
message-bus:
image: redis:latest
networks:
- message-bus
media:
image: MEDIA_IMAGE
depends_on:
- backend
- postgres
env_file: services.env
networks:
- frontend
- backend
- postgres
manage:
image: MANAGE_IMAGE
depends_on:
- auth
- datastore-writer
env_file: services.env
networks:
- backend
- auth
# TODO: Remove depenencies to auth and datastore in "depends_on" and "networks"
# Should be doable when the manage service is fixed
manage-setup:
image: MANAGE_IMAGE
entrypoint: /root/entrypoint-setup
depends_on:
- manage
- auth
- datastore-writer
- datastore-reader
env_file: services.env
environment:
ENABLE_ELECTRONIC_VOTING: "ifenvelse(`ENABLE_ELECTRONIC_VOTING',)"
networks:
- backend
- auth
ifelse(ADMIN_SECRET_AVAILABLE, 0,secrets:
- admin)
permission:
image: PERMISSION_IMAGE
depends_on:
- datastore-reader
env_file: services.env
networks:
- backend
- auth
# Setup: host <-uplink-> proxy <-frontend-> services that are reachable from the client <-backend-> services that are internal-only
# There are special networks for some services only, e.g. postgres only for the postgresql, datastore reader and datastore writer
networks:
uplink:
frontend:
internal: true
backend:
internal: true
postgres:
internal: true
datastore-reader:
internal: true
message-bus:
internal: true
auth:
internal: true
secrets:
auth_token_key:
file: ./secrets/auth_token_key
auth_cookie_key:
file: ./secrets/auth_cookie_key
ifelse(ADMIN_SECRET_AVAILABLE, 0,admin:
file: ./secrets/admin.env)

View File

@ -1,308 +0,0 @@
dnl This is a YAML template file. Simply translate it with m4 to create
dnl a standard configuration. Customizations can and should be added in .env
dnl by setting the appropriate variables.
dnl
dnl Usage:
dnl m4 docker-stack.yml.m4 > docker-stack.yml
dnl ( set -a; source .env; m4 docker-stack.yml.m4 ) > docker-stack.yml
dnl
dnl ----------------------------------------
divert(-1)dnl
define(`read_env', `esyscmd(`printf "%s" "$$1"')')
define(`ifenvelse', `ifelse(read_env(`$1'),, `$2', read_env(`$1'))')
define(`BACKEND_IMAGE',
ifenvelse(`DEFAULT_DOCKER_REGISTRY', openslides)/dnl
ifenvelse(`DOCKER_OPENSLIDES_BACKEND_NAME', openslides-backend):dnl
ifenvelse(`DOCKER_OPENSLIDES_BACKEND_TAG', latest-4))
define(`PROXY_IMAGE',
ifenvelse(`DEFAULT_DOCKER_REGISTRY', openslides)/dnl
ifenvelse(`DOCKER_OPENSLIDES_PROXY_NAME', openslides-proxy):dnl
ifenvelse(`DOCKER_OPENSLIDES_PROXY_TAG', latest-4))
define(`CLIENT_IMAGE',
ifenvelse(`DEFAULT_DOCKER_REGISTRY', openslides)/dnl
ifenvelse(`DOCKER_OPENSLIDES_CLIENT_NAME', openslides-client):dnl
ifenvelse(`DOCKER_OPENSLIDES_CLIENT_TAG', latest-4))
define(`AUTH_IMAGE',
ifenvelse(`DEFAULT_DOCKER_REGISTRY', openslides)/dnl
ifenvelse(`DOCKER_OPENSLIDES_AUTH_NAME', openslides-auth):dnl
ifenvelse(`DOCKER_OPENSLIDES_AUTH_TAG', latest-4))
define(`AUTOUPDATE_IMAGE',
ifenvelse(`DEFAULT_DOCKER_REGISTRY', openslides)/dnl
ifenvelse(`DOCKER_OPENSLIDES_AUTOUPDATE_NAME', openslides-autoupdate):dnl
ifenvelse(`DOCKER_OPENSLIDES_AUTOUPDATE_TAG', latest-4))
define(`ICC_IMAGE',
ifenvelse(`DEFAULT_DOCKER_REGISTRY', openslides)/dnl
ifenvelse(`DOCKER_OPENSLIDES_ICC_NAME', openslides-icc):dnl
ifenvelse(`DOCKER_OPENSLIDES_ICC_TAG', latest-4))
define(`DATASTORE_READER_IMAGE',
ifenvelse(`DEFAULT_DOCKER_REGISTRY', openslides)/dnl
ifenvelse(`DOCKER_OPENSLIDES_DATASTORE_READER_NAME', openslides-datastore-reader):dnl
ifenvelse(`DOCKER_OPENSLIDES_DATASTORE_READER_TAG', latest-4))
define(`DATASTORE_WRITER_IMAGE',
ifenvelse(`DEFAULT_DOCKER_REGISTRY', openslides)/dnl
ifenvelse(`DOCKER_OPENSLIDES_DATASTORE_WRITER_NAME', openslides-datastore-writer):dnl
ifenvelse(`DOCKER_OPENSLIDES_DATASTORE_WRITER_TAG', latest-4))
define(`MEDIA_IMAGE',
ifenvelse(`DEFAULT_DOCKER_REGISTRY', openslides)/dnl
ifenvelse(`DOCKER_OPENSLIDES_MEDIA_NAME', openslides-media):dnl
ifenvelse(`DOCKER_OPENSLIDES_MEDIA_TAG', latest-4))
define(`MANAGE_IMAGE',
ifenvelse(`DEFAULT_DOCKER_REGISTRY', openslides)/dnl
ifenvelse(`DOCKER_OPENSLIDES_MANAGE_NAME', openslides-manage):dnl
ifenvelse(`DOCKER_OPENSLIDES_MANAGE_TAG', latest-4))
define(`PERMISSION_IMAGE',
ifenvelse(`DEFAULT_DOCKER_REGISTRY', openslides)/dnl
ifenvelse(`DOCKER_OPENSLIDES_PERMISSION_NAME', openslides-permission):dnl
ifenvelse(`DOCKER_OPENSLIDES_PERMISSION_TAG', latest-4))
define(`PROJECT_DIR', ifdef(`PROJECT_DIR',PROJECT_DIR,.))
define(`ADMIN_SECRET_AVAILABLE', `syscmd(`test -f 'PROJECT_DIR`/secrets/admin.env')sysval')
divert(0)dnl
dnl ----------------------------------------
# This configuration was created from a template file. Before making changes,
# please make sure that you do not have a process in place that would override
# your changes in the future. The accompanying .env file might be the correct
# place for customizations instead.
version: '3.4'
services:
proxy:
image: PROXY_IMAGE
networks:
- uplink
- frontend
ports:
- "127.0.0.1:ifenvelse(`EXTERNAL_HTTP_PORT', 8000):8000"
deploy:
restart_policy:
condition: on-failure
delay: 5s
replicas: ifenvelse(`OPENSLIDES_PROXY_REPLICAS', 1)
client:
image: CLIENT_IMAGE
networks:
- frontend
deploy:
restart_policy:
condition: on-failure
delay: 5s
replicas: ifenvelse(`OPENSLIDES_CLIENT_REPLICAS', 1)
backend:
image: BACKEND_IMAGE
env_file: services.env
networks:
- frontend
- backend
deploy:
restart_policy:
condition: on-failure
delay: 5s
replicas: ifenvelse(`OPENSLIDES_BACKEND_REPLICAS', 1)
secrets:
- auth_token_key
- auth_cookie_key
datastore-reader:
image: DATASTORE_READER_IMAGE
env_file: services.env
environment:
- NUM_WORKERS=8
networks:
- backend
- datastore-reader
- postgres
deploy:
restart_policy:
condition: on-failure
delay: 5s
replicas: ifenvelse(`OPENSLIDES_DATASTORE_READER_REPLICAS', 1)
datastore-writer:
image: DATASTORE_WRITER_IMAGE
env_file: services.env
networks:
- backend
- postgres
- message-bus
environment:
- COMMAND=create_initial_data
- DATASTORE_INITIAL_DATA_FILE=/data/initial-data.json
volumes:
- ./initial-data.json:/data/initial-data.json
deploy:
restart_policy:
condition: on-failure
delay: 5s
postgres:
image: postgres:11
environment:
- POSTGRES_USER=openslides
- POSTGRES_PASSWORD=openslides
- POSTGRES_DB=openslides
networks:
- postgres
deploy:
restart_policy:
condition: on-failure
delay: 5s
autoupdate:
image: AUTOUPDATE_IMAGE
env_file: services.env
networks:
- frontend
- backend
- message-bus
deploy:
restart_policy:
condition: on-failure
delay: 5s
replicas: ifenvelse(`OPENSLIDES_AUTOUPDATE_REPLICAS', 1)
secrets:
- auth_token_key
- auth_cookie_key
icc:
image: ICC_IMAGE
enc_file: services.env
networks:
- frontend
- backend
- message-bus
deploy:
restart_policy:
condition: on-failure
delay: 5s
replicas: ifenvelse(`OPENSLIDES_ICC_REPLICAS', 1)
secrets:
- auth_token_key
- auth_cookie_key
auth:
image: AUTH_IMAGE
env_file: services.env
networks:
- datastore-reader
- frontend
- message-bus
- auth
deploy:
restart_policy:
condition: on-failure
delay: 5s
replicas: ifenvelse(`OPENSLIDES_AUTH_REPLICAS', 1)
secrets:
- auth_token_key
- auth_cookie_key
cache:
image: redis:latest
networks:
- auth
deploy:
restart_policy:
condition: on-failure
delay: 5s
message-bus:
image: redis:latest
networks:
- message-bus
deploy:
restart_policy:
condition: on-failure
delay: 5s
media:
image: MEDIA_IMAGE
env_file: services.env
networks:
- frontend
- backend
- postgres
deploy:
restart_policy:
condition: on-failure
delay: 5s
replicas: ifenvelse(`OPENSLIDES_MEDIA_REPLICAS', 1)
manage:
image: MANAGE_IMAGE
env_file: services.env
networks:
- backend
- auth
deploy:
restart_policy:
condition: on-failure
delay: 5s
# TODO: Remove depenency to auth in "networks"
# Should be doable when the manage service is fixed
manage-setup:
image: MANAGE_IMAGE
entrypoint: /root/entrypoint-setup
env_file: services.env
environment:
ENABLE_ELECTRONIC_VOTING: "ifenvelse(`ENABLE_ELECTRONIC_VOTING',)"
networks:
- backend
- auth
ifelse(ADMIN_SECRET_AVAILABLE, 0,secrets:
- admin)
deploy:
restart_policy:
condition: on-failure
delay: 5s
permission:
image: PERMISSION_IMAGE
env_file: services.env
networks:
- backend
- auth
deploy:
restart_policy:
condition: on-failure
delay: 5s
replicas: ifenvelse(`OPENSLIDES_PERMISSION_REPLICAS', 1)
networks:
uplink:
frontend:
driver_opts:
encrypted: ""
internal: true
backend:
driver_opts:
encrypted: ""
internal: true
postgres:
driver_opts:
encrypted: ""
internal: true
datastore-reader:
driver_opts:
encrypted: ""
internal: true
message-bus:
driver_opts:
encrypted: ""
internal: true
auth:
driver_opts:
encrypted: ""
internal: true
secrets:
auth_token_key:
file: ./secrets/auth_token_key
auth_cookie_key:
file: ./secrets/auth_cookie_key
ifelse(ADMIN_SECRET_AVAILABLE, 0,admin:
file: ./secrets/admin.env)

View File

@ -1,32 +1,34 @@
{ {
"_migration_index": -1, "_migration_index": -1,
"organization": [ "organization": [
{ {
"id": 1, "id": 1,
"name": "OpenSlides", "name": "[Your organization]",
"description": "The digital motion and assembly system", "description": "",
"legal_notice": "<a href=\"http://www.openslides.org\">OpenSlides</a> is a free web based presentation and assembly system for visualizing and controlling agenda, motions and elections of an assembly.", "legal_notice": "<a href=\"http://www.openslides.org\">OpenSlides</a> is a free web based presentation and assembly system for visualizing and controlling agenda, motions and elections of an assembly. The event organizer is resposible for the content.",
"privacy_policy": "", "privacy_policy": "",
"login_text": "Welcome to OpenSlides. Please login.", "login_text": "Welcome to OpenSlides. Please login.",
"theme": "openslides-theme", "theme": "openslides-default-light-theme",
"reset_password_verbose_errors": false, "reset_password_verbose_errors": false,
"enable_electronic_voting": false, "enable_electronic_voting": false,
"committee_ids": [
"committee_ids": [1], 1
],
"resource_ids": [], "resource_ids": [],
"organization_tag_ids": [] "organization_tag_ids": []
}], }
"user": [ ],
"user": [
{ {
"id": 1, "id": 1,
"username": "admin", "username": "superadmin",
"title": "", "title": "",
"first_name": "", "first_name": "",
"last_name": "Administrator", "last_name": "Administrator",
"is_active": true, "is_active": true,
"is_physical_person": true, "is_physical_person": true,
"password": "1422e767c5e08bb7196844025a0f98e1x61Ey612Kl2gpFL56FT9weDnpSo4AV8j8+qx2AuTHdRyY036xxzTTrw10Wq3+4qQyB+XURPWx1ONxp3Y3pB37A==", "password": "",
"default_password": "admin", "default_password": "",
"can_change_own_password": true, "can_change_own_password": true,
"gender": null, "gender": null,
"email": "", "email": "",
@ -35,22 +37,16 @@
"default_vote_weight": "1.000000", "default_vote_weight": "1.000000",
"last_email_send": null, "last_email_send": null,
"is_demo_user": false, "is_demo_user": false,
"organization_management_level": "superadmin", "organization_management_level": "superadmin",
"is_present_in_meeting_ids": [], "is_present_in_meeting_ids": [],
"committee_ids": [1], "committee_ids": [],
"committee_$_management_level": ["1"], "committee_$_management_level": [],
"committee_$1_management_level": "can_manage",
"comment_$": [], "comment_$": [],
"number_$": [], "number_$": [],
"structure_level_$": [], "structure_level_$": [],
"about_me_$": [], "about_me_$": [],
"vote_weight_$": [], "vote_weight_$": [],
"group_$_ids": [],
"group_$_ids": ["1"],
"group_$1_ids": [2],
"speaker_$_ids": [], "speaker_$_ids": [],
"personal_note_$_ids": [], "personal_note_$_ids": [],
"supported_motion_$_ids": [], "supported_motion_$_ids": [],
@ -63,49 +59,47 @@
"projection_$_ids": [], "projection_$_ids": [],
"vote_delegated_$_to_id": [], "vote_delegated_$_to_id": [],
"vote_delegations_$_from_ids": [], "vote_delegations_$_from_ids": [],
"meeting_ids": []
"meeting_ids": [1] }
}], ],
"resource": [], "resource": [],
"organization_tag": [], "organization_tag": [],
"committee": [ "committee": [
{ {
"id": 1, "id": 1,
"name": "Default committee", "name": "Default committee",
"description": "Add description here", "description": "",
"meeting_ids": [
"meeting_ids": [1], 1
],
"template_meeting_id": null, "template_meeting_id": null,
"default_meeting_id": 1, "default_meeting_id": 1,
"user_ids": [1], "user_ids": [],
"forward_to_committee_ids": [], "forward_to_committee_ids": [],
"receive_forwardings_from_committee_ids": [], "receive_forwardings_from_committee_ids": [],
"organization_tag_ids": [], "organization_tag_ids": [],
"organization_id": 1 "organization_id": 1
}], }
"meeting": [ ],
"meeting": [
{ {
"id": 1, "id": 1,
"welcome_title": "Welcome to OpenSlides", "welcome_title": "Welcome to OpenSlides",
"welcome_text": "[Space for your welcome text.]", "welcome_text": "[Space for your welcome text]",
"name": "Default meeting",
"name": "OpenSlides - Die Veranstaltung (Teil II)", "description": "",
"description": "Presentation and assembly system",
"location": "", "location": "",
"start_time": 0, "start_time": 0,
"end_time": 0, "end_time": 0,
"imported_at": null, "imported_at": null,
"jitsi_domain": "", "jitsi_domain": "",
"jitsi_room_name": "", "jitsi_room_name": "",
"jitsi_room_password": "", "jitsi_room_password": "",
"enable_chat": false, "enable_chat": false,
"url_name": "",
"url_name": "openslides_1",
"template_for_committee_id": null, "template_for_committee_id": null,
"enable_anonymous": false, "enable_anonymous": false,
"custom_translations": {}, "custom_translations": {},
"conference_show": false, "conference_show": false,
"conference_auto_connect": false, "conference_auto_connect": false,
"conference_los_restriction": false, "conference_los_restriction": false,
@ -122,16 +116,13 @@
"applause_max_amount": 0, "applause_max_amount": 0,
"applause_timeout": 5, "applause_timeout": 5,
"applause_particle_image_url": "", "applause_particle_image_url": "",
"projector_countdown_default_time": 60, "projector_countdown_default_time": 60,
"projector_countdown_warning_time": 0, "projector_countdown_warning_time": 0,
"export_csv_encoding": "utf-8", "export_csv_encoding": "utf-8",
"export_csv_separator": ",", "export_csv_separator": ",",
"export_pdf_pagenumber_alignment": "center", "export_pdf_pagenumber_alignment": "center",
"export_pdf_fontsize": 10, "export_pdf_fontsize": 10,
"export_pdf_pagesize": "A4", "export_pdf_pagesize": "A4",
"agenda_show_subtitles": false, "agenda_show_subtitles": false,
"agenda_enable_numbering": true, "agenda_enable_numbering": true,
"agenda_number_prefix": "", "agenda_number_prefix": "",
@ -139,7 +130,6 @@
"agenda_item_creation": "default_yes", "agenda_item_creation": "default_yes",
"agenda_new_items_default_visibility": "internal", "agenda_new_items_default_visibility": "internal",
"agenda_show_internal_items_on_projector": false, "agenda_show_internal_items_on_projector": false,
"list_of_speakers_amount_last_on_projector": 1, "list_of_speakers_amount_last_on_projector": 1,
"list_of_speakers_amount_next_on_projector": -1, "list_of_speakers_amount_next_on_projector": -1,
"list_of_speakers_couple_countdown": true, "list_of_speakers_couple_countdown": true,
@ -151,7 +141,6 @@
"list_of_speakers_can_set_contribution_self": false, "list_of_speakers_can_set_contribution_self": false,
"list_of_speakers_speaker_note_for_everyone": false, "list_of_speakers_speaker_note_for_everyone": false,
"list_of_speakers_initially_closed": false, "list_of_speakers_initially_closed": false,
"motions_default_workflow_id": 1, "motions_default_workflow_id": 1,
"motions_default_amendment_workflow_id": 1, "motions_default_amendment_workflow_id": 1,
"motions_default_statute_amendment_workflow_id": 1, "motions_default_statute_amendment_workflow_id": 1,
@ -184,20 +173,20 @@
"motions_export_preamble": "", "motions_export_preamble": "",
"motions_export_submitter_recommendation": false, "motions_export_submitter_recommendation": false,
"motions_export_follow_recommendation": false, "motions_export_follow_recommendation": false,
"motion_poll_ballot_paper_selection": "CUSTOM_NUMBER", "motion_poll_ballot_paper_selection": "CUSTOM_NUMBER",
"motion_poll_ballot_paper_number": 8, "motion_poll_ballot_paper_number": 8,
"motion_poll_default_type": "analog", "motion_poll_default_type": "analog",
"motion_poll_default_100_percent_base": "YNA", "motion_poll_default_100_percent_base": "YNA",
"motion_poll_default_group_ids": [5], "motion_poll_default_group_ids": [
3
],
"users_sort_by": "first_name", "users_sort_by": "first_name",
"users_enable_presence_view": true, "users_enable_presence_view": true,
"users_enable_vote_weight": true, "users_enable_vote_weight": true,
"users_allow_self_set_present": true, "users_allow_self_set_present": true,
"users_pdf_welcometitle": "Welcome to OpenSlides", "users_pdf_welcometitle": "Welcome to OpenSlides",
"users_pdf_welcometext": "[Place for your welcome and help text.]", "users_pdf_welcometext": "[Place for your welcome and help text]",
"users_pdf_url": "http://example.com:8000", "users_pdf_url": "https://example.com",
"users_pdf_wlan_ssid": "", "users_pdf_wlan_ssid": "",
"users_pdf_wlan_password": "", "users_pdf_wlan_password": "",
"users_pdf_wlan_encryption": "", "users_pdf_wlan_encryption": "",
@ -205,7 +194,6 @@
"users_email_replyto": "", "users_email_replyto": "",
"users_email_subject": "Your login for {event_name}", "users_email_subject": "Your login for {event_name}",
"users_email_body": "Dear {name},\n\nthis is your OpenSlides login for the event {event_name}:\n\n {url}\n username: {username}\n password: {password}\n\nThis email was generated automatically.", "users_email_body": "Dear {name},\n\nthis is your OpenSlides login for the event {event_name}:\n\n {url}\n username: {username}\n password: {password}\n\nThis email was generated automatically.",
"assignment_poll_ballot_paper_selection": "CUSTOM_NUMBER", "assignment_poll_ballot_paper_selection": "CUSTOM_NUMBER",
"assignment_poll_ballot_paper_number": 8, "assignment_poll_ballot_paper_number": 8,
"assignments_export_title": "Elections", "assignments_export_title": "Elections",
@ -215,38 +203,57 @@
"assignment_poll_default_type": "nominal", "assignment_poll_default_type": "nominal",
"assignment_poll_default_method": "votes", "assignment_poll_default_method": "votes",
"assignment_poll_default_100_percent_base": "valid", "assignment_poll_default_100_percent_base": "valid",
"assignment_poll_default_group_ids": [5], "assignment_poll_default_group_ids": [
3
],
"poll_ballot_paper_selection": "CUSTOM_NUMBER", "poll_ballot_paper_selection": "CUSTOM_NUMBER",
"poll_ballot_paper_number": 8, "poll_ballot_paper_number": 8,
"poll_sort_poll_result_by_votes": true, "poll_sort_poll_result_by_votes": true,
"poll_default_type": "nominal", "poll_default_type": "nominal",
"poll_default_method": "votes", "poll_default_method": "votes",
"poll_default_100_percent_base": "valid", "poll_default_100_percent_base": "valid",
"poll_default_group_ids": [5], "poll_default_group_ids": [
3
],
"poll_couple_countdown": true, "poll_couple_countdown": true,
"projector_ids": [
"projector_ids": [1], 1
],
"all_projection_ids": [], "all_projection_ids": [],
"projector_message_ids": [], "projector_message_ids": [],
"projector_countdown_ids": [1, 2], "projector_countdown_ids": [
1,
2
],
"tag_ids": [], "tag_ids": [],
"agenda_item_ids": [], "agenda_item_ids": [],
"list_of_speakers_ids": [], "list_of_speakers_ids": [],
"speaker_ids": [], "speaker_ids": [],
"topic_ids": [], "topic_ids": [],
"group_ids": [1, 2, 3, 4, 5], "group_ids": [
1,
2,
3,
4
],
"mediafile_ids": [], "mediafile_ids": [],
"motion_ids": [], "motion_ids": [],
"motion_comment_section_ids": [], "motion_comment_section_ids": [],
"motion_category_ids": [], "motion_category_ids": [],
"motion_block_ids": [], "motion_block_ids": [],
"motion_workflow_ids": [1], "motion_workflow_ids": [
1
],
"motion_statute_paragraph_ids": [], "motion_statute_paragraph_ids": [],
"motion_comment_ids": [], "motion_comment_ids": [],
"motion_submitter_ids": [], "motion_submitter_ids": [],
"motion_change_recommendation_ids": [], "motion_change_recommendation_ids": [],
"motion_state_ids": [1, 2, 3, 4], "motion_state_ids": [
1,
2,
3,
4
],
"poll_ids": [], "poll_ids": [],
"option_ids": [], "option_ids": [],
"vote_ids": [], "vote_ids": [],
@ -254,19 +261,16 @@
"assignment_candidate_ids": [], "assignment_candidate_ids": [],
"personal_note_ids": [], "personal_note_ids": [],
"chat_group_ids": [], "chat_group_ids": [],
"logo_$_id": [], "logo_$_id": [],
"font_$_id": [], "font_$_id": [],
"committee_id": 1, "committee_id": 1,
"default_meeting_for_committee_id": 1, "default_meeting_for_committee_id": 1,
"organization_tag_ids": [], "organization_tag_ids": [],
"present_user_ids": [], "present_user_ids": [],
"user_ids": [1], "user_ids": [],
"reference_projector_id": 1, "reference_projector_id": 1,
"list_of_speakers_countdown_id": 1, "list_of_speakers_countdown_id": 1,
"poll_countdown_id": 2, "poll_countdown_id": 2,
"default_projector_$_id": [ "default_projector_$_id": [
"agenda_all_items", "agenda_all_items",
"topics", "topics",
@ -300,25 +304,26 @@
"default_projector_$motion_poll_id": 1, "default_projector_$motion_poll_id": 1,
"default_projector_$poll_id": 1, "default_projector_$poll_id": 1,
"projection_ids": [], "projection_ids": [],
"default_group_id": 1, "default_group_id": 1,
"admin_group_id": 2 "admin_group_id": 2
}], }
"group": [ ],
"group": [
{ {
"id": 1, "id": 1,
"name": "Default", "name": "Default",
"permissions": [ "permissions": [
"agenda_item.can_see",
"agenda_item.can_see_internal", "agenda_item.can_see_internal",
"assignment.can_see", "assignment.can_see",
"list_of_speakers.can_see", "list_of_speakers.can_see",
"mediafile.can_see", "mediafile.can_see",
"meeting.can_see_frontpage", "meeting.can_see_frontpage",
"meeting.can_see_autopilot",
"motion.can_see", "motion.can_see",
"projector.can_see", "projector.can_see",
"user.can_see" "user.can_see"
], ],
"user_ids": [], "user_ids": [],
"default_group_for_meeting_id": 1, "default_group_for_meeting_id": 1,
"admin_group_for_meeting_id": null, "admin_group_for_meeting_id": null,
@ -338,8 +343,7 @@
"id": 2, "id": 2,
"name": "Admin", "name": "Admin",
"permissions": [], "permissions": [],
"user_ids": [],
"user_ids": [1],
"default_group_for_meeting_id": null, "default_group_for_meeting_id": null,
"admin_group_for_meeting_id": 1, "admin_group_for_meeting_id": 1,
"mediafile_access_group_ids": [], "mediafile_access_group_ids": [],
@ -356,87 +360,25 @@
}, },
{ {
"id": 3, "id": 3,
"name": "Staff",
"permissions": [
"agenda_item.can_manage",
"assignment.can_manage",
"assignment.can_nominate_self",
"list_of_speakers.can_be_speaker",
"list_of_speakers.can_manage",
"mediafile.can_manage",
"meeting.can_see_frontpage",
"meeting.can_see_history",
"motion.can_manage",
"poll.can_manage",
"projector.can_manage",
"tag.can_manage",
"user.can_manage"
],
"user_ids": [],
"default_group_for_meeting_id": null,
"admin_group_for_meeting_id": null,
"mediafile_access_group_ids": [],
"mediafile_inherited_access_group_ids": [],
"read_comment_section_ids": [],
"write_comment_section_ids": [],
"read_chat_group_ids": [],
"write_chat_group_ids": [],
"poll_ids": [],
"used_as_motion_poll_default_id": null,
"used_as_assignment_poll_default_id": null,
"used_as_poll_default_id": null,
"meeting_id": 1
},
{
"id": 4,
"name": "Committees",
"permissions": [
"agenda_item.can_see_internal",
"assignment.can_see",
"list_of_speakers.can_see",
"mediafile.can_see",
"meeting.can_see_frontpage",
"motion.can_create",
"motion.can_create_amendments",
"motion.can_support",
"projector.can_see",
"user.can_see"
],
"user_ids": [],
"default_group_for_meeting_id": null,
"admin_group_for_meeting_id": null,
"mediafile_access_group_ids": [],
"mediafile_inherited_access_group_ids": [],
"read_comment_section_ids": [],
"write_comment_section_ids": [],
"read_chat_group_ids": [],
"write_chat_group_ids": [],
"poll_ids": [],
"used_as_motion_poll_default_id": null,
"used_as_assignment_poll_default_id": null,
"used_as_poll_default_id": null,
"meeting_id": 1
},
{
"id": 5,
"name": "Delegates", "name": "Delegates",
"permissions": [ "permissions": [
"agenda_item.can_see",
"agenda_item.can_see_internal", "agenda_item.can_see_internal",
"assignment.can_see",
"assignment.can_nominate_other", "assignment.can_nominate_other",
"assignment.can_nominate_self", "assignment.can_nominate_self",
"list_of_speakers.can_see",
"list_of_speakers.can_be_speaker", "list_of_speakers.can_be_speaker",
"mediafile.can_see", "mediafile.can_see",
"meeting.can_see_autopilot",
"meeting.can_see_frontpage", "meeting.can_see_frontpage",
"meeting.can_see_autopilot",
"motion.can_see",
"motion.can_create", "motion.can_create",
"motion.can_create_amendments", "motion.can_create_amendments",
"motion.can_support", "motion.can_support",
"projector.can_see", "projector.can_see",
"user.can_see" "user.can_see"
], ],
"user_ids": [], "user_ids": [],
"default_group_for_meeting_id": null, "default_group_for_meeting_id": null,
"admin_group_for_meeting_id": null, "admin_group_for_meeting_id": null,
@ -451,21 +393,70 @@
"used_as_assignment_poll_default_id": 1, "used_as_assignment_poll_default_id": 1,
"used_as_poll_default_id": 1, "used_as_poll_default_id": 1,
"meeting_id": 1 "meeting_id": 1
}], },
"personal_note": [], {
"tag": [], "id": 4,
"agenda_item": [], "name": "Staff",
"list_of_speakers": [], "permissions": [
"speaker": [], "agenda_item.can_see",
"topic": [], "agenda_item.can_see_internal",
"motion": [], "agenda_item.can_manage",
"motion_submitter": [], "assignment.can_see",
"motion_comment": [], "assignment.can_nominate_other",
"motion_comment_section": [], "assignment.can_manage",
"motion_category": [], "assignment.can_nominate_self",
"motion_block": [], "list_of_speakers.can_see",
"motion_change_recommendation": [], "list_of_speakers.can_be_speaker",
"motion_state": [ "list_of_speakers.can_manage",
"mediafile.can_see",
"mediafile.can_manage",
"meeting.can_see_frontpage",
"meeting.can_see_autopilot",
"motion.can_see",
"motion.can_manage",
"motion.can_manage_metadata",
"motion.can_manage_polls",
"motion.can_see_internal",
"motion.can_create",
"motion.can_create_amendments",
"poll.can_manage",
"projector.can_see",
"projector.can_manage",
"tag.can_manage",
"user.can_see",
"user.can_see_extra_data",
"user.can_manage"
],
"user_ids": [],
"default_group_for_meeting_id": null,
"admin_group_for_meeting_id": null,
"mediafile_access_group_ids": [],
"mediafile_inherited_access_group_ids": [],
"read_comment_section_ids": [],
"write_comment_section_ids": [],
"read_chat_group_ids": [],
"write_chat_group_ids": [],
"poll_ids": [],
"used_as_motion_poll_default_id": null,
"used_as_assignment_poll_default_id": null,
"used_as_poll_default_id": null,
"meeting_id": 1
}
],
"personal_note": [],
"tag": [],
"agenda_item": [],
"list_of_speakers": [],
"speaker": [],
"topic": [],
"motion": [],
"motion_submitter": [],
"motion_comment": [],
"motion_comment_section": [],
"motion_category": [],
"motion_block": [],
"motion_change_recommendation": [],
"motion_state": [
{ {
"id": 1, "id": 1,
"name": "submitted", "name": "submitted",
@ -479,8 +470,11 @@
"show_state_extension_field": false, "show_state_extension_field": false,
"merge_amendment_into_final": "undefined", "merge_amendment_into_final": "undefined",
"show_recommendation_extension_field": false, "show_recommendation_extension_field": false,
"next_state_ids": [
"next_state_ids": [2, 3, 4], 2,
3,
4
],
"previous_state_ids": [], "previous_state_ids": [],
"motion_ids": [], "motion_ids": [],
"motion_recommendation_ids": [], "motion_recommendation_ids": [],
@ -501,9 +495,10 @@
"show_state_extension_field": false, "show_state_extension_field": false,
"merge_amendment_into_final": "undefined", "merge_amendment_into_final": "undefined",
"show_recommendation_extension_field": false, "show_recommendation_extension_field": false,
"next_state_ids": [], "next_state_ids": [],
"previous_state_ids": [1], "previous_state_ids": [
1
],
"motion_ids": [], "motion_ids": [],
"motion_recommendation_ids": [], "motion_recommendation_ids": [],
"workflow_id": 1, "workflow_id": 1,
@ -523,9 +518,10 @@
"show_state_extension_field": false, "show_state_extension_field": false,
"merge_amendment_into_final": "undefined", "merge_amendment_into_final": "undefined",
"show_recommendation_extension_field": false, "show_recommendation_extension_field": false,
"next_state_ids": [], "next_state_ids": [],
"previous_state_ids": [1], "previous_state_ids": [
1
],
"motion_ids": [], "motion_ids": [],
"motion_recommendation_ids": [], "motion_recommendation_ids": [],
"workflow_id": 1, "workflow_id": 1,
@ -545,9 +541,10 @@
"show_state_extension_field": false, "show_state_extension_field": false,
"merge_amendment_into_final": "undefined", "merge_amendment_into_final": "undefined",
"show_recommendation_extension_field": false, "show_recommendation_extension_field": false,
"next_state_ids": [], "next_state_ids": [],
"previous_state_ids": [1], "previous_state_ids": [
1
],
"motion_ids": [], "motion_ids": [],
"motion_recommendation_ids": [], "motion_recommendation_ids": [],
"workflow_id": 1, "workflow_id": 1,
@ -555,26 +552,31 @@
"meeting_id": 1 "meeting_id": 1
} }
], ],
"motion_workflow": [ "motion_workflow": [
{ {
"id": 1, "id": 1,
"name": "Simple Workflow", "name": "Simple Workflow",
"state_ids": [
"state_ids": [1, 2, 3, 4], 1,
2,
3,
4
],
"first_state_id": 1, "first_state_id": 1,
"default_workflow_meeting_id": 1, "default_workflow_meeting_id": 1,
"default_amendment_workflow_meeting_id": 1, "default_amendment_workflow_meeting_id": 1,
"default_statute_amendment_workflow_meeting_id": 1, "default_statute_amendment_workflow_meeting_id": 1,
"meeting_id": 1 "meeting_id": 1
}], }
"motion_statute_paragraph": [], ],
"poll": [], "motion_statute_paragraph": [],
"option": [], "poll": [],
"vote": [], "option": [],
"assignment": [], "vote": [],
"assignment_candidate": [], "assignment": [],
"mediafile": [], "assignment_candidate": [],
"projector": [ "mediafile": [],
"projector": [
{ {
"id": 1, "id": 1,
"name": "Default projector", "name": "Default projector",
@ -594,12 +596,10 @@
"show_title": true, "show_title": true,
"show_logo": true, "show_logo": true,
"show_clock": true, "show_clock": true,
"current_projection_ids": [], "current_projection_ids": [],
"preview_projection_ids": [], "preview_projection_ids": [],
"history_projection_ids": [], "history_projection_ids": [],
"used_as_reference_projector_meeting_id": 1, "used_as_reference_projector_meeting_id": 1,
"used_as_default_$_in_meeting_id": [ "used_as_default_$_in_meeting_id": [
"agenda_all_items", "agenda_all_items",
"topics", "topics",
@ -632,12 +632,12 @@
"used_as_default_$assignment_poll_in_meeting_id": 1, "used_as_default_$assignment_poll_in_meeting_id": 1,
"used_as_default_$motion_poll_in_meeting_id": 1, "used_as_default_$motion_poll_in_meeting_id": 1,
"used_as_default_$poll_in_meeting_id": 1, "used_as_default_$poll_in_meeting_id": 1,
"meeting_id": 1 "meeting_id": 1
}], }
"projection": [], ],
"projector_message": [], "projection": [],
"projector_countdown": [ "projector_message": [],
"projector_countdown": [
{ {
"id": 1, "id": 1,
"title": "List of speaker countdown", "title": "List of speaker countdown",
@ -645,7 +645,6 @@
"default_time": 60, "default_time": 60,
"countdown_time": 60, "countdown_time": 60,
"running": false, "running": false,
"projection_ids": [], "projection_ids": [],
"used_as_list_of_speaker_countdown_meeting_id": 1, "used_as_list_of_speaker_countdown_meeting_id": 1,
"used_as_poll_countdown_meeting_id": null, "used_as_poll_countdown_meeting_id": null,
@ -658,11 +657,11 @@
"default_time": 60, "default_time": 60,
"countdown_time": 60, "countdown_time": 60,
"running": false, "running": false,
"projection_ids": [], "projection_ids": [],
"used_as_list_of_speaker_countdown_meeting_id": null, "used_as_list_of_speaker_countdown_meeting_id": null,
"used_as_poll_countdown_meeting_id": 1, "used_as_poll_countdown_meeting_id": 1,
"meeting_id": 1 "meeting_id": 1
}], }
"chat_group": [] ],
"chat_group": []
} }

View File

@ -1,12 +0,0 @@
#!/bin/bash
# Create keys for auth, if they do not exist
if [ ! -f secrets/auth_token_key ]; then
tr -dc 'a-zA-Z0-9' < /dev/urandom | head -c 64 > secrets/auth_token_key
fi
if [ ! -f secrets/auth_cookie_key ]; then
tr -dc 'a-zA-Z0-9' < /dev/urandom | head -c 64 > secrets/auth_cookie_key
fi
( set -a; source .env; m4 docker-compose.yml.m4 ) > docker-compose.yml
( set -a; source .env; m4 docker-stack.yml.m4 ) > docker-stack.yml