Start progress on new config
This commit is contained in:
parent
1ec14d0a2f
commit
5c9107b67f
70
.env.dist
70
.env.dist
@ -1,18 +1,3 @@
|
||||
#
|
||||
# Note: The values of this file that are passed directly to
|
||||
# pleroma need type hints to be applied correctly.
|
||||
# The implemented types are int, bool, and string.
|
||||
# Typed variables look like this: KEY=type:VALUE.
|
||||
# Not specifying a type implies a string.
|
||||
#
|
||||
# In general: Your instance should work as expected if you leave the types as they are.
|
||||
# That is: don't remove them, don't add them, don't change them.
|
||||
# Always just change the values.
|
||||
#
|
||||
# You don't need to escape colons in your strings.
|
||||
# PLEROMA_NAME=string:std::pleroma::coolinstance will work as expected.
|
||||
#
|
||||
|
||||
#########################
|
||||
# Script settings #
|
||||
#########################
|
||||
@ -62,15 +47,12 @@ DOCKER_GID=1000
|
||||
# Database settings #
|
||||
###########################
|
||||
|
||||
# Leave POSTGRES_IP empty unless you plan to install your own database
|
||||
# Leave the POSTGRES_DB, POSTGRES_USER and POSTGRES_PASSWORD as-is
|
||||
# unless you use your own database.
|
||||
# When you use the managed postgres container
|
||||
# those will be the credentials the container is generated with.
|
||||
|
||||
POSTGRES_IP=
|
||||
POSTGRES_DB=pleroma
|
||||
POSTGRES_USER=pleroma
|
||||
POSTGRES_PASSWORD=pleroma
|
||||
PLEROMA_DB_POOL_SIZE=int:16
|
||||
|
||||
##########################
|
||||
# Pleroma Settings #
|
||||
@ -81,51 +63,3 @@ MIX_ENV=prod
|
||||
|
||||
# The git tag, revision, or branch to check out on build
|
||||
PLEROMA_VERSION=develop
|
||||
|
||||
# The loglevel to use
|
||||
# (error/warn/info/debug)
|
||||
PLEROMA_LOGLEVEL=error
|
||||
|
||||
# The domain/scheme where pleroma will be hosted
|
||||
# URL is a bare TLD
|
||||
# SCHEME is the protocol without "://"
|
||||
# PORT is the *external* port (ie that of your reverse proxy)
|
||||
PLEROMA_URL=coolsite.moe
|
||||
PLEROMA_SCHEME=https
|
||||
PLEROMA_PORT=int:443
|
||||
|
||||
# The seed for your secret keys
|
||||
# (Enter something as random as possible)
|
||||
# (On linux you can try something like "dd if=/dev/urandom bs=1 count=64 2>/dev/null | base64 -w 0 | rev | cut -b 2- | rev")
|
||||
PLEROMA_SECRET_KEY_BASE=
|
||||
|
||||
# The name of your instance
|
||||
# (This is displayed in the top-left in pleroma-fe)
|
||||
PLEROMA_NAME=string:coolInstance
|
||||
|
||||
# Your contact info
|
||||
PLEROMA_ADMIN_EMAIL=admin@coolsite.moe
|
||||
|
||||
# How many chars a notice may have at max.
|
||||
PLEROMA_MAX_NOTICE_CHARS=int:500
|
||||
|
||||
# Whether your instance accepts new users or not (true/false)
|
||||
PLEROMA_REGISTRATIONS_OPEN=bool:true
|
||||
|
||||
# Enable media proxy (true/false)?
|
||||
PLEROMA_MEDIA_PROXY_ENABLED=bool:false
|
||||
|
||||
# The url of your media proxy (if enabled) [with "http(s)://"]
|
||||
PLEROMA_MEDIA_PROXY_URL=string:https://cdn.coolsite.moe
|
||||
|
||||
# Redirect to source on cache fail?
|
||||
PLEROMA_MEDIA_PROXY_REDIRECT_ON_FAILURE=bool:true
|
||||
|
||||
# Whether to enable the chat feature or not
|
||||
PLEROMA_CHAT_ENABLED=bool:true
|
||||
|
||||
# Where to store uploads.
|
||||
# This is only relevant inside the container.
|
||||
# The host path is always $DOCKER_DATADIR/uploads.
|
||||
# So, you probably don't need to change this.
|
||||
PLEROMA_UPLOADS_PATH=/uploads
|
||||
|
@ -29,6 +29,7 @@ RUN \
|
||||
&& dpkg -i erlang-solutions_1.0_all.deb \
|
||||
&& apt-get update \
|
||||
&& apt-get install -y --no-install-recommends esl-erlang elixir \
|
||||
&& apt-get install -y ruby \
|
||||
\
|
||||
&& rm -rf /var/lib/apt/lists/*
|
||||
|
||||
|
111
config.dist.yml
Normal file
111
config.dist.yml
Normal file
@ -0,0 +1,111 @@
|
||||
version: 1
|
||||
|
||||
#
|
||||
# Pleroma settings
|
||||
#
|
||||
# You can enter any config in here that you want.
|
||||
# Pleroma-Docker will try to translate it into elixir for you.
|
||||
#
|
||||
# For example:
|
||||
#
|
||||
# :foo:
|
||||
# Bar.Baz:
|
||||
# x: true
|
||||
#
|
||||
# becomes `config :foo, Bar.Baz, x: true`.
|
||||
#
|
||||
# It is assumed that all config keys that have to be passed through to
|
||||
# pleroma must start with an atom on the first layer (eg :pleroma).
|
||||
#
|
||||
|
||||
app:
|
||||
# The loglevel to use in pleroma.
|
||||
:logger:
|
||||
level: info
|
||||
|
||||
:pleroma:
|
||||
Pleroma.Repo:
|
||||
# Credentials for your database.
|
||||
# You should leave this as-is if you want to use the managed db container.
|
||||
hostname: db
|
||||
username: pleroma
|
||||
password: pleroma
|
||||
database: pleroma
|
||||
pool_size: 16
|
||||
|
||||
Pleroma.Web.Endpoint:
|
||||
# Location where your instance will be reachable.
|
||||
url:
|
||||
<T>: Array
|
||||
scheme: https
|
||||
host: coolsite.moe
|
||||
port: 443
|
||||
|
||||
# Base for your secret keys.
|
||||
# Better make this random.
|
||||
secret_key_base: asdf0815
|
||||
|
||||
Pleroma.Upload:
|
||||
# Where to store your uploads.
|
||||
# You should probably leave this as-is.
|
||||
# /uploads will be mounted into ::docker::datadir.
|
||||
uploads: /uploads
|
||||
|
||||
# Remove metadata from uploads?
|
||||
strip_exif: true
|
||||
|
||||
:chat:
|
||||
# Enable chat functionality?
|
||||
enabled: true
|
||||
|
||||
:media_proxy:
|
||||
# Enable the proxy?
|
||||
enabled: true
|
||||
|
||||
# Emit a 302 to the original resource when uncached?
|
||||
redirect_on_failure: true
|
||||
|
||||
# Where your proxy is reachable
|
||||
base_url: https://media.coolsite.moe
|
||||
|
||||
:instance:
|
||||
# The name of your instance.
|
||||
name: super cool stuff club
|
||||
|
||||
# Short description of your instance
|
||||
description: we do super cool stuff in super cool stuff club
|
||||
|
||||
# The admin's email address.
|
||||
email: admin@coolsite.moe
|
||||
|
||||
# How many chars a notice may have at max.
|
||||
limit: 4096
|
||||
|
||||
# May new members sign up?
|
||||
registrations_open: true
|
||||
|
||||
# Allow connections to other instances?
|
||||
# (Turn this off for testing)
|
||||
federating: true
|
||||
|
||||
# The rewrite policies / quarantines to enable.
|
||||
# This is a powerful feature which should be used with care.
|
||||
# Take a look at https://git.pleroma.social/pleroma/pleroma/wikis/Message%20rewrite%20facility%20configuration%20(how%20to%20block%20instances).
|
||||
# Then uncomment only the things you really need
|
||||
|
||||
# quarantined_instances:
|
||||
# - badguys.moe
|
||||
|
||||
# rewrite_policy:
|
||||
# - Pleroma.Web.ActivityPub.MRF.SimplePolicy
|
||||
|
||||
# :mrf_simple:
|
||||
# media_removal:
|
||||
# - illegalporn.biz
|
||||
# media_nsfw:
|
||||
# - porn.biz
|
||||
# - porn.business
|
||||
# reject:
|
||||
# - spam.com
|
||||
# federated_timeline_removal:
|
||||
# - spam.university
|
44
config_parser/parser.rb
Executable file
44
config_parser/parser.rb
Executable file
@ -0,0 +1,44 @@
|
||||
#!/usr/bin/env ruby
|
||||
|
||||
require 'yaml'
|
||||
require 'json'
|
||||
|
||||
config = YAML.load_file(ARGV[0])
|
||||
|
||||
if config["version"] != 1
|
||||
raise "Incompatible config version (#{config["version"]} != 1)"
|
||||
end
|
||||
|
||||
buf = "use Mix.Config\n\n"
|
||||
|
||||
config["app"].each do |atom, content|
|
||||
content.each do |sub, settings|
|
||||
buf += "config :#{atom}, #{sub.is_a?(Symbol) ? ":#{sub}" : sub}"
|
||||
|
||||
if !settings.is_a? Hash
|
||||
buf += ": #{settings.to_json}\n"
|
||||
next
|
||||
end
|
||||
|
||||
settings.each do |name, value|
|
||||
if value.is_a?(Hash) && value["<T>"] == "Array"
|
||||
value.delete("<T>")
|
||||
|
||||
buf += ", #{name}: ["
|
||||
|
||||
value.each do |k, v|
|
||||
buf += "#{k}: #{v.to_json},"
|
||||
end
|
||||
buf.chop!
|
||||
|
||||
buf += "]"
|
||||
else
|
||||
buf += ", #{name}: #{value.to_json}"
|
||||
end
|
||||
end
|
||||
|
||||
buf += "\n"
|
||||
end
|
||||
end
|
||||
|
||||
puts buf
|
@ -88,7 +88,7 @@ define(<env_inline_fb>, <${upcase($1):-$2}>)
|
||||
"env(<pleroma_version>)",
|
||||
"env(<docker_uid>)",
|
||||
"env(<docker_gid>)",
|
||||
"env_fb(<pleroma_uploads_path>, </uploads>)",
|
||||
"env_fb(<pleroma_uploads_path>, </uploads>)"
|
||||
]
|
||||
},
|
||||
"restart": "unless-stopped",
|
||||
@ -96,31 +96,12 @@ define(<env_inline_fb>, <${upcase($1):-$2}>)
|
||||
ifelse(__SCRIPT_DEPLOY_POSTGRES, true, <"db">)
|
||||
],
|
||||
"environment": [
|
||||
"env_fb(<mix_env>, <prod>)",
|
||||
|
||||
"env_fb(<postgres_ip>, <db>)",
|
||||
"env(<postgres_db>)",
|
||||
"env(<postgres_user>)",
|
||||
"env(<postgres_password>)",
|
||||
|
||||
"env(<pleroma_url>)",
|
||||
"env(<pleroma_loglevel>)",
|
||||
"env(<pleroma_scheme>)",
|
||||
"env(<pleroma_port>)",
|
||||
"env(<pleroma_secret_key_base>)",
|
||||
"env(<pleroma_name>)",
|
||||
"env(<pleroma_admin_email>)",
|
||||
"env(<pleroma_max_notice_chars>)",
|
||||
"env(<pleroma_registrations_open>)",
|
||||
"env(<pleroma_media_proxy_enabled>)",
|
||||
"env(<pleroma_media_proxy_redirect_on_failure>)",
|
||||
"env(<pleroma_media_proxy_url>)",
|
||||
"env(<pleroma_db_pool_size>)",
|
||||
"env(<pleroma_chat_enabled>)",
|
||||
"env_fb(<pleroma_uploads_path>, </uploads>)"
|
||||
"env_fb(<mix_env>, <prod>)"
|
||||
],
|
||||
"volumes": [
|
||||
"./custom.d:/custom.d",
|
||||
"./config.yml:/conf/config.yml:ro",
|
||||
"./config_parser/parser.rb:/conf/parser.rb:ro",
|
||||
"env_inline(<docker_datadir>)/uploads:env_inline_fb(<pleroma_uploads_path>, </uploads>)"
|
||||
],
|
||||
"labels": [
|
||||
|
@ -1,71 +0,0 @@
|
||||
use Mix.Config
|
||||
|
||||
defmodule Docker do
|
||||
def env(shortname, verbatim \\ false) do
|
||||
# Get var
|
||||
name = ((if verbatim, do: "", else: "pleroma_") <> Atom.to_string(shortname)) |> String.upcase()
|
||||
raw_var = System.get_env(name)
|
||||
|
||||
if raw_var == nil do
|
||||
raise "Could not find #{name} in environment. Please define it and try again."
|
||||
end
|
||||
|
||||
# Match type and cast if needed
|
||||
if String.contains?(raw_var, ":") do
|
||||
var_parts = String.split(raw_var, ":", parts: 2)
|
||||
|
||||
type = Enum.at(var_parts, 0)
|
||||
var = Enum.at(var_parts, 1)
|
||||
|
||||
func = case type do
|
||||
"int" -> fn(x) -> Integer.parse(x) |> elem(0) end
|
||||
"bool" -> fn(x) -> x == "true" end
|
||||
"string" -> fn(x) -> x end
|
||||
_ -> if verbatim do
|
||||
fn(x) -> x end
|
||||
else
|
||||
raise "Unknown type #{type} used in variable #{raw_var}."
|
||||
end
|
||||
end
|
||||
|
||||
func.(var)
|
||||
else
|
||||
raw_var
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
config :logger, level: String.to_atom(Docker.env(:loglevel) || "info")
|
||||
|
||||
config :pleroma, Pleroma.Web.Endpoint,
|
||||
url: [
|
||||
host: Docker.env(:url),
|
||||
scheme: Docker.env(:scheme),
|
||||
port: Docker.env(:port)
|
||||
],
|
||||
secret_key_base: Docker.env(:secret_key_base)
|
||||
|
||||
config :pleroma, Pleroma.Upload,
|
||||
uploads: Docker.env(:uploads_path)
|
||||
|
||||
config :pleroma, :chat,
|
||||
enabled: Docker.env(:chat_enabled)
|
||||
|
||||
config :pleroma, :instance,
|
||||
name: Docker.env(:name),
|
||||
email: Docker.env(:admin_email),
|
||||
limit: Docker.env(:max_notice_chars),
|
||||
registrations_open: Docker.env(:registrations_open)
|
||||
|
||||
config :pleroma, :media_proxy,
|
||||
enabled: Docker.env(:media_proxy_enabled),
|
||||
redirect_on_failure: Docker.env(:media_proxy_redirect_on_failure),
|
||||
base_url: Docker.env(:media_proxy_url)
|
||||
|
||||
config :pleroma, Pleroma.Repo,
|
||||
adapter: Ecto.Adapters.Postgres,
|
||||
username: Docker.env(:postgres_user, true),
|
||||
password: Docker.env(:postgres_password, true),
|
||||
database: Docker.env(:postgres_db, true),
|
||||
hostname: Docker.env(:postgres_ip, true),
|
||||
pool_size: Docker.env(:db_pool_size)
|
@ -3,7 +3,18 @@
|
||||
set -e
|
||||
set -x
|
||||
|
||||
# Generate a config file
|
||||
ruby /config/parser.rb /config/config.yml > runtime-config.exs
|
||||
|
||||
# Recompile if needed
|
||||
if [[ ! -z "$RECOMPILE" ]]; then
|
||||
mix deps.get
|
||||
mix compile
|
||||
fi
|
||||
|
||||
# Migrate db
|
||||
mix ecto.create
|
||||
mix ecto.migrate
|
||||
|
||||
# Off we go!
|
||||
exec mix phx.server
|
||||
|
Loading…
Reference in New Issue
Block a user