1+ #! /usr/bin/env bash
2+
3+ # Copyright (c) 2021-2024 tteck
4+ # Author: MickLesk (Canbiz)
5+ # License: MIT | https://github.com/tteck/Proxmox/raw/main/LICENSE
6+ # Source: https://github.com/NodeBB/NodeBB
7+
8+ source /dev/stdin <<< " $FUNCTIONS_FILE_PATH"
9+ color
10+ verb_ip6
11+ catch_errors
12+ setting_up_container
13+ network_check
14+ update_os
15+
16+ msg_info " Installing Dependencies (Patience)"
17+ $STD apt-get install -y \
18+ build-essential \
19+ curl \
20+ sudo \
21+ make \
22+ redis-server \
23+ expect \
24+ gnupg \
25+ ca-certificates \
26+ mc
27+ msg_ok " Installed Dependencies"
28+
29+ msg_info " Setting up Node.js & MongoDB Repository"
30+ mkdir -p /etc/apt/keyrings
31+ curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg
32+ echo " deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_22.x nodistro main" > /etc/apt/sources.list.d/nodesource.list
33+
34+ curl -fsSL https://www.mongodb.org/static/pgp/server-8.0.asc | gpg --dearmor -o /etc/apt/keyrings/mongodb-server-8.0.gpg
35+ echo " deb [arch=amd64,arm64 signed-by=/etc/apt/keyrings/mongodb-server-8.0.gpg] https://repo.mongodb.org/apt/ubuntu noble/mongodb-org/8.0 multiverse" > /etc/apt/sources.list.d/mongodb-org-8.0.list
36+ $STD apt-get update
37+ msg_ok " Set up Repositories"
38+
39+ msg_info " Installing Node.js"
40+ $STD apt-get install -y nodejs
41+ msg_ok " Installed Node.js"
42+
43+ msg_info " Installing MongoDB"
44+ $STD apt-get install -y mongodb-org
45+ systemctl enable -q --now mongod
46+ sleep 10 # MongoDB needs some secounds to start, if not sleep it collide with following mongosh
47+ msg_ok " Installed MongoDB"
48+
49+ msg_info " Configure MongoDB"
50+ MONGO_ADMIN_USER=" admin"
51+ MONGO_ADMIN_PWD=" $( openssl rand -base64 18 | cut -c1-13) "
52+ NODEBB_USER=" nodebb"
53+ NODEBB_PWD=" $( openssl rand -base64 18 | cut -c1-13) "
54+ MONGO_CONNECTION_STRING=" mongodb://${NODEBB_USER} :${NODEBB_PWD} @localhost:27017/nodebb"
55+ NODEBB_SECRET=$( uuidgen)
56+ {
57+ echo " NodeBB-Credentials"
58+ echo " Mongo Database User: $MONGO_ADMIN_USER "
59+ echo " Mongo Database Password: $MONGO_ADMIN_PWD "
60+ echo " NodeBB User: $NODEBB_USER "
61+ echo " NodeBB Password: $NODEBB_PWD "
62+ echo " NodeBB Secret: $NODEBB_SECRET "
63+ } >> ~ /nodebb.creds
64+
65+ $STD mongosh << EOF
66+ use admin
67+ db.createUser({
68+ user: "$MONGO_ADMIN_USER ",
69+ pwd: "$MONGO_ADMIN_PWD ",
70+ roles: [{ role: "root", db: "admin" }]
71+ })
72+
73+ use nodebb
74+ db.createUser({
75+ user: "$NODEBB_USER ",
76+ pwd: "$NODEBB_PWD ",
77+ roles: [
78+ { role: "readWrite", db: "nodebb" },
79+ { role: "clusterMonitor", db: "admin" }
80+ ]
81+ })
82+ quit()
83+ EOF
84+ sed -i ' s/bindIp: 127.0.0.1/bindIp: 0.0.0.0/' /etc/mongod.conf
85+ sed -i ' /security:/d' /etc/mongod.conf
86+ bash -c ' echo -e "\nsecurity:\n authorization: enabled" >> /etc/mongod.conf'
87+ systemctl restart mongod
88+ msg_ok " MongoDB successfully configurated"
89+
90+ msg_info " Install NodeBB"
91+ cd /opt
92+ RELEASE=$( curl -s https://api.github.com/repos/NodeBB/NodeBB/releases/latest | grep " tag_name" | awk ' {print substr($2, 3, length($2)-4) }' )
93+ wget -q " https://github.com/NodeBB/NodeBB/archive/refs/tags/v${RELEASE} .zip"
94+ unzip -q v${RELEASE} .zip
95+ mv NodeBB-${RELEASE} /opt/nodebb
96+ cd /opt/nodebb
97+ touch pidfile
98+ expect << EOF > /dev/null 2>&1
99+ log_file /dev/null
100+ set timeout -1
101+
102+ spawn ./nodebb setup
103+ expect "URL used to access this NodeBB" {
104+ send "http://localhost:4567\r"
105+ }
106+ expect "Please enter a NodeBB secret" {
107+ send "$NODEBB_SECRET \r"
108+ }
109+ expect "Would you like to submit anonymous plugin usage to nbbpm? (yes)" {
110+ send "no\r"
111+ }
112+ expect "Which database to use (mongo)" {
113+ send "mongo\r"
114+ }
115+ expect "Format: mongodb://*" {
116+ send "$MONGO_CONNECTION_STRING \r"
117+ }
118+ expect "Administrator username" {
119+ send "helper-scripts\r"
120+ }
121+ expect "Administrator email address" {
122+ 123+ }
124+ expect "Password" {
125+ send "helper-scripts\r"
126+ }
127+ expect "Confirm Password" {
128+ send "helper-scripts\r"
129+ }
130+ expect eof
131+ EOF
132+ echo " ${RELEASE} " > " /opt/${APPLICATION} _version.txt"
133+ msg_ok " Installed NodeBB"
134+
135+ msg_info " Creating Services"
136+ cat << EOF >/etc/systemd/system/nodebb.service
137+ [Unit]
138+ Description=NodeBB
139+ Documentation=https://docs.nodebb.org
140+ After=system.slice multi-user.target mongod.service
141+
142+ [Service]
143+ Type=forking
144+ User=root
145+
146+ WorkingDirectory=/opt/nodebb
147+ PIDFile=/opt/nodebb/pidfile
148+ ExecStart=/usr/bin/node /opt/nodebb/loader.js
149+ Restart=always
150+
151+ [Install]
152+ WantedBy=multi-user.target
153+ EOF
154+ systemctl enable -q --now nodebb
155+ msg_ok " Created Service"
156+
157+ motd_ssh
158+ customize
159+
160+ msg_info " Cleaning up"
161+ rm -R /opt/v${RELEASE} .zip
162+ $STD apt-get -y autoremove
163+ $STD apt-get -y autoclean
164+ msg_ok " Cleaned"
0 commit comments