Last active
December 25, 2025 01:07
-
-
Save ryanmoralesaz/7a8ea34c7cf1054666326e07b8dc836e to your computer and use it in GitHub Desktop.
ubuntu-dev-learning-server-install-script
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 | |
| # Complete installation script for teaching server | |
| set -e # Exit on any error | |
| echo "=== Checking disk usage BEFORE installation ===" | |
| df -h / | grep -v Filesystem | |
| du -sh /usr /var /home 2>/dev/null || true | |
| echo "" | |
| echo "=== Starting installation ===" | |
| # Update system | |
| echo "Updating system packages..." | |
| sudo apt update && sudo apt upgrade -y | |
| # Core system tools | |
| echo "Installing core tools..." | |
| sudo apt install -y tmux git curl wget htop build-essential unzip zsh | |
| # Neovim 0.10+ (from unstable PPA) | |
| echo "Installing Neovim 0.10+..." | |
| sudo add-apt-repository ppa:neovim-ppa/unstable -y | |
| sudo apt update | |
| sudo apt install -y neovim | |
| # Podman (rootless containers) | |
| echo "Installing Podman..." | |
| sudo apt install -y podman podman-compose | |
| # Apache + PHP + Laravel extensions | |
| echo "Installing Apache + PHP + extensions..." | |
| sudo apt install -y \ | |
| apache2 \ | |
| php \ | |
| libapache2-mod-php \ | |
| php-cli \ | |
| php-mbstring \ | |
| php-xml \ | |
| php-bcmath \ | |
| php-curl \ | |
| php-zip \ | |
| php-sqlite3 \ | |
| php-mysql \ | |
| php-pgsql \ | |
| php-gd | |
| # Composer (Laravel/PHP package manager) | |
| echo "Installing Composer..." | |
| curl -sS https://getcomposer.org/installer | php | |
| sudo mv composer.phar /usr/local/bin/composer | |
| sudo chmod +x /usr/local/bin/composer | |
| # Enable Apache mod_rewrite | |
| echo "Configuring Apache..." | |
| sudo a2enmod rewrite | |
| sudo sed -i 's/AllowOverride None/AllowOverride All/g' /etc/apache2/apache2.conf | |
| sudo systemctl restart apache2 | |
| # Node.js (latest LTS) | |
| echo "Installing Node.js..." | |
| curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash - | |
| sudo apt install -y nodejs | |
| # Deno | |
| echo "Installing Deno..." | |
| curl -fsSL https://deno.land/install.sh | sh | |
| sudo mv ~/.deno/bin/deno /usr/local/bin/ | |
| # Rust | |
| echo "Installing Rust..." | |
| curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y | |
| source $HOME/.cargo/env | |
| sudo cp ~/.cargo/bin/* /usr/local/bin/ | |
| # Zig 0.16 dev | |
| echo "Installing Zig..." | |
| wget https://ziglang.org/builds/zig-x86_64-linux-0.16.0-dev.1657+985a3565c.tar.xz | |
| tar -xf zig-x86_64-linux-0.16.0-dev.1657+985a3565c.tar.xz | |
| sudo mv zig-x86_64-linux-0.16.0-dev.1657+985a3565c/zig /usr/local/bin/ | |
| sudo mv zig-x86_64-linux-0.16.0-dev.1657+985a3565c/lib /usr/local/lib/zig | |
| rm -rf zig-x86_64-linux* | |
| # Disk quota tools | |
| echo "Installing quota tools..." | |
| sudo apt install -y quota | |
| # Oh My Zsh (for ubuntu user) | |
| echo "Installing Oh My Zsh..." | |
| sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" "" --unattended | |
| sudo chsh -s $(which zsh) ubuntu | |
| # Global Neovim config | |
| echo "Installing global Neovim config..." | |
| sudo git clone -b hetzner https://github.com/ryanmoralesaz/neovim-setup.git /etc/xdg/nvim | |
| sudo chmod -R 755 /etc/xdg/nvim | |
| echo "" | |
| echo "=== Installation complete! ===" | |
| echo "" | |
| echo "Installed versions:" | |
| echo "- Neovim: $(nvim --version | head -n1)" | |
| echo "- Composer: $(composer --version 2>/dev/null | head -n1)" | |
| echo "- PHP: $(php -v | head -n 1)" | |
| echo "- Node: $(node -v)" | |
| echo "- npm: $(npm -v)" | |
| echo "- Deno: $(deno --version | head -n1)" | |
| echo "- Rust: $(rustc --version)" | |
| echo "- Zig: $(zig version)" | |
| echo "- Podman: $(podman --version)" | |
| echo "" | |
| echo "=== Checking disk usage AFTER installation ===" | |
| df -h / | grep -v Filesystem | |
| du -sh /usr /var /home 2>/dev/null || true |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment