/ setup.sh
setup.sh
 1  #! /bin/bash
 2  set -o errexit
 3  set -o nounset
 4  set -o pipefail
 5  
 6  GENERATE_SECURE_SECRET_CMD="openssl rand --hex 16"
 7  GENERATE_K256_PRIVATE_KEY_CMD="openssl ecparam --name secp256k1 --genkey --noout --outform DER | tail --bytes=+8 | head --bytes=32 | xxd --plain --cols 32"
 8  
 9  PDS_ROOTDIR="${1:-/opt/pds}"
10  PDS_HOSTNAME="${2:-}"
11  PDS_ADMIN_EMAIL="${3:-}"
12  
13  REQUIRED_SYSTEM_PACKAGES="sed openssl xxd podman podman-compose"
14  
15  apt-get install -y ${REQUIRED_SYSTEM_PACKAGES}
16  
17  mkdir -p ${PDS_ROOTDIR}/data
18  cat <<_____ > ${PDS_ROOTDIR}/pds.env
19  PDS_HOSTNAME=${PDS_HOSTNAME}
20  PDS_JWT_SECRET=$(eval "${GENERATE_SECURE_SECRET_CMD}")
21  PDS_ADMIN_PASSWORD=$(eval "${GENERATE_SECURE_SECRET_CMD}")
22  PDS_PLC_ROTATION_KEY_K256_PRIVATE_KEY_HEX=$(eval "${GENERATE_K256_PRIVATE_KEY_CMD}")
23  _____
24  
25  cp compose-pdsonly.yaml "${PDS_ROOTDIR}/compose.yaml"
26  for f in CaddyFile pds.service; do
27      sed -e "s|@ROOTDIR@|${PDS_ROOTDIR}|g" \
28          -e "s|@HOSTNAME@|${PDS_HOSTNAME}|g" \
29          -e "s|@ADMIN_EMAIL@|${PDS_ADMIN_EMAIL}|g" \
30          < $f.in > "${PDS_ROOTDIR}/$f"
31  done
32  
33  cat <<_____
34  ========================================================================
35  Standalone PDS setup successful!
36  ------------------------------------------------------------------------
37  
38  Things to do:
39  
40  Install Caddy           : apt install caddy
41  Copy CaddyFile          : cp ${PDS_ROOTDIR}/CaddyFile /etc/caddy/FILENAME
42                            (you choose how you set up Caddy)
43  Restart caddy:          : systemctl restart caddy
44  
45  Copy systemd unit file  : cp ${PDS_ROOTDIR}/pds.service /etc/systemd/system/pds.service
46  [Re]start the service   : systemctl daemon-reload
47                            systemctl enable pds
48                            systemctl restart pds
49  
50  Check service status    : sudo systemctl status pds
51  Watch service logs      : sudo docker logs -f pds
52  Backup service data     : ${PDS_ROOTDIR}/data
53  
54  Required DNS entries
55  ------------------------------------------------------------------------
56  Name                         Type       Value
57  -------                      ---------  ---------------
58  ${PDS_HOSTNAME}              A          Server's IP
59  *.${PDS_HOSTNAME}            A          Server's IP
60  
61  ========================================================================
62  _____