home · contact · privacy
Attempt at script to build Pleroma from source.
[config] / buster / setup_scripts / setup_pleroma_source.sh
1 #!/bin/sh
2 set -e
3 set -x
4 # Heavily inspired by <https://docs-develop.pleroma.social/backend/installation/debian_based_en/>
5
6 if [ "$#" -ne 2 ]; then
7     echo 'Need domain name, mail_address as arguments.'
8     false
9 fi
10 domain="$1"
11 mail="$2"
12
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
18
19 # Set up letsencrypt certificate. TODO: Is it auto-renewed?
20 ln -sf /etc/nginx/sites-available/default /etc/nginx/sites-enabled/default
21 certbot --nginx --agree-tos --redirect --no-eff-email -m "${mail}" -d "${domain}"
22 rm /etc/nginx/sites-enabled/default
23
24 # Prepare user.
25 adduser --system --shell  /bin/false --home /opt/pleroma pleroma
26
27 # TODO: integrate this into apt-mark/pleroma
28 apt -y install elixir erlang-dev erlang-tools erlang-parsetools erlang-eldap erlang-ssh erlang-xmerl build-essential
29
30 mkdir -p /opt/pleroma
31 chown -R pleroma:pleroma /opt/pleroma
32 su pleroma -s $SHELL -lc 'git clone -b develop https://git.pleroma.social/pleroma/pleroma /opt/pleroma'
33 su pleroma -s $SHELL -lc 'mix deps.get'
34 su pleroma -s $SHELL -lc "mix pleroma.instance gen \
35 '--output /etc/pleroma/config.exs \
36 --output-psql /tmp/setup_db.psql \
37 --domain ${domain} \
38 --instance-name plom-roma \
39 --admin-email ${mail} \
40 --notify-email ${mail} \
41 --dbhost localhost \
42 --dbname pleroma \
43 --dbuser pleroma \
44 --rum N \
45 --indexable N \
46 --uploads-dir /var/lib/pleroma/uploads \
47 --static-dir /var/lib/pleroma/static \
48 --listen-ip 127.0.0.1 \
49 --listen-port 4000 \
50 --dbpass $(pwgen -s 100 1)"
51 su pleroma -s $SHELL -lc 'mv config/{generated_config.exs,prod.secret.exs}'
52 su postgrs -s $SHELL -lc 'psql -f /opt/pleroma/config/setup_db.psql'
53 su pleroma -s $SHELL -lc 'MIX_ENV=prod mix ecto.migrate'
54 su pleroma -s $SHELL -lc 'MIX_ENV=prod mix phx.server'
55
56 # TODO: config customization, single-pixel hack, info panel, TOS
57
58 # Prepare NGINX config for Pleroma.
59 cp /opt/pleroma/installation/pleroma.nginx /etc/nginx/sites-available/pleroma.nginx
60 sed -i "s/example\.tld/${domain}/g" /etc/nginx/sites-available/pleroma.nginx
61 ln -s /etc/nginx/sites-available/pleroma.nginx /etc/nginx/sites-enabled/pleroma.nginx
62
63 # Systemd integration.
64 cp /opt/pleroma/installation/pleroma.service /etc/systemd/system/pleroma.service
65 systemctl start pleroma
66 systemctl enable pleroma
67
68 # Only restart NGINX with Pleroma running.
69 service nginx restart