-
Notifications
You must be signed in to change notification settings - Fork 2.5k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Temporarily restore install.sh (#8639)
Git.new link can't be change. Let's remove this file tomorrow
- Loading branch information
1 parent
9cb076d
commit 4c225a9
Showing
1 changed file
with
168 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,168 @@ | ||
#!/bin/bash | ||
|
||
echo "🔧 Checking dependencies..." | ||
if ! command -v docker &>/dev/null; then | ||
echo -e "\t❌ Docker is not installed or not in PATH. Please install Docker first.\n\t\tSee https://docs.docker.com/get-docker/" | ||
exit 1 | ||
fi | ||
# Check if docker compose plugin is installed | ||
if ! docker compose version &>/dev/null; then | ||
echo -e "\t❌ Docker Compose is not installed or not in PATH (n.b. docker-compose is deprecated)\n\t\tUpdate docker or install docker-compose-plugin\n\t\tOn Linux: sudo apt-get install docker-compose-plugin\n\t\tSee https://docs.docker.com/compose/install/" | ||
exit 1 | ||
fi | ||
# Check if docker is started | ||
if ! docker info &>/dev/null; then | ||
echo -e "\t❌ Docker is not running.\n\t\tPlease start Docker Desktop, Docker or check documentation at https://docs.docker.com/config/daemon/start/" | ||
exit 1 | ||
fi | ||
if ! command -v curl &>/dev/null; then | ||
echo -e "\t❌ Curl is not installed or not in PATH.\n\t\tOn macOS: brew install curl\n\t\tOn Linux: sudo apt install curl" | ||
exit 1 | ||
fi | ||
|
||
# Check if docker compose version is >= 2 | ||
if [ "$(docker compose version --short | cut -d' ' -f3 | cut -d'.' -f1)" -lt 2 ]; then | ||
echo -e "\t❌ Docker Compose is outdated. Please update Docker Compose to version 2 or higher.\n\t\tSee https://docs.docker.com/compose/install/linux/" | ||
exit 1 | ||
fi | ||
# Check if docker-compose is installed, if so issue a warning if version is < 2 | ||
if command -v docker-compose &>/dev/null; then | ||
if [ "$(docker-compose version --short | cut -d' ' -f3 | cut -d'.' -f1)" -lt 2 ]; then | ||
echo -e "\n\t⚠️ 'docker-compose' is installed but outdated. Make sure to use 'docker compose' or to upgrade 'docker-compose' to version 2.\n\t\tSee https://docs.docker.com/compose/install/standalone/\n" | ||
fi | ||
fi | ||
|
||
# Catch errors | ||
set -e | ||
function on_exit { | ||
# $? is the exit status of the last command executed | ||
local exit_status=$? | ||
if [ $exit_status -ne 0 ]; then | ||
echo "❌ Something went wrong, exiting: $exit_status" | ||
fi | ||
} | ||
trap on_exit EXIT | ||
|
||
# Use environment variables VERSION and BRANCH, with defaults if not set | ||
version=${VERSION:-$(curl -s https://api.github.com/repos/twentyhq/twenty/releases/latest | grep '"tag_name":' | cut -d '"' -f 4)} | ||
branch=${BRANCH:-$version} | ||
|
||
echo "🚀 Using version $version and branch $branch" | ||
|
||
dir_name="twenty" | ||
function ask_directory { | ||
read -p "📁 Enter the directory name to setup the project (default: $dir_name): " answer | ||
if [ -n "$answer" ]; then | ||
dir_name=$answer | ||
fi | ||
} | ||
|
||
ask_directory | ||
|
||
while [ -d "$dir_name" ]; do | ||
read -p "🚫 Directory '$dir_name' already exists. Do you want to overwrite it? (y/N) " answer | ||
if [ "$answer" = "y" ]; then | ||
break | ||
else | ||
ask_directory | ||
fi | ||
done | ||
|
||
# Create a directory named twenty | ||
echo "📁 Creating directory '$dir_name'" | ||
mkdir -p "$dir_name" && cd "$dir_name" || { echo "❌ Failed to create/access directory '$dir_name'"; exit 1; } | ||
|
||
# Copy twenty/packages/twenty-docker/docker-compose.yml in it | ||
echo -e "\t• Copying docker-compose.yml" | ||
curl -sLo docker-compose.yml https://raw.githubusercontent.com/twentyhq/twenty/$branch/packages/twenty-docker/docker-compose.yml | ||
|
||
# Copy twenty/packages/twenty-docker/.env.example to .env | ||
echo -e "\t• Setting up .env file" | ||
curl -sLo .env https://raw.githubusercontent.com/twentyhq/twenty/$branch/packages/twenty-docker/.env.example | ||
|
||
# Replace TAG=latest by TAG=<latest_release or version input> | ||
if [[ $(uname) == "Darwin" ]]; then | ||
# Running on macOS | ||
sed -i '' "s/TAG=latest/TAG=$version/g" .env | ||
else | ||
# Assuming Linux | ||
sed -i'' "s/TAG=latest/TAG=$version/g" .env | ||
fi | ||
|
||
# Generate random strings for secrets | ||
echo "# === Randomly generated secrets ===" >>.env | ||
echo "APP_SECRET=$(openssl rand -base64 32)" >>.env | ||
echo "" >>.env | ||
echo "PGPASSWORD_SUPERUSER=$(openssl rand -hex 16)" >>.env | ||
echo "" >>.env | ||
echo "POSTGRES_ADMIN_PASSWORD=$(openssl rand -base64 32)" >>.env | ||
|
||
echo -e "\t• .env configuration completed" | ||
|
||
port=3000 | ||
# Check if command nc is available | ||
if command -v nc &> /dev/null; then | ||
# Check if port 3000 is already in use, propose to change it | ||
while nc -zv localhost $port &>/dev/null; do | ||
read -p "🚫 Port $port is already in use. Do you want to use another port? (Y/n) " answer | ||
if [ "$answer" = "n" ]; then | ||
continue | ||
fi | ||
read -p "Enter a new port number: " new_port | ||
if [[ $(uname) == "Darwin" ]]; then | ||
sed -i '' "s/$port:$port/$new_port:$port/g" docker-compose.yml | ||
sed -E -i '' "s|^SERVER_URL=http://localhost:[0-9]+|SERVER_URL=http://localhost:$new_port|g" .env | ||
else | ||
sed -i'' "s/$port:$port/$new_port:$port/g" docker-compose.yml | ||
sed -E -i'' "s|^SERVER_URL=http://localhost:[0-9]+|SERVER_URL=http://localhost:$new_port|g" .env | ||
fi | ||
port=$new_port | ||
done | ||
fi | ||
|
||
# Ask user if they want to start the project | ||
read -p "🚀 Do you want to start the project now? (Y/n) " answer | ||
if [ "$answer" = "n" ]; then | ||
echo "✅ Project setup completed. Run 'docker compose up -d' to start." | ||
exit 0 | ||
else | ||
echo "🐳 Starting Docker containers..." | ||
docker compose up -d | ||
# Check if port is listening | ||
echo "Waiting for server to be healthy, it might take a few minutes while we initialize the database..." | ||
# Tail logs of the server until it's ready | ||
docker compose logs -f server & | ||
pid=$! | ||
while [ ! $(docker inspect --format='{{.State.Health.Status}}' twenty-server-1) = "healthy" ]; do | ||
sleep 1 | ||
done | ||
kill $pid | ||
echo "" | ||
echo "✅ Server is up and running" | ||
fi | ||
|
||
function ask_open_browser { | ||
read -p "🌐 Do you want to open the project in your browser? (Y/n) " answer | ||
if [ "$answer" = "n" ]; then | ||
echo "✅ Setup completed. Access your project at http://localhost:$port" | ||
exit 0 | ||
fi | ||
} | ||
|
||
# Ask user if they want to open the project | ||
# Running on macOS | ||
if [[ $(uname) == "Darwin" ]]; then | ||
ask_open_browser | ||
|
||
open "http://localhost:$port" | ||
# Assuming Linux | ||
else | ||
# xdg-open is not installed, we could be running in a non gui environment | ||
if command -v xdg-open >/dev/null 2>&1; then | ||
ask_open_browser | ||
|
||
xdg-open "http://localhost:$port" | ||
else | ||
echo "✅ Setup completed. Your project is available at http://localhost:$port" | ||
fi | ||
fi |