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
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:

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

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