Compare commits
2 Commits
| Author | SHA1 | Date |
|---|---|---|
|
|
d4c43c527d | 4 years ago |
|
|
4418eef8d9 | 4 years ago |
60 changed files with 1987 additions and 75 deletions
@ -0,0 +1,28 @@ |
|||||||
|
version: '3' |
||||||
|
|
||||||
|
services: |
||||||
|
bitwarden: |
||||||
|
image: vaultwarden/server:latest |
||||||
|
container_name: mistborn_production_bitwarden |
||||||
|
env_file: |
||||||
|
- ../.envs/.production/.bitwarden |
||||||
|
volumes: |
||||||
|
- ../../mistborn_volumes/extra/bitwarden:/data |
||||||
|
labels: |
||||||
|
- "traefik.enable=true" |
||||||
|
- "traefik.http.routers.bitwarden-http.rule=Host(`bitwarden.mistborn`)" |
||||||
|
- "traefik.http.routers.bitwarden-http.entrypoints=web" |
||||||
|
- "traefik.http.routers.bitwarden-http.middlewares=mistborn_auth@file" |
||||||
|
- "traefik.http.routers.bitwarden-https.rule=Host(`bitwarden.mistborn`)" |
||||||
|
- "traefik.http.routers.bitwarden-https.entrypoints=websecure" |
||||||
|
- "traefik.http.routers.bitwarden-https.middlewares=mistborn_auth@file" |
||||||
|
- "traefik.http.routers.bitwarden-https.tls.certresolver=basic" |
||||||
|
- "traefik.http.services.bitwarden-service.loadbalancer.server.port=80" |
||||||
|
ports: |
||||||
|
- "${MISTBORN_BIND_IP}:3012:3012/tcp" |
||||||
|
restart: unless-stopped |
||||||
|
|
||||||
|
networks: |
||||||
|
default: |
||||||
|
external: |
||||||
|
name: mistborn_default |
||||||
@ -0,0 +1,30 @@ |
|||||||
|
version: '3.7' |
||||||
|
|
||||||
|
services: |
||||||
|
|
||||||
|
elasticsearch: |
||||||
|
image: amazon/opendistro-for-elasticsearch:1.13.2 |
||||||
|
hostname: elasticsearch |
||||||
|
restart: unless-stopped |
||||||
|
ports: |
||||||
|
- "${MISTBORN_BIND_IP}:9200:9200" |
||||||
|
environment: |
||||||
|
- discovery.type=single-node |
||||||
|
- cluster.name=mistborn-cluster |
||||||
|
- network.host=0.0.0.0 |
||||||
|
- "ES_JAVA_OPTS=-Xms512m -Xmx512m" |
||||||
|
- bootstrap.memory_lock=true |
||||||
|
volumes: |
||||||
|
- ../../mistborn_volumes/extra/elasticsearch/init/internal_users.yml:/usr/share/elasticsearch/plugins/opendistro_security/securityconfig/internal_users.yml |
||||||
|
ulimits: |
||||||
|
memlock: |
||||||
|
soft: -1 |
||||||
|
hard: -1 |
||||||
|
nofile: |
||||||
|
soft: 65536 |
||||||
|
hard: 65536 |
||||||
|
|
||||||
|
networks: |
||||||
|
default: |
||||||
|
external: |
||||||
|
name: mistborn_default |
||||||
@ -0,0 +1,72 @@ |
|||||||
|
version: '3' |
||||||
|
|
||||||
|
# services |
||||||
|
services: |
||||||
|
# guacd |
||||||
|
guacd: |
||||||
|
container_name: mistborn_production_guacd |
||||||
|
image: guacamole/guacd:1.3.0 |
||||||
|
networks: |
||||||
|
guacnetwork: |
||||||
|
restart: unless-stopped |
||||||
|
volumes: |
||||||
|
- ../../mistborn_volumes/extra/guacamole/drive:/drive:rw |
||||||
|
- ../../mistborn_volumes/extra/guacamole/record:/record:rw |
||||||
|
|
||||||
|
|
||||||
|
# postgres |
||||||
|
guac_postgres: |
||||||
|
container_name: mistborn_production_guac_postgres |
||||||
|
env_file: |
||||||
|
- ../.envs/.production/.guacamole |
||||||
|
environment: |
||||||
|
PGDATA: /var/lib/postgresql/data/guacamole |
||||||
|
image: postgres |
||||||
|
networks: |
||||||
|
guacnetwork: |
||||||
|
restart: unless-stopped |
||||||
|
volumes: |
||||||
|
- ../../mistborn_volumes/extra/guacamole/init:/docker-entrypoint-initdb.d:ro |
||||||
|
- ../../mistborn_volumes/extra/guacamole/data:/var/lib/postgresql/data:rw |
||||||
|
|
||||||
|
|
||||||
|
# guacamole |
||||||
|
guacamole: |
||||||
|
container_name: mistborn_production_guacamole |
||||||
|
labels: |
||||||
|
- "traefik.enable=true" |
||||||
|
- "traefik.http.routers.guacamole-http.rule=Host(`guac.mistborn`)" |
||||||
|
- "traefik.http.routers.guacamole-http.entrypoints=web" |
||||||
|
- "traefik.http.routers.guacamole-http.middlewares=mistborn_auth@file,add-guacamole" |
||||||
|
- "traefik.http.routers.guacamole-https.rule=Host(`guac.mistborn`)" |
||||||
|
- "traefik.http.routers.guacamole-https.entrypoints=websecure" |
||||||
|
- "traefik.http.routers.guacamole-https.middlewares=mistborn_auth@file,add-guacamole" |
||||||
|
- "traefik.http.routers.guacamole-https.tls.certresolver=basic" |
||||||
|
- "traefik.http.middlewares.add-guacamole.addPrefix.prefix=/guacamole" |
||||||
|
- "traefik.http.services.guacamole-service.loadbalancer.server.port=8080" |
||||||
|
depends_on: |
||||||
|
- guacd |
||||||
|
- guac_postgres |
||||||
|
environment: |
||||||
|
GUACD_HOSTNAME: guacd |
||||||
|
GUACD_PORT: 4822 |
||||||
|
#GUACAMOLE_HOME: /config |
||||||
|
env_file: |
||||||
|
- ../.envs/.production/.guacamole |
||||||
|
image: guacamole/guacamole:1.3.0 |
||||||
|
links: |
||||||
|
- guacd |
||||||
|
networks: |
||||||
|
guacnetwork: |
||||||
|
#ports: |
||||||
|
## enable next line if not using nginx |
||||||
|
## - 8080:8080/tcp # Guacamole is on :8080/guacamole, not /. |
||||||
|
## enable next line when using nginx |
||||||
|
#- 8080/tcp |
||||||
|
restart: unless-stopped |
||||||
|
|
||||||
|
# networks |
||||||
|
# create a network 'guacnetwork' in mode 'bridged' |
||||||
|
networks: |
||||||
|
guacnetwork: |
||||||
|
driver: bridge |
||||||
@ -0,0 +1,26 @@ |
|||||||
|
version: '3' |
||||||
|
|
||||||
|
services: |
||||||
|
homeassistant: |
||||||
|
container_name: mistborn_production_home_assistant |
||||||
|
image: homeassistant/home-assistant:stable |
||||||
|
volumes: |
||||||
|
- ../../mistborn_volumes/extra/homeassistant/config:/config |
||||||
|
environment: |
||||||
|
- TZ=America/New_York |
||||||
|
labels: |
||||||
|
- "traefik.enable=true" |
||||||
|
- "traefik.http.routers.homeassistant-http.rule=Host(`homeassistant.mistborn`)" |
||||||
|
- "traefik.http.routers.homeassistant-http.entrypoints=web" |
||||||
|
- "traefik.http.routers.homeassistant-http.middlewares=mistborn_auth@file" |
||||||
|
- "traefik.http.routers.homeassistant-https.rule=Host(`homeassistant.mistborn`)" |
||||||
|
- "traefik.http.routers.homeassistant-https.entrypoints=websecure" |
||||||
|
- "traefik.http.routers.homeassistant-https.middlewares=mistborn_auth@file" |
||||||
|
- "traefik.http.routers.homeassistant-https.tls.certresolver=basic" |
||||||
|
- "traefik.http.services.homeassistant-service.loadbalancer.server.port=8123" |
||||||
|
restart: unless-stopped |
||||||
|
|
||||||
|
networks: |
||||||
|
default: |
||||||
|
external: |
||||||
|
name: mistborn_default |
||||||
@ -0,0 +1,30 @@ |
|||||||
|
version: '3' |
||||||
|
|
||||||
|
volumes: |
||||||
|
production_jellyfin_config: {} |
||||||
|
production_jellyfin_cache: {} |
||||||
|
|
||||||
|
services: |
||||||
|
jellyfin: |
||||||
|
image: jellyfin/jellyfin:latest |
||||||
|
container_name: mistborn_production_jellyfin |
||||||
|
volumes: |
||||||
|
- production_jellyfin_config:/config |
||||||
|
- production_jellyfin_cache:/cache |
||||||
|
- ../../mistborn_volumes/extra/nextcloud:/media:ro |
||||||
|
labels: |
||||||
|
- "traefik.enable=true" |
||||||
|
- "traefik.http.routers.jellyfin-http.rule=Host(`jellyfin.mistborn`)" |
||||||
|
- "traefik.http.routers.jellyfin-http.entrypoints=web" |
||||||
|
- "traefik.http.routers.jellyfin-http.middlewares=mistborn_auth@file" |
||||||
|
- "traefik.http.routers.jellyfin-https.rule=Host(`jellyfin.mistborn`)" |
||||||
|
- "traefik.http.routers.jellyfin-https.entrypoints=websecure" |
||||||
|
- "traefik.http.routers.jellyfin-https.middlewares=mistborn_auth@file" |
||||||
|
- "traefik.http.routers.jellyfin-https.tls.certresolver=basic" |
||||||
|
- "traefik.http.services.jellyfin-service.loadbalancer.server.port=8096" |
||||||
|
restart: unless-stopped |
||||||
|
|
||||||
|
networks: |
||||||
|
default: |
||||||
|
external: |
||||||
|
name: mistborn_default |
||||||
@ -0,0 +1,255 @@ |
|||||||
|
version: '3' |
||||||
|
|
||||||
|
services: |
||||||
|
# Frontend |
||||||
|
jitsi-web: |
||||||
|
image: jitsi/web:latest |
||||||
|
restart: unless-stopped |
||||||
|
#ports: |
||||||
|
#- '${HTTP_PORT}:80' |
||||||
|
#- '${HTTPS_PORT}:443' |
||||||
|
labels: |
||||||
|
- "traefik.enable=true" |
||||||
|
- "traefik.http.routers.jitsi-http.rule=Host(`jitsi.mistborn`)" |
||||||
|
- "traefik.http.routers.jitsi-http.entrypoints=web" |
||||||
|
- "traefik.http.routers.jitsi-http.middlewares=mistborn_auth@file" |
||||||
|
- "traefik.http.routers.jitsi-https.rule=Host(`jitsi.mistborn`)" |
||||||
|
- "traefik.http.routers.jitsi-https.entrypoints=websecure" |
||||||
|
- "traefik.http.routers.jitsi-https.middlewares=mistborn_auth@file" |
||||||
|
- "traefik.http.routers.jitsi-https.tls.certresolver=basic" |
||||||
|
- "traefik.http.services.jitsi-service.loadbalancer.server.port=${HTTP_PORT}" |
||||||
|
volumes: |
||||||
|
- ${CONFIG}/web:/config:Z |
||||||
|
- ${CONFIG}/transcripts:/usr/share/jitsi-meet/transcripts:Z |
||||||
|
env_file: |
||||||
|
- ../.envs/.production/.jitsi |
||||||
|
environment: |
||||||
|
- ENABLE_LETSENCRYPT |
||||||
|
- ENABLE_HTTP_REDIRECT |
||||||
|
- ENABLE_XMPP_WEBSOCKET |
||||||
|
- DISABLE_HTTPS |
||||||
|
- LETSENCRYPT_DOMAIN |
||||||
|
- LETSENCRYPT_EMAIL |
||||||
|
- LETSENCRYPT_USE_STAGING |
||||||
|
- PUBLIC_URL |
||||||
|
- TZ |
||||||
|
- AMPLITUDE_ID |
||||||
|
- ANALYTICS_SCRIPT_URLS |
||||||
|
- ANALYTICS_WHITELISTED_EVENTS |
||||||
|
- BRIDGE_CHANNEL |
||||||
|
- BRANDING_DATA_URL |
||||||
|
- CALLSTATS_CUSTOM_SCRIPT_URL |
||||||
|
- CALLSTATS_ID |
||||||
|
- CALLSTATS_SECRET |
||||||
|
- CHROME_EXTENSION_BANNER_JSON |
||||||
|
- CONFCODE_URL |
||||||
|
- CONFIG_EXTERNAL_CONNECT |
||||||
|
- DEPLOYMENTINFO_ENVIRONMENT |
||||||
|
- DEPLOYMENTINFO_ENVIRONMENT_TYPE |
||||||
|
- DEPLOYMENTINFO_USERREGION |
||||||
|
- DIALIN_NUMBERS_URL |
||||||
|
- DIALOUT_AUTH_URL |
||||||
|
- DIALOUT_CODES_URL |
||||||
|
- DROPBOX_APPKEY |
||||||
|
- DROPBOX_REDIRECT_URI |
||||||
|
- ENABLE_AUDIO_PROCESSING |
||||||
|
- ENABLE_AUTH |
||||||
|
- ENABLE_CALENDAR |
||||||
|
- ENABLE_FILE_RECORDING_SERVICE |
||||||
|
- ENABLE_FILE_RECORDING_SERVICE_SHARING |
||||||
|
- ENABLE_GUESTS |
||||||
|
- ENABLE_IPV6 |
||||||
|
- ENABLE_LIPSYNC |
||||||
|
- ENABLE_NO_AUDIO_DETECTION |
||||||
|
- ENABLE_P2P |
||||||
|
- ENABLE_PREJOIN_PAGE |
||||||
|
- ENABLE_RECORDING |
||||||
|
- ENABLE_REMB |
||||||
|
- ENABLE_REQUIRE_DISPLAY_NAME |
||||||
|
- ENABLE_SIMULCAST |
||||||
|
- ENABLE_STATS_ID |
||||||
|
- ENABLE_STEREO |
||||||
|
- ENABLE_SUBDOMAINS |
||||||
|
- ENABLE_TALK_WHILE_MUTED |
||||||
|
- ENABLE_TCC |
||||||
|
- ENABLE_TRANSCRIPTIONS |
||||||
|
- ETHERPAD_PUBLIC_URL |
||||||
|
- ETHERPAD_URL_BASE |
||||||
|
- GOOGLE_ANALYTICS_ID |
||||||
|
- GOOGLE_API_APP_CLIENT_ID |
||||||
|
- INVITE_SERVICE_URL |
||||||
|
- JICOFO_AUTH_USER |
||||||
|
- MATOMO_ENDPOINT |
||||||
|
- MATOMO_SITE_ID |
||||||
|
- MICROSOFT_API_APP_CLIENT_ID |
||||||
|
- NGINX_RESOLVER |
||||||
|
- NGINX_WORKER_PROCESSES |
||||||
|
- NGINX_WORKER_CONNECTIONS |
||||||
|
- PEOPLE_SEARCH_URL |
||||||
|
- RESOLUTION |
||||||
|
- RESOLUTION_MIN |
||||||
|
- RESOLUTION_WIDTH |
||||||
|
- RESOLUTION_WIDTH_MIN |
||||||
|
- START_AUDIO_ONLY |
||||||
|
- START_AUDIO_MUTED |
||||||
|
- START_BITRATE |
||||||
|
- START_VIDEO_MUTED |
||||||
|
- TESTING_CAP_SCREENSHARE_BITRATE |
||||||
|
- TESTING_OCTO_PROBABILITY |
||||||
|
- XMPP_AUTH_DOMAIN |
||||||
|
- XMPP_BOSH_URL_BASE |
||||||
|
- XMPP_DOMAIN |
||||||
|
- XMPP_GUEST_DOMAIN |
||||||
|
- XMPP_MUC_DOMAIN |
||||||
|
- XMPP_RECORDER_DOMAIN |
||||||
|
- TOKEN_AUTH_URL |
||||||
|
networks: |
||||||
|
default: |
||||||
|
meet.jitsi: |
||||||
|
aliases: |
||||||
|
- ${XMPP_DOMAIN} |
||||||
|
|
||||||
|
# XMPP server |
||||||
|
jitsi-prosody: |
||||||
|
image: jitsi/prosody:latest |
||||||
|
restart: unless-stopped |
||||||
|
expose: |
||||||
|
- '5222' |
||||||
|
- '5347' |
||||||
|
- '5280' |
||||||
|
volumes: |
||||||
|
- ${CONFIG}/prosody/config:/config:Z |
||||||
|
- ${CONFIG}/prosody/prosody-plugins-custom:/prosody-plugins-custom:Z |
||||||
|
env_file: |
||||||
|
- ../.envs/.production/.jitsi |
||||||
|
environment: |
||||||
|
- AUTH_TYPE |
||||||
|
- ENABLE_AUTH |
||||||
|
- ENABLE_GUESTS |
||||||
|
- ENABLE_LOBBY |
||||||
|
- ENABLE_XMPP_WEBSOCKET |
||||||
|
- GLOBAL_MODULES |
||||||
|
- GLOBAL_CONFIG |
||||||
|
- LDAP_URL |
||||||
|
- LDAP_BASE |
||||||
|
- LDAP_BINDDN |
||||||
|
- LDAP_BINDPW |
||||||
|
- LDAP_FILTER |
||||||
|
- LDAP_AUTH_METHOD |
||||||
|
- LDAP_VERSION |
||||||
|
- LDAP_USE_TLS |
||||||
|
- LDAP_TLS_CIPHERS |
||||||
|
- LDAP_TLS_CHECK_PEER |
||||||
|
- LDAP_TLS_CACERT_FILE |
||||||
|
- LDAP_TLS_CACERT_DIR |
||||||
|
- LDAP_START_TLS |
||||||
|
- XMPP_DOMAIN |
||||||
|
- XMPP_AUTH_DOMAIN |
||||||
|
- XMPP_GUEST_DOMAIN |
||||||
|
- XMPP_MUC_DOMAIN |
||||||
|
- XMPP_INTERNAL_MUC_DOMAIN |
||||||
|
- XMPP_MODULES |
||||||
|
- XMPP_MUC_MODULES |
||||||
|
- XMPP_INTERNAL_MUC_MODULES |
||||||
|
- XMPP_RECORDER_DOMAIN |
||||||
|
- XMPP_CROSS_DOMAIN |
||||||
|
- JICOFO_COMPONENT_SECRET |
||||||
|
- JICOFO_AUTH_USER |
||||||
|
- JICOFO_AUTH_PASSWORD |
||||||
|
- JVB_AUTH_USER |
||||||
|
- JVB_AUTH_PASSWORD |
||||||
|
- JIGASI_XMPP_USER |
||||||
|
- JIGASI_XMPP_PASSWORD |
||||||
|
- JIBRI_XMPP_USER |
||||||
|
- JIBRI_XMPP_PASSWORD |
||||||
|
- JIBRI_RECORDER_USER |
||||||
|
- JIBRI_RECORDER_PASSWORD |
||||||
|
- JWT_APP_ID |
||||||
|
- JWT_APP_SECRET |
||||||
|
- JWT_ACCEPTED_ISSUERS |
||||||
|
- JWT_ACCEPTED_AUDIENCES |
||||||
|
- JWT_ASAP_KEYSERVER |
||||||
|
- JWT_ALLOW_EMPTY |
||||||
|
- JWT_AUTH_TYPE |
||||||
|
- JWT_TOKEN_AUTH_MODULE |
||||||
|
- LOG_LEVEL |
||||||
|
- PUBLIC_URL |
||||||
|
- TZ |
||||||
|
networks: |
||||||
|
meet.jitsi: |
||||||
|
aliases: |
||||||
|
- ${XMPP_SERVER} |
||||||
|
|
||||||
|
# Focus component |
||||||
|
jitsi-jicofo: |
||||||
|
image: jitsi/jicofo:latest |
||||||
|
restart: unless-stopped |
||||||
|
volumes: |
||||||
|
- ${CONFIG}/jicofo:/config:Z |
||||||
|
env_file: |
||||||
|
- ../.envs/.production/.jitsi |
||||||
|
environment: |
||||||
|
- AUTH_TYPE |
||||||
|
- ENABLE_AUTH |
||||||
|
- XMPP_DOMAIN |
||||||
|
- XMPP_AUTH_DOMAIN |
||||||
|
- XMPP_INTERNAL_MUC_DOMAIN |
||||||
|
- XMPP_MUC_DOMAIN |
||||||
|
- XMPP_SERVER |
||||||
|
- JICOFO_COMPONENT_SECRET |
||||||
|
- JICOFO_AUTH_USER |
||||||
|
- JICOFO_AUTH_PASSWORD |
||||||
|
- JICOFO_RESERVATION_REST_BASE_URL |
||||||
|
- JVB_BREWERY_MUC |
||||||
|
- JIGASI_BREWERY_MUC |
||||||
|
- JIGASI_SIP_URI |
||||||
|
- JIBRI_BREWERY_MUC |
||||||
|
- JIBRI_PENDING_TIMEOUT |
||||||
|
- TZ |
||||||
|
depends_on: |
||||||
|
- jitsi-prosody |
||||||
|
networks: |
||||||
|
meet.jitsi: |
||||||
|
|
||||||
|
# Video bridge |
||||||
|
jitsi-jvb: |
||||||
|
image: jitsi/jvb:latest |
||||||
|
restart: unless-stopped |
||||||
|
ports: |
||||||
|
- "${MISTBORN_BIND_IP}:${JVB_PORT}:${JVB_PORT}/udp" |
||||||
|
- "${MISTBORN_BIND_IP}:${JVB_TCP_PORT}:${JVB_TCP_PORT}" |
||||||
|
volumes: |
||||||
|
- ${CONFIG}/jvb:/config:Z |
||||||
|
env_file: |
||||||
|
- ../.envs/.production/.jitsi |
||||||
|
environment: |
||||||
|
- DOCKER_HOST_ADDRESS |
||||||
|
- XMPP_AUTH_DOMAIN |
||||||
|
- XMPP_INTERNAL_MUC_DOMAIN |
||||||
|
- XMPP_SERVER |
||||||
|
- JVB_AUTH_USER |
||||||
|
- JVB_AUTH_PASSWORD |
||||||
|
- JVB_BREWERY_MUC |
||||||
|
- JVB_PORT |
||||||
|
- JVB_TCP_HARVESTER_DISABLED |
||||||
|
- JVB_TCP_PORT |
||||||
|
- JVB_TCP_MAPPED_PORT |
||||||
|
- JVB_STUN_SERVERS |
||||||
|
- JVB_ENABLE_APIS |
||||||
|
- JVB_WS_DOMAIN |
||||||
|
- JVB_WS_SERVER_ID |
||||||
|
- PUBLIC_URL |
||||||
|
- TZ |
||||||
|
depends_on: |
||||||
|
- jitsi-prosody |
||||||
|
networks: |
||||||
|
meet.jitsi: |
||||||
|
aliases: |
||||||
|
- jvb.meet.jitsi |
||||||
|
|
||||||
|
# Custom network so all services can communicate using a FQDN |
||||||
|
networks: |
||||||
|
default: |
||||||
|
external: |
||||||
|
name: mistborn_default |
||||||
|
meet.jitsi: |
||||||
@ -0,0 +1,29 @@ |
|||||||
|
version: '3' |
||||||
|
|
||||||
|
services: |
||||||
|
nextcloud: |
||||||
|
image: nextcloud |
||||||
|
container_name: mistborn_production_nextcloud |
||||||
|
env_file: |
||||||
|
- ../.envs/.production/.postgres |
||||||
|
- ../.envs/.production/.nextcloud |
||||||
|
labels: |
||||||
|
- "traefik.enable=true" |
||||||
|
- "traefik.http.routers.nextcloud-http.rule=Host(`nextcloud.mistborn`)" |
||||||
|
- "traefik.http.routers.nextcloud-http.entrypoints=web" |
||||||
|
- "traefik.http.routers.nextcloud-http.middlewares=mistborn_auth@file" |
||||||
|
- "traefik.http.routers.nextcloud-https.rule=Host(`nextcloud.mistborn`)" |
||||||
|
- "traefik.http.routers.nextcloud-https.entrypoints=websecure" |
||||||
|
- "traefik.http.routers.nextcloud-https.middlewares=mistborn_auth@file" |
||||||
|
- "traefik.http.routers.nextcloud-https.tls.certresolver=basic" |
||||||
|
- "traefik.http.services.nextcloud-service.loadbalancer.server.port=80" |
||||||
|
volumes: |
||||||
|
- ../../mistborn_volumes/extra/nextcloud:/var/www/html |
||||||
|
environment: |
||||||
|
- VIRTUAL_HOST=nextcloud.mistborn |
||||||
|
restart: unless-stopped |
||||||
|
|
||||||
|
networks: |
||||||
|
default: |
||||||
|
external: |
||||||
|
name: mistborn_default |
||||||
@ -0,0 +1,27 @@ |
|||||||
|
version: '3' |
||||||
|
|
||||||
|
services: |
||||||
|
onlyoffice: |
||||||
|
container_name: mistborn_production_onlyoffice |
||||||
|
image: onlyoffice/documentserver:latest |
||||||
|
volumes: |
||||||
|
- ../../mistborn_volumes/extra/onlyoffice/logs:/var/log/onlyoffice |
||||||
|
- ../../mistborn_volumes/extra/onlyoffice/cache:/var/lib/onlyoffice |
||||||
|
env_file: |
||||||
|
- ../.envs/.production/.onlyoffice |
||||||
|
labels: |
||||||
|
- "traefik.enable=true" |
||||||
|
- "traefik.http.routers.onlyoffice-http.rule=Host(`onlyoffice.mistborn`)" |
||||||
|
- "traefik.http.routers.onlyoffice-http.entrypoints=web" |
||||||
|
- "traefik.http.routers.onlyoffice-http.middlewares=mistborn_auth@file" |
||||||
|
- "traefik.http.routers.onlyoffice-https.rule=Host(`onlyoffice.mistborn`)" |
||||||
|
- "traefik.http.routers.onlyoffice-https.entrypoints=websecure" |
||||||
|
- "traefik.http.routers.onlyoffice-https.middlewares=mistborn_auth@file" |
||||||
|
- "traefik.http.routers.onlyoffice-https.tls.certresolver=basic" |
||||||
|
- "traefik.http.services.onlyoffice-service.loadbalancer.server.port=80" |
||||||
|
restart: unless-stopped |
||||||
|
|
||||||
|
networks: |
||||||
|
default: |
||||||
|
external: |
||||||
|
name: mistborn_default |
||||||
@ -0,0 +1,33 @@ |
|||||||
|
version: '3' |
||||||
|
|
||||||
|
services: |
||||||
|
raspap: |
||||||
|
image: "cyber5k/raspap:${MISTBORN_TAG}" |
||||||
|
container_name: mistborn_production_raspap |
||||||
|
#network_mode: host |
||||||
|
labels: |
||||||
|
- "traefik.enable=true" |
||||||
|
- "traefik.http.routers.raspap-http.rule=Host(`raspap.mistborn`)" |
||||||
|
- "traefik.http.routers.raspap-http.entrypoints=web" |
||||||
|
- "traefik.http.routers.raspap-http.middlewares=mistborn_auth@file" |
||||||
|
- "traefik.http.routers.raspap-https.rule=Host(`raspap.mistborn`)" |
||||||
|
- "traefik.http.routers.raspap-https.entrypoints=websecure" |
||||||
|
- "traefik.http.routers.raspap-https.middlewares=mistborn_auth@file" |
||||||
|
- "traefik.http.routers.raspap-https.tls.certresolver=basic" |
||||||
|
- "traefik.http.services.raspap-service.loadbalancer.server.port=80" |
||||||
|
env_file: |
||||||
|
- ../.envs/.production/.raspap |
||||||
|
cap_add: |
||||||
|
#- NET_ADMIN |
||||||
|
- SYS_ADMIN |
||||||
|
#- CAP_FOWNER |
||||||
|
privileged: true |
||||||
|
volumes: |
||||||
|
- /sys/fs/cgroup:/sys/fs/cgroup:ro |
||||||
|
#command: /start |
||||||
|
restart: unless-stopped |
||||||
|
|
||||||
|
networks: |
||||||
|
default: |
||||||
|
external: |
||||||
|
name: mistborn_default |
||||||
@ -0,0 +1,72 @@ |
|||||||
|
version: '3' |
||||||
|
|
||||||
|
services: |
||||||
|
# rocketchat |
||||||
|
rocketchat: |
||||||
|
image: rocket.chat:latest |
||||||
|
container_name: mistborn_production_rocketchat |
||||||
|
command: bash -c 'for i in `seq 1 30`; do node main.js && s=$$? && break || s=$$?; echo "Tried $$i times. Waiting 5 secs..."; sleep 5; done; (exit $$s)' |
||||||
|
restart: unless-stopped |
||||||
|
volumes: |
||||||
|
- ../../mistborn_volumes/extra/rocketchat/uploads:/app/uploads |
||||||
|
environment: |
||||||
|
- PORT=3000 |
||||||
|
- ROOT_URL=http://chat.mistborn |
||||||
|
- MONGO_URL=mongodb://mongo:27017/rocketchat |
||||||
|
- MONGO_OPLOG_URL=mongodb://mongo:27017/local |
||||||
|
- Accounts_UseDNSDomainCheck=False |
||||||
|
labels: |
||||||
|
- "traefik.enable=true" |
||||||
|
- "traefik.http.routers.chat-http.rule=Host(`chat.mistborn`)" |
||||||
|
- "traefik.http.routers.chat-http.entrypoints=web" |
||||||
|
- "traefik.http.routers.chat-http.middlewares=mistborn_auth@file" |
||||||
|
- "traefik.http.routers.chat-https.rule=Host(`chat.mistborn`)" |
||||||
|
- "traefik.http.routers.chat-https.entrypoints=websecure" |
||||||
|
- "traefik.http.routers.chat-https.middlewares=mistborn_auth@file" |
||||||
|
- "traefik.http.routers.chat-https.tls.certresolver=basic" |
||||||
|
- "traefik.http.services.chat-service.loadbalancer.server.port=3000" |
||||||
|
depends_on: |
||||||
|
- mongo |
||||||
|
#ports: |
||||||
|
# - 3000:3000 |
||||||
|
|
||||||
|
mongo: |
||||||
|
image: mongo:4.0 |
||||||
|
container_name: mistborn_production_rocketchat_mongo |
||||||
|
restart: unless-stopped |
||||||
|
volumes: |
||||||
|
- ../../mistborn_volumes/extra/rocketchat/data/db:/data/db |
||||||
|
- ../../mistborn_volumes/extra/rocketchat/data/dump:/dump |
||||||
|
command: mongod --smallfiles --oplogSize 128 --replSet rs0 --storageEngine=mmapv1 |
||||||
|
|
||||||
|
# this container's job is just run the command to initialize the replica set. |
||||||
|
# it will run the command and remove himself (it will not stay running) |
||||||
|
mongo-init-replica: |
||||||
|
image: mongo |
||||||
|
command: 'bash -c "for i in `seq 1 30`; do mongo mongo/rocketchat --eval \"rs.initiate({ _id: ''rs0'', members: [ { _id: 0, host: ''localhost:27017'' } ]})\" && s=$$? && break || s=$$?; echo \"Tried $$i times. Waiting 5 secs...\"; sleep 5; done; (exit $$s)"' |
||||||
|
depends_on: |
||||||
|
- mongo |
||||||
|
|
||||||
|
# hubot, the popular chatbot (add the bot user first and change the password before starting this image) |
||||||
|
hubot: |
||||||
|
image: rocketchat/hubot-rocketchat:latest |
||||||
|
container_name: mistborn_production_rocketchat_hubot |
||||||
|
restart: unless-stopped |
||||||
|
environment: |
||||||
|
- ROCKETCHAT_URL=chat.mistborn #:3000 |
||||||
|
# you can add more scripts as you'd like here, they need to be installable by npm |
||||||
|
- EXTERNAL_SCRIPTS=hubot-help,hubot-seen,hubot-links,hubot-diagnostics |
||||||
|
env_file: |
||||||
|
- ../.envs/.production/.rocketchat |
||||||
|
depends_on: |
||||||
|
- rocketchat |
||||||
|
volumes: |
||||||
|
- ../../mistborn_volumes/extra/rocketchat/hubot/scripts:/home/hubot/scripts |
||||||
|
# this is used to expose the hubot port for notifications on the host on port 3001, e.g. for hubot-jenkins-notifier |
||||||
|
ports: |
||||||
|
- "${MISTBORN_BIND_IP}:3001:8080/tcp" |
||||||
|
|
||||||
|
networks: |
||||||
|
default: |
||||||
|
external: |
||||||
|
name: mistborn_default |
||||||
@ -0,0 +1,35 @@ |
|||||||
|
version: '3' |
||||||
|
|
||||||
|
services: |
||||||
|
syncthing: |
||||||
|
image: linuxserver/syncthing:latest |
||||||
|
container_name: mistborn_production_syncthing |
||||||
|
environment: |
||||||
|
- PUID=1000 |
||||||
|
- PGID=1000 |
||||||
|
- TZ=Amereica/New_York |
||||||
|
- UMASK_SET=022 |
||||||
|
volumes: |
||||||
|
- ../../mistborn_volumes/extra/syncthing/config:/config |
||||||
|
- ../../mistborn_volumes/extra/syncthing/data1:/data1 |
||||||
|
- ../../mistborn_volumes/extra/syncthing/data2:/data2 |
||||||
|
ports: |
||||||
|
#- 8384:8384 |
||||||
|
- "${MISTBORN_BIND_IP}:22000:22000/tcp" # listening port |
||||||
|
- "${MISTBORN_BIND_IP}:21027:21027/udp" # protocol discovery |
||||||
|
labels: |
||||||
|
- "traefik.enable=true" |
||||||
|
- "traefik.http.routers.syncthing-http.rule=Host(`syncthing.mistborn`)" |
||||||
|
- "traefik.http.routers.syncthing-http.entrypoints=web" |
||||||
|
- "traefik.http.routers.syncthing-http.middlewares=mistborn_auth@file" |
||||||
|
- "traefik.http.routers.syncthing-https.rule=Host(`syncthing.mistborn`)" |
||||||
|
- "traefik.http.routers.syncthing-https.entrypoints=websecure" |
||||||
|
- "traefik.http.routers.syncthing-https.middlewares=mistborn_auth@file" |
||||||
|
- "traefik.http.routers.syncthing-https.tls.certresolver=basic" |
||||||
|
- "traefik.http.services.syncthing-service.loadbalancer.server.port=8384" |
||||||
|
restart: unless-stopped |
||||||
|
|
||||||
|
networks: |
||||||
|
default: |
||||||
|
external: |
||||||
|
name: mistborn_default |
||||||
@ -0,0 +1,16 @@ |
|||||||
|
version: '3' |
||||||
|
|
||||||
|
services: |
||||||
|
tor-client: |
||||||
|
build: |
||||||
|
context: ../compose/production/tor |
||||||
|
dockerfile: ./Dockerfile |
||||||
|
image: mistborn_production_tor |
||||||
|
container_name: mistborn_production_tor |
||||||
|
ports: |
||||||
|
- "${MISTBORN_BIND_IP}:9150:9150/tcp" |
||||||
|
|
||||||
|
networks: |
||||||
|
default: |
||||||
|
external: |
||||||
|
name: mistborn_default |
||||||
@ -0,0 +1,70 @@ |
|||||||
|
# Wazuh App Copyright (C) 2021 Wazuh Inc. (License GPLv2) |
||||||
|
version: '3.7' |
||||||
|
|
||||||
|
services: |
||||||
|
wazuh: |
||||||
|
image: wazuh/wazuh-odfe:4.1.5 |
||||||
|
hostname: wazuh-manager |
||||||
|
restart: unless-stopped |
||||||
|
ports: |
||||||
|
- "${MISTBORN_BIND_IP}:1514:1514" |
||||||
|
- "${MISTBORN_BIND_IP}:1515:1515" |
||||||
|
- "${MISTBORN_BIND_IP}:514:514/udp" |
||||||
|
- "${MISTBORN_BIND_IP}:55000:55000" |
||||||
|
environment: |
||||||
|
- FILEBEAT_SSL_VERIFICATION_MODE=none |
||||||
|
env_file: |
||||||
|
- ../.envs/.production/.wazuh |
||||||
|
volumes: |
||||||
|
- ossec_api_configuration:/var/ossec/api/configuration |
||||||
|
- ossec_etc:/var/ossec/etc |
||||||
|
- ossec_logs:/var/ossec/logs |
||||||
|
- ossec_queue:/var/ossec/queue |
||||||
|
- ossec_var_multigroups:/var/ossec/var/multigroups |
||||||
|
- ossec_integrations:/var/ossec/integrations |
||||||
|
- ossec_active_response:/var/ossec/active-response/bin |
||||||
|
- ossec_agentless:/var/ossec/agentless |
||||||
|
- ossec_wodles:/var/ossec/wodles |
||||||
|
- filebeat_etc:/etc/filebeat |
||||||
|
- filebeat_var:/var/lib/filebeat |
||||||
|
|
||||||
|
wazuh-kibana: |
||||||
|
image: wazuh/wazuh-kibana-odfe:4.1.5 |
||||||
|
hostname: wazuh-kibana |
||||||
|
restart: unless-stopped |
||||||
|
labels: |
||||||
|
- "traefik.enable=true" |
||||||
|
- "traefik.http.routers.wazuhk-http.rule=Host(`wazuh.mistborn`)" |
||||||
|
- "traefik.http.routers.wazuhk-http.entrypoints=web" |
||||||
|
- "traefik.http.routers.wazuhk-http.middlewares=mistborn_auth@file" |
||||||
|
- "traefik.http.routers.wazuhk-https.rule=Host(`wazuh.mistborn`)" |
||||||
|
- "traefik.http.routers.wazuhk-https.entrypoints=websecure" |
||||||
|
- "traefik.http.routers.wazuhk-https.middlewares=mistborn_auth@file" |
||||||
|
- "traefik.http.routers.wazuhk-https.tls.certresolver=basic" |
||||||
|
- "traefik.http.services.wazuhk-service.loadbalancer.server.port=5601" |
||||||
|
#ports: |
||||||
|
# - "${MISTBORN_BIND_IP}:5601:5601" |
||||||
|
environment: |
||||||
|
- SERVER_SSL_ENABLED=false |
||||||
|
- SERVER_SSL_CERTIFICATE=/usr/share/kibana/config/opendistroforelasticsearch.example.org.cert |
||||||
|
- SERVER_SSL_KEY=/usr/share/kibana/config/opendistroforelasticsearch.example.org.key |
||||||
|
env_file: |
||||||
|
- ../.envs/.production/.wazuh |
||||||
|
|
||||||
|
volumes: |
||||||
|
ossec_api_configuration: |
||||||
|
ossec_etc: |
||||||
|
ossec_logs: |
||||||
|
ossec_queue: |
||||||
|
ossec_var_multigroups: |
||||||
|
ossec_integrations: |
||||||
|
ossec_active_response: |
||||||
|
ossec_agentless: |
||||||
|
ossec_wodles: |
||||||
|
filebeat_etc: |
||||||
|
filebeat_var: |
||||||
|
|
||||||
|
networks: |
||||||
|
default: |
||||||
|
external: |
||||||
|
name: mistborn_default |
||||||
@ -0,0 +1,3 @@ |
|||||||
|
[WebService] |
||||||
|
ProtocolHeader = X-Forwarded-Proto |
||||||
|
AllowUnencrypted=true |
||||||
@ -0,0 +1,366 @@ |
|||||||
|
# shellcheck disable=SC2034 |
||||||
|
|
||||||
|
# Security |
||||||
|
# |
||||||
|
# Set these to strong passwords to avoid intruders from impersonating a service account |
||||||
|
# The service(s) won't start unless these are specified |
||||||
|
# Running ./gen-passwords.sh will update .env with strong passwords |
||||||
|
# You may skip the Jigasi and Jibri passwords if you are not using those |
||||||
|
# DO NOT reuse passwords |
||||||
|
# |
||||||
|
|
||||||
|
# XMPP component password for Jicofo |
||||||
|
JICOFO_COMPONENT_SECRET= |
||||||
|
|
||||||
|
# XMPP password for Jicofo client connections |
||||||
|
JICOFO_AUTH_PASSWORD= |
||||||
|
|
||||||
|
# XMPP password for JVB client connections |
||||||
|
JVB_AUTH_PASSWORD= |
||||||
|
|
||||||
|
# XMPP password for Jigasi MUC client connections |
||||||
|
JIGASI_XMPP_PASSWORD= |
||||||
|
|
||||||
|
# XMPP recorder password for Jibri client connections |
||||||
|
JIBRI_RECORDER_PASSWORD= |
||||||
|
|
||||||
|
# XMPP password for Jibri client connections |
||||||
|
JIBRI_XMPP_PASSWORD= |
||||||
|
|
||||||
|
|
||||||
|
# |
||||||
|
# Basic configuration options |
||||||
|
# |
||||||
|
|
||||||
|
# Directory where all configuration will be stored |
||||||
|
#CONFIG=~/.jitsi-meet-cfg |
||||||
|
CONFIG=../.envs/.production/.jitsi-cfg |
||||||
|
|
||||||
|
# Exposed HTTP port |
||||||
|
HTTP_PORT=80 |
||||||
|
|
||||||
|
# Exposed HTTPS port |
||||||
|
HTTPS_PORT=443 |
||||||
|
|
||||||
|
# System time zone |
||||||
|
TZ=UTC |
||||||
|
|
||||||
|
# Public URL for the web service (required) |
||||||
|
PUBLIC_URL=https://jitsi.mistborn |
||||||
|
|
||||||
|
# IP address of the Docker host |
||||||
|
# See the "Running behind NAT or on a LAN environment" section in the Handbook: |
||||||
|
# https://jitsi.github.io/handbook/docs/devops-guide/devops-guide-docker#running-behind-nat-or-on-a-lan-environment |
||||||
|
#DOCKER_HOST_ADDRESS=192.168.1.1 |
||||||
|
DOCKER_HOST_ADDRESS=10.2.3.1 |
||||||
|
|
||||||
|
# Control whether the lobby feature should be enabled or not |
||||||
|
#ENABLE_LOBBY=1 |
||||||
|
|
||||||
|
# Show a prejoin page before entering a conference |
||||||
|
#ENABLE_PREJOIN_PAGE=0 |
||||||
|
|
||||||
|
# |
||||||
|
# Let's Encrypt configuration |
||||||
|
# |
||||||
|
|
||||||
|
# Enable Let's Encrypt certificate generation |
||||||
|
#ENABLE_LETSENCRYPT=1 |
||||||
|
|
||||||
|
# Domain for which to generate the certificate |
||||||
|
#LETSENCRYPT_DOMAIN=meet.example.com |
||||||
|
|
||||||
|
# E-Mail for receiving important account notifications (mandatory) |
||||||
|
#LETSENCRYPT_EMAIL=alice@atlanta.net |
||||||
|
|
||||||
|
# Use the staging server (for avoiding rate limits while testing) |
||||||
|
#LETSENCRYPT_USE_STAGING=1 |
||||||
|
|
||||||
|
|
||||||
|
# |
||||||
|
# Etherpad integration (for document sharing) |
||||||
|
# |
||||||
|
|
||||||
|
# Set etherpad-lite URL in docker local network (uncomment to enable) |
||||||
|
#ETHERPAD_URL_BASE=http://etherpad.meet.jitsi:9001 |
||||||
|
|
||||||
|
# Set etherpad-lite public URL (uncomment to enable) |
||||||
|
#ETHERPAD_PUBLIC_URL=https://etherpad.my.domain |
||||||
|
|
||||||
|
# Name your etherpad instance! |
||||||
|
ETHERPAD_TITLE="Video Chat" |
||||||
|
|
||||||
|
# The default text of a pad |
||||||
|
ETHERPAD_DEFAULT_PAD_TEXT="Welcome to Web Chat!\n\n" |
||||||
|
|
||||||
|
# Name of the skin for etherpad |
||||||
|
ETHERPAD_SKIN_NAME="colibris" |
||||||
|
|
||||||
|
# Skin variants for etherpad |
||||||
|
ETHERPAD_SKIN_VARIANTS="super-light-toolbar super-light-editor light-background full-width-editor" |
||||||
|
|
||||||
|
|
||||||
|
# |
||||||
|
# Basic Jigasi configuration options (needed for SIP gateway support) |
||||||
|
# |
||||||
|
|
||||||
|
# SIP URI for incoming / outgoing calls |
||||||
|
#JIGASI_SIP_URI=test@sip2sip.info |
||||||
|
|
||||||
|
# Password for the specified SIP account as a clear text |
||||||
|
#JIGASI_SIP_PASSWORD=passw0rd |
||||||
|
|
||||||
|
# SIP server (use the SIP account domain if in doubt) |
||||||
|
#JIGASI_SIP_SERVER=sip2sip.info |
||||||
|
|
||||||
|
# SIP server port |
||||||
|
#JIGASI_SIP_PORT=5060 |
||||||
|
|
||||||
|
# SIP server transport |
||||||
|
#JIGASI_SIP_TRANSPORT=UDP |
||||||
|
|
||||||
|
# |
||||||
|
# Authentication configuration (see handbook for details) |
||||||
|
# |
||||||
|
|
||||||
|
# Enable authentication |
||||||
|
#ENABLE_AUTH=1 |
||||||
|
|
||||||
|
# Enable guest access |
||||||
|
#ENABLE_GUESTS=1 |
||||||
|
|
||||||
|
# Select authentication type: internal, jwt or ldap |
||||||
|
#AUTH_TYPE=internal |
||||||
|
|
||||||
|
# JWT authentication |
||||||
|
# |
||||||
|
|
||||||
|
# Application identifier |
||||||
|
#JWT_APP_ID=my_jitsi_app_id |
||||||
|
|
||||||
|
# Application secret known only to your token |
||||||
|
#JWT_APP_SECRET=my_jitsi_app_secret |
||||||
|
|
||||||
|
# (Optional) Set asap_accepted_issuers as a comma separated list |
||||||
|
#JWT_ACCEPTED_ISSUERS=my_web_client,my_app_client |
||||||
|
|
||||||
|
# (Optional) Set asap_accepted_audiences as a comma separated list |
||||||
|
#JWT_ACCEPTED_AUDIENCES=my_server1,my_server2 |
||||||
|
|
||||||
|
|
||||||
|
# LDAP authentication (for more information see the Cyrus SASL saslauthd.conf man page) |
||||||
|
# |
||||||
|
|
||||||
|
# LDAP url for connection |
||||||
|
#LDAP_URL=ldaps://ldap.domain.com/ |
||||||
|
|
||||||
|
# LDAP base DN. Can be empty |
||||||
|
#LDAP_BASE=DC=example,DC=domain,DC=com |
||||||
|
|
||||||
|
# LDAP user DN. Do not specify this parameter for the anonymous bind |
||||||
|
#LDAP_BINDDN=CN=binduser,OU=users,DC=example,DC=domain,DC=com |
||||||
|
|
||||||
|
# LDAP user password. Do not specify this parameter for the anonymous bind |
||||||
|
#LDAP_BINDPW=LdapUserPassw0rd |
||||||
|
|
||||||
|
# LDAP filter. Tokens example: |
||||||
|
# %1-9 - if the input key is user@mail.domain.com, then %1 is com, %2 is domain and %3 is mail |
||||||
|
# %s - %s is replaced by the complete service string |
||||||
|
# %r - %r is replaced by the complete realm string |
||||||
|
#LDAP_FILTER=(sAMAccountName=%u) |
||||||
|
|
||||||
|
# LDAP authentication method |
||||||
|
#LDAP_AUTH_METHOD=bind |
||||||
|
|
||||||
|
# LDAP version |
||||||
|
#LDAP_VERSION=3 |
||||||
|
|
||||||
|
# LDAP TLS using |
||||||
|
#LDAP_USE_TLS=1 |
||||||
|
|
||||||
|
# List of SSL/TLS ciphers to allow |
||||||
|
#LDAP_TLS_CIPHERS=SECURE256:SECURE128:!AES-128-CBC:!ARCFOUR-128:!CAMELLIA-128-CBC:!3DES-CBC:!CAMELLIA-128-CBC |
||||||
|
|
||||||
|
# Require and verify server certificate |
||||||
|
#LDAP_TLS_CHECK_PEER=1 |
||||||
|
|
||||||
|
# Path to CA cert file. Used when server certificate verify is enabled |
||||||
|
#LDAP_TLS_CACERT_FILE=/etc/ssl/certs/ca-certificates.crt |
||||||
|
|
||||||
|
# Path to CA certs directory. Used when server certificate verify is enabled |
||||||
|
#LDAP_TLS_CACERT_DIR=/etc/ssl/certs |
||||||
|
|
||||||
|
# Wether to use starttls, implies LDAPv3 and requires ldap:// instead of ldaps:// |
||||||
|
# LDAP_START_TLS=1 |
||||||
|
|
||||||
|
|
||||||
|
# |
||||||
|
# Advanced configuration options (you generally don't need to change these) |
||||||
|
# |
||||||
|
|
||||||
|
# Internal XMPP domain |
||||||
|
XMPP_DOMAIN=meet.jitsi |
||||||
|
|
||||||
|
# Internal XMPP server |
||||||
|
XMPP_SERVER=xmpp.meet.jitsi |
||||||
|
|
||||||
|
# Internal XMPP server URL |
||||||
|
XMPP_BOSH_URL_BASE=http://xmpp.meet.jitsi:5280 |
||||||
|
|
||||||
|
# Internal XMPP domain for authenticated services |
||||||
|
XMPP_AUTH_DOMAIN=auth.meet.jitsi |
||||||
|
|
||||||
|
# XMPP domain for the MUC |
||||||
|
XMPP_MUC_DOMAIN=muc.meet.jitsi |
||||||
|
|
||||||
|
# XMPP domain for the internal MUC used for jibri, jigasi and jvb pools |
||||||
|
XMPP_INTERNAL_MUC_DOMAIN=internal-muc.meet.jitsi |
||||||
|
|
||||||
|
# XMPP domain for unauthenticated users |
||||||
|
XMPP_GUEST_DOMAIN=guest.meet.jitsi |
||||||
|
|
||||||
|
# Comma separated list of domains for cross domain policy or "true" to allow all |
||||||
|
# The PUBLIC_URL is always allowed |
||||||
|
#XMPP_CROSS_DOMAIN=true |
||||||
|
|
||||||
|
# Custom Prosody modules for XMPP_DOMAIN (comma separated) |
||||||
|
XMPP_MODULES= |
||||||
|
|
||||||
|
# Custom Prosody modules for MUC component (comma separated) |
||||||
|
XMPP_MUC_MODULES= |
||||||
|
|
||||||
|
# Custom Prosody modules for internal MUC component (comma separated) |
||||||
|
XMPP_INTERNAL_MUC_MODULES= |
||||||
|
|
||||||
|
# MUC for the JVB pool |
||||||
|
JVB_BREWERY_MUC=jvbbrewery |
||||||
|
|
||||||
|
# XMPP user for JVB client connections |
||||||
|
JVB_AUTH_USER=jvb |
||||||
|
|
||||||
|
# STUN servers used to discover the server's public IP |
||||||
|
JVB_STUN_SERVERS=meet-jit-si-turnrelay.jitsi.net:443 |
||||||
|
|
||||||
|
# Media port for the Jitsi Videobridge |
||||||
|
JVB_PORT=10000 |
||||||
|
|
||||||
|
# TCP Fallback for Jitsi Videobridge for when UDP isn't available |
||||||
|
JVB_TCP_HARVESTER_DISABLED=true |
||||||
|
JVB_TCP_PORT=4443 |
||||||
|
JVB_TCP_MAPPED_PORT=4443 |
||||||
|
|
||||||
|
# A comma separated list of APIs to enable when the JVB is started [default: none] |
||||||
|
# See https://github.com/jitsi/jitsi-videobridge/blob/master/doc/rest.md for more information |
||||||
|
#JVB_ENABLE_APIS=rest,colibri |
||||||
|
|
||||||
|
# XMPP user for Jicofo client connections. |
||||||
|
# NOTE: this option doesn't currently work due to a bug |
||||||
|
JICOFO_AUTH_USER=focus |
||||||
|
|
||||||
|
# Base URL of Jicofo's reservation REST API |
||||||
|
#JICOFO_RESERVATION_REST_BASE_URL=http://reservation.example.com |
||||||
|
|
||||||
|
# Enable Jicofo's health check REST API (http://<jicofo_base_url>:8888/about/health) |
||||||
|
#JICOFO_ENABLE_HEALTH_CHECKS=true |
||||||
|
|
||||||
|
# XMPP user for Jigasi MUC client connections |
||||||
|
JIGASI_XMPP_USER=jigasi |
||||||
|
|
||||||
|
# MUC name for the Jigasi pool |
||||||
|
JIGASI_BREWERY_MUC=jigasibrewery |
||||||
|
|
||||||
|
# Minimum port for media used by Jigasi |
||||||
|
JIGASI_PORT_MIN=20000 |
||||||
|
|
||||||
|
# Maximum port for media used by Jigasi |
||||||
|
JIGASI_PORT_MAX=20050 |
||||||
|
|
||||||
|
# Enable SDES srtp |
||||||
|
#JIGASI_ENABLE_SDES_SRTP=1 |
||||||
|
|
||||||
|
# Keepalive method |
||||||
|
#JIGASI_SIP_KEEP_ALIVE_METHOD=OPTIONS |
||||||
|
|
||||||
|
# Health-check extension |
||||||
|
#JIGASI_HEALTH_CHECK_SIP_URI=keepalive |
||||||
|
|
||||||
|
# Health-check interval |
||||||
|
#JIGASI_HEALTH_CHECK_INTERVAL=300000 |
||||||
|
# |
||||||
|
# Enable Jigasi transcription |
||||||
|
#ENABLE_TRANSCRIPTIONS=1 |
||||||
|
|
||||||
|
# Jigasi will record audio when transcriber is on [default: false] |
||||||
|
#JIGASI_TRANSCRIBER_RECORD_AUDIO=true |
||||||
|
|
||||||
|
# Jigasi will send transcribed text to the chat when transcriber is on [default: false] |
||||||
|
#JIGASI_TRANSCRIBER_SEND_TXT=true |
||||||
|
|
||||||
|
# Jigasi will post an url to the chat with transcription file [default: false] |
||||||
|
#JIGASI_TRANSCRIBER_ADVERTISE_URL=true |
||||||
|
|
||||||
|
# Credentials for connect to Cloud Google API from Jigasi |
||||||
|
# Please read https://cloud.google.com/text-to-speech/docs/quickstart-protocol |
||||||
|
# section "Before you begin" paragraph 1 to 5 |
||||||
|
# Copy the values from the json to the related env vars |
||||||
|
#GC_PROJECT_ID= |
||||||
|
#GC_PRIVATE_KEY_ID= |
||||||
|
#GC_PRIVATE_KEY= |
||||||
|
#GC_CLIENT_EMAIL= |
||||||
|
#GC_CLIENT_ID= |
||||||
|
#GC_CLIENT_CERT_URL= |
||||||
|
|
||||||
|
# Enable recording |
||||||
|
#ENABLE_RECORDING=1 |
||||||
|
|
||||||
|
# XMPP domain for the jibri recorder |
||||||
|
XMPP_RECORDER_DOMAIN=recorder.meet.jitsi |
||||||
|
|
||||||
|
# XMPP recorder user for Jibri client connections |
||||||
|
JIBRI_RECORDER_USER=recorder |
||||||
|
|
||||||
|
# Directory for recordings inside Jibri container |
||||||
|
JIBRI_RECORDING_DIR=/config/recordings |
||||||
|
|
||||||
|
# The finalizing script. Will run after recording is complete |
||||||
|
JIBRI_FINALIZE_RECORDING_SCRIPT_PATH=/config/finalize.sh |
||||||
|
|
||||||
|
# XMPP user for Jibri client connections |
||||||
|
JIBRI_XMPP_USER=jibri |
||||||
|
|
||||||
|
# MUC name for the Jibri pool |
||||||
|
JIBRI_BREWERY_MUC=jibribrewery |
||||||
|
|
||||||
|
# MUC connection timeout |
||||||
|
JIBRI_PENDING_TIMEOUT=90 |
||||||
|
|
||||||
|
# When jibri gets a request to start a service for a room, the room |
||||||
|
# jid will look like: roomName@optional.prefixes.subdomain.xmpp_domain |
||||||
|
# We'll build the url for the call by transforming that into: |
||||||
|
# https://xmpp_domain/subdomain/roomName |
||||||
|
# So if there are any prefixes in the jid (like jitsi meet, which |
||||||
|
# has its participants join a muc at conference.xmpp_domain) then |
||||||
|
# list that prefix here so it can be stripped out to generate |
||||||
|
# the call url correctly |
||||||
|
JIBRI_STRIP_DOMAIN_JID=muc |
||||||
|
|
||||||
|
# Directory for logs inside Jibri container |
||||||
|
JIBRI_LOGS_DIR=/config/logs |
||||||
|
|
||||||
|
# Disable HTTPS: handle TLS connections outside of this setup |
||||||
|
DISABLE_HTTPS=1 |
||||||
|
|
||||||
|
# Redirect HTTP traffic to HTTPS |
||||||
|
# Necessary for Let's Encrypt, relies on standard HTTPS port (443) |
||||||
|
#ENABLE_HTTP_REDIRECT=1 |
||||||
|
|
||||||
|
# Enable IPv6 |
||||||
|
# Provides means to disable IPv6 in environments that don't support it (get with the times, people!) |
||||||
|
#ENABLE_IPV6=1 |
||||||
|
|
||||||
|
# Container restart policy |
||||||
|
# Defaults to unless-stopped |
||||||
|
RESTART_POLICY=unless-stopped |
||||||
|
|
||||||
|
# Authenticate using external service or just focus external auth window if there is one already. |
||||||
|
# TOKEN_AUTH_URL=https://auth.meet.example.com/{room} |
||||||
@ -0,0 +1,25 @@ |
|||||||
|
[Unit] |
||||||
|
Description=Mistborn Bitwarden Service |
||||||
|
Requires=Mistborn-base.service |
||||||
|
After=Mistborn-base.service |
||||||
|
PartOf=Mistborn-base.service |
||||||
|
|
||||||
|
[Service] |
||||||
|
Restart=always |
||||||
|
RestartSec=15 |
||||||
|
User=root |
||||||
|
Group=docker |
||||||
|
PermissionsStartOnly=true |
||||||
|
# Shutdown container (if running) when unit is stopped |
||||||
|
ExecStartPre=/opt/mistborn/scripts/wrappers/mistborn_docker.sh bitwarden docker-compose -f /opt/mistborn/extra/bitwarden.yml down |
||||||
|
|
||||||
|
ExecStartPre=/sbin/iptables -w -I DOCKER-USER -i DIFACE -p tcp --dport 3012 -j MISTBORN_LOG_DROP |
||||||
|
# Start container when unit is started |
||||||
|
ExecStart=/opt/mistborn/scripts/wrappers/mistborn_docker.sh bitwarden docker-compose -f /opt/mistborn/extra/bitwarden.yml up --build |
||||||
|
# Stop container when unit is stopped |
||||||
|
ExecStop=/opt/mistborn/scripts/wrappers/mistborn_docker.sh bitwarden docker-compose -f /opt/mistborn/extra/bitwarden.yml down |
||||||
|
# Post stop |
||||||
|
ExecStopPost=-/sbin/iptables -D DOCKER-USER -i DIFACE -p tcp --dport 3012 -j MISTBORN_LOG_DROP |
||||||
|
|
||||||
|
[Install] |
||||||
|
WantedBy=Mistborn-base.service |
||||||
@ -0,0 +1,22 @@ |
|||||||
|
[Unit] |
||||||
|
Description=Mistborn Elasticsearch Service |
||||||
|
Requires=Mistborn-base.service |
||||||
|
After=Mistborn-base.service |
||||||
|
PartOf=Mistborn-base.service |
||||||
|
|
||||||
|
[Service] |
||||||
|
Restart=always |
||||||
|
RestartSec=15 |
||||||
|
User=root |
||||||
|
Group=docker |
||||||
|
PermissionsStartOnly=true |
||||||
|
# Shutdown container (if running) when unit is stopped |
||||||
|
ExecStartPre=/usr/sbin/sysctl -w vm.max_map_count=262144 |
||||||
|
ExecStartPre=/opt/mistborn/scripts/wrappers/mistborn_docker.sh elasticsearch docker-compose -f /opt/mistborn/extra/elasticsearch.yml down |
||||||
|
# Start container when unit is started |
||||||
|
ExecStart=/opt/mistborn/scripts/wrappers/mistborn_docker.sh elasticsearch docker-compose -f /opt/mistborn/extra/elasticsearch.yml up --build |
||||||
|
# Stop container when unit is stopped |
||||||
|
ExecStop=/opt/mistborn/scripts/wrappers/mistborn_docker.sh elasticsearch docker-compose -f /opt/mistborn/extra/elasticsearch.yml down |
||||||
|
|
||||||
|
[Install] |
||||||
|
WantedBy=Mistborn-base.service |
||||||
@ -0,0 +1,23 @@ |
|||||||
|
[Unit] |
||||||
|
Description=Mistborn Guacamole |
||||||
|
Requires=Mistborn-base.service |
||||||
|
After=Mistborn-base.service |
||||||
|
PartOf=Mistborn-base.service |
||||||
|
|
||||||
|
[Service] |
||||||
|
Restart=always |
||||||
|
RestartSec=15 |
||||||
|
User=root |
||||||
|
Group=docker |
||||||
|
PermissionsStartOnly=true |
||||||
|
# Shutdown container (if running) when unit is stopped |
||||||
|
ExecStartPre=/opt/mistborn/scripts/wrappers/mistborn_docker.sh guacamole docker-compose -f /opt/mistborn/extra/guacamole.yml down |
||||||
|
|
||||||
|
# Start container when unit is started |
||||||
|
ExecStart=/opt/mistborn/scripts/wrappers/mistborn_docker.sh guacamole docker-compose -f /opt/mistborn/extra/guacamole.yml up --build |
||||||
|
# Stop container when unit is stopped |
||||||
|
ExecStop=/opt/mistborn/scripts/wrappers/mistborn_docker.sh guacamole docker-compose -f /opt/mistborn/extra/guacamole.yml down |
||||||
|
# Post stop |
||||||
|
|
||||||
|
[Install] |
||||||
|
WantedBy=Mistborn-base.service |
||||||
@ -0,0 +1,23 @@ |
|||||||
|
[Unit] |
||||||
|
Description=Mistborn Home Assistant |
||||||
|
Requires=Mistborn-base.service |
||||||
|
After=Mistborn-base.service |
||||||
|
PartOf=Mistborn-base.service |
||||||
|
|
||||||
|
[Service] |
||||||
|
Restart=always |
||||||
|
RestartSec=15 |
||||||
|
User=root |
||||||
|
Group=docker |
||||||
|
PermissionsStartOnly=true |
||||||
|
# Shutdown container (if running) when unit is stopped |
||||||
|
ExecStartPre=/opt/mistborn/scripts/wrappers/mistborn_docker.sh homeassistant docker-compose -f /opt/mistborn/extra/homeassistant.yml down |
||||||
|
|
||||||
|
# Start container when unit is started |
||||||
|
ExecStart=/opt/mistborn/scripts/wrappers/mistborn_docker.sh homeassistant docker-compose -f /opt/mistborn/extra/homeassistant.yml up --build |
||||||
|
# Stop container when unit is stopped |
||||||
|
ExecStop=/opt/mistborn/scripts/wrappers/mistborn_docker.sh homeassistant docker-compose -f /opt/mistborn/extra/homeassistant.yml down |
||||||
|
# Post stop |
||||||
|
|
||||||
|
[Install] |
||||||
|
WantedBy=Mistborn-base.service |
||||||
@ -0,0 +1,23 @@ |
|||||||
|
[Unit] |
||||||
|
Description=Mistborn Jellyfin Service |
||||||
|
Requires=Mistborn-nextcloud.service |
||||||
|
After=Mistborn-nextcloud.service |
||||||
|
PartOf=Mistborn-base.service |
||||||
|
|
||||||
|
[Service] |
||||||
|
Restart=always |
||||||
|
RestartSec=15 |
||||||
|
User=root |
||||||
|
Group=docker |
||||||
|
PermissionsStartOnly=true |
||||||
|
# Shutdown container (if running) when unit is stopped |
||||||
|
ExecStartPre=/opt/mistborn/scripts/wrappers/mistborn_docker.sh jellyfin docker-compose -f /opt/mistborn/extra/jellyfin.yml down |
||||||
|
|
||||||
|
# Start container when unit is started |
||||||
|
ExecStart=/opt/mistborn/scripts/wrappers/mistborn_docker.sh jellyfin docker-compose -f /opt/mistborn/extra/jellyfin.yml up --build |
||||||
|
# Stop container when unit is stopped |
||||||
|
ExecStop=/opt/mistborn/scripts/wrappers/mistborn_docker.sh jellyfin docker-compose -f /opt/mistborn/extra/jellyfin.yml down |
||||||
|
# Post stop |
||||||
|
|
||||||
|
[Install] |
||||||
|
WantedBy=Mistborn-base.service |
||||||
@ -0,0 +1,27 @@ |
|||||||
|
[Unit] |
||||||
|
Description=Mistborn Jitsi Service |
||||||
|
Requires=Mistborn-base.service |
||||||
|
After=Mistborn-base.service |
||||||
|
PartOf=Mistborn-base.service |
||||||
|
|
||||||
|
[Service] |
||||||
|
Restart=always |
||||||
|
RestartSec=15 |
||||||
|
User=root |
||||||
|
Group=docker |
||||||
|
PermissionsStartOnly=true |
||||||
|
|
||||||
|
# Shutdown container (if running) when unit is stopped |
||||||
|
ExecStartPre=/opt/mistborn/scripts/wrappers/mistborn_docker.sh jitsi docker-compose -f /opt/mistborn/extra/jitsi-meet.yml down |
||||||
|
ExecStartPre=/opt/mistborn/scripts/wrappers/mistborn_docker.sh jitsi /opt/mistborn/scripts/services/jitsi/iptables_up.sh |
||||||
|
|
||||||
|
# Start container when unit is started |
||||||
|
ExecStart=/opt/mistborn/scripts/wrappers/mistborn_docker.sh jitsi docker-compose -f /opt/mistborn/extra/jitsi-meet.yml up --build |
||||||
|
|
||||||
|
# Stop container when unit is stopped |
||||||
|
ExecStop=/opt/mistborn/scripts/wrappers/mistborn_docker.sh jitsi docker-compose -f /opt/mistborn/extra/jitsi-meet.yml down |
||||||
|
# Post stop |
||||||
|
ExecStopPost=-/opt/mistborn/scripts/wrappers/mistborn_docker.sh jitsi /opt/mistborn/scripts/services/jitsi/iptables_down.sh |
||||||
|
|
||||||
|
[Install] |
||||||
|
WantedBy=Mistborn-base.service |
||||||
@ -0,0 +1,23 @@ |
|||||||
|
[Unit] |
||||||
|
Description=Mistborn Nextcloud Service |
||||||
|
Requires=Mistborn-base.service |
||||||
|
After=Mistborn-base.service |
||||||
|
PartOf=Mistborn-base.service |
||||||
|
|
||||||
|
[Service] |
||||||
|
Restart=always |
||||||
|
RestartSec=15 |
||||||
|
User=root |
||||||
|
Group=docker |
||||||
|
PermissionsStartOnly=true |
||||||
|
# Shutdown container (if running) when unit is stopped |
||||||
|
ExecStartPre=/opt/mistborn/scripts/wrappers/mistborn_docker.sh nextcloud docker-compose -f /opt/mistborn/extra/nextcloud.yml down |
||||||
|
|
||||||
|
# Start container when unit is started |
||||||
|
ExecStart=/opt/mistborn/scripts/wrappers/mistborn_docker.sh nextcloud docker-compose -f /opt/mistborn/extra/nextcloud.yml up --build |
||||||
|
# Stop container when unit is stopped |
||||||
|
ExecStop=/opt/mistborn/scripts/wrappers/mistborn_docker.sh nextcloud docker-compose -f /opt/mistborn/extra/nextcloud.yml down |
||||||
|
# Post stop |
||||||
|
|
||||||
|
[Install] |
||||||
|
WantedBy=Mistborn-base.service |
||||||
@ -0,0 +1,23 @@ |
|||||||
|
[Unit] |
||||||
|
Description=Mistborn OnlyOffice Service |
||||||
|
Requires=Mistborn-base.service |
||||||
|
After=Mistborn-base.service |
||||||
|
PartOf=Mistborn-base.service |
||||||
|
|
||||||
|
[Service] |
||||||
|
Restart=always |
||||||
|
RestartSec=15 |
||||||
|
User=root |
||||||
|
Group=docker |
||||||
|
PermissionsStartOnly=true |
||||||
|
# Shutdown container (if running) when unit is stopped |
||||||
|
ExecStartPre=/opt/mistborn/scripts/wrappers/mistborn_docker.sh onlyoffice docker-compose -f /opt/mistborn/extra/onlyoffice.yml down |
||||||
|
|
||||||
|
# Start container when unit is started |
||||||
|
ExecStart=/opt/mistborn/scripts/wrappers/mistborn_docker.sh onlyoffice docker-compose -f /opt/mistborn/extra/onlyoffice.yml up --build |
||||||
|
# Stop container when unit is stopped |
||||||
|
ExecStop=/opt/mistborn/scripts/wrappers/mistborn_docker.sh onlyoffice docker-compose -f /opt/mistborn/extra/onlyoffice.yml down |
||||||
|
# Post stop |
||||||
|
|
||||||
|
[Install] |
||||||
|
WantedBy=Mistborn-base.service |
||||||
@ -0,0 +1,25 @@ |
|||||||
|
[Unit] |
||||||
|
Description=Mistborn RaspAP Service |
||||||
|
Requires=Mistborn-base.service |
||||||
|
After=Mistborn-base.service |
||||||
|
|
||||||
|
[Service] |
||||||
|
Restart=always |
||||||
|
RestartSec=15 |
||||||
|
User=root |
||||||
|
Group=docker |
||||||
|
PermissionsStartOnly=true |
||||||
|
ExecStartPre=/sbin/iptables -I DOCKER-USER -i DIFACE -p tcp --dport 8095 -j MISTBORN_LOG_DROP |
||||||
|
#ExecStartPre=/bin/bash /opt/mistborn_volumes/extra/raspap/etc-raspap/hostapd/servicestart.sh --interface uap0 --seconds 3 |
||||||
|
# Shutdown container (if running) when unit is stopped |
||||||
|
ExecStartPre=/opt/mistborn/scripts/wrappers/mistborn_docker.sh raspap docker-compose -f /opt/mistborn/extra/raspap.yml down |
||||||
|
|
||||||
|
# Start container when unit is started |
||||||
|
ExecStart=/opt/mistborn/scripts/wrappers/mistborn_docker.sh raspap docker-compose -f /opt/mistborn/extra/raspap.yml up --build |
||||||
|
# Stop container when unit is stopped |
||||||
|
ExecStop=/opt/mistborn/scripts/wrappers/mistborn_docker.sh raspap docker-compose -f /opt/mistborn/extra/raspap.yml down |
||||||
|
ExecStopPost=-/sbin/iptables -D DOCKER-USER -i DIFACE -p tcp --dport 8095 -j MISTBORN_LOG_DROP |
||||||
|
# Post stop |
||||||
|
|
||||||
|
[Install] |
||||||
|
WantedBy=Mistborn-base.service |
||||||
@ -0,0 +1,25 @@ |
|||||||
|
[Unit] |
||||||
|
Description=Mistborn Rocket Chat Service |
||||||
|
Requires=Mistborn-base.service |
||||||
|
After=Mistborn-base.service |
||||||
|
PartOf=Mistborn-base.service |
||||||
|
|
||||||
|
[Service] |
||||||
|
Restart=always |
||||||
|
RestartSec=15 |
||||||
|
User=root |
||||||
|
Group=docker |
||||||
|
PermissionsStartOnly=true |
||||||
|
# Shutdown container (if running) when unit is stopped |
||||||
|
ExecStartPre=/opt/mistborn/scripts/wrappers/mistborn_docker.sh rocketchat docker-compose -f /opt/mistborn/extra/rocketchat.yml down |
||||||
|
|
||||||
|
ExecStartPre=/sbin/iptables -w -I DOCKER-USER -i DIFACE -p tcp --dport 3001 -j MISTBORN_LOG_DROP |
||||||
|
# Start container when unit is started |
||||||
|
ExecStart=/opt/mistborn/scripts/wrappers/mistborn_docker.sh rocketchat docker-compose -f /opt/mistborn/extra/rocketchat.yml up --build |
||||||
|
# Stop container when unit is stopped |
||||||
|
ExecStop=/opt/mistborn/scripts/wrappers/mistborn_docker.sh rocketchat docker-compose -f /opt/mistborn/extra/rocketchat.yml down |
||||||
|
# Post stop |
||||||
|
ExecStopPost=-/sbin/iptables -D DOCKER-USER -i DIFACE -p tcp --dport 3001 -j MISTBORN_LOG_DROP |
||||||
|
|
||||||
|
[Install] |
||||||
|
WantedBy=Mistborn-base.service |
||||||
@ -0,0 +1,27 @@ |
|||||||
|
[Unit] |
||||||
|
Description=Mistborn Syncthing Service |
||||||
|
Requires=Mistborn-base.service |
||||||
|
After=Mistborn-base.service |
||||||
|
PartOf=Mistborn-base.service |
||||||
|
|
||||||
|
[Service] |
||||||
|
Restart=always |
||||||
|
RestartSec=15 |
||||||
|
User=root |
||||||
|
Group=docker |
||||||
|
PermissionsStartOnly=true |
||||||
|
# Shutdown container (if running) when unit is stopped |
||||||
|
ExecStartPre=/opt/mistborn/scripts/wrappers/mistborn_docker.sh syncthing docker-compose -f /opt/mistborn/extra/syncthing.yml down |
||||||
|
|
||||||
|
ExecStartPre=/sbin/iptables -w -I DOCKER-USER -i DIFACE -p udp --dport 21027 -j MISTBORN_LOG_DROP |
||||||
|
ExecStartPre=/sbin/iptables -w -I DOCKER-USER -i DIFACE -p tcp --dport 22000 -j MISTBORN_LOG_DROP |
||||||
|
# Start container when unit is started |
||||||
|
ExecStart=/opt/mistborn/scripts/wrappers/mistborn_docker.sh syncthing docker-compose -f /opt/mistborn/extra/syncthing.yml up --build |
||||||
|
# Stop container when unit is stopped |
||||||
|
ExecStop=/opt/mistborn/scripts/wrappers/mistborn_docker.sh syncthing docker-compose -f /opt/mistborn/extra/syncthing.yml down |
||||||
|
# Post stop |
||||||
|
ExecStopPost=-/sbin/iptables -D DOCKER-USER -i DIFACE -p udp --dport 21027 -j MISTBORN_LOG_DROP |
||||||
|
ExecStopPost=-/sbin/iptables -D DOCKER-USER -i DIFACE -p tcp --dport 22000 -j MISTBORN_LOG_DROP |
||||||
|
|
||||||
|
[Install] |
||||||
|
WantedBy=Mistborn-base.service |
||||||
@ -0,0 +1,25 @@ |
|||||||
|
[Unit] |
||||||
|
Description=Mistborn Tor Service |
||||||
|
Requires=Mistborn-base.service |
||||||
|
After=Mistborn-base.service |
||||||
|
PartOf=Mistborn-base.service |
||||||
|
|
||||||
|
[Service] |
||||||
|
Restart=always |
||||||
|
RestartSec=15 |
||||||
|
User=root |
||||||
|
Group=docker |
||||||
|
PermissionsStartOnly=true |
||||||
|
# Shutdown container (if running) when unit is stopped |
||||||
|
ExecStartPre=/opt/mistborn/scripts/wrappers/mistborn_docker.sh tor docker-compose -f /opt/mistborn/extra/tor.yml down |
||||||
|
|
||||||
|
ExecStartPre=/sbin/iptables -w -I DOCKER-USER -i DIFACE -p tcp --dport 9150 -j MISTBORN_LOG_DROP |
||||||
|
# Start container when unit is started |
||||||
|
ExecStart=/opt/mistborn/scripts/wrappers/mistborn_docker.sh tor docker-compose -f /opt/mistborn/extra/tor.yml up --build |
||||||
|
# Stop container when unit is stopped |
||||||
|
ExecStop=/opt/mistborn/scripts/wrappers/mistborn_docker.sh tor docker-compose -f /opt/mistborn/extra/tor.yml down |
||||||
|
# Post stop |
||||||
|
ExecStopPost=-/sbin/iptables -D DOCKER-USER -i DIFACE -p tcp --dport 9150 -j MISTBORN_LOG_DROP |
||||||
|
|
||||||
|
[Install] |
||||||
|
WantedBy=Mistborn-base.service |
||||||
@ -0,0 +1,30 @@ |
|||||||
|
[Unit] |
||||||
|
Description=Mistborn Wazuh Service |
||||||
|
Requires=Mistborn-elasticsearch.service |
||||||
|
After=Mistborn-elasticsearch.service |
||||||
|
PartOf=Mistborn-base.service |
||||||
|
|
||||||
|
[Service] |
||||||
|
Restart=always |
||||||
|
RestartSec=15 |
||||||
|
TimeoutStartSec=600 |
||||||
|
User=root |
||||||
|
Group=docker |
||||||
|
PermissionsStartOnly=true |
||||||
|
# Shutdown container (if running) when unit is stopped |
||||||
|
ExecStartPre=/opt/mistborn/scripts/wrappers/mistborn_docker.sh wazuh docker-compose -f /opt/mistborn/extra/wazuh.yml down |
||||||
|
# Start container when unit is started |
||||||
|
ExecStart=/opt/mistborn/scripts/wrappers/mistborn_docker.sh wazuh docker-compose -f /opt/mistborn/extra/wazuh.yml up --build |
||||||
|
# Agent install |
||||||
|
ExecStartPost=/opt/mistborn/scripts/wrappers/mistborn_docker.sh wazuh /opt/mistborn/scripts/services/wazuh/agent.sh |
||||||
|
ExecStartPost=-/opt/mistborn/scripts/wrappers/mistborn_docker.sh wazuh /opt/mistborn/scripts/services/wazuh/agent_start.sh |
||||||
|
# Suricata |
||||||
|
ExecStartPost=-/opt/mistborn/scripts/wrappers/mistborn_docker.sh wazuh /opt/mistborn/scripts/services/wazuh/suricata/suricata_init.sh |
||||||
|
ExecStartPost=-/opt/mistborn/scripts/wrappers/mistborn_docker.sh wazuh /opt/mistborn/scripts/services/wazuh/suricata/suricata_start.sh |
||||||
|
# Stop container when unit is stopped |
||||||
|
ExecStop=/opt/mistborn/scripts/wrappers/mistborn_docker.sh wazuh docker-compose -f /opt/mistborn/extra/wazuh.yml down |
||||||
|
ExecStopPost=-/opt/mistborn/scripts/wrappers/mistborn_docker.sh wazuh /opt/mistborn/scripts/services/wazuh/suricata/suricata_stop.sh |
||||||
|
ExecStopPost=-/opt/mistborn/scripts/wrappers/mistborn_docker.sh wazuh /opt/mistborn/scripts/services/wazuh/agent_stop.sh |
||||||
|
|
||||||
|
[Install] |
||||||
|
WantedBy=Mistborn-base.service |
||||||
@ -0,0 +1,17 @@ |
|||||||
|
--- |
||||||
|
# This is the internal user database |
||||||
|
# The hash value is a bcrypt hash and can be generated with plugin/tools/hash.sh |
||||||
|
|
||||||
|
_meta: |
||||||
|
type: "internalusers" |
||||||
|
config_version: 2 |
||||||
|
|
||||||
|
# Define your internal users here |
||||||
|
|
||||||
|
mistborn: |
||||||
|
hash: "__MISTBORN_HASH__" |
||||||
|
reserved: true |
||||||
|
backend_roles: |
||||||
|
- "admin" |
||||||
|
description: "Mistborn user" |
||||||
|
|
||||||
@ -0,0 +1,21 @@ |
|||||||
|
#!/bin/bash |
||||||
|
|
||||||
|
set -e |
||||||
|
|
||||||
|
if [[ -f "/opt/mistborn_volumes/extra/elasticsearch/init/internal_users.yml" ]]; then |
||||||
|
echo "internal_users.yml exists. Proceeding." |
||||||
|
exit 0 |
||||||
|
fi |
||||||
|
|
||||||
|
mkdir -p /opt/mistborn_volumes/extra/elasticsearch/init/ >/dev/null 2>&1 |
||||||
|
chmod -R +x /opt/mistborn_volumes/extra/elasticsearch/init/ |
||||||
|
cp /opt/mistborn/scripts/services/elasticsearch/files/internal_users.yml /opt/mistborn_volumes/extra/elasticsearch/init/ |
||||||
|
|
||||||
|
ELASTICSEARCH_MISTBORN_HASHED="$(docker run --rm amazon/opendistro-for-elasticsearch:1.12.0 bash /usr/share/elasticsearch/plugins/opendistro_security/tools/hash.sh -p ${MISTBORN_DEFAULT_PASSWORD} | tr -d '\n')" |
||||||
|
|
||||||
|
if [[ -z "${ELASTICSEARCH_MISTBORN_HASHED}" ]]; then |
||||||
|
echo "Elasticsearch password hash not generated properly" |
||||||
|
exit 1; |
||||||
|
fi |
||||||
|
|
||||||
|
sed -i "s|__MISTBORN_HASH__|${ELASTICSEARCH_MISTBORN_HASHED}|" /opt/mistborn_volumes/extra/elasticsearch/init/internal_users.yml |
||||||
@ -0,0 +1,21 @@ |
|||||||
|
#!/bin/bash |
||||||
|
|
||||||
|
if [[ -f "/opt/mistborn_volumes/extra/guacamole/init/initdb.sql" ]]; then |
||||||
|
echo "initdb.sql exists. Proceeding." |
||||||
|
exit 0 |
||||||
|
fi |
||||||
|
|
||||||
|
mkdir -p /opt/mistborn_volumes/extra/guacamole/init/ >/dev/null 2>&1 |
||||||
|
chmod -R +x /opt/mistborn_volumes/extra/guacamole/init/ |
||||||
|
docker run --rm guacamole/guacamole /opt/guacamole/bin/initdb.sh --postgres > /opt/mistborn_volumes/extra/guacamole/init/initdb.sql |
||||||
|
|
||||||
|
# grab values in initdb.sql to replace |
||||||
|
HEXSTRINGS=($(egrep -o [0-9a-fA-F]{64} /opt/mistborn_volumes/extra/guacamole/init/initdb.sql)) |
||||||
|
|
||||||
|
# reset default password in init.db |
||||||
|
SALT=$(python3 -c "import secrets; import string; print(f''.join([secrets.choice('0123456789ABCDEF') for x in range(64)]))") |
||||||
|
GUAC_PASSWORD_HASHED=$(echo -n "${MISTBORN_DEFAULT_PASSWORD}${SALT}" | sha256sum | awk '{print $1}' | tr a-z A-Z) |
||||||
|
|
||||||
|
sed -i "s/${HEXSTRINGS[1]}/$SALT/" /opt/mistborn_volumes/extra/guacamole/init/initdb.sql |
||||||
|
sed -i "s/${HEXSTRINGS[0]}/$GUAC_PASSWORD_HASHED/" /opt/mistborn_volumes/extra/guacamole/init/initdb.sql |
||||||
|
sed -i "s/guacadmin/mistborn/g" /opt/mistborn_volumes/extra/guacamole/init/initdb.sql |
||||||
@ -0,0 +1,54 @@ |
|||||||
|
#!/bin/bash |
||||||
|
|
||||||
|
HASS_CONFIG="/opt/mistborn_volumes/extra/homeassistant/config/configuration.yaml" |
||||||
|
|
||||||
|
if [[ -f "$HASS_CONFIG" ]]; then |
||||||
|
# configuration.yaml exists |
||||||
|
|
||||||
|
if [[ ! -z $(grep "use_x_forwarded_for: true" "$HASS_CONFIG") ]]; then |
||||||
|
# FOUND |
||||||
|
exit 0; |
||||||
|
fi |
||||||
|
|
||||||
|
# add the proxy config |
||||||
|
# write the trusted proxies config |
||||||
|
cat >> ${HASS_CONFIG}<< EOF |
||||||
|
|
||||||
|
http: |
||||||
|
use_x_forwarded_for: true |
||||||
|
trusted_proxies: |
||||||
|
- 172.16.0.0/12 |
||||||
|
|
||||||
|
EOF |
||||||
|
|
||||||
|
exit 0; |
||||||
|
|
||||||
|
fi |
||||||
|
|
||||||
|
# create parent directory if needed |
||||||
|
PARENTDIR="$(dirname $HASS_CONFIG)" |
||||||
|
if [[ ! -d "$PARENTDIR" ]]; then |
||||||
|
mkdir -p $PARENTDIR |
||||||
|
fi |
||||||
|
|
||||||
|
# write the trusted proxies config |
||||||
|
cat >> ${HASS_CONFIG}<< EOF |
||||||
|
|
||||||
|
# Configure a default setup of Home Assistant (frontend, api, etc) |
||||||
|
default_config: |
||||||
|
|
||||||
|
# Text to speech |
||||||
|
#tts: |
||||||
|
# - platform: google_translate |
||||||
|
|
||||||
|
#group: !include groups.yaml |
||||||
|
#automation: !include automations.yaml |
||||||
|
#script: !include scripts.yaml |
||||||
|
#scene: !include scenes.yaml |
||||||
|
|
||||||
|
http: |
||||||
|
use_x_forwarded_for: true |
||||||
|
trusted_proxies: |
||||||
|
- 172.16.0.0/12 |
||||||
|
|
||||||
|
EOF |
||||||
@ -0,0 +1,4 @@ |
|||||||
|
#!/bin/bash |
||||||
|
|
||||||
|
iptables -w -D DOCKER-USER -i $DIFACE -p udp --dport $JVB_PORT -j MISTBORN_LOG_DROP |
||||||
|
iptables -w -D DOCKER-USER -i $DIFACE -p tcp --dport $JVB_TCP_PORT -j MISTBORN_LOG_DROP |
||||||
@ -0,0 +1,4 @@ |
|||||||
|
#!/bin/bash |
||||||
|
|
||||||
|
iptables -w -I DOCKER-USER -i $DIFACE -p udp --dport $JVB_PORT -j MISTBORN_LOG_DROP |
||||||
|
iptables -w -I DOCKER-USER -i $DIFACE -p tcp --dport $JVB_TCP_PORT -j MISTBORN_LOG_DROP |
||||||
@ -0,0 +1,30 @@ |
|||||||
|
#!/bin/bash |
||||||
|
|
||||||
|
# detect if already installed |
||||||
|
if dpkg -s wazuh-agent &> /dev/null; then |
||||||
|
echo "Wazuh agent already installed" |
||||||
|
exit 0 |
||||||
|
fi |
||||||
|
|
||||||
|
# install curl |
||||||
|
echo "install curl" |
||||||
|
sudo -E apt-get install -y curl |
||||||
|
|
||||||
|
# prepare repo |
||||||
|
echo "Adding Wazuh Repository" |
||||||
|
curl -s https://packages.wazuh.com/key/GPG-KEY-WAZUH | sudo -E apt-key add - |
||||||
|
echo "deb https://packages.wazuh.com/4.x/apt/ stable main" | sudo -E tee /etc/apt/sources.list.d/wazuh.list |
||||||
|
|
||||||
|
apt-get update |
||||||
|
|
||||||
|
# wait for service to be listening |
||||||
|
while ! nc -z 10.2.3.1 55000; do |
||||||
|
WAIT_TIME=10 |
||||||
|
echo "Waiting ${WAIT_TIME} seconds for Wazuh API..." |
||||||
|
sleep ${WAIT_TIME} |
||||||
|
done |
||||||
|
|
||||||
|
# install |
||||||
|
echo "Installing Wazuh agent" |
||||||
|
WAZUH_MANAGER="10.2.3.1" apt-get install wazuh-agent |
||||||
|
|
||||||
@ -0,0 +1,4 @@ |
|||||||
|
#!/bin/bash |
||||||
|
|
||||||
|
systemctl start wazuh-agent |
||||||
|
systemctl enable wazuh-agent |
||||||
@ -0,0 +1,4 @@ |
|||||||
|
#!/bin/bash |
||||||
|
|
||||||
|
systemctl stop wazuh-agent |
||||||
|
systemctl disable wazuh-agent |
||||||
@ -0,0 +1,129 @@ |
|||||||
|
#!/bin/bash |
||||||
|
|
||||||
|
set -e |
||||||
|
|
||||||
|
# detect if suricata is installed |
||||||
|
if [[ $(dpkg-query -W -f='${Status}' suricata 2>/dev/null | grep -c "ok installed") -eq 1 ]]; then |
||||||
|
echo "Suricata Installed" |
||||||
|
exit 0 |
||||||
|
fi |
||||||
|
|
||||||
|
source /opt/mistborn/scripts/subinstallers/platform.sh |
||||||
|
|
||||||
|
# minimal dependencies |
||||||
|
sudo -E apt-get -y install libpcre3 libpcre3-dbg libpcre3-dev build-essential libpcap-dev \ |
||||||
|
libyaml-0-2 libyaml-dev pkg-config zlib1g zlib1g-dev \ |
||||||
|
make libmagic-dev libjansson-dev jq wget |
||||||
|
|
||||||
|
## recommended dependencies |
||||||
|
#sudo -E apt-get -y install libpcre3 libpcre3-dbg libpcre3-dev build-essential libpcap-dev \ |
||||||
|
# libnet1-dev libyaml-0-2 libyaml-dev pkg-config zlib1g zlib1g-dev \ |
||||||
|
# libcap-ng-dev libcap-ng0 make libmagic-dev \ |
||||||
|
# libgeoip-dev liblua5.1-dev libhiredis-dev libevent-dev \ |
||||||
|
# python-yaml rustc cargo |
||||||
|
|
||||||
|
# iptables/nftables integration |
||||||
|
sudo -E apt-get -y install libnetfilter-queue-dev libnetfilter-queue1 \ |
||||||
|
libnetfilter-log-dev libnetfilter-log1 \ |
||||||
|
libnfnetlink-dev libnfnetlink0 |
||||||
|
|
||||||
|
|
||||||
|
if [ "$DISTRO" == "ubuntu" ]; then |
||||||
|
echo "Installing Suricata Ubuntu PPA" |
||||||
|
sudo -E add-apt-repository -y ppa:oisf/suricata-stable |
||||||
|
sudo -E apt-get update |
||||||
|
sudo -E apt-get install -y suricata |
||||||
|
elif [ "$DISTRO" == "debian" ]; then |
||||||
|
# retrieve version codename |
||||||
|
source /etc/os-release |
||||||
|
echo "deb http://http.debian.net/debian $VERSION_CODENAME-backports main" | \ |
||||||
|
sudo -E tee /etc/apt/sources.list.d/backports.list |
||||||
|
sudo -E apt-get update |
||||||
|
sudo -E apt-get install -y suricata -t ${VERSION_CODENAME}-backports |
||||||
|
else |
||||||
|
echo "Basic Suricata installation" |
||||||
|
sudo -E apt-get install -y suricata |
||||||
|
fi |
||||||
|
|
||||||
|
# # iptables |
||||||
|
# sudo iptables -A INPUT -j NFQUEUE |
||||||
|
# sudo iptables -I FORWARD -j NFQUEUE |
||||||
|
# sudo iptables -I OUTPUT -j NFQUEUE |
||||||
|
|
||||||
|
# # rsyslog to create /var/log/suricata.log |
||||||
|
# sudo cp ./scripts/conf/20-suricata.conf /etc/rsyslog.d/ |
||||||
|
# sudo chown root:root /etc/rsyslog.d/20-suricata.conf |
||||||
|
# sudo systemctl restart rsyslog |
||||||
|
|
||||||
|
# rules |
||||||
|
pushd . |
||||||
|
cd /tmp |
||||||
|
wget https://rules.emergingthreats.net/open/suricata-4.0/emerging.rules.tar.gz |
||||||
|
tar zxvf emerging.rules.tar.gz |
||||||
|
sudo -E rm /etc/suricata/rules/* -f |
||||||
|
sudo -E mv rules/*.rules /etc/suricata/rules/ |
||||||
|
popd |
||||||
|
|
||||||
|
# suricata yaml |
||||||
|
sudo -E rm -f /etc/suricata/suricata.yaml |
||||||
|
sudo -E wget -O /etc/suricata/suricata.yaml http://www.branchnetconsulting.com/wazuh/suricata.yaml |
||||||
|
|
||||||
|
IFACE=$(ip -o -4 route show to default | awk 'NR==1{print $5}') |
||||||
|
sudo sed -i "s/eth0/${IFACE}/g" /etc/suricata/suricata.yaml |
||||||
|
sudo sed -i "s/eth0/${IFACE}/g" /etc/default/suricata |
||||||
|
|
||||||
|
#systemctl restart suricata |
||||||
|
|
||||||
|
# wait for service to be listening |
||||||
|
while ! nc -z 10.2.3.1 55000; do |
||||||
|
WAIT_TIME=10 |
||||||
|
echo "Waiting ${WAIT_TIME} seconds for Wazuh API..." |
||||||
|
sleep ${WAIT_TIME} |
||||||
|
done |
||||||
|
|
||||||
|
# set working directory to mistborn for docker-compose |
||||||
|
pushd . |
||||||
|
cd /opt/mistborn |
||||||
|
|
||||||
|
# ensure group exists |
||||||
|
sudo docker-compose --env-file /opt/mistborn/.env -f extra/wazuh.yml exec -T wazuh /var/ossec/bin/agent_groups -a -g suricata -q 2>/dev/null |
||||||
|
|
||||||
|
# add this host to group |
||||||
|
WAZUH_ID=$(sudo docker-compose --env-file /opt/mistborn/.env -f extra/wazuh.yml exec -T wazuh /var/ossec/bin/manage_agents -l | egrep ^\ *ID | grep $(hostname) | awk '{print $2}' | tr -d ',') |
||||||
|
sudo docker-compose --env-file /opt/mistborn/.env -f extra/wazuh.yml exec -T wazuh /var/ossec/bin/agent_groups -a -i ${WAZUH_ID} -g suricata -q |
||||||
|
|
||||||
|
# write agent.conf |
||||||
|
sudo docker-compose --env-file /opt/mistborn/.env -f extra/wazuh.yml exec -T wazuh bash -c "cat > /var/ossec/etc/shared/suricata/agent.conf << EOF |
||||||
|
<agent_config> |
||||||
|
<localfile> |
||||||
|
<log_format>json</log_format> |
||||||
|
<location>/var/log/suricata/eve.json</location> |
||||||
|
</localfile> |
||||||
|
</agent_config> |
||||||
|
EOF |
||||||
|
" |
||||||
|
|
||||||
|
# restart manager |
||||||
|
sudo docker-compose --env-file /opt/mistborn/.env -f extra/wazuh.yml restart wazuh |
||||||
|
|
||||||
|
popd |
||||||
|
|
||||||
|
# suricata-update |
||||||
|
sudo -E apt install python3-pip |
||||||
|
sudo -E pip3 install pyyaml |
||||||
|
sudo -E pip3 install https://github.com/OISF/suricata-update/archive/master.zip |
||||||
|
|
||||||
|
sudo -E pip3 install --pre --upgrade suricata-update |
||||||
|
|
||||||
|
# sudo -E suricata-update enable-source oisf/trafficid |
||||||
|
# sudo -E suricata-update enable-source etnetera/aggressive |
||||||
|
# sudo -E suricata-update enable-source sslbl/ssl-fp-blacklist |
||||||
|
# sudo -E suricata-update enable-source et/open |
||||||
|
# sudo -E suricata-update enable-source tgreen/hunting |
||||||
|
# sudo -E suricata-update enable-source sslbl/ja3-fingerprints |
||||||
|
# sudo -E suricata-update enable-source ptresearch/attackdetection |
||||||
|
|
||||||
|
sudo -E suricata-update |
||||||
|
|
||||||
|
sudo systemctl daemon-reload |
||||||
|
sudo systemctl restart suricata |
||||||
@ -0,0 +1,7 @@ |
|||||||
|
#!/bin/bash |
||||||
|
|
||||||
|
systemctl start suricata |
||||||
|
systemctl enable suricata |
||||||
|
|
||||||
|
#apt-get install -y python-pyinotify |
||||||
|
#python /opt/mistborn/scripts/services/scirius/suri_reloader -p /etc/suricata/rules & |
||||||
@ -0,0 +1,6 @@ |
|||||||
|
#!/bin/bash |
||||||
|
|
||||||
|
systemctl stop suricata |
||||||
|
systemctl disable suricata |
||||||
|
|
||||||
|
#kill $(pgrep -f suri_reloader) 2>/dev/null |
||||||
@ -0,0 +1,31 @@ |
|||||||
|
#!/bin/bash |
||||||
|
|
||||||
|
# Cockpit |
||||||
|
figlet "Mistborn: Installing Cockpit" |
||||||
|
if [ "$DISTRO" == "ubuntu" ]; then |
||||||
|
echo "Ubuntu backports enabled by default" |
||||||
|
|
||||||
|
elif [ "$DISTRO" == "debian" ]; then |
||||||
|
sudo grep -qF "buster-backports" /etc/apt/sources.list.d/backports.list \ |
||||||
|
&& echo "buster-backports already in sources" \ |
||||||
|
|| echo 'deb http://deb.debian.org/debian buster-backports main' | sudo tee -a /etc/apt/sources.list.d/backports.list |
||||||
|
|
||||||
|
elif [ "$DISTRO" == "raspbian" ] || [ "$DISTRO" == "raspios" ]; then |
||||||
|
echo "Raspbian repos contain cockpit" |
||||||
|
fi |
||||||
|
|
||||||
|
sudo -E apt-get install -y cockpit |
||||||
|
|
||||||
|
if [ $(sudo apt-cache show cockpit-docker > /dev/null 2>&1) ]; then |
||||||
|
# no longer supported upstream in Ubuntu 20.04 |
||||||
|
sudo -E apt-get install -y cockpit-docker |
||||||
|
elif [ $(sudo apt-cache show cockpit-podman > /dev/null 2>&1) ]; then |
||||||
|
sudo -E apt-get install -y cockpit-podman |
||||||
|
fi |
||||||
|
|
||||||
|
sudo cp ./scripts/conf/cockpit.conf /etc/cockpit/cockpit.conf |
||||||
|
sudo systemctl restart cockpit.socket |
||||||
|
|
||||||
|
# create system cockpit user |
||||||
|
echo "Creating cockpit user" |
||||||
|
sudo useradd -s /bin/bash -d /home/cockpit -m -G sudo -p $(openssl passwd -1 "$MISTBORN_DEFAULT_PASSWORD") cockpit || true |
||||||
@ -0,0 +1,7 @@ |
|||||||
|
#!/bin/bash |
||||||
|
|
||||||
|
# generate bitwarden .env files |
||||||
|
BITWARDEN_PROD_FILE="$1" |
||||||
|
echo "WEBSOCKET_ENABLED=true" > $BITWARDEN_PROD_FILE |
||||||
|
echo "SIGNUPS_ALLOWED=true" >> $BITWARDEN_PROD_FILE |
||||||
|
chmod 600 $BITWARDEN_PROD_FILE |
||||||
@ -0,0 +1,6 @@ |
|||||||
|
#!/bin/bash |
||||||
|
|
||||||
|
# Elasticsearch |
||||||
|
ELASTICSEARCH_PROD_FILE="$1" |
||||||
|
echo "MISTBORN_DEFAULT_PASSWORD=$MISTBORN_DEFAULT_PASSWORD" >> $ELASTICSEARCH_PROD_FILE |
||||||
|
chmod 600 $ELASTICSEARCH_PROD_FILE |
||||||
@ -0,0 +1,14 @@ |
|||||||
|
#!/bin/bash |
||||||
|
|
||||||
|
# Guacamole |
||||||
|
GUAC_PROD_FILE="$1" |
||||||
|
GUAC_PASSWORD=$(python3 -c "import secrets; import string; print(f''.join([secrets.choice(string.ascii_letters+string.digits) for x in range(32)]))") |
||||||
|
echo "POSTGRES_HOST=guac_postgres" > $GUAC_PROD_FILE |
||||||
|
echo "POSTGRES_HOSTNAME=guac_postgres" > $GUAC_PROD_FILE |
||||||
|
echo "POSTGRES_PORT=5432" >> $GUAC_PROD_FILE |
||||||
|
echo "POSTGRES_DB=guacamole_db" >> $GUAC_PROD_FILE |
||||||
|
echo "POSTGRES_DATABASE=guacamole_db" >> $GUAC_PROD_FILE |
||||||
|
echo "POSTGRES_USER=guac_user" >> $GUAC_PROD_FILE |
||||||
|
echo "POSTGRES_PASSWORD=$GUAC_PASSWORD" >> $GUAC_PROD_FILE |
||||||
|
echo "MISTBORN_DEFAULT_PASSWORD=$MISTBORN_DEFAULT_PASSWORD" >> $GUAC_PROD_FILE |
||||||
|
chmod 600 $GUAC_PROD_FILE |
||||||
@ -0,0 +1,13 @@ |
|||||||
|
#!/bin/bash |
||||||
|
|
||||||
|
# JITSI |
||||||
|
JITSI_PROD_FILE="$1" |
||||||
|
cp ${MISTBORN_HOME}/scripts/conf/jitsi.env $JITSI_PROD_FILE |
||||||
|
mkdir -p ${MISTBORN_HOME}/.envs/.production/.jitsi-cfg/{web/letsencrypt,transcripts,prosody,jicofo,jvb} |
||||||
|
sed -i "s/JICOFO_COMPONENT_SECRET.*/JICOFO_COMPONENT_SECRET=$(python3 -c "import secrets; import string; print(f''.join([secrets.choice(string.ascii_letters+string.digits) for x in range(32)]))")/" "$JITSI_PROD_FILE" |
||||||
|
sed -i "s/JICOFO_AUTH_PASSWORD.*/JICOFO_AUTH_PASSWORD=$(python3 -c "import secrets; import string; print(f''.join([secrets.choice(string.ascii_letters+string.digits) for x in range(32)]))")/" "$JITSI_PROD_FILE" |
||||||
|
sed -i "s/JVB_AUTH_PASSWORD.*/JVB_AUTH_PASSWORD=$(python3 -c "import secrets; import string; print(f''.join([secrets.choice(string.ascii_letters+string.digits) for x in range(32)]))")/" "$JITSI_PROD_FILE" |
||||||
|
sed -i "s/JIGASI_XMPP_PASSWORD.*/JIGASI_XMPP_PASSWORD=$(python3 -c "import secrets; import string; print(f''.join([secrets.choice(string.ascii_letters+string.digits) for x in range(32)]))")/" "$JITSI_PROD_FILE" |
||||||
|
sed -i "s/JIBRI_RECORDER_PASSWORD.*/JIBRI_RECORDER_PASSWORD=$(python3 -c "import secrets; import string; print(f''.join([secrets.choice(string.ascii_letters+string.digits) for x in range(32)]))")/" "$JITSI_PROD_FILE" |
||||||
|
sed -i "s/JIBRI_XMPP_PASSWORD.*/JIBRI_XMPP_PASSWORD=$(python3 -c "import secrets; import string; print(f''.join([secrets.choice(string.ascii_letters+string.digits) for x in range(32)]))")/" "$JITSI_PROD_FILE" |
||||||
|
chmod 600 $JITSI_PROD_FILE |
||||||
@ -0,0 +1,10 @@ |
|||||||
|
#!/bin/bash |
||||||
|
|
||||||
|
# generate nextcloud .env files |
||||||
|
NEXTCLOUD_PROD_FILE="$1" |
||||||
|
#NEXTCLOUD_PASSWORD=$(python3 -c "import secrets; import string; print(f''.join([secrets.choice(string.ascii_letters+string.digits) for x in range(32)]))") |
||||||
|
NEXTCLOUD_PASSWORD="${MISTBORN_DEFAULT_PASSWORD}" |
||||||
|
echo "NEXTCLOUD_ADMIN_USER=mistborn" > $NEXTCLOUD_PROD_FILE |
||||||
|
echo "NEXTCLOUD_ADMIN_PASSWORD=$NEXTCLOUD_PASSWORD" >> $NEXTCLOUD_PROD_FILE |
||||||
|
echo "NEXTCLOUD_TRUSTED_DOMAINS=nextcloud.mistborn" >> $NEXTCLOUD_PROD_FILE |
||||||
|
chmod 600 $NEXTCLOUD_PROD_FILE |
||||||
@ -0,0 +1,8 @@ |
|||||||
|
#!/bin/bash |
||||||
|
|
||||||
|
# generate onlyoffice .env files |
||||||
|
ONLYOFFICE_PROD_FILE="$1" |
||||||
|
JWT_SECRET="${MISTBORN_DEFAULT_PASSWORD}" |
||||||
|
echo "JWT_ENABLED=true" > $ONLYOFFICE_PROD_FILE |
||||||
|
echo "JWT_SECRET=$JWT_SECRET" >> $ONLYOFFICE_PROD_FILE |
||||||
|
chmod 600 $ONLYOFFICE_PROD_FILE |
||||||
@ -0,0 +1,6 @@ |
|||||||
|
#!/bin/bash |
||||||
|
|
||||||
|
# RaspAP |
||||||
|
RASPAP_PROD_FILE="$1" |
||||||
|
echo "MISTBORN_DEFAULT_PASSWORD=$MISTBORN_DEFAULT_PASSWORD" > $RASPAP_PROD_FILE |
||||||
|
chmod 600 $RASPAP_PROD_FILE |
||||||
@ -0,0 +1,15 @@ |
|||||||
|
#!/bin/bash |
||||||
|
|
||||||
|
# generate rocketchat .env files |
||||||
|
ROCKETCHAT_PROD_FILE="$1" |
||||||
|
#ROCKETCHAT_PASSWORD=$(python3 -c "import secrets; import string; print(f''.join([secrets.choice(string.ascii_letters+string.digits) for x in range(32)]))") |
||||||
|
ROCKETCHAT_PASSWORD="${MISTBORN_DEFAULT_PASSWORD}" |
||||||
|
echo "ROCKETCHAT_USER=bot" > $ROCKETCHAT_PROD_FILE |
||||||
|
echo "ROCKETCHAT_ROOM=GENERAL" >> $ROCKETCHAT_PROD_FILE |
||||||
|
echo "BOT_NAME=bot" >> $ROCKETCHAT_PROD_FILE |
||||||
|
echo "ROCKETCHAT_PASSWORD=$ROCKETCHAT_PASSWORD" >> $ROCKETCHAT_PROD_FILE |
||||||
|
|
||||||
|
# docker environment |
||||||
|
echo "MISTBORN_BIND_IP=${MISTBORN_BIND_IP}" >> $ROCKETCHAT_PROD_FILE |
||||||
|
|
||||||
|
chmod 600 $ROCKETCHAT_PROD_FILE |
||||||
@ -0,0 +1,92 @@ |
|||||||
|
#!/bin/bash |
||||||
|
|
||||||
|
# Wazuh |
||||||
|
WAZUH_PROD_FILE="$1" |
||||||
|
echo "ELASTIC_USERNAME=mistborn" > $WAZUH_PROD_FILE |
||||||
|
echo "ELASTIC_PASSWORD=$MISTBORN_DEFAULT_PASSWORD" >> $WAZUH_PROD_FILE |
||||||
|
|
||||||
|
echo "ELASTICSEARCH_USERNAME=mistborn" >> $WAZUH_PROD_FILE |
||||||
|
echo "ELASTICSEARCH_PASSWORD=$MISTBORN_DEFAULT_PASSWORD" >> $WAZUH_PROD_FILE |
||||||
|
|
||||||
|
# kibana odfe |
||||||
|
# kibana-odfe/config/wazuh_app_config.sh |
||||||
|
# https://wazuh |
||||||
|
echo "WAZUH_API_URL=https://10.2.3.1" >> $WAZUH_PROD_FILE |
||||||
|
echo "API_PORT=55000" >> $WAZUH_PROD_FILE |
||||||
|
echo "API_USERNAME=wazuh-wui" >> $WAZUH_PROD_FILE |
||||||
|
|
||||||
|
#API_PASSWORD=$(python3 -c "import secrets; import string; print(f''.join([secrets.choice(string.ascii_letters+string.digits) for x in range(32)]))") |
||||||
|
|
||||||
|
API_PASSWORD_PYTHON=$(cat << EOF |
||||||
|
|
||||||
|
import secrets |
||||||
|
import random |
||||||
|
import string |
||||||
|
|
||||||
|
random_pass = ([secrets.choice("@$!*?-"), |
||||||
|
secrets.choice(string.digits), |
||||||
|
secrets.choice(string.ascii_lowercase), |
||||||
|
secrets.choice(string.ascii_uppercase), |
||||||
|
] |
||||||
|
+ [secrets.choice(string.ascii_lowercase |
||||||
|
+ string.ascii_uppercase |
||||||
|
+ "@$!*?-" |
||||||
|
+ string.digits) for i in range(12)]) |
||||||
|
|
||||||
|
random.shuffle(random_pass) |
||||||
|
random_pass = ''.join(random_pass) |
||||||
|
print(random_pass) |
||||||
|
|
||||||
|
EOF |
||||||
|
) |
||||||
|
|
||||||
|
API_PASSWORD=$(python3 -c "${API_PASSWORD_PYTHON}") |
||||||
|
|
||||||
|
echo "API_PASSWORD=${API_PASSWORD}" >> $WAZUH_PROD_FILE |
||||||
|
|
||||||
|
# kibana-odfe/config/entrypoint.sh: |
||||||
|
# https://elasticsearch:9200 |
||||||
|
echo "ELASTICSEARCH_URL=https://10.2.3.1:9200" >> $WAZUH_PROD_FILE |
||||||
|
|
||||||
|
|
||||||
|
cat >> ${WAZUH_PROD_FILE}<< EOF |
||||||
|
|
||||||
|
PATTERN="wazuh-alerts-*" |
||||||
|
|
||||||
|
CHECKS_PATTERN=true |
||||||
|
CHECKS_TEMPLATE=true |
||||||
|
CHECKS_API=true |
||||||
|
CHECKS_SETUP=true |
||||||
|
|
||||||
|
EXTENSIONS_PCI=true |
||||||
|
EXTENSIONS_GDPR=true |
||||||
|
EXTENSIONS_HIPAA=true |
||||||
|
EXTENSIONS_NIST=true |
||||||
|
EXTENSIONS_TSC=true |
||||||
|
EXTENSIONS_AUDIT=true |
||||||
|
EXTENSIONS_OSCAP=false |
||||||
|
EXTENSIONS_CISCAT=false |
||||||
|
EXTENSIONS_AWS=false |
||||||
|
EXTENSIONS_GCP=false |
||||||
|
EXTENSIONS_VIRUSTOTAL=true |
||||||
|
EXTENSIONS_OSQUERY=true |
||||||
|
EXTENSIONS_DOCKER=true |
||||||
|
|
||||||
|
APP_TIMEOUT=20000 |
||||||
|
|
||||||
|
API_SELECTOR=true |
||||||
|
IP_SELECTOR=true |
||||||
|
IP_IGNORE="[]" |
||||||
|
|
||||||
|
WAZUH_MONITORING_ENABLED=true |
||||||
|
WAZUH_MONITORING_FREQUENCY=900 |
||||||
|
WAZUH_MONITORING_SHARDS=2 |
||||||
|
WAZUH_MONITORING_REPLICAS=0 |
||||||
|
|
||||||
|
ADMIN_PRIVILEGES=true |
||||||
|
|
||||||
|
EOF |
||||||
|
|
||||||
|
echo "MISTBORN_DEFAULT_PASSWORD=$MISTBORN_DEFAULT_PASSWORD" >> $WAZUH_PROD_FILE |
||||||
|
|
||||||
|
chmod 600 $WAZUH_PROD_FILE |
||||||
Loading…
Reference in new issue