aboutsummaryrefslogtreecommitdiff
path: root/setup.sh
blob: efd3954674ba9b2a96ecb8601f1af5a415c7058a (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#!/usr/bin/env sh

set -eu

ROOT_DIR=${ROOT_DIR:-"/opt/project"}

configure() {
  configure_user && configure_fs && configure_packages && configure_git && configure_firewall
}

services() { cd "$ROOT_DIR"; docker compose --profile services "$@"; }

core() { cd "$ROOT_DIR"; docker compose --profile core "$@"; }

# TODO: use --wait and add health checks
start() { stop || true; services up -d "$@"; }

startfg() { stop || true; services up "$@"; }

stop() { services down; }

configure_packages() {
  apt install \
    docker.io docker-buildx docker-compose-v2 \
    git ufw
}

configure_git() {
  sudo -u git git config --global init.defaultBranch main
  # kept explicit shell setup
  chsh -s "$(which git-shell)" git
  ln -sf "$ROOT_DIR/cgit/ssh/git-shell-commands" /home/git/
}

configure_firewall() {
  ufw allow 443/tcp
  ufw allow 80/tcp
  ufw allow 22
  ufw enable
}

configure_user() {
  groupadd -f -g 1001 git
  useradd --shell /usr/sbin/nologin git --uid 1001 --gid 1001 || true
  groupadd -f -g 1002 send
  useradd --shell /usr/sbin/nologin --no-create-home send --uid 1002 --gid 1002 || true
}

configure_fs() {
  mkdir -p /git
  chown -R git:git /git
  mkdir -p /uploads
  chown -R send:send /uploads
}

update() {
  apt update
  services build --pull
}

cmd="$1"; shift;
case "$cmd" in
  update|start|startfg|stop|services|core) "$cmd" "$@" ;;
  configure|configure_firewall|configure_user|configure_fs|configure_packages|configure_git) "$cmd" "$@" ;;
  *) echo "Invalid command: $cmd"; exit 1 ;;
esac