#!/bin/bash

# Ubuntu服务器快速部署脚本
# 请确保以sudo权限运行此脚本

set -e  # 遇到错误立即退出

echo "开始部署 tech_portal 项目..."

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color

# 打印带颜色的信息
print_info() {
    echo -e "${GREEN}[INFO]${NC} $1"
}

print_warning() {
    echo -e "${YELLOW}[WARNING]${NC} $1"
}

print_error() {
    echo -e "${RED}[ERROR]${NC} $1"
}

# 检查是否为root用户
if [[ $EUID -ne 0 ]]; then
   print_error "此脚本需要sudo权限运行"
   exit 1
fi

# 更新系统
print_info "更新系统包..."
apt update && apt upgrade -y

# 安装必要软件
print_info "安装必要软件..."
apt install python3 python3-pip python3-venv nginx postgresql postgresql-contrib git curl -y

# 创建项目目录
print_info "创建项目目录..."
mkdir -p /var/www/tech_portal

# 询问用户是否已上传项目文件
read -p "是否已将项目文件上传到 /var/www/tech_portal？ (y/n): " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
    print_warning "请先上传项目文件到 /var/www/tech_portal，然后重新运行此脚本"
    exit 1
fi

# 进入项目目录
cd /var/www/tech_portal

# 创建虚拟环境
print_info "创建Python虚拟环境..."
python3 -m venv venv

# 激活虚拟环境并安装依赖
print_info "安装Python依赖..."
source venv/bin/activate
pip install -r requirements.txt

# 配置数据库
print_info "配置PostgreSQL数据库..."
sudo -i -u postgres psql << EOF
CREATE DATABASE tech_portal_db;
CREATE USER tech_portal_user WITH PASSWORD 'tech_portal_2023';
GRANT ALL PRIVILEGES ON DATABASE tech_portal_db TO tech_portal_user;
\q
EOF

# 询问域名或IP
read -p "请输入您的域名或服务器IP地址: " domain_or_ip

# 修改Django设置
print_info "配置Django设置..."
cat >> tech_portal/settings.py << EOF

# 生产环境设置
ALLOWED_HOSTS = ['$domain_or_ip', 'localhost', '127.0.0.1']

# 数据库配置
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'tech_portal_db',
        'USER': 'tech_portal_user',
        'PASSWORD': 'tech_portal_2023',
        'HOST': 'localhost',
        'PORT': '5432',
    }
}

# 静态文件配置
STATIC_ROOT = '/var/www/tech_portal/static/'
MEDIA_ROOT = '/var/www/tech_portal/media/'

# 安全设置
DEBUG = False
EOF

# 数据库迁移
print_info "执行数据库迁移..."
source venv/bin/activate
python manage.py makemigrations
python manage.py migrate

# 收集静态文件
print_info "收集静态文件..."
python manage.py collectstatic --noinput

# 创建超级用户
print_info "创建Django超级用户..."
print_warning "请输入超级用户信息："
python manage.py createsuperuser

# 设置文件权限
print_info "设置文件权限..."
chown -R www-data:www-data /var/www/tech_portal

# 配置Gunicorn服务
print_info "配置Gunicorn服务..."
cp deploy/gunicorn.service /etc/systemd/system/
systemctl daemon-reload
systemctl start gunicorn
systemctl enable gunicorn

# 配置Nginx
print_info "配置Nginx..."
# 修改nginx配置中的域名
sed -i "s/your_domain.com/$domain_or_ip/g" deploy/nginx_site.conf
cp deploy/nginx_site.conf /etc/nginx/sites-available/tech_portal
ln -sf /etc/nginx/sites-available/tech_portal /etc/nginx/sites-enabled/
rm -f /etc/nginx/sites-enabled/default

# 测试Nginx配置
print_info "测试Nginx配置..."
nginx -t

# 重启服务
print_info "启动服务..."
systemctl restart nginx
systemctl enable nginx

# 配置防火墙
print_info "配置防火墙..."
ufw --force enable
ufw allow OpenSSH
ufw allow 'Nginx Full'

# 检查服务状态
print_info "检查服务状态..."
echo "Gunicorn服务状态："
systemctl status gunicorn --no-pager
echo "Nginx服务状态："
systemctl status nginx --no-pager

print_info "部署完成！"
print_info "请访问 http://$domain_or_ip 查看网站"
print_info "管理后台地址：http://$domain_or_ip/admin/"

print_warning "重要提醒："
echo "1. 请保存数据库密码：tech_portal_2023"
echo "2. 建议设置HTTPS证书（Let's Encrypt）"
echo "3. 定期备份数据库"
echo "4. 查看日志命令："
echo "   - Gunicorn: sudo journalctl -u gunicorn -f"
echo "   - Nginx: sudo tail -f /var/log/nginx/error.log"