parent
0f909336c9
commit
459a89f350
@ -0,0 +1,108 @@ |
|||||||
|
# Mobilizon instance configuration |
||||||
|
|
||||||
|
import Config |
||||||
|
|
||||||
|
listen_ip = System.get_env("MOBILIZON_INSTANCE_LISTEN_IP", "0.0.0.0") |
||||||
|
|
||||||
|
listen_ip = |
||||||
|
case listen_ip |> to_charlist() |> :inet.parse_address() do |
||||||
|
{:ok, listen_ip} -> listen_ip |
||||||
|
_ -> raise "MOBILIZON_INSTANCE_LISTEN_IP does not match the expected IP format." |
||||||
|
end |
||||||
|
|
||||||
|
config :mobilizon, Mobilizon.Web.Endpoint, |
||||||
|
server: true, |
||||||
|
url: [host: System.get_env("MOBILIZON_INSTANCE_HOST", "mobilizon.lan")], |
||||||
|
http: [ |
||||||
|
port: String.to_integer(System.get_env("MOBILIZON_INSTANCE_PORT", "4000")), |
||||||
|
ip: listen_ip |
||||||
|
], |
||||||
|
secret_key_base: System.get_env("MOBILIZON_INSTANCE_SECRET_KEY_BASE", "changethis") |
||||||
|
|
||||||
|
config :mobilizon, Mobilizon.Web.Auth.Guardian, |
||||||
|
secret_key: System.get_env("MOBILIZON_INSTANCE_SECRET_KEY", "changethis") |
||||||
|
|
||||||
|
config :mobilizon, :instance, |
||||||
|
name: System.get_env("MOBILIZON_INSTANCE_NAME", "Mobilizon"), |
||||||
|
description: "Change this to a proper description of your instance", |
||||||
|
hostname: System.get_env("MOBILIZON_INSTANCE_HOST", "mobilizon.lan"), |
||||||
|
registrations_open: System.get_env("MOBILIZON_INSTANCE_REGISTRATIONS_OPEN", "false") == "true", |
||||||
|
demo: false, |
||||||
|
allow_relay: true, |
||||||
|
federating: true, |
||||||
|
email_from: System.get_env("MOBILIZON_INSTANCE_EMAIL", "noreply@mobilizon.lan"), |
||||||
|
email_reply_to: System.get_env("MOBILIZON_REPLY_EMAIL", "noreply@mobilizon.lan") |
||||||
|
|
||||||
|
config :mobilizon, Mobilizon.Storage.Repo, |
||||||
|
adapter: Ecto.Adapters.Postgres, |
||||||
|
username: System.get_env("MOBILIZON_DATABASE_USERNAME", "username"), |
||||||
|
password: System.get_env("MOBILIZON_DATABASE_PASSWORD", "password"), |
||||||
|
database: System.get_env("MOBILIZON_DATABASE_DBNAME", "mobilizon"), |
||||||
|
hostname: System.get_env("MOBILIZON_DATABASE_HOST", "postgres"), |
||||||
|
port: 5432, |
||||||
|
pool_size: 10 |
||||||
|
|
||||||
|
config :mobilizon, Mobilizon.Web.Email.Mailer, |
||||||
|
adapter: Swoosh.Adapters.SMTP, |
||||||
|
relay: System.get_env("MOBILIZON_SMTP_SERVER", "localhost"), |
||||||
|
port: System.get_env("MOBILIZON_SMTP_PORT", "25"), |
||||||
|
username: System.get_env("MOBILIZON_SMTP_USERNAME", nil), |
||||||
|
password: System.get_env("MOBILIZON_SMTP_PASSWORD", nil), |
||||||
|
tls: :if_available, |
||||||
|
allowed_tls_versions: [:tlsv1, :"tlsv1.1", :"tlsv1.2"], |
||||||
|
ssl: System.get_env("MOBILIZON_SMTP_SSL", "false"), |
||||||
|
retries: 1, |
||||||
|
no_mx_lookups: false, |
||||||
|
auth: :if_available |
||||||
|
|
||||||
|
config :geolix, |
||||||
|
databases: [ |
||||||
|
%{ |
||||||
|
id: :city, |
||||||
|
adapter: Geolix.Adapter.MMDB2, |
||||||
|
source: "/var/lib/mobilizon/geo_db/GeoLite2-City.mmdb" |
||||||
|
} |
||||||
|
] |
||||||
|
|
||||||
|
config :mobilizon, Mobilizon.Web.Upload.Uploader.Local, |
||||||
|
uploads: System.get_env("MOBILIZON_UPLOADS", "/var/lib/mobilizon/uploads") |
||||||
|
|
||||||
|
config :mobilizon, :exports, |
||||||
|
path: System.get_env("MOBILIZON_UPLOADS_EXPORTS", "/var/lib/mobilizon/uploads/exports"), |
||||||
|
formats: [ |
||||||
|
Mobilizon.Service.Export.Participants.CSV, |
||||||
|
Mobilizon.Service.Export.Participants.PDF, |
||||||
|
Mobilizon.Service.Export.Participants.ODS |
||||||
|
] |
||||||
|
|
||||||
|
config :tz_world, |
||||||
|
data_dir: System.get_env("MOBILIZON_TIMEZONES_DIR", "/var/lib/mobilizon/timezones") |
||||||
|
|
||||||
|
|
||||||
|
# |
||||||
|
# keycloak config for hackerspace.zone self hosted single-sign-on |
||||||
|
# |
||||||
|
keycloak_hostname = System.get_env("KEYCLOAK_HOSTNAME", "keycloak.example.com") |
||||||
|
keycloak_realm = System.get_env("REALM", "example") |
||||||
|
keycloak_secret = System.get_env("MOBILIZON_CLIENT_SECRET", "abcdef1234") |
||||||
|
keycloak_url = "https://#{keycloak_hostname}/realms/#{keycloak_realm}" |
||||||
|
|
||||||
|
config :ueberauth, |
||||||
|
Ueberauth, |
||||||
|
providers: [ |
||||||
|
keycloak: {Ueberauth.Strategy.Keycloak, [default_scope: "openid"]} |
||||||
|
] |
||||||
|
|
||||||
|
config :mobilizon, :auth, |
||||||
|
oauth_consumer_strategies: [ |
||||||
|
{:keycloak, "#{keycloak_hostname}"} |
||||||
|
] |
||||||
|
|
||||||
|
config :ueberauth, Ueberauth.Strategy.Keycloak.OAuth, |
||||||
|
client_id: "mobilizon", |
||||||
|
client_secret: keycloak_secret, |
||||||
|
site: keycloak_url, |
||||||
|
authorize_url: "#{keycloak_url}/protocol/openid-connect/auth", |
||||||
|
token_url: "#{keycloak_url}/protocol/openid-connect/token", |
||||||
|
userinfo_url: "#{keycloak_url}/protocol/openid-connect/userinfo", |
||||||
|
token_method: :post |
@ -0,0 +1,26 @@ |
|||||||
|
version: "3" |
||||||
|
|
||||||
|
services: |
||||||
|
mobilizon: |
||||||
|
image: framasoft/mobilizon |
||||||
|
restart: always |
||||||
|
env_file: |
||||||
|
- ../env.production |
||||||
|
- ./env.production |
||||||
|
- ../data/mobilizon/env.secrets |
||||||
|
volumes: |
||||||
|
- ../data/mobilizon/uploads:/var/lib/mobilizon/uploads |
||||||
|
- ./config.exs:/etc/mobilizon/config.exs:ro |
||||||
|
# - ${PWD}/GeoLite2-City.mmdb:/var/lib/mobilizon/geo_db/GeoLite2-City.mmdb |
||||||
|
ports: |
||||||
|
- "7000:7000" |
||||||
|
|
||||||
|
db: |
||||||
|
image: postgis/postgis:13-3.1 |
||||||
|
restart: always |
||||||
|
volumes: |
||||||
|
- ../data/mobilizon/db:/var/lib/postgresql/data |
||||||
|
environment: |
||||||
|
- POSTGRES_USER=mobilizon |
||||||
|
- POSTGRES_PASSWORD=mobilizon |
||||||
|
- POSTGRES_DB=mobilizon |
@ -0,0 +1,24 @@ |
|||||||
|
# Database settings |
||||||
|
POSTGRES_USER=mobilizon |
||||||
|
POSTGRES_PASSWORD=changethis |
||||||
|
POSTGRES_DB=mobilizon |
||||||
|
MOBILIZON_DATABASE_USERNAME=mobilizon |
||||||
|
MOBILIZON_DATABASE_PASSWORD=mobilizon |
||||||
|
MOBILIZON_DATABASE_DBNAME=mobilizon |
||||||
|
MOBILIZON_DATABASE_HOST=db |
||||||
|
|
||||||
|
|
||||||
|
# Instance configuration |
||||||
|
MOBILIZON_INSTANCE_REGISTRATIONS_OPEN=false |
||||||
|
MOBILIZON_INSTANCE_PORT=7000 |
||||||
|
|
||||||
|
MOBILIZON_INSTANCE_EMAIL=noreply@mobilizon.lan |
||||||
|
MOBILIZON_REPLY_EMAIL=contact@mobilizon.lan |
||||||
|
|
||||||
|
# Email settings |
||||||
|
MOBILIZON_SMTP_SERVER=localhost |
||||||
|
MOBILIZON_SMTP_PORT=25 |
||||||
|
MOBILIZON_SMTP_HOSTNAME=localhost |
||||||
|
MOBILIZON_SMTP_USERNAME=noreply@mobilizon.lan |
||||||
|
MOBILIZON_SMTP_PASSWORD=password |
||||||
|
MOBILIZON_SMTP_SSL=false |
@ -0,0 +1,50 @@ |
|||||||
|
#!/bin/bash |
||||||
|
die() { echo >&2 "mobilizon: $@" ; exit 1 ; } |
||||||
|
|
||||||
|
DIRNAME="$(dirname $0)" |
||||||
|
cd "$DIRNAME" |
||||||
|
source ../env.production || die "no top level env?" |
||||||
|
source env.production || die "no local env?" |
||||||
|
|
||||||
|
DATA="../data/mobilizon" |
||||||
|
SECRETS="$DATA/env.secrets" |
||||||
|
|
||||||
|
if [ -r "$SECRETS" ]; then |
||||||
|
docker-compose up -d || die "unable to start" |
||||||
|
exit 0 |
||||||
|
fi |
||||||
|
|
||||||
|
docker-compose down 2>/dev/null |
||||||
|
|
||||||
|
CLIENT_SECRET="$(openssl rand -hex 20)" |
||||||
|
|
||||||
|
mkdir -p "$DATA/uploads" |
||||||
|
chmod 777 "$DATA/uploads" |
||||||
|
|
||||||
|
mkdir -p "$(dirname "$SECRETS")" |
||||||
|
cat <<EOF > "$SECRETS" |
||||||
|
# DO NOT CHECK IN |
||||||
|
MOBILIZON_INSTANCE_NAME=${DOMAIN_NAME} |
||||||
|
MOBILIZON_INSTANCE_HOST=${MOBILIZON_HOSTNAME} |
||||||
|
MOBILIZON_INSTANCE_SECRET_KEY_BASE=$(openssl rand -hex 20) |
||||||
|
MOBILIZON_INSTANCE_SECRET_KEY=$(openssl rand -hex 20) |
||||||
|
MOBILIZON_CLIENT_SECRET=${CLIENT_SECRET} |
||||||
|
EOF |
||||||
|
|
||||||
|
../keycloak/client-delete mobilizon |
||||||
|
|
||||||
|
../keycloak/client-create <<EOF || die "unable to create client" |
||||||
|
{ |
||||||
|
"clientId": "mobilizon", |
||||||
|
"rootUrl": "https://$MOBILIZON_HOSTNAME", |
||||||
|
"adminUrl": "https://$MOBILIZON_HOSTNAME", |
||||||
|
"redirectUris": [ "https://$MOBILIZON_HOSTNAME/*" ], |
||||||
|
"webOrigins": [ "https://$MOBILIZON_HOSTNAME" ], |
||||||
|
"clientAuthenticatorType": "client-secret", |
||||||
|
"secret": "$CLIENT_SECRET" |
||||||
|
} |
||||||
|
EOF |
||||||
|
|
||||||
|
docker-compose up -d || die "unable to start container" |
||||||
|
|
||||||
|
|
@ -0,0 +1,35 @@ |
|||||||
|
server { |
||||||
|
server_name ${MOBILIZON_HOSTNAME}; |
||||||
|
client_max_body_size 128m; |
||||||
|
|
||||||
|
sendfile on; |
||||||
|
tcp_nopush on; |
||||||
|
tcp_nodelay on; |
||||||
|
keepalive_timeout 65; |
||||||
|
types_hash_max_size 2048; |
||||||
|
|
||||||
|
gzip on; |
||||||
|
gzip_disable "msie6"; |
||||||
|
|
||||||
|
proxy_read_timeout 1800s; |
||||||
|
|
||||||
|
location / { |
||||||
|
proxy_pass http://host.docker.internal:7000; |
||||||
|
proxy_set_header Host $host; |
||||||
|
proxy_set_header X-Real-IP $remote_addr; |
||||||
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; |
||||||
|
proxy_set_header X-Forwarded-Proto $scheme; |
||||||
|
} |
||||||
|
|
||||||
|
# force login with OIDC |
||||||
|
location /login { |
||||||
|
return 302 https://${MOBILIZON_HOSTNAME}/auth/keycloak; |
||||||
|
} |
||||||
|
|
||||||
|
listen 443 ssl; |
||||||
|
ssl_certificate /etc/letsencrypt/live/${DOMAIN_NAME}/fullchain.pem; |
||||||
|
ssl_certificate_key /etc/letsencrypt/live/${DOMAIN_NAME}/privkey.pem; |
||||||
|
include /etc/nginx/includes/options-ssl-nginx.conf; |
||||||
|
include /etc/nginx/includes/challenge.conf; |
||||||
|
ssl_dhparam /etc/nginx/includes/ssl-dhparams.pem; |
||||||
|
} |
Loading…
Reference in new issue