- Create `scripts/setup-swap.sh` to dynamically detect and allocate a 4GB swap file to prevent OOM errors on low-RAM servers. - Integrate the swap check gracefully into the `run.sh` orchestrator flow. - Update `README.md` to document new sudo/disk space prerequisites and the updated deployment steps.
68 lines
2.1 KiB
Bash
68 lines
2.1 KiB
Bash
#!/bin/bash
|
|
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
CYAN='\033[0;36m'
|
|
NC='\033[0m' # No Color
|
|
|
|
echo -e "${CYAN}--- System Swap Space Check ---${NC}"
|
|
|
|
SWAP_SIZE=$(free -m | awk '/^Swap:/ {print $2}')
|
|
|
|
if [ "$SWAP_SIZE" -gt "0" ]; then
|
|
echo -e "${GREEN}[OK] Swap space is already configured ($SWAP_SIZE MB). Skipping creation.${NC}"
|
|
exit 0
|
|
fi
|
|
|
|
RAM_SIZE=$(free -m | awk '/^Mem:/ {print $2}')
|
|
|
|
echo -e "${YELLOW}[WARNING] No swap space detected on this server!${NC}"
|
|
echo -e "GitLab requires at least 4GB of RAM. If your server runs out of memory, GitLab will crash."
|
|
|
|
if [ "$RAM_SIZE" -le "4500" ]; then
|
|
echo -e "${RED}[CRITICAL] Your server has ~4GB RAM ($RAM_SIZE MB). A 4GB swap file is HIGHLY recommended.${NC}"
|
|
else
|
|
echo -e "${CYAN}Your server has plenty of RAM ($RAM_SIZE MB), but adding a swap file is still a safe fallback.${NC}"
|
|
fi
|
|
|
|
echo ""
|
|
read -p "Do you want to automatically create a 4GB swap file now? (Requires sudo password) (y/n): " -n 1 -r
|
|
echo ""
|
|
|
|
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
|
|
echo -e "${YELLOW}Skipping swap creation. If GitLab crashes, please create swap manually.${NC}"
|
|
exit 0
|
|
fi
|
|
|
|
echo -e "${CYAN}Allocating 4GB swap file... This may take a moment.${NC}"
|
|
sudo fallocate -l 4G /swapfile
|
|
|
|
if [ $? -ne 0 ]; then
|
|
echo -e "${RED}[ERROR] Failed to allocate space. Your disk might be full.${NC}"
|
|
exit 1
|
|
fi
|
|
|
|
echo -e "${CYAN}Securing file permissions...${NC}"
|
|
sudo chmod 600 /swapfile
|
|
|
|
echo -e "${CYAN}Formatting as swap...${NC}"
|
|
sudo mkswap /swapfile
|
|
|
|
echo -e "${CYAN}Enabling swap...${NC}"
|
|
sudo swapon /swapfile
|
|
|
|
if grep -q "/swapfile" /etc/fstab; then
|
|
echo -e "${YELLOW}[INFO] /swapfile entry already exists in /etc/fstab.${NC}"
|
|
else
|
|
echo -e "${CYAN}Adding swap to /etc/fstab to survive reboots...${NC}"
|
|
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab > /dev/null
|
|
fi
|
|
|
|
NEW_SWAP=$(free -m | awk '/^Swap:/ {print $2}')
|
|
if [ "$NEW_SWAP" -gt "0" ]; then
|
|
echo -e "${GREEN}[SUCCESS] 4GB Swap space successfully created and enabled!${NC}"
|
|
else
|
|
echo -e "${RED}[ERROR] Something went wrong. Swap is still reporting 0 MB.${NC}"
|
|
fi
|