gbserver/install.sh

187 lines
No EOL
5.7 KiB
Bash
Executable file

#!/bin/bash
set -e
# Create directories
echo "Creating directories..."
INSTALL_DIR="/opt/gbo"
mkdir -p "$INSTALL_DIR"
sudo chmod -R 777 "$INSTALL_DIR"
mkdir -p "$INSTALL_DIR/bin"
mkdir -p "$INSTALL_DIR/bin/bot"
mkdir -p "$INSTALL_DIR/bin/mail"
mkdir -p "$INSTALL_DIR/bin/tabular"
mkdir -p "$INSTALL_DIR/bin/object"
mkdir -p "$INSTALL_DIR/bin/directory"
mkdir -p "$INSTALL_DIR/bin/alm"
mkdir -p "$INSTALL_DIR/bin/webserver"
mkdir -p "$INSTALL_DIR/bin/meeting"
mkdir -p "$INSTALL_DIR/config"
mkdir -p "$INSTALL_DIR/data"
mkdir -p "$INSTALL_DIR/data/tabular"
mkdir -p "$INSTALL_DIR/data/object"
mkdir -p "$INSTALL_DIR/data/mail"
mkdir -p "$INSTALL_DIR/data/directory"
mkdir -p "$INSTALL_DIR/data/alm"
mkdir -p "$INSTALL_DIR/data/webserver"
mkdir -p "$INSTALL_DIR/data/meeting"
mkdir -p "$INSTALL_DIR/logs"
mkdir -p "$INSTALL_DIR/certs"
mkdir -p "$INSTALL_DIR/config"
mkdir -p "$INSTALL_DIR/data"
# Install system dependencies
echo "Installing system dependencies..."
sudo apt-get install -y \
apt-transport-https \
ca-certificates \
curl \
software-properties-common \
gnupg \
wget \
unzip \
tar \
postgresql-client \
redis-tools
echo "System dependencies installed"
# Download PostgreSQL binary (using the official package)
echo "Downloading PostgreSQL..."
if [ ! -d "$INSTALL_DIR/postgresql" ]; then
mkdir -p "$INSTALL_DIR/postgresql"
wget -O "$INSTALL_DIR/postgresql/postgresql.tar.gz" "https://get.enterprisedb.com/postgresql/postgresql-14.10-1-linux-x64-binaries.tar.gz"
tar -xzf "$INSTALL_DIR/postgresql/postgresql.tar.gz" -C "$INSTALL_DIR/postgresql" --strip-components=1
rm "$INSTALL_DIR/postgresql/postgresql.tar.gz"
mkdir -p "$INSTALL_DIR/data/postgresql"
fi
# Download Zitadel binary
echo "Downloading Zitadel..."
if [ ! -d "$INSTALL_DIR/zitadel" ]; then
mkdir -p "$INSTALL_DIR/zitadel"
# Get latest release URL
ZITADEL_LATEST=$(curl -s https://api.github.com/repos/zitadel/zitadel/releases/latest | grep "browser_download_url.*linux_amd64.tar.gz" | cut -d '"' -f 4)
wget -O "$INSTALL_DIR/zitadel/zitadel.tar.gz" "$ZITADEL_LATEST"
tar -xzf "$INSTALL_DIR/zitadel/zitadel.tar.gz" -C "$INSTALL_DIR/zitadel"
rm "$INSTALL_DIR/zitadel/zitadel.tar.gz"
mkdir -p "$INSTALL_DIR/data/zitadel"
# Create default Zitadel config
cat > "$INSTALL_DIR/config/zitadel.yaml" <<EOF
Log:
Level: info
Database:
postgres:
Host: localhost
Port: 5432
Database: zitadel
User: postgres
Password: postgres
SSL:
Mode: disable
EOF
fi
#Download Stalwart Mail binary
echo "Downloading Stalwart Mail..."
if [ ! -d "$INSTALL_DIR/stalwart" ]; then
mkdir -p "$INSTALL_DIR/stalwart"
# Get latest release URL
STALWART_LATEST=$(curl -s https://api.github.com/repos/stalwartlabs/mail-server/releases/latest | grep "browser_download_url.*linux-x86_64.tar.gz" | cut -d '"' -f 4)
wget -O "$INSTALL_DIR/stalwart/stalwart.tar.gz" "$STALWART_LATEST"
tar -xzf "$INSTALL_DIR/stalwart/stalwart.tar.gz" -C "$INSTALL_DIR/stalwart"
rm "$INSTALL_DIR/stalwart/stalwart.tar.gz"
mkdir -p "$INSTALL_DIR/data/stalwart"
# Download config files
mkdir -p "$INSTALL_DIR/config/stalwart"
wget -O "$INSTALL_DIR/config/stalwart/config.toml" "https://raw.githubusercontent.com/stalwartlabs/mail-server/main/resources/config/config.toml"
fi
# Download MinIO binary
echo "Downloading MinIO..."
if [ ! -f "$INSTALL_DIR/minio/minio" ]; then
mkdir -p "$INSTALL_DIR/minio"
wget -O "$INSTALL_DIR/minio/minio" "https://dl.min.io/server/minio/release/linux-amd64/minio"
chmod +x "$INSTALL_DIR/minio/minio"
mkdir -p "$INSTALL_DIR/data/minio"
fi
# Download Redpanda binary
echo "Downloading Redpanda..."
if [ ! -d "$INSTALL_DIR/redpanda" ]; then
mkdir -p "$INSTALL_DIR/redpanda"
# Get latest Redpanda binary
REDPANDA_LATEST=$(curl -s https://api.github.com/repos/redpanda-data/redpanda/releases/latest | grep "browser_download_url.*linux-amd64.zip" | cut -d '"' -f 4)
wget -O "$INSTALL_DIR/redpanda/redpanda.zip" "$REDPANDA_LATEST"
unzip -o "$INSTALL_DIR/redpanda/redpanda.zip" -d "$INSTALL_DIR/redpanda"
rm "$INSTALL_DIR/redpanda/redpanda.zip"
mkdir -p "$INSTALL_DIR/data/redpanda"
# Create default config
cat > "$INSTALL_DIR/config/redpanda.yaml" <<EOF
redpanda:
data_directory: $INSTALL_DIR/data/redpanda
rpc_server:
address: 127.0.0.1
port: 33145
kafka_api:
- address: 127.0.0.1
port: 9092
admin:
- address: 127.0.0.1
port: 9644
EOF
fi
# Download Vector binary
echo "Downloading Vector..."
if [ ! -d "$INSTALL_DIR/vector" ]; then
mkdir -p "$INSTALL_DIR/vector"
# Get latest release URL
VECTOR_LATEST=$(curl -s https://api.github.com/repos/vectordotdev/vector/releases/latest | grep "browser_download_url.*x86_64-unknown-linux-gnu.tar.gz" | head -n 1 | cut -d '"' -f 4)
wget -O "$INSTALL_DIR/vector/vector.tar.gz" "$VECTOR_LATEST"
tar -xzf "$INSTALL_DIR/vector/vector.tar.gz" -C "$INSTALL_DIR/vector" --strip-components=1
rm "$INSTALL_DIR/vector/vector.tar.gz"
mkdir -p "$INSTALL_DIR/data/vector"
# Create Vector config
cat > "$INSTALL_DIR/config/vector.toml" <<EOF
[sources.syslog]
type = "syslog"
address = "0.0.0.0:514"
mode = "tcp"
[sources.file_logs]
type = "file"
include = ["$INSTALL_DIR/data/*/logs/*.log"]
ignore_older_secs = 86400 # 1 day
[transforms.parse_logs]
type = "remap"
inputs = ["syslog", "file_logs"]
source = '''
. = parse_syslog!(string!(.message))
'''
[sinks.console]
type = "console"
inputs = ["parse_logs"]
encoding.codec = "json"
[sinks.local_file]
type = "file"
inputs = ["parse_logs"]
path = "$INSTALL_DIR/data/vector/output.log"
encoding.codec = "json"
EOF
fi
echo "All binaries downloaded to $INSTALL_DIR"
echo "Use the start-stop script to manually control all components"