Initial commit
This commit is contained in:
commit
d6be51bf19
6 changed files with 291 additions and 0 deletions
84
.env.empty
Normal file
84
.env.empty
Normal file
|
@ -0,0 +1,84 @@
|
||||||
|
# Create .env from this example file and replace values for the environment.
|
||||||
|
# The application expects a separate .env.test for test environment configuration
|
||||||
|
# Get detailed information about each variable here: https://docs.tooljet.com/docs/setup/env-vars
|
||||||
|
|
||||||
|
TOOLJET_HOST=
|
||||||
|
LOCKBOX_MASTER_KEY=
|
||||||
|
SECRET_KEY_BASE=
|
||||||
|
|
||||||
|
# DATABASE CONFIG
|
||||||
|
ORM_LOGGING=
|
||||||
|
PG_DB=
|
||||||
|
PG_USER=
|
||||||
|
PG_HOST=
|
||||||
|
PG_PASS=
|
||||||
|
|
||||||
|
# The above postgres values is set to its default state. If necessary, kindly modify it according to your personal preference.
|
||||||
|
|
||||||
|
# TOOLJET DATABASE
|
||||||
|
TOOLJET_DB=
|
||||||
|
TOOLJET_DB_USER=
|
||||||
|
TOOLJET_DB_HOST=
|
||||||
|
TOOLJET_DB_PASS=
|
||||||
|
|
||||||
|
PGRST_DB_URI=
|
||||||
|
PGRST_HOST=
|
||||||
|
PGRST_JWT_SECRET=
|
||||||
|
PGRST_SERVER_PORT=
|
||||||
|
|
||||||
|
# Redis
|
||||||
|
REDIS_HOST=
|
||||||
|
REDIS_PORT=
|
||||||
|
REDIS_USER=
|
||||||
|
REDIS_PASSWORD=
|
||||||
|
|
||||||
|
|
||||||
|
# Checks every 24 hours to see if a new version of ToolJet is available
|
||||||
|
# (Enabled by default. Set false to disable)
|
||||||
|
CHECK_FOR_UPDATES=
|
||||||
|
|
||||||
|
# Checks every 24 hours to update app telemetry data to ToolJet hub.
|
||||||
|
# (Telemetry is enabled by default. Set value to true to disable.)
|
||||||
|
# DISABLE_TOOLJET_TELEMETRY=
|
||||||
|
|
||||||
|
GOOGLE_CLIENT_ID=
|
||||||
|
GOOGLE_CLIENT_SECRET=
|
||||||
|
|
||||||
|
# EMAIL CONFIGURATION
|
||||||
|
DEFAULT_FROM_EMAIL=
|
||||||
|
SMTP_USERNAME=
|
||||||
|
SMTP_PASSWORD=
|
||||||
|
SMTP_DOMAIN=
|
||||||
|
SMTP_PORT=
|
||||||
|
|
||||||
|
# DISABLE USER SIGNUPS (true or false). only applicable if Multi-Workspace feature is enabled
|
||||||
|
DISABLE_SIGNUPS=
|
||||||
|
|
||||||
|
|
||||||
|
# OBSERVABILITY
|
||||||
|
APM_VENDOR=
|
||||||
|
SENTRY_DNS=
|
||||||
|
SENTRY_DEBUG=
|
||||||
|
|
||||||
|
# FEATURE TOGGLE
|
||||||
|
COMMENT_FEATURE_ENABLE=
|
||||||
|
ENABLE_MULTIPLAYER_EDITING=
|
||||||
|
ENABLE_MARKETPLACE_FEATURE=
|
||||||
|
|
||||||
|
|
||||||
|
# SSO (Applicable only for Multi-Workspace)
|
||||||
|
SSO_GOOGLE_OAUTH2_CLIENT_ID=
|
||||||
|
SSO_GIT_OAUTH2_CLIENT_ID=
|
||||||
|
SSO_GIT_OAUTH2_CLIENT_SECRET=
|
||||||
|
SSO_GIT_OAUTH2_HOST=
|
||||||
|
SSO_ACCEPTED_DOMAINS=
|
||||||
|
SSO_DISABLE_SIGNUPS=
|
||||||
|
|
||||||
|
#ONBOARDING
|
||||||
|
ENABLE_ONBOARDING_QUESTIONS_FOR_ALL_SIGN_UPS=
|
||||||
|
|
||||||
|
#session expiry in minutes
|
||||||
|
USER_SESSION_EXPIRY=
|
||||||
|
|
||||||
|
#TELEMETRY
|
||||||
|
DEPLOYMENT_PLATFORM=
|
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
.env
|
||||||
|
postgres_data/
|
13
README.md
Normal file
13
README.md
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
|
||||||
|
## Tags I tried
|
||||||
|
|
||||||
|
- "ee-lts-latest" worked, but had many anti features
|
||||||
|
- "ce-latest" did not work
|
||||||
|
- "ce-lts-latest" did not work
|
||||||
|
- "v3.0.28-ce-lts" did not work
|
||||||
|
- "v3.0.27-ce-lts" did not work
|
||||||
|
- "latest" did not work
|
||||||
|
|
||||||
|
## Issues I filed
|
||||||
|
|
||||||
|
https://github.com/ToolJet/ToolJet/issues/12931
|
37
backup-restore.sh
Executable file
37
backup-restore.sh
Executable file
|
@ -0,0 +1,37 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Source the .env file to get PG_HOST
|
||||||
|
source .env
|
||||||
|
|
||||||
|
# Function to perform backup
|
||||||
|
perform_backup() {
|
||||||
|
echo "Enter the file name for the backup:"
|
||||||
|
read backup_file_name
|
||||||
|
docker exec -t --user postgres "$PG_HOST" pg_dumpall -c -U postgres > "$backup_file_name.sql"
|
||||||
|
echo "Backup complete. File saved as: $backup_file_name.sql"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to perform restore
|
||||||
|
perform_restore() {
|
||||||
|
echo "Enter the name of the backup file to restore:"
|
||||||
|
read restore_file_name
|
||||||
|
cat "$restore_file_name" | docker exec -i --user postgres "$PG_HOST" psql -U postgres
|
||||||
|
}
|
||||||
|
|
||||||
|
# Main script
|
||||||
|
echo "Choose an operation:"
|
||||||
|
echo "1. Backup"
|
||||||
|
echo "2. Restore"
|
||||||
|
read choice
|
||||||
|
|
||||||
|
case $choice in
|
||||||
|
1)
|
||||||
|
perform_backup
|
||||||
|
;;
|
||||||
|
2)
|
||||||
|
perform_restore
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Invalid choice. Please choose 1 or 2."
|
||||||
|
;;
|
||||||
|
esac
|
48
compose.yaml
Normal file
48
compose.yaml
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
services:
|
||||||
|
tooljet:
|
||||||
|
tty: true
|
||||||
|
stdin_open: true
|
||||||
|
container_name: Tooljet-app
|
||||||
|
image: tooljet/tooljet-ce:latest
|
||||||
|
restart: always
|
||||||
|
env_file: .env
|
||||||
|
ports:
|
||||||
|
- 8001:80
|
||||||
|
deploy: # Please adjust the resource according to your usecase
|
||||||
|
# resources:
|
||||||
|
# limits:
|
||||||
|
# cpus: '1'
|
||||||
|
# memory: 2G
|
||||||
|
depends_on:
|
||||||
|
- postgres
|
||||||
|
environment:
|
||||||
|
SERVE_CLIENT: "true"
|
||||||
|
PORT: "80"
|
||||||
|
command: npm run start:prod
|
||||||
|
|
||||||
|
postgres:
|
||||||
|
container_name: ${PG_HOST}
|
||||||
|
image: postgres:13
|
||||||
|
restart: always
|
||||||
|
deploy: # Please adjust the resource according to your usecase
|
||||||
|
resources:
|
||||||
|
limits:
|
||||||
|
cpus: '2'
|
||||||
|
memory: 3G
|
||||||
|
volumes:
|
||||||
|
- postgres:/var/lib/postgresql/data
|
||||||
|
env_file: .env
|
||||||
|
environment:
|
||||||
|
- POSTGRES_USER=${PG_USER}
|
||||||
|
- POSTGRES_PASSWORD=${PG_PASS}
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
postgres:
|
||||||
|
driver: local
|
||||||
|
driver_opts:
|
||||||
|
o: bind
|
||||||
|
type: none
|
||||||
|
device: ${PWD}/postgres_data
|
||||||
|
certs:
|
||||||
|
logs:
|
||||||
|
fallbackcerts:
|
107
internal.sh
Executable file
107
internal.sh
Executable file
|
@ -0,0 +1,107 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Load the .env file
|
||||||
|
source .env
|
||||||
|
|
||||||
|
# Check if LOCKBOX_MASTER_KEY is present or empty
|
||||||
|
if [[ -z "$LOCKBOX_MASTER_KEY" ]]; then
|
||||||
|
# Generate LOCKBOX_MASTER_KEY
|
||||||
|
LOCKBOX_MASTER_KEY=$(openssl rand -hex 32)
|
||||||
|
|
||||||
|
# Update .env file
|
||||||
|
awk -v key="$LOCKBOX_MASTER_KEY" '
|
||||||
|
BEGIN { FS=OFS="=" }
|
||||||
|
/^LOCKBOX_MASTER_KEY=/ { $2=key; found=1 }
|
||||||
|
1
|
||||||
|
END { if (!found) print "LOCKBOX_MASTER_KEY="key }
|
||||||
|
' .env > temp.env && mv temp.env .env
|
||||||
|
|
||||||
|
echo "Generated a secure master key for the lockbox"
|
||||||
|
else
|
||||||
|
echo "The lockbox master key already exists."
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check if SECRET_KEY_BASE is present or empty
|
||||||
|
if [[ -z "$SECRET_KEY_BASE" ]]; then
|
||||||
|
# Generate SECRET_KEY_BASE
|
||||||
|
SECRET_KEY_BASE=$(openssl rand -hex 64)
|
||||||
|
|
||||||
|
# Update .env file
|
||||||
|
awk -v key="$SECRET_KEY_BASE" '
|
||||||
|
BEGIN { FS=OFS="=" }
|
||||||
|
/^SECRET_KEY_BASE=/ { $2=key; found=1 }
|
||||||
|
1
|
||||||
|
END { if (!found) print "SECRET_KEY_BASE="key }
|
||||||
|
' .env > temp.env && mv temp.env .env
|
||||||
|
|
||||||
|
echo "Generated a secret key for secure operations."
|
||||||
|
else
|
||||||
|
echo "The secret key base is already in place."
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check if PGRST_JWT_SECRET is present or empty
|
||||||
|
if [[ -z "$PGRST_JWT_SECRET" ]]; then
|
||||||
|
# Generate PGRST_JWT_SECRET
|
||||||
|
PGRST_JWT_SECRET=$(openssl rand -hex 32)
|
||||||
|
|
||||||
|
# Update .env file
|
||||||
|
awk -v key="$PGRST_JWT_SECRET" '
|
||||||
|
BEGIN { FS=OFS="=" }
|
||||||
|
/^PGRST_JWT_SECRET=/ { $2=key; found=1 }
|
||||||
|
1
|
||||||
|
END { if (!found) print "PGRST_JWT_SECRET="key }
|
||||||
|
' .env > temp.env && mv temp.env .env
|
||||||
|
|
||||||
|
echo "Generated a unique secret for PGRST JWT secret authentication."
|
||||||
|
else
|
||||||
|
echo "The PGRST JWT secret is already generated and in place."
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Function to generate a random password
|
||||||
|
generate_password() {
|
||||||
|
openssl rand -base64 12 | tr -d '/+' | cut -c1-16
|
||||||
|
}
|
||||||
|
|
||||||
|
# Check if PG_PASS and TOOLJET_DB_PASS are present or empty
|
||||||
|
if [[ -z "$PG_PASS" ]] && [[ -z "$TOOLJET_DB_PASS" ]]; then
|
||||||
|
read -p "Enter password for Postgresql database (Press Enter to generate a random password): " user_input
|
||||||
|
|
||||||
|
if [[ -z "$user_input" ]]; then
|
||||||
|
# Generate random password
|
||||||
|
PASSWORD=$(generate_password)
|
||||||
|
echo "Auto-generated password for Postgresql database: $PASSWORD"
|
||||||
|
else
|
||||||
|
PASSWORD=$user_input
|
||||||
|
echo "Password for Postgresql database successfully added"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Update .env file
|
||||||
|
awk -v pass="$PASSWORD" '
|
||||||
|
BEGIN { FS=OFS="=" }
|
||||||
|
/^(PG_PASS|TOOLJET_DB_PASS)=/ { $2=pass; found=1 }
|
||||||
|
1
|
||||||
|
END { if (!found) print "PG_PASS="pass ORS "TOOLJET_DB_PASS="pass }
|
||||||
|
' .env > temp.env && mv temp.env .env
|
||||||
|
else
|
||||||
|
echo "Postgres password already exists"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Check if PGRST_DB_URI is present or empty
|
||||||
|
if [[ -z "$PGRST_DB_URI" ]]; then
|
||||||
|
# Construct PGRST_DB_URI with PG_PASS
|
||||||
|
PGRST_DB_URI="postgres://postgres:$PASSWORD@postgresql/tooljet_db"
|
||||||
|
|
||||||
|
# Update .env file for PGRST_DB_URI
|
||||||
|
awk -v uri="$PGRST_DB_URI" '
|
||||||
|
BEGIN { FS=OFS="=" }
|
||||||
|
/^PGRST_DB_URI=/ { $2=uri; found=1 }
|
||||||
|
1
|
||||||
|
END { if (!found) print "PGRST_DB_URI="uri }
|
||||||
|
' .env > temp.env && mv temp.env .env
|
||||||
|
|
||||||
|
echo "Successfully updated PGRST database URI"
|
||||||
|
else
|
||||||
|
echo "The PGRST DB URI is already configured and in use."
|
||||||
|
fi
|
||||||
|
|
||||||
|
exec "$@"
|
Loading…
Add table
Reference in a new issue