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