Edit: /opt/canhelp/scripts/install.sh (2650B)
#!/usr/bin/env bash
# =============================================================================
# install.sh — первичная установка всех зависимостей на сервере Ubuntu 22/24
# Запускать ОДИН РАЗ от имени пользователя с sudo-правами
# =============================================================================
set -euo pipefail
APP_DIR="/opt/canhelp"
APP_USER="${SUDO_USER:-ubuntu}"
echo "==> [1/8] Обновление системы"
sudo apt-get update -qq && sudo apt-get upgrade -y -qq
echo "==> [2/8] Базовые пакеты"
sudo apt-get install -y -qq \
git curl wget build-essential \
apache2 certbot python3-certbot-apache \
ca-certificates gnupg lsb-release
echo "==> [3/8] Node.js 22"
if ! command -v node &>/dev/null || [[ "$(node -v)" != v22* ]]; then
curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash -
sudo apt-get install -y nodejs
fi
echo " node $(node -v) npm $(npm -v)"
echo "==> [4/8] PM2"
sudo npm install -g pm2 2>/dev/null
echo " pm2 $(pm2 -v)"
echo "==> [5/8] Docker + Docker Compose"
if ! command -v docker &>/dev/null; then
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg \
| sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" \
| sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update -qq
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo systemctl enable --now docker
sudo usermod -aG docker "$APP_USER"
echo " ВАЖНО: перелогиньтесь чтобы применить группу docker"
fi
echo " docker $(docker -v)"
echo "==> [6/8] Apache модули"
sudo a2enmod proxy proxy_http proxy_wstunnel rewrite headers ssl 2>/dev/null || true
sudo systemctl enable apache2
echo "==> [7/8] Директория приложения"
sudo mkdir -p "$APP_DIR"
sudo chown -R "$APP_USER":"$APP_USER" "$APP_DIR"
mkdir -p "$APP_DIR/apps/api/uploads"
mkdir -p "$APP_DIR/backups"
echo "==> [8/8] Firewall (UFW)"
if command -v ufw &>/dev/null; then
sudo ufw allow OpenSSH
sudo ufw allow 'Apache Full'
sudo ufw --force enable
fi
echo ""
echo "✓ Установка завершена."
echo " Следующий шаг: скопируйте .env в $APP_DIR/ и запустите scripts/deploy.sh"