A collection of setup scripts for Linux servers.
Installs Go with CGO support. Prompts for version (defaults to latest). Removes any existing installation, installs gcc, and sets up environment variables.
# Interactive (prompts for version)
curl -fsSL https://raw.githubusercontent.com/getevo/scripts/main/golang.sh -o golang.sh && sudo bash golang.sh
# With specific version
sudo bash golang.sh 1.23.4Installs Docker CE and Docker Compose plugin.
curl -fsSL https://raw.githubusercontent.com/getevo/scripts/main/docker.sh | sudo bashInstalls Node.js with npm. Prompts for version (defaults to 24).
# Interactive (prompts for version)
curl -fsSL https://raw.githubusercontent.com/getevo/scripts/main/node.sh -o node.sh && sudo bash node.sh
# With specific version
sudo bash node.sh 22Installs Python 3 with pip and venv.
curl -fsSL https://raw.githubusercontent.com/getevo/scripts/main/python.sh | sudo bashInstalls Rust via rustup. Run as normal user (not root).
curl -fsSL https://raw.githubusercontent.com/getevo/scripts/main/rust.sh | bashInstalls PHP with common extensions and Composer. Prompts for version (defaults to 8.3).
# Interactive (prompts for version)
curl -fsSL https://raw.githubusercontent.com/getevo/scripts/main/php.sh -o php.sh && sudo bash php.sh
# With specific version
sudo bash php.sh 8.2Installs .NET SDK 8.0.
curl -fsSL https://raw.githubusercontent.com/getevo/scripts/main/dotnet.sh | sudo bashInstalls MySQL 8.0 in Docker. Prompts for username, password, and port. Data stored in /data/mysql.
# Interactive (prompts for credentials and port)
curl -fsSL https://raw.githubusercontent.com/getevo/scripts/main/mysql.sh -o mysql.sh && sudo bash mysql.sh
# Non-interactive (via environment variables)
MYSQL_PORT=3307 sudo -E bash mysql.sh <username> <password>Installs MariaDB 11 in Docker. Prompts for username, password, and port. Data stored in /data/mariadb.
# Interactive (prompts for credentials and port)
curl -fsSL https://raw.githubusercontent.com/getevo/scripts/main/mariadb.sh -o mariadb.sh && sudo bash mariadb.sh
# Non-interactive (via environment variables)
MARIADB_PORT=3307 sudo -E bash mariadb.sh <username> <password>Installs PostgreSQL 16 in Docker. Prompts for username, password, and port. Data stored in /data/postgres.
# Interactive (prompts for credentials and port)
curl -fsSL https://raw.githubusercontent.com/getevo/scripts/main/postgres.sh -o postgres.sh && sudo bash postgres.sh
# Non-interactive (via environment variables)
POSTGRES_PORT=5433 sudo -E bash postgres.sh <username> <password>Installs Redis 7 in Docker with persistence. Prompts for password and port. Data stored in /data/redis.
# Interactive (prompts for password and port)
curl -fsSL https://raw.githubusercontent.com/getevo/scripts/main/redis.sh -o redis.sh && sudo bash redis.sh
# Non-interactive (via environment variables)
REDIS_PASSWORD=secret REDIS_PORT=6380 sudo -E bash redis.shInstalls MongoDB 7 in Docker. Prompts for username, password, and port. Data stored in /data/mongodb.
# Interactive (prompts for credentials and port)
curl -fsSL https://raw.githubusercontent.com/getevo/scripts/main/mongodb.sh -o mongodb.sh && sudo bash mongodb.sh
# Non-interactive (via environment variables)
MONGO_ROOT_USERNAME=admin MONGO_ROOT_PASSWORD=secret MONGO_PORT=27018 sudo -E bash mongodb.shInstalls ClickHouse in Docker. Prompts for username, password, and ports. Data stored in /data/clickhouse.
# Interactive (prompts for credentials and ports)
curl -fsSL https://raw.githubusercontent.com/getevo/scripts/main/clickhouse.sh -o clickhouse.sh && sudo bash clickhouse.sh
# Non-interactive (via environment variables)
CLICKHOUSE_USER=admin CLICKHOUSE_PASSWORD=secret CLICKHOUSE_HTTP_PORT=8124 CLICKHOUSE_NATIVE_PORT=9001 sudo -E bash clickhouse.shInstalls Qdrant vector database in Docker. Prompts for API key and ports. Data stored in /data/qdrant.
# Interactive (prompts for API key and ports)
curl -fsSL https://raw.githubusercontent.com/getevo/scripts/main/qdrant.sh -o qdrant.sh && sudo bash qdrant.sh
# Non-interactive (via environment variables)
QDRANT_API_KEY=secret QDRANT_HTTP_PORT=6333 QDRANT_GRPC_PORT=6334 sudo -E bash qdrant.shInstalls Milvus vector database in Docker (standalone mode with etcd and MinIO). Prompts for username, password, and port. Data stored in /data/milvus.
# Interactive (prompts for credentials and port)
curl -fsSL https://raw.githubusercontent.com/getevo/scripts/main/milvus.sh -o milvus.sh && sudo bash milvus.sh
# Non-interactive (via environment variables)
MILVUS_USERNAME=root MILVUS_PASSWORD=secret MILVUS_PORT=19530 sudo -E bash milvus.shInstalls MinIO S3-compatible object storage in Docker. Prompts for credentials and ports. Data stored in /data/minio.
# Interactive (prompts for settings)
curl -fsSL https://raw.githubusercontent.com/getevo/scripts/main/minio.sh -o minio.sh && sudo bash minio.sh
# Non-interactive (via environment variables)
MINIO_ROOT_USER=admin MINIO_ROOT_PASSWORD=secretkey MINIO_API_PORT=9000 MINIO_CONSOLE_PORT=9001 sudo -E bash minio.shInstalls SeaweedFS distributed storage with S3 API in Docker. Prompts for credentials and ports. Data stored in /data/seaweedfs.
# Interactive (prompts for settings)
curl -fsSL https://raw.githubusercontent.com/getevo/scripts/main/seaweed.sh -o seaweed.sh && sudo bash seaweed.sh
# Non-interactive (via environment variables)
SEAWEED_S3_ACCESS_KEY=admin SEAWEED_S3_SECRET_KEY=secret SEAWEED_S3_PORT=8333 sudo -E bash seaweed.shInstalls Garage (Rust-based) S3-compatible storage in Docker. Prompts for ports. Data stored in /data/garage.
# Interactive (prompts for settings)
curl -fsSL https://raw.githubusercontent.com/getevo/scripts/main/garage.sh -o garage.sh && sudo bash garage.sh
# Non-interactive (via environment variables)
GARAGE_S3_PORT=3900 GARAGE_WEB_PORT=3902 sudo -E bash garage.shInstalls Nginx web server.
curl -fsSL https://raw.githubusercontent.com/getevo/scripts/main/nginx.sh | sudo bashConfigures UFW firewall with default rules (SSH, HTTP, HTTPS).
curl -fsSL https://raw.githubusercontent.com/getevo/scripts/main/ufw.sh | sudo bashInstalls and configures Fail2ban for SSH protection.
curl -fsSL https://raw.githubusercontent.com/getevo/scripts/main/fail2ban.sh | sudo bashHardens SSH configuration (disables root login, password auth, uses strong ciphers).
curl -fsSL https://raw.githubusercontent.com/getevo/scripts/main/ssh-harden.sh | sudo bashGenerates SSH key pair. Prompts for key type (ed25519/rsa/ecdsa), name, comment, and passphrase. Can run as regular user.
# Interactive (prompts for all options)
curl -fsSL https://raw.githubusercontent.com/getevo/scripts/main/ssh-keygen.sh -o ssh-keygen.sh && bash ssh-keygen.sh
# Non-interactive (via environment variables)
SSH_KEY_TYPE=ed25519 SSH_KEY_NAME=mykey SSH_KEY_COMMENT="me@example.com" SSH_KEY_PASSPHRASE="" bash ssh-keygen.shInstalls Certbot for Let's Encrypt SSL certificates.
curl -fsSL https://raw.githubusercontent.com/getevo/scripts/main/certbot.sh | sudo bashInstalls and configures WireGuard VPN server.
curl -fsSL https://raw.githubusercontent.com/getevo/scripts/main/wireguard.sh | sudo bashCreates a new WireGuard client configuration. Prompts for client name, generates keys, and prints config with QR code.
# Interactive
curl -fsSL https://raw.githubusercontent.com/getevo/scripts/main/wireguard-client.sh -o wireguard-client.sh && sudo bash wireguard-client.sh
# With client name
sudo bash wireguard-client.sh phoneAdds current user to sudoers with NOPASSWD.
curl -fsSL https://raw.githubusercontent.com/getevo/scripts/main/visudo.sh | sudo bashSets server timezone. Pass timezone as argument or will prompt.
curl -fsSL https://raw.githubusercontent.com/getevo/scripts/main/timezone.sh | sudo bash -s -- Asia/TehranSets server hostname. Pass hostname as argument or will prompt.
curl -fsSL https://raw.githubusercontent.com/getevo/scripts/main/hostname.sh | sudo bash -s -- myserverConfigures NTP time synchronization.
curl -fsSL https://raw.githubusercontent.com/getevo/scripts/main/ntp.sh | sudo bashConfigures log rotation. Pass log path as argument or will prompt.
curl -fsSL https://raw.githubusercontent.com/getevo/scripts/main/logrotate.sh | sudo bash -s -- "/var/log/myapp/*.log" 7 100MInstalls Netdata real-time monitoring. Access at port 19999.
curl -fsSL https://raw.githubusercontent.com/getevo/scripts/main/netdata.sh | sudo bashInstalls Prometheus in Docker. Access at port 9090.
curl -fsSL https://raw.githubusercontent.com/getevo/scripts/main/prometheus.sh | sudo bashInstalls Grafana in Docker. Access at port 3000.
curl -fsSL https://raw.githubusercontent.com/getevo/scripts/main/grafana.sh | sudo bashInstalls Loki log aggregation in Docker. API at port 3100.
curl -fsSL https://raw.githubusercontent.com/getevo/scripts/main/loki.sh | sudo bashInstalls Claude Code with Node.js 24, configures GNU Screen, and creates cl alias.
curl -fsSL https://raw.githubusercontent.com/getevo/scripts/main/claude.sh | sudo bashInstalls htop and other monitoring tools (iotop, iftop, ncdu, etc.).
curl -fsSL https://raw.githubusercontent.com/getevo/scripts/main/htop.sh | sudo bashInstalls Git with global gitignore configuration.
curl -fsSL https://raw.githubusercontent.com/getevo/scripts/main/git.sh | sudo bashInstalls Portainer CE 2.33.2 LTS. Access at port 9443.
curl -fsSL https://raw.githubusercontent.com/getevo/scripts/main/portainer.sh | sudo bashInstalls RabbitMQ in Docker with management UI. AMQP port 5672, Management port 15672.
curl -fsSL https://raw.githubusercontent.com/getevo/scripts/main/rabbitmq.sh | sudo bashInstalls NATS server in Docker with JetStream. Client port 4222, HTTP port 8222.
curl -fsSL https://raw.githubusercontent.com/getevo/scripts/main/nats.sh | sudo bash