initial commit
This commit is contained in:
		
						commit
						eb2ec18ad9
					
				
					 6 changed files with 357 additions and 0 deletions
				
			
		
							
								
								
									
										83
									
								
								.gitignore
									
										
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										83
									
								
								.gitignore
									
										
									
									
										vendored
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,83 @@
 | 
				
			||||||
 | 
					.env
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					*~
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# temporary files which can be created if a process still has a handle open of a deleted file
 | 
				
			||||||
 | 
					.fuse_hidden*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Metadata left by Dolphin file manager, which comes with KDE Plasma
 | 
				
			||||||
 | 
					.directory
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Linux trash folder which might appear on any partition or disk
 | 
				
			||||||
 | 
					.Trash-*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# .nfs files are created when an open file is removed but is still being accessed
 | 
				
			||||||
 | 
					.nfs*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Log files created by default by the nohup command
 | 
				
			||||||
 | 
					nohup.out
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# General
 | 
				
			||||||
 | 
					.DS_Store
 | 
				
			||||||
 | 
					__MACOSX/
 | 
				
			||||||
 | 
					.AppleDouble
 | 
				
			||||||
 | 
					.LSOverride
 | 
				
			||||||
 | 
					Icon[
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Thumbnails
 | 
				
			||||||
 | 
					._*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Files that might appear in the root of a volume
 | 
				
			||||||
 | 
					.DocumentRevisions-V100
 | 
				
			||||||
 | 
					.fseventsd
 | 
				
			||||||
 | 
					.Spotlight-V100
 | 
				
			||||||
 | 
					.TemporaryItems
 | 
				
			||||||
 | 
					.Trashes
 | 
				
			||||||
 | 
					.VolumeIcon.icns
 | 
				
			||||||
 | 
					.com.apple.timemachine.donotpresent
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Directories potentially created on remote AFP share
 | 
				
			||||||
 | 
					.AppleDB
 | 
				
			||||||
 | 
					.AppleDesktop
 | 
				
			||||||
 | 
					Network Trash Folder
 | 
				
			||||||
 | 
					Temporary Items
 | 
				
			||||||
 | 
					.apdisk
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Windows thumbnail cache files
 | 
				
			||||||
 | 
					Thumbs.db
 | 
				
			||||||
 | 
					Thumbs.db:encryptable
 | 
				
			||||||
 | 
					ehthumbs.db
 | 
				
			||||||
 | 
					ehthumbs_vista.db
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Dump file
 | 
				
			||||||
 | 
					*.stackdump
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Folder config file
 | 
				
			||||||
 | 
					[Dd]esktop.ini
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Recycle Bin used on file shares
 | 
				
			||||||
 | 
					$RECYCLE.BIN/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Windows Installer files
 | 
				
			||||||
 | 
					*.cab
 | 
				
			||||||
 | 
					*.msi
 | 
				
			||||||
 | 
					*.msix
 | 
				
			||||||
 | 
					*.msm
 | 
				
			||||||
 | 
					*.msp
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Windows shortcuts
 | 
				
			||||||
 | 
					*.lnk
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.vscode/*
 | 
				
			||||||
 | 
					!.vscode/settings.json
 | 
				
			||||||
 | 
					!.vscode/tasks.json
 | 
				
			||||||
 | 
					!.vscode/launch.json
 | 
				
			||||||
 | 
					!.vscode/extensions.json
 | 
				
			||||||
 | 
					!.vscode/*.code-snippets
 | 
				
			||||||
 | 
					!*.code-workspace
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Built Visual Studio Code Extensions
 | 
				
			||||||
 | 
					*.vsix
 | 
				
			||||||
							
								
								
									
										0
									
								
								README.md
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								README.md
									
										
									
									
									
										Normal file
									
								
							
							
								
								
									
										140
									
								
								data/config/bitpoll/settings.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										140
									
								
								data/config/bitpoll/settings.py
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,140 @@
 | 
				
			||||||
 | 
					# customize to your needs
 | 
				
			||||||
 | 
					import re
 | 
				
			||||||
 | 
					import os
 | 
				
			||||||
 | 
					# You must insert your own random value here
 | 
				
			||||||
 | 
					# SECURITY WARNING: keep the secret key used in production secret!
 | 
				
			||||||
 | 
					# see <https://docs.djangoproject.com/en/dev/howto/deployment/checklist/#secret-key>
 | 
				
			||||||
 | 
					SECRET_KEY = os.environ.get('BITPOLL_SECRET_KEY', '...')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# generate via: ./manage.py generate_encryption_key
 | 
				
			||||||
 | 
					FIELD_ENCRYPTION_KEY = os.environ.get('BITPOLL_FIELD_ENCRYPTION_KEY', 'this+is+an+example+key+please+generate+one+=')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# SECURITY WARNING: don't run with debug turned on in production!
 | 
				
			||||||
 | 
					DEBUG = False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The domain name of the site
 | 
				
			||||||
 | 
					ALLOWED_HOSTS = ['poll.s1q.dev']
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## If Bitpoll is served via HTTPS enable the next two options
 | 
				
			||||||
 | 
					SESSION_COOKIE_SECURE = True
 | 
				
			||||||
 | 
					CSRF_COOKIE_SECURE = True
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# The root dir bitpoll appears to be in from the web, as configured in the webserver
 | 
				
			||||||
 | 
					URL_PREFIX = ''
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#Add additionall installed apps here
 | 
				
			||||||
 | 
					## Example for installed raven (Sentry instrumentation)
 | 
				
			||||||
 | 
					#INSTALLED_APPS_LOCAL = [
 | 
				
			||||||
 | 
					#        'raven.contrib.django.raven_compat',
 | 
				
			||||||
 | 
					#        ]
 | 
				
			||||||
 | 
					INSTALLED_APPS_LOCAL = []
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# To use OpenId:
 | 
				
			||||||
 | 
					#INSTALLED_APPS_LOCAL.append('simple_openid_connect.integrations.django')
 | 
				
			||||||
 | 
					#OPENID_ENABLED = True
 | 
				
			||||||
 | 
					#OPENID_ISSUER = "https://identity.mafiasi.de/realms/mafiasi"
 | 
				
			||||||
 | 
					#OPENID_API_BASE = "https://identity.mafiasi.de/admin/realms/mafiasi"
 | 
				
			||||||
 | 
					#OPENID_CLIENT_ID = "..."
 | 
				
			||||||
 | 
					#OPENID_CLIENT_SECRET = "..."
 | 
				
			||||||
 | 
					#OPENID_BASE_URI = "..."
 | 
				
			||||||
 | 
					#OPENID_SCOPE = "openid profile email"
 | 
				
			||||||
 | 
					#OPENID_USER_MAPPER = 'bitpoll.base.openid.BitpollUserMapper'
 | 
				
			||||||
 | 
					#OPENID_ADMIN_GROUPS = re.compile('admins|superusers')
 | 
				
			||||||
 | 
					#LOGIN_URL = "simple_openid_connect_django:login"
 | 
				
			||||||
 | 
					#LOGOUT_REDIRECT_URL = "index"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					MIDDLEWARE_LOCAL = [
 | 
				
			||||||
 | 
					#    "simple_openid_connect.integrations.django.middleware.TokenVerificationMiddleware",
 | 
				
			||||||
 | 
					]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Compress the JS and CSS files, for more Options see https://django-pipeline.readthedocs.io/en/latest/compressors.html
 | 
				
			||||||
 | 
					# the Compressor have to be installed in the system
 | 
				
			||||||
 | 
					PIPELINE_LOCAL = {}
 | 
				
			||||||
 | 
					#PIPELINE_LOCAL['JS_COMPRESSOR'] = 'pipeline.compressors.uglifyjs.UglifyJSCompressor'
 | 
				
			||||||
 | 
					#PIPELINE_LOCAL['CSS_COMPRESSOR'] = 'pipeline.compressors.cssmin.CSSMinCompressor'
 | 
				
			||||||
 | 
					#PIPELINE_ENABLED = True
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					LANGUAGE_CODE = 'en-us'
 | 
				
			||||||
 | 
					TIME_ZONE = 'UTC'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## https://docs.djangoproject.com/en/1.9/ref/settings/#databases
 | 
				
			||||||
 | 
					#DATABASES = {
 | 
				
			||||||
 | 
					#    'default': {+
 | 
				
			||||||
 | 
					#        'ENGINE': 'django.db.backends.sqlite3',
 | 
				
			||||||
 | 
					#        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
 | 
				
			||||||
 | 
					#    }
 | 
				
			||||||
 | 
					#}
 | 
				
			||||||
 | 
					DATABASES = {
 | 
				
			||||||
 | 
					    "default": {+
 | 
				
			||||||
 | 
					        "ENGINE": "django.db.backends.postgresql",
 | 
				
			||||||
 | 
					        "NAME": "bitpoll",
 | 
				
			||||||
 | 
					        "USER": "bitpoll",
 | 
				
			||||||
 | 
					        "PASSWORD": os.environ.get('BITPOLL_DB_PASSWORD', 'password'),
 | 
				
			||||||
 | 
					        "HOST": "db",
 | 
				
			||||||
 | 
					        "PORT": 5432,
 | 
				
			||||||
 | 
					        "CONN_MAX_AGE": 60,
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Customize your instance
 | 
				
			||||||
 | 
					SITE_NAME = 's1q poll'
 | 
				
			||||||
 | 
					BASE_URL = 'https://poll.s1q.dev'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Url to the Base Homepage and Text on the Link, leave empty to not use this option
 | 
				
			||||||
 | 
					#HOME_URL = "https://example.com"
 | 
				
			||||||
 | 
					#HOME_URL_NAME = "Dashboard"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Test mail functionality by printing mails to console:
 | 
				
			||||||
 | 
					## EMAIL_BACKEND = 'django.core.mail.backends.console.EmailBackend'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## if the imprint URL is not empty use it as an link to the imprint, else use IMPRINT_TEXT
 | 
				
			||||||
 | 
					#IMPRINT_URL = ""
 | 
				
			||||||
 | 
					#IMPRINT_TEXT = """
 | 
				
			||||||
 | 
					#<h1>ImpressuXm</h1>
 | 
				
			||||||
 | 
					#<p>Text goes here</p>
 | 
				
			||||||
 | 
					#"""
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#LOCALE_PATHS = (os.path.join(ROOT_DIR, 'locale'), )
 | 
				
			||||||
 | 
					LANGUAGES = (
 | 
				
			||||||
 | 
					   ('de', 'Deutsch'),
 | 
				
			||||||
 | 
					   ('en', 'English'),
 | 
				
			||||||
 | 
					   #('fr', 'Français'),
 | 
				
			||||||
 | 
					   #('it', 'Italiano'),
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					REGISTER_ENABLED = True
 | 
				
			||||||
 | 
					GROUP_MANAGEMENT = REGISTER_ENABLED
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					## Use ldap login
 | 
				
			||||||
 | 
					#import ldap
 | 
				
			||||||
 | 
					#from django_auth_ldap.config import LDAPSearch
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#AUTHENTICATION_BACKENDS = (
 | 
				
			||||||
 | 
					#    'django_auth_ldap.backend.LDAPBackend',
 | 
				
			||||||
 | 
					#    'django.contrib.auth.backends.ModelBackend',
 | 
				
			||||||
 | 
					#    )
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#AUTH_LDAP_SERVER_URI = "ldap_host"
 | 
				
			||||||
 | 
					#AUTH_LDAP_BIND_DN = "ldap_bind_dn"
 | 
				
			||||||
 | 
					#AUTH_LDAP_BIND_PASSWORD = "ldap_bind_pw"
 | 
				
			||||||
 | 
					#AUTH_LDAP_USER_SEARCH = LDAPSearch("ou=People,dc=mafiasi,dc=de",
 | 
				
			||||||
 | 
					#    ldap.SCOPE_SUBTREE, "(uid=%(user)s)")
 | 
				
			||||||
 | 
					#AUTH_LDAP_ALWAYS_UPDATE_USER = True
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#from django_auth_ldap.config import LDAPSearch, PosixGroupType
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#AUTH_LDAP_GROUP_SEARCH = LDAPSearch("ou=groups,dc=mafiasi,dc=de",
 | 
				
			||||||
 | 
					#    ldap.SCOPE_SUBTREE, "(objectClass=posixGroup)"
 | 
				
			||||||
 | 
					#    )
 | 
				
			||||||
 | 
					#AUTH_LDAP_GROUP_TYPE = PosixGroupType()
 | 
				
			||||||
 | 
					##AUTH_LDAP_FIND_GROUP_PERMS = True
 | 
				
			||||||
 | 
					#AUTH_LDAP_MIRROR_GROUPS = True
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#AUTH_LDAP_USER_ATTR_MAP = {"first_name": "givenName", "last_name": "sn", "email": "mail"}
 | 
				
			||||||
 | 
					#
 | 
				
			||||||
 | 
					#AUTH_LDAP_USER_FLAGS_BY_GROUP = {
 | 
				
			||||||
 | 
					#    "is_staff": ["cn=Editoren,ou=groups,dc=mafiasi,dc=de",
 | 
				
			||||||
 | 
					#                 "cn=Server-AG,ou=groups,dc=mafiasi,dc=de"],
 | 
				
			||||||
 | 
					#    "is_superuser": "cn=Server-AG,ou=groups,dc=mafiasi,dc=de"
 | 
				
			||||||
 | 
					#}
 | 
				
			||||||
							
								
								
									
										19
									
								
								data/config/nginx-templates/default.conf.template
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								data/config/nginx-templates/default.conf.template
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,19 @@
 | 
				
			||||||
 | 
					server {
 | 
				
			||||||
 | 
					    listen 8080;
 | 
				
			||||||
 | 
					    server_name default_server;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    root /var/www;
 | 
				
			||||||
 | 
					    
 | 
				
			||||||
 | 
					    location / {
 | 
				
			||||||
 | 
					        include uwsgi_params;
 | 
				
			||||||
 | 
					        uwsgi_pass bitpoll:3008;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    location /static {
 | 
				
			||||||
 | 
					        expires 14d;
 | 
				
			||||||
 | 
					        alias /opt/static;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    access_log /var/log/nginx/access.log;
 | 
				
			||||||
 | 
					    error_log /var/log/nginx/error.log;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										100
									
								
								docker-compose.yml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										100
									
								
								docker-compose.yml
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,100 @@
 | 
				
			||||||
 | 
					---
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					services:
 | 
				
			||||||
 | 
					  nginx:
 | 
				
			||||||
 | 
					    image: ghcr.io/nginx/nginx-unprivileged:${NGINX_TAG:?NGINX_TAG is not configured}
 | 
				
			||||||
 | 
					    restart: unless-stopped
 | 
				
			||||||
 | 
					    depends_on:
 | 
				
			||||||
 | 
					      - bitpoll
 | 
				
			||||||
 | 
					    read_only: true
 | 
				
			||||||
 | 
					    volumes:
 | 
				
			||||||
 | 
					      # - /etc/localtime:/etc/localtime:ro
 | 
				
			||||||
 | 
					      # - /etc/timezone:/etc/timezone:ro
 | 
				
			||||||
 | 
					      - ./data/config/nginx-templates:/etc/nginx/templates:ro
 | 
				
			||||||
 | 
					      - static:/var/www
 | 
				
			||||||
 | 
					    tmpfs:
 | 
				
			||||||
 | 
					      - /etc/nginx/conf.d:uid=101,gid=101
 | 
				
			||||||
 | 
					      - /tmp
 | 
				
			||||||
 | 
					      - /var/cache/nginx
 | 
				
			||||||
 | 
					    security_opt:
 | 
				
			||||||
 | 
					      - no-new-privileges:true
 | 
				
			||||||
 | 
					    cap_drop:
 | 
				
			||||||
 | 
					      - ALL
 | 
				
			||||||
 | 
					    networks:
 | 
				
			||||||
 | 
					      - appnet
 | 
				
			||||||
 | 
					      - dokploy-network
 | 
				
			||||||
 | 
					    labels:
 | 
				
			||||||
 | 
					      - "traefik.enable=true"
 | 
				
			||||||
 | 
					      - "traefik.docker.network=dokploy-network"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      - "traefik.http.services.bitpoll-nginx.loadbalancer.server.port=8080" # set port the container listenes to
 | 
				
			||||||
 | 
					      - "traefik.http.services.bitpoll-nginx.loadbalancer.server.scheme=http"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      - "traefik.http.routers.bitpoll-nginx-web.rule=Host(`${PUBLIC_DOMAIN}`)"
 | 
				
			||||||
 | 
					      - "traefik.http.routers.bitpoll-nginx-web.service=bitpoll-nginx@docker"
 | 
				
			||||||
 | 
					      - "traefik.http.routers.bitpoll-nginx-web.entrypoints=web"
 | 
				
			||||||
 | 
					      - "traefik.http.routers.bitpoll-nginx-web.middlewares=redirect-to-https@file"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					      - "traefik.http.routers.bitpoll-nginx-websecure.rule=Host(`${PUBLIC_DOMAIN}`)" # change hostname!
 | 
				
			||||||
 | 
					      - "traefik.http.routers.bitpoll-nginx-websecure.service=bitpoll-nginx@docker"
 | 
				
			||||||
 | 
					      - "traefik.http.routers.bitpoll-nginx-websecure.entrypoints=websecure"
 | 
				
			||||||
 | 
					      - "traefik.http.routers.bitpoll-nginx-websecure.tls=true"
 | 
				
			||||||
 | 
					      - "traefik.http.routers.bitpoll-nginx-websecure.tls.options=modern@file"
 | 
				
			||||||
 | 
					      - "traefik.http.routers.bitpoll-nginx-websecure.tls.certresolver=hetzner"
 | 
				
			||||||
 | 
					      - "traefik.http.routers.bitpoll-nginx-websecure.tls.domains[0].main=${TLS_DOMAIN}"
 | 
				
			||||||
 | 
					      - "traefik.http.routers.bitpoll-nginx-websecure.middlewares=secHeaders@file, hsts-header@file"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  bitpoll:
 | 
				
			||||||
 | 
					    image: ghcr.io/fsinfuhh/bitpoll:${BITPOLL_TAG:?BITPOLL_TAG is not configured}
 | 
				
			||||||
 | 
					    build:
 | 
				
			||||||
 | 
					      dockerfile: Dockerfile
 | 
				
			||||||
 | 
					      context: ./src
 | 
				
			||||||
 | 
					    restart: unless-stopped
 | 
				
			||||||
 | 
					    depends_on:
 | 
				
			||||||
 | 
					      postgresql:
 | 
				
			||||||
 | 
					        condition: service_healthy
 | 
				
			||||||
 | 
					    environment:
 | 
				
			||||||
 | 
					      BITPOLL_SECRET_KEY: ${BITPOLL_SECRET_KEY?:BITPOLL_SECRET_KEY is required!}
 | 
				
			||||||
 | 
					      BITPOLL_FIELD_ENCRYPTION_KEY: ${BITPOLL_FIELD_ENCRYPTION_KEY?:BITPOLL_FIELD_ENCRYPTION_KEY is required!}
 | 
				
			||||||
 | 
					      BITPOLL_DB_PASSWORD: ${BITPOLL_DB_PASSWORD?:BITPOLL_DB_PASSWORD is required!}
 | 
				
			||||||
 | 
					    networks:
 | 
				
			||||||
 | 
					      - appnet
 | 
				
			||||||
 | 
					    volumes:
 | 
				
			||||||
 | 
					      # - /etc/localtime:/etc/localtime:ro
 | 
				
			||||||
 | 
					      # - /etc/timezone:/etc/timezone:ro
 | 
				
			||||||
 | 
					      - static:/opt/static
 | 
				
			||||||
 | 
					      - ./data/config/bitpoll:/opt/config
 | 
				
			||||||
 | 
					      - log:/opt/log
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  db:
 | 
				
			||||||
 | 
					    image: postgres:${POSTGRES_TAG:?POSTGRES_TAG is not configured}
 | 
				
			||||||
 | 
					    restart: unless-stopped
 | 
				
			||||||
 | 
					    environment:
 | 
				
			||||||
 | 
					      POSTGRES_USER: bitpoll
 | 
				
			||||||
 | 
					      POSTGRES_DB: bitpoll
 | 
				
			||||||
 | 
					      POSTGRES_PASSWORD: ${BITPOLL_DB_PASSWORD?:BITPOLL_DB_PASSWORD is required!}
 | 
				
			||||||
 | 
					    healthcheck:
 | 
				
			||||||
 | 
					      interval: 30s
 | 
				
			||||||
 | 
					      retries: 5
 | 
				
			||||||
 | 
					      start_period: 20s
 | 
				
			||||||
 | 
					      test:
 | 
				
			||||||
 | 
					      - CMD-SHELL
 | 
				
			||||||
 | 
					      - pg_isready -d $${POSTGRES_DB} -U $${POSTGRES_USER}
 | 
				
			||||||
 | 
					      timeout: 5s
 | 
				
			||||||
 | 
					    networks:
 | 
				
			||||||
 | 
					      - appnet
 | 
				
			||||||
 | 
					    volumes:
 | 
				
			||||||
 | 
					      - db:/var/lib/postgresql/data:rw
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					volumes:
 | 
				
			||||||
 | 
					  static:
 | 
				
			||||||
 | 
					    driver: local
 | 
				
			||||||
 | 
					  log:
 | 
				
			||||||
 | 
					    driver: local
 | 
				
			||||||
 | 
					  db:
 | 
				
			||||||
 | 
					    driver: local
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					networks:
 | 
				
			||||||
 | 
					  appnet:
 | 
				
			||||||
 | 
					  dokploy-network:
 | 
				
			||||||
 | 
					    # external: true
 | 
				
			||||||
							
								
								
									
										15
									
								
								template.env
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								template.env
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,15 @@
 | 
				
			||||||
 | 
					# SETTINGS from env.template
 | 
				
			||||||
 | 
					# Misc configuration
 | 
				
			||||||
 | 
					COMPOSE_PROJECT_NAME=poll-s1q-dev
 | 
				
			||||||
 | 
					PUBLIC_DOMAIN=poll.s1q.dev
 | 
				
			||||||
 | 
					TLS_DOMAIN=*.s1q.dev
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Container Tags
 | 
				
			||||||
 | 
					NGINX_TAG=1.29.1
 | 
				
			||||||
 | 
					BITPOLL_TAG=latest
 | 
				
			||||||
 | 
					POSTGRES_TAG=17.6
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Secrets
 | 
				
			||||||
 | 
					# BITPOLL_SECRET_KEY="" # generate via: openssl rand -base64 128 | tr -d '\n'
 | 
				
			||||||
 | 
					# BITPOLL_FIELD_ENCRYPTION_KEY="" # generate via: ./manage.py generate_encryption_key / docker run --rm --volume ./data/config/bitpoll:/opt/config --entrypoint ./manage.py ghcr.io/fsinfuhh/bitpoll:latest generate_encryption_key
 | 
				
			||||||
 | 
					# BITPOLL_DB_PASSWORD="password" # generate via: openssl rand -base64 128 | tr -d '\n'
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue