# 快速部署指南

基于您之前的错误信息，这里是修复版的配置文件和详细步骤。

## 修复之前的问题

### 1. 修复Gunicorn服务配置

将正确的服务文件内容保存到 `/etc/systemd/system/gunicorn.service`：

```ini
[Unit]
Description=gunicorn daemon for tech_portal
After=network.target

[Service]
User=www-data
Group=www-data
WorkingDirectory=/var/www/tech_portal
ExecStart=/var/www/tech_portal/venv/bin/gunicorn --access-logfile - --workers 3 --bind unix:/var/www/tech_portal/tech_portal.sock tech_portal.wsgi:application
ExecReload=/bin/kill -s HUP $MAINPID
Restart=on-failure

[Install]
WantedBy=multi-user.target
```

### 2. 修复Nginx配置

将正确的配置文件内容保存到 `/etc/nginx/sites-available/tech_portal`：

```nginx
server {
    listen 80;
    server_name your_domain.com www.your_domain.com;

    location = /favicon.ico { 
        access_log off; 
        log_not_found off; 
    }
    
    location /static/ {
        root /var/www/tech_portal;
        expires 30d;
        add_header Cache-Control "public, immutable";
    }

    location /media/ {
        root /var/www/tech_portal;
        expires 30d;
        add_header Cache-Control "public, immutable";
    }

    location / {
        include proxy_params;
        proxy_pass http://unix:/var/www/tech_portal/tech_portal.sock;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}
```

## 完整部署步骤

### 1. 基础环境准备
```bash
sudo apt update && sudo apt upgrade -y
sudo apt install python3 python3-pip python3-venv nginx postgresql postgresql-contrib git -y
```

### 2. 创建项目目录并上传文件
```bash
sudo mkdir -p /var/www/tech_portal
sudo chown $USER:$USER /var/www/tech_portal
# 上传项目文件到此目录
```

### 3. 配置Python环境
```bash
cd /var/www/tech_portal
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
```

### 4. 配置数据库
```bash
sudo -i -u postgres
createdb tech_portal_db
createuser --interactive
# 输入用户名：tech_portal_user
# 是否为超级用户？n
# 允许创建数据库？n  
# 允许创建角色？n

psql
ALTER USER tech_portal_user PASSWORD 'your_secure_password';
GRANT ALL PRIVILEGES ON DATABASE tech_portal_db TO tech_portal_user;
\q
exit
```

### 5. 配置Django
编辑 `tech_portal/settings.py`，添加：
```python
ALLOWED_HOSTS = ['your_domain_or_ip', 'localhost']

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': 'tech_portal_db',
        'USER': 'tech_portal_user',
        'PASSWORD': 'your_secure_password',
        'HOST': 'localhost',
        'PORT': '5432',
    }
}

STATIC_ROOT = '/var/www/tech_portal/static/'
MEDIA_ROOT = '/var/www/tech_portal/media/'
DEBUG = False
```

### 6. 初始化Django
```bash
cd /var/www/tech_portal
source venv/bin/activate
python manage.py makemigrations
python manage.py migrate
python manage.py collectstatic --noinput
python manage.py createsuperuser
```

### 7. 配置Gunicorn
```bash
# 创建服务文件
sudo nano /etc/systemd/system/gunicorn.service
# 粘贴上面的服务配置内容

# 设置权限
sudo chown www-data:www-data /var/www/tech_portal -R

# 启动服务
sudo systemctl daemon-reload
sudo systemctl start gunicorn
sudo systemctl enable gunicorn
sudo systemctl status gunicorn
```

### 8. 配置Nginx
```bash
# 创建配置文件
sudo nano /etc/nginx/sites-available/tech_portal
# 粘贴上面的Nginx配置内容，记得修改域名

# 启用站点
sudo ln -s /etc/nginx/sites-available/tech_portal /etc/nginx/sites-enabled/
sudo rm /etc/nginx/sites-enabled/default

# 测试并重启
sudo nginx -t
sudo systemctl restart nginx
sudo systemctl enable nginx
```

### 9. 配置防火墙
```bash
sudo ufw enable
sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
```

## 常用故障排除命令

```bash
# 查看Gunicorn状态和日志
sudo systemctl status gunicorn
sudo journalctl -u gunicorn -f

# 查看Nginx状态和日志
sudo systemctl status nginx
sudo tail -f /var/log/nginx/error.log

# 重启服务
sudo systemctl restart gunicorn
sudo systemctl restart nginx

# 测试配置
sudo nginx -t
```

## 自动部署脚本使用

如果您想使用自动化脚本：

```bash
# 1. 上传整个项目到服务器
# 2. 给脚本执行权限
chmod +x deploy/deploy.sh

# 3. 运行部署脚本
sudo ./deploy/deploy.sh
```

部署完成后，您就可以通过服务器IP或域名访问网站了！