Skip to content

Instantly share code, notes, and snippets.

@vinter-man
Last active January 30, 2026 17:37
Show Gist options
  • Select an option

  • Save vinter-man/d9df8c7e60201b5a7a5b4ab0bbe796d8 to your computer and use it in GitHub Desktop.

Select an option

Save vinter-man/d9df8c7e60201b5a7a5b4ab0bbe796d8 to your computer and use it in GitHub Desktop.
#!/bin/bash
set -e
# ==========================================
# πŸ’€ ULTIMATE ROOT SERVER SETUP (FIXED V3)
# ==========================================
echo "πŸš€ --- LET'S GO! SERVER SETUP (ROOT MODE) ---"
export DEBIAN_FRONTEND=noninteractive
export HOME="/root"
# 1. SYSTEM UPDATE
echo "πŸ“¦ [1/8] Updating System..."
apt-get update && apt-get upgrade -y
apt-get install -y curl wget git unzip build-essential libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev llvm libncursesw5-dev xz-utils \
tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev htop bat jq \
ca-certificates gnupg lsb-release
# 2. DOCKER
echo "🐳 [2/8] Installing Docker..."
if ! command -v docker &> /dev/null; then
curl -fsSL https://get.docker.com | sh
else
echo "⏩ Docker already present"
fi
# 3. LAZY TOOLS
echo "😎 [3/8] Installing LazyTools..."
# LazyDocker
curl https://raw.githubusercontent.com/jesseduffield/lazydocker/master/scripts/install_update_linux.sh | bash
# LazyGit
LAZYGIT_VERSION=$(curl -s "https://api.github.com/repos/jesseduffield/lazygit/releases/latest" | grep -Po '"tag_name": "v\K[^"]*')
curl -Lo lazygit.tar.gz "https://github.com/jesseduffield/lazygit/releases/latest/download/lazygit_${LAZYGIT_VERSION}_Linux_x86_64.tar.gz"
tar xf lazygit.tar.gz lazygit
install lazygit /usr/local/bin
rm lazygit lazygit.tar.gz
# 4. NVM & NODE
echo "🟒 [4/8] Installing Node.js..."
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
nvm install --lts
nvm use --lts
npm install -g yarn pnpm pm2 typescript ts-node nodemon
# 5. PYENV & PYTHON (FIXED LOGIC)
echo "🐍 [5/8] Installing Python 3.11..."
# 1. Export paths immediately (so script sees them even on re-run)
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
# 2. Install only if missing
if [ ! -d "$PYENV_ROOT" ]; then
curl https://pyenv.run | bash
# Persist in .bashrc
echo '' >> ~/.bashrc
echo '# Pyenv Config' >> ~/.bashrc
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo '[[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
fi
# 3. Initialize Pyenv for THIS session
if command -v pyenv 1>/dev/null 2>&1; then
eval "$(pyenv init -)"
fi
# Now install Python
pyenv install -s 3.11.8
pyenv global 3.11.8
pip install --upgrade pip
# 6. PLAYWRIGHT
echo "🎭 [6/8] Installing Playwright..."
npm install -g playwright
npx playwright install --with-deps
# 7. ZSH
echo "πŸ’… [7/8] Setting up ZSH..."
if ! command -v zsh &> /dev/null; then
apt-get install -y zsh
chsh -s $(which zsh) root
fi
# ==========================================
# πŸ§ͺ SMOKE TESTS
# ==========================================
echo " "
echo "πŸ”₯ [8/8] RUNNING SMOKE TESTS..."
echo "--------------------------------"
echo "Versions:"
echo "Docker: $(docker --version)"
echo "Node: $(node -v)"
echo "Python: $(python --version)"
echo "--------------------------------"
# Docker Test
docker run --rm hello-world > /dev/null 2>&1
if [ $? -eq 0 ]; then
echo "βœ… Docker works!"
else
echo "❌ Docker FAILED."
exit 1
fi
# Playwright Test
echo "Testing Playwright..."
cat > /root/test_pw.js <<EOF
const { chromium } = require('playwright');
(async () => {
try {
const browser = await chromium.launch({ args: ['--no-sandbox'] });
await browser.close();
console.log('Browser launched successfully!');
} catch (error) {
console.error(error);
process.exit(1);
}
})();
EOF
npm install playwright
node /root/test_pw.js
if [ $? -eq 0 ]; then
echo "βœ… Playwright works!"
else
echo "❌ Playwright FAILED."
exit 1
fi
# Cleanup
rm /root/test_pw.js
rm -rf /root/node_modules
rm /root/package-lock.json
echo " "
echo "πŸŽ‰ ALL SYSTEMS GO!"
echo "Don't forget to run: source ~/.bashrc"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment