Last active
January 30, 2026 17:37
-
-
Save vinter-man/d9df8c7e60201b5a7a5b4ab0bbe796d8 to your computer and use it in GitHub Desktop.
This file contains hidden or 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
| #!/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