@drumee/setup-infra 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. package/LICENSE +661 -0
  2. package/README.md +3 -0
  3. package/configs/etc/cron.d/drumee +6 -0
  4. package/configs/etc/postfix/master.cf +137 -0
  5. package/congigure/init/acme +69 -0
  6. package/congigure/init/mail +16 -0
  7. package/congigure/init/named +27 -0
  8. package/congigure/menu/menu -tmp +144 -0
  9. package/congigure/menu/menu-install +147 -0
  10. package/congigure/menu/menu-reinstall +15 -0
  11. package/congigure/prepare +10 -0
  12. package/congigure/preset/jitsi +9 -0
  13. package/congigure/setup-infra +58 -0
  14. package/congigure/setup-schemas +57 -0
  15. package/congigure/start +29 -0
  16. package/congigure/utils/configure +56 -0
  17. package/congigure/utils/dependencies +90 -0
  18. package/congigure/utils/jitsi +122 -0
  19. package/congigure/utils/misc +77 -0
  20. package/congigure/utils/prompt.sh +35 -0
  21. package/congigure/utils/setup-versions +7 -0
  22. package/index.js +572 -0
  23. package/package.json +30 -0
  24. package/template.js +453 -0
  25. package/templates/env/application.json.tpl +0 -0
  26. package/templates/env/logrotate.tpl +7 -0
  27. package/templates/etc/bind/named.conf.local +13 -0
  28. package/templates/etc/bind/named.conf.log +105 -0
  29. package/templates/etc/bind/named.conf.options +33 -0
  30. package/templates/etc/dkimkeys/dkim.key +1 -0
  31. package/templates/etc/drumee/conf.d/conference.json.tpl +9 -0
  32. package/templates/etc/drumee/conf.d/drumee.json.tpl +7 -0
  33. package/templates/etc/drumee/conf.d/exchange.json.tpl +4 -0
  34. package/templates/etc/drumee/conf.d/myDrumee.json.tpl +16 -0
  35. package/templates/etc/drumee/credential/db.json.tpl +6 -0
  36. package/templates/etc/drumee/credential/email.json.tpl +12 -0
  37. package/templates/etc/drumee/credential/ovh/dns.json.tpl +6 -0
  38. package/templates/etc/drumee/credential/ovh/dns.sh.tpl +7 -0
  39. package/templates/etc/drumee/credential/redis.json.tpl +6 -0
  40. package/templates/etc/drumee/credential/sms.json.tpl +6 -0
  41. package/templates/etc/drumee/dnsapi.sh.tpl +28 -0
  42. package/templates/etc/drumee/drumee.sh.tpl +43 -0
  43. package/templates/etc/drumee/env.json +29 -0
  44. package/templates/etc/drumee/infrastructure/internals/accel.conf.tpl +47 -0
  45. package/templates/etc/drumee/infrastructure/mfs.conf.tpl +16 -0
  46. package/templates/etc/drumee/infrastructure/platform.json.tpl +16 -0
  47. package/templates/etc/drumee/infrastructure/routes/main.conf.tpl +143 -0
  48. package/templates/etc/drumee/infrastructure/servers/tt.conf +199 -0
  49. package/templates/etc/drumee/ssl/main.conf.tpl +10 -0
  50. package/templates/etc/jitsi/jicofo/config +2 -0
  51. package/templates/etc/jitsi/jicofo/defaults/jicofo.conf +225 -0
  52. package/templates/etc/jitsi/jicofo/defaults/logging.properties +15 -0
  53. package/templates/etc/jitsi/jicofo/jicofo.conf.tpl +46 -0
  54. package/templates/etc/jitsi/jicofo/logging.properties.tpl +12 -0
  55. package/templates/etc/jitsi/meet.conf.tpl +131 -0
  56. package/templates/etc/jitsi/ssl.conf.tpl +25 -0
  57. package/templates/etc/jitsi/videobridge/config +2 -0
  58. package/templates/etc/jitsi/videobridge/defaults/jvb.conf +129 -0
  59. package/templates/etc/jitsi/videobridge/defaults/logging.properties +12 -0
  60. package/templates/etc/jitsi/videobridge/jvb.conf +67 -0
  61. package/templates/etc/jitsi/videobridge/logging.properties.tpl +12 -0
  62. package/templates/etc/jitsi/web/config.js.tpl +208 -0
  63. package/templates/etc/jitsi/web/defaults/default +26 -0
  64. package/templates/etc/jitsi/web/defaults/ffdhe2048.txt +8 -0
  65. package/templates/etc/jitsi/web/defaults/interface_config.js +273 -0
  66. package/templates/etc/jitsi/web/defaults/meet.conf +193 -0
  67. package/templates/etc/jitsi/web/defaults/nginx.conf +73 -0
  68. package/templates/etc/jitsi/web/defaults/settings-config.js +480 -0
  69. package/templates/etc/jitsi/web/defaults/ssl.conf +28 -0
  70. package/templates/etc/jitsi/web/defaults/system-config.js +60 -0
  71. package/templates/etc/jitsi/web/interface_config.js +273 -0
  72. package/templates/etc/mail/dkim.key +1 -0
  73. package/templates/etc/mailname +1 -0
  74. package/templates/etc/mysql/mariadb.conf.d/50-server.cnf +120 -0
  75. package/templates/etc/nginx/modules-enabled/90-turn-relay.conf +27 -0
  76. package/templates/etc/nginx/modules-enabled/90-turn-relay.conf.tpl +27 -0
  77. package/templates/etc/nginx/nginx.conf +65 -0
  78. package/templates/etc/nginx/sites-enabled/drumee.conf.tpl +33 -0
  79. package/templates/etc/nginx/sites-enabled/jitsi.conf.tpl +28 -0
  80. package/templates/etc/nginx/sites-enabled/turnrelay.conf.tpl +9 -0
  81. package/templates/etc/opendkim/KeyTable +1 -0
  82. package/templates/etc/postfix/main.cf +76 -0
  83. package/templates/etc/postfix/mysql-virtual-alias-maps.cf +5 -0
  84. package/templates/etc/postfix/mysql-virtual-mailbox-domains.cf +5 -0
  85. package/templates/etc/postfix/mysql-virtual-mailbox-maps.cf +5 -0
  86. package/templates/etc/prosody/conf.d/vhost.cfg.lua.tpl +162 -0
  87. package/templates/etc/prosody/defaults/conf.d/jitsi-meet.cfg.lua +406 -0
  88. package/templates/etc/prosody/defaults/credentials.sh +10 -0
  89. package/templates/etc/prosody/defaults/prosody.cfg.lua +225 -0
  90. package/templates/etc/prosody/defaults/saslauthd.conf +30 -0
  91. package/templates/etc/prosody/prosody.cfg.lua.tpl +203 -0
  92. package/templates/etc/turnserver.conf.tpl +46 -0
  93. package/templates/index.js +102 -0
  94. package/templates/schema/utils/configs.init.sql.tpl +20 -0
  95. package/templates/schema/utils/configs.update.sql.tpl +19 -0
  96. package/templates/server/ecosystem.config.js.tpl +8 -0
  97. package/templates/var/lib/bind/domain.tpl +70 -0
@@ -0,0 +1,29 @@
1
+ #!/bin/sh
2
+ set -e
3
+ . /usr/share/debconf/confmodule
4
+
5
+ echo "Installing Drumee Team Meta Package"
6
+ script_dir=`dirname $(readlink -f $0)`
7
+ . $script_dir/utils/functions
8
+ . $script_dir/utils/prompt.sh
9
+
10
+ check_installation
11
+ if [ "$RET" = "maiden" ]; then
12
+ select_installation_mode
13
+ if [ "$RET" = "menu" ]; then
14
+ $script_dir/menu-install
15
+ fi
16
+ $script_dir/prepare
17
+ else
18
+ should_reinstall
19
+ if [ "$RET" = "remove" ]; then
20
+ export FORCE_INSTALL=yes
21
+ service mariadb stop
22
+ echo rm -rf $DRUMEE_DB_DIR
23
+ echo rm -rf $DRUMEE_DATA_DIR
24
+ $script_dir/menu-install
25
+ $script_dir/prepare
26
+ else
27
+ echo updating
28
+ fi
29
+ done
@@ -0,0 +1,56 @@
1
+ #!/bin/bash
2
+
3
+ set -e
4
+ echo "Configuring Drumee Infrastructure"
5
+ script_dir=$(dirname $(readlink -f $0))
6
+
7
+ export infra_helper=$(dirname $script_dir)
8
+
9
+ $infra_helper/bin/init-mail
10
+
11
+ # Prepare config files
12
+ node $infra_helper/index.js
13
+ source /etc/drumee/drumee.sh
14
+
15
+
16
+ if [ -d /etc/cron.d/drumee ]; then
17
+ crontab /etc/cron.d/drumee
18
+ fi
19
+
20
+ source $infra_helper/bin/env
21
+ source $infra_helper/bin/jitsi
22
+
23
+ install_jitsi
24
+
25
+ protect_dir $DRUMEE_RUNTIME_DIR "no" "mkdir"
26
+ protect_dir $DRUMEE_DATA_DIR "yes" "mkdir"
27
+ cd $DRUMEE_DATA_DIR
28
+
29
+ for d in mfs tmp; do
30
+ protect_dir "$DRUMEE_DATA_DIR/$d" "yes"
31
+ done
32
+
33
+
34
+ LOG_DIR=$DRUMEE_SERVER_HOME/.pm2/logs
35
+
36
+ touch $DRUMEE_DATA_DIR/mfs/dont-remove-this-dir
37
+ chmod a-w $DRUMEE_DATA_DIR/mfs/dont-remove-this-dir
38
+
39
+ protect_dir $DRUMEE_STATIC_DIR
40
+ protect_dir /etc/drumee
41
+ protect_dir $LOG_DIR "yes"
42
+ protect_dir $DRUMEE_CACHE_DIR
43
+ protect_dir $DRUMEE_TMP_DIR "yes"
44
+ protect_dir $DRUMEE_SERVER_HOME
45
+ protect_dir $DRUMEE_EXPORT_DIR
46
+ protect_dir $DRUMEE_IMPORT_DIR
47
+
48
+ $infra_helper/bin/init-named
49
+ $infra_helper/bin/init-acme
50
+
51
+ clean_vendor_files
52
+ setup_dirs
53
+ setup_prosody
54
+ write_version
55
+
56
+ echo "Drumee infrastructure done !"
@@ -0,0 +1,90 @@
1
+
2
+ # Install postfix
3
+ ensure_postfix () {
4
+ debconf-set-selections $1
5
+ DEBIAN_FRONTEND="noninteractive" apt install -y libopendkim11 opendkim-tools libmail-dkim-perl opendkim postfix mailutils spamass-milter postfix-mysql
6
+ }
7
+
8
+ # Install Jitsi packages
9
+ ensure_jitsi () {
10
+ installed=$(dpkg -l | egrep "^ii +jitsi-meet")
11
+ if [ "$installed" != "" ]; then
12
+ echo Already have jitsi-meet.
13
+ else
14
+ debconf-set-selections $1
15
+ curl -sS https://download.jitsi.org/jitsi-key.gpg.key | gpg --dearmor | tee /etc/apt/trusted.gpg.d/jitsi-key.gpg
16
+ echo "deb https://download.jitsi.org stable/" | tee /etc/apt/sources.list.d/jitsi-stable.list
17
+
18
+ apt update
19
+ apt install -y prosody
20
+ DEBIAN_FRONTEND="noninteractive" apt install -y jitsi-meet
21
+ fi
22
+ }
23
+
24
+ ensure_mariadb () {
25
+ v=$(which mariadb)
26
+ if [ "$v" = "" ]; then
27
+ v=0
28
+ else
29
+ v=$(mariadb --version | awk '{print $5}' | sed -E "s/\..+$//")
30
+ fi
31
+ if (($v > 9)); then
32
+ echo "Already have MariaDb"
33
+ else
34
+ if [ ! -f /etc/apt/sources.list.d/mariadb.list ]; then
35
+ curl -sS https://downloads.mariadb.com/MariaDB/mariadb_repo_setup | bash
36
+ fi
37
+ apt install -y --no-install-recommends mariadb-server mariadb-client mariadb-backup
38
+ fi
39
+ service mariadb stop
40
+ }
41
+
42
+
43
+ #
44
+ node_version () {
45
+ v=$(which node)
46
+ if [ -z $v ]; then
47
+ echo "0"
48
+ else
49
+ v=$(node -v | sed -E "s/^v//" | sed -E "s/\..+$//")
50
+ echo $v
51
+ fi
52
+ }
53
+
54
+ # Install Node packages dependencies
55
+ ensure_node_packages () {
56
+ echo Installing Node packages dependencies...
57
+ version=$(node_version)
58
+ if (($version < 20)); then
59
+ curl -s https://deb.nodesource.com/setup_20.x | bash && apt-get update && apt-get install nodejs -y
60
+ fi
61
+
62
+ node -v
63
+ npm -v
64
+
65
+ npm install -g moment minimist shelljs jsonfile readline-sync pm2 pm2-logrotate lodash node-gyp node-pre-gyp coffeescript sass
66
+ }
67
+
68
+ check_installation () {
69
+ if [ -f /etc/drumee/drumee.sh ]; then
70
+ source /etc/drumee/drumee.sh
71
+ yp=$(mysql yp -e "select main_domain() mydomain")
72
+ if [ "$yp" = "" ]; then
73
+ RET=maiden
74
+ else
75
+ RET=exists
76
+ fi
77
+ else
78
+ RET=exists
79
+ fi
80
+ }
81
+
82
+ select_installation_mode () {
83
+ for i in DRUMEE_DOMAIN_NAME PUBLIC_IP4 PUBLIC_IP6 ADMIN_EMAIL DRUMEE_DB_DIR DRUMEE_DATA_DIR; do
84
+ if [ "${!i}" = "" ]; then
85
+ RET=menu
86
+ break
87
+ fi
88
+ done
89
+ RET=auto
90
+ }
@@ -0,0 +1,122 @@
1
+ #!/bin/bash
2
+
3
+
4
+ #-------------------
5
+ function setup_dirs() {
6
+ echo Configuring directories permissions
7
+
8
+ ca_dir=/usr/local/share/ca-certificates
9
+ mkdir -p $ca_dir
10
+
11
+ cert_file="${ACME_CERTS_DIR}/${JITSI_DOMAIN}_ecc/${JITSI_DOMAIN}"
12
+ target="${ca_dir}/auth.${JITSI_DOMAIN}"
13
+
14
+ if [ -f "${cert_file}.cer" ]; then
15
+ ln -sf "${cert_file}.cer" "${target}.cer"
16
+ fi
17
+
18
+ if [ -f "${cert_file}.key" ]; then
19
+ chmod g+r "${cert_file}.key"
20
+ ln -sf "${cert_file}.key" "${target}.key"
21
+ fi
22
+
23
+ mkdir -p $DRUMEE_RUNTIME_DIR/prosody
24
+ chown -R prosody:prosody $DRUMEE_RUNTIME_DIR/prosody
25
+
26
+ auth=$(echo auth.${JITSI_DOMAIN} | sed -e "s/\./\%2e/g" | sed -e "s/\-/\%2d/g" | sed -e "s/\_/\%5f/g")
27
+ mkdir -p "/etc/drumee/credential/prosody/data/${auth}"
28
+ chown -R prosody:prosody /etc/drumee/credential/prosody
29
+ }
30
+
31
+ #-------------------
32
+ function addUser() {
33
+ user=$1
34
+ secret=$2
35
+ host=$3
36
+ # user_exists=$(prosodyctl adduser ${user}@${host} < /dev/null || true)
37
+ # if [ "$user_exists" = "That user already exists" ]; then
38
+ # fi
39
+ prosodyctl deluser ${user}@${host}
40
+ prosodyctl register ${user} ${host} $secret
41
+ }
42
+
43
+
44
+ #-------------------
45
+ function setup_prosody() {
46
+ echo Configuring prosody creadentials
47
+
48
+ # Ensure prosody start before using prosodyctl
49
+ service prosody restart
50
+ host="auth.${JITSI_DOMAIN}"
51
+ #jic_pw=$(grep password /etc/jitsi/jicofo/jicofo.conf | awk '{print $3}' | sed -e s/\"//g)
52
+ #jvb_pw=$(grep PASSWORD /etc/jitsi/videobridge/jvb.conf | awk '{print $3}' | sed -e s/\"//g)
53
+ addUser focus $JICOFO_PASSWORD $host
54
+ addUser jvb $JVB_PASSWORD $host
55
+ addUser $APP_ID $APP_PASSWORD $JITSI_DOMAIN
56
+
57
+ pub_ip=$(grep public-address /etc/jitsi/videobridge/jvb.conf | awk '{print $3}' | sed -e s/\"//g)
58
+ if [ "$pub_ip" != "" ]; then
59
+ o=$(grep ${pub_ip} /etc/hosts)
60
+ if [ "$o" == "" ]; then
61
+ echo "${pub_ip} ${JITSI_DOMAIN}" >>/etc/hosts
62
+ fi
63
+ fi
64
+ echo Subscribing roster command for focus."${JITSI_DOMAIN}" focus@${host}
65
+ prosodyctl mod_roster_command subscribe focus."${JITSI_DOMAIN}" focus@${host}
66
+ #echo prosodyctl mod_roster_command subscribe focus."${JITSI_DOMAIN}" focus@${host}
67
+ echo Prosody creadentials done
68
+ }
69
+
70
+ #-------------------
71
+ function clean_vendor_files() {
72
+ echo Removing native files installed by jitsi-meet package
73
+ rm -f /etc/nginx/sites-enabled/default
74
+ rm -f /etc/prosody/conf.d/jitsi.meet.cfg.lua
75
+ rm -f /etc/jitsi/videobridge/sip-communicator.properties
76
+ rm -f /etc/prosody/conf.avail/example.com.cfg.lua
77
+ rm -f /etc/prosody/conf.avail/jaas.cfg.lua
78
+ rm -f /etc/prosody/conf.avail/jitsi.meet.cfg.lua
79
+ rm -rf /etc/prosody/certs/*
80
+ }
81
+
82
+ #-------------------
83
+ function restart_prosody() {
84
+ if [ -f /var/run/prosody/prosody.pid ]; then
85
+ set +e
86
+ ppid=$(cat /var/run/prosody/prosody.pid)
87
+ echo "Prosody PID =$ppid"
88
+ fi
89
+ }
90
+
91
+ #-------------------
92
+ function write_version() {
93
+ echo Creating versions file
94
+ mkdir -p /etc/jitsi
95
+ dest=/etc/jitsi/versions.js
96
+ echo "module.exports={" >$dest
97
+ dpkg -l | egrep "ii +jitsi" | awk '{print "\"", $2, "\"", ":", "\"", $3, "\"", ","}' | sed -E "s/ +//g" >>$dest
98
+ echo "}" >>$dest
99
+ echo Versions file created
100
+ }
101
+
102
+ #-------------------
103
+ function install_jitsi() {
104
+ # Jitsi package
105
+ echo Checking jitsi-meet packages
106
+ installed=$(dpkg -l | egrep "^ii +jitsi-meet ")
107
+ if [ "$installed" = "" ]; then
108
+ key=/etc/apt/trusted.gpg.d/jitsi-key.gpg
109
+ if [ ! -f $key ]; then
110
+ curl -sS https://download.jitsi.org/jitsi-key.gpg.key | gpg --dearmor | tee j$key >/dev/null 2>&1
111
+ fi
112
+
113
+ source=/etc/apt/sources.list.d/jitsi-stable.list
114
+ if [ ! -f $jitsi_source ]; then
115
+ echo "deb https://download.jitsi.org stable/" | tee $source
116
+ apt update
117
+ fi
118
+ DEBIAN_FRONTEND="noninteractive" apt install -y jitsi-meet
119
+ else
120
+ echo "Jitsi package alreay installed. Skipped."
121
+ fi
122
+ }
@@ -0,0 +1,77 @@
1
+
2
+ export log_dir=/var/log/drumee
3
+ export log_file="${log_dir}/info.log"
4
+
5
+ if [ ! -d $log_dir ]; then
6
+ mkdir -p $log_dir
7
+ fi
8
+
9
+ # log
10
+ log () {
11
+ echo $(date "+%Y:%m:%d[%H:%M:%s]") $* | tee $log_file
12
+ }
13
+
14
+ #answer
15
+ answer () {
16
+ stdin="${1:-/dev/stdin}"
17
+ while read line; do
18
+ break
19
+ done <$stdin
20
+ echo $line$()
21
+ }
22
+
23
+ # Ensure there won't be confilcting ports
24
+ check_ports () {
25
+ set +
26
+ echo Scanning ports in use. This may take a while
27
+ netstat -alpute | awk 'BEGIN { FS=" " } {print $4}' | egrep -E ".+:.+" >/tmp/netstat.log
28
+ ports="53 10000 3478 5222 5269 5280 5281 5282 5283 5349 8888 9090 domain xmpp-client xmpp-server"
29
+
30
+ for i in $ports; do
31
+ port=$(grep -w $i /tmp/netstat.log)
32
+ if [ ! -z "$port" ]; then
33
+ echo port $i is already in used
34
+ fi
35
+ done
36
+ }
37
+
38
+
39
+ #-------------------
40
+ log () {
41
+ echo $(date "+%Y:%m:%d[%H:%M:%s]") $* | tee $log_file
42
+ }
43
+
44
+
45
+ ##-------------------
46
+ protect_dir () {
47
+ dir=$1
48
+ conidential=$2
49
+ if [ -z $dir ]; then
50
+ if [ "$3" = "mkdir" ]; then
51
+ mkdir -p $dir
52
+ else
53
+ echo "No directory to protect. Skipped"
54
+ fi
55
+ else
56
+ mkdir -p $dir
57
+ chown -R $DRUMEE_SYSTEM_USER:$DRUMEE_SYSTEM_GROUP $dir
58
+ if [ "$confidential" = "yes" ]; then
59
+ chmod -R go-rwx $dir
60
+ fi
61
+ chmod -R u+rwx $dir
62
+ fi
63
+ }
64
+
65
+ check_installation() {
66
+ if [ -f /etc/drumee/drumee.sh ]; then
67
+ source /etc/drumee/drumee.sh
68
+ yp=$(mysql yp -e "select main_domaissn() mydomain");
69
+ if [ "$yp" = "" ]; then
70
+ RET=maiden
71
+ else
72
+ RET=exists
73
+ fi
74
+ else
75
+ RET=maiden
76
+ fi
77
+ }
@@ -0,0 +1,35 @@
1
+
2
+
3
+ #
4
+ prompt () {
5
+ name=$1
6
+ pattern=$2
7
+ toggle=$3
8
+ db_input high $name || true
9
+ db_get $name
10
+ is_valid=$(echo $RET | grep -E "$pattern")
11
+ if ["$toggle" = "" ]; then
12
+ while [ "$is_valid" = "" ]
13
+ do
14
+ db_input high $name || true
15
+ db_get $name
16
+ is_valid=$(echo $RET | grep -E "$pattern")
17
+ done
18
+ else
19
+ while [ "$is_valid" != "" ]
20
+ do
21
+ db_input high $name || true
22
+ db_get $name
23
+ is_valid=$(echo $RET | grep -E "$pattern")
24
+ done
25
+ fi
26
+ }
27
+
28
+ should_reinstall () {
29
+ db_input high drumee/reinstall || true
30
+ db_go
31
+ db_get drumee/reinstall
32
+ if [ "$RET" = "quit" ]; then
33
+ exit 0
34
+ fi
35
+ }
@@ -0,0 +1,7 @@
1
+ #!/bin/bash
2
+ base="$(dirname "$(readlink -f "$0")")"
3
+ mkdir -p /etc/jitsi
4
+ dest=/etc/jitsi/versions.js
5
+ echo "module.exports={" > $dest
6
+ dpkg -l | egrep "ii +jitsi" | awk '{print "\"", $2, "\"", ":", "\"", $3, "\"", ","}' | sed -E "s/ +//g" >> $dest
7
+ echo "}" >> $dest