4 # Heavily inspired by <https://docs-develop.pleroma.social/backend/installation/debian_based_en/>
6 if [ "$#" -ne 2 ]; then
7 echo 'Need domain name, mail_address as arguments.'
13 # Install dependencies, set up firewall.
14 config_tree_prefix="${HOME}/config/buster"
15 ./install_for_target.sh pleroma
16 ./copy_dirtree.sh "${config_tree_prefix}/etc_files" "" web
17 nft -f /etc/nftables.conf
20 adduser --system --group --shell /bin/false --home /var/lib/pleroma pleroma
22 # TODO: integrate this into apt-mark/pleroma
23 apt -y install build-essential #elixir erlang-dev erlang-tools erlang-parsetools erlang-eldap erlang-ssh erlang-xmerl build-essential
25 apt -y install wget gnupg #erlang-inets erlnag-erlware-commons
27 wget -P /tmp/ https://packages.erlang-solutions.com/erlang-solutions_1.0_all.deb
28 dpkg -i /tmp/erlang-solutions_1.0_all.deb
30 apt -y install elixir erlang-dev erlang-tools erlang-parsetools erlang-eldap erlang-ssh erlang-xmerl
33 chown -R pleroma:pleroma /opt/pleroma
34 su pleroma -s $SHELL -lc 'git clone -b develop https://git.pleroma.social/pleroma/pleroma /opt/pleroma'
35 su pleroma -s $SHELL -lc 'mix local.hex --force'
36 su pleroma -s $SHELL -lc 'mix local.rebar --force'
37 su pleroma -s $SHELL -lc 'mix deps.get'
38 su pleroma -s $SHELL -lc "mix pleroma.instance gen \
39 --output config/generated_config.exs \
40 --output-psql /tmp/setup_db.psql \
42 --instance-name plom-roma \
43 --admin-email ${mail} \
44 --notify-email ${mail} \
51 --uploads-dir /var/lib/pleroma/uploads \
52 --static-dir /var/lib/pleroma/static \
53 --listen-ip 127.0.0.1 \
55 --dbpass $(pwgen -s 100 1)"
56 su pleroma -s $SHELL -lc 'mv config/{generated_config.exs,prod.secret.exs}'
57 su postgres -s $SHELL -lc 'psql -f /tmp/setup_db.psql'
58 su pleroma -s $SHELL -lc 'MIX_ENV=prod mix ecto.migrate'
59 #su pleroma -s $SHELL -lc 'MIX_ENV=prod mix phx.server'
61 # TODO: config customization, single-pixel hack, info panel, TOS
62 # config dev.secret.exs
64 # Set up letsencrypt certificate. TODO: Is it auto-renewed?
65 ln -sf /etc/nginx/sites-available/default /etc/nginx/sites-enabled/default
66 certbot --nginx --agree-tos --redirect --no-eff-email -m "${mail}" -d "${domain}"
67 rm /etc/nginx/sites-enabled/default
69 # Prepare NGINX config for Pleroma.
70 cp /opt/pleroma/installation/pleroma.nginx /etc/nginx/sites-available/pleroma.nginx
71 sed -i "s/example\.tld/${domain}/g" /etc/nginx/sites-available/pleroma.nginx
72 ln -s /etc/nginx/sites-available/pleroma.nginx /etc/nginx/sites-enabled/pleroma.nginx
74 # Systemd integration.
75 cp /opt/pleroma/installation/pleroma.service /etc/systemd/system/pleroma.service
76 systemctl start pleroma
77 systemctl enable pleroma
79 # Only restart NGINX with Pleroma running.