Ubuntu 24.04 部署 Vue3+Django5.0 完整流程(Nginx+Gunicorn+MySQL)

一、服务器初始化

  1. 连接服务器

首次登录(替换为你的服务器IP)

ssh root@1.2.3.4

建议创建普通用户(可选,增强安全性)

adduser deploy # 按提示设置密码和信息
usermod -aG sudo deploy # 赋予sudo权限
su - deploy # 切换到普通用户

  1. 系统更新与基础工具安装

更新系统包

sudo apt update && sudo apt upgrade -y

安装必备工具

sudo apt install -y wget vim net-tools curl ufw git build-essential

  1. 防火墙配置

启用防火墙

sudo ufw enable

开放必要端口

sudo ufw allow 22/tcp # SSH
sudo ufw allow 80/tcp # HTTP
sudo ufw allow 443/tcp # HTTPS(可选)
sudo ufw allow 8000/tcp # 后端测试端口

查看防火墙状态

sudo ufw status

二、MySQL 数据库安装与配置

  1. 安装 MySQL 8.0

安装MySQL服务器

sudo apt install -y mysql-server

启动服务并设置开机自启

sudo systemctl start mysql
sudo systemctl enable mysql

查看服务状态(确保显示active (running))

sudo systemctl status mysql

  1. 安全初始化 MySQL

运行安全脚本(按提示操作:设置root密码、移除匿名用户等)

sudo mysql_secure_installation

登录MySQL(输入刚设置的root密码)

sudo mysql -u root -p

  1. 创建数据库和用户
    在 MySQL 终端执行以下命令(替换<数据库名>等占位符):
    – 创建数据库(支持中文)
    CREATE DATABASE <数据库名> CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

– 创建专用用户
CREATE USER ‘<用户名>’@‘localhost’ IDENTIFIED BY ‘<复杂密码>’;

– 授权用户访问数据库
GRANT ALL PRIVILEGES ON <数据库名>.* TO ‘<用户名>’@‘localhost’;

– 刷新权限
FLUSH PRIVILEGES;

– 退出MySQL
EXIT;

三、Django5.0 后端部署

  1. 安装 Python 环境

Ubuntu 24.04默认带Python3.12(满足Django5.0需求)

python3 --version # 确认版本≥3.10

安装Python工具

sudo apt install -y python3-pip python3-venv python3-dev

  1. 准备后端项目目录

创建项目目录

mkdir -p /var/www/backend
cd /var/www/backend

上传本地Django项目(本地终端执行,非服务器)

scp -r /本地项目路径/* deploy@1.2.3.4:/var/www/backend

或从Git仓库克隆

git clone <你的仓库地址> .

  1. 配置 Python 虚拟环境

创建虚拟环境

python3 -m venv venv

激活虚拟环境(终端会显示(venv))

source venv/bin/activate

  1. 安装后端依赖

安装MySQL依赖(编译mysqlclient需要)

sudo apt install -y libmysqlclient-dev

安装项目依赖

pip install -r requirements.txt

确保关键包版本正确

pip install django==5.0 gunicorn mysqlclient django-cors-headers
这时如果报错缺少依赖就运行
步骤 1:安装系统依赖(关键)
mysqlclient 需要依赖 pkg-config 工具和 MySQL 开发库,用 apt 安装:
bash

更新包列表(需要sudo权限,输入deploy用户的sudo密码)

sudo apt update

安装必要的依赖库

sudo apt install -y pkg-config libmysqlclient-dev

步骤 2:重新安装 mysqlclient 及其他包
依赖安装完成后,回到虚拟环境(已激活),重新执行安装命令:

pip install django==5.0 gunicorn mysqlclient django-cors-headers

原因说明:
mysqlclient 不是纯 Python 包,需要编译 C 扩展,依赖系统中的:
pkg-config:用于检测系统库的配置工具(错误中提示 “pkg-config: not found”)
libmysqlclient-dev:MySQL 的开发文件(包含编译所需的头文件和库)
安装这些系统依赖后,mysqlclient 就能正常编译并安装了。

  1. 配置 Django 项目
    5.1 修改 settings.py

编辑配置文件(替换为你的项目目录)

vim /var/www/backend/<项目名>/settings.py

关键配置修改:

关闭调试模式

DEBUG = False

允许访问的主机(添加服务器IP)

ALLOWED_HOSTS = [‘1.2.3.4’, ‘localhost’, ‘127.0.0.1’]

跨域配置(允许前端访问)

INSTALLED_APPS = [
# …其他应用
‘corsheaders’, # 添加跨域应用
]

MIDDLEWARE = [
‘corsheaders.middleware.CorsMiddleware’, # 跨域中间件放最前面
# …其他中间件
]

允许的前端域名(替换为你的服务器IP)

CORS_ALLOWED_ORIGINS = [
“http://1.2.3.4”,
]

数据库配置(替换为前面创建的信息)

DATABASES = {
‘default’: {
‘ENGINE’: ‘django.db.backends.mysql’,
‘NAME’: ‘<数据库名>’,
‘USER’: ‘<用户名>’,
‘PASSWORD’: ‘<复杂密码>’,
‘HOST’: ‘localhost’,
‘PORT’: ‘3306’,
‘OPTIONS’: {
‘charset’: ‘utf8mb4’,
}
}
}

静态文件配置

STATIC_URL = ‘/static/’
STATIC_ROOT = ‘/var/www/backend/staticfiles’ # 收集静态文件的目录

媒体文件配置(如果需要上传文件)

MEDIA_URL = ‘/media/’
MEDIA_ROOT = ‘/var/www/backend/media’

5.2 创建静态文件目录
mkdir -p /var/www/backend/staticfiles
mkdir -p /var/www/backend/media

  1. 初始化 Django 项目

收集静态文件

python manage.py collectstatic --noinput

数据库迁移

python manage.py makemigrations
python manage.py migrate

创建管理员账户(按提示输入用户名、邮箱、密码)

python manage.py createsuperuser

  1. 配置 Gunicorn 服务
    7.1 创建系统服务文件
    sudo vim /etc/systemd/system/django.service

添加以下内容(替换路径和项目名):
[Unit]
Description=Gunicorn daemon for Django5.0
After=network.target mysql.service

[Service]
User=root # 确保 root 用户存在(系统默认一定存在)
Group=root # 组和用户一致
WorkingDirectory=/var/www/backend/意见反馈backend/feedback # 你的项目根目录(manage.py 所在处,必须正确)
ExecStart=/var/www/backend/venv/bin/gunicorn --workers 3 --bind 0.0.0.0:8000 feedback.wsgi:application # 启动命令(检查 gunicorn 路径和 WSGI 模块)
Restart=on-failure # 失败时重启(可选,方便排查)

[Install]
WantedBy=multi-user.target

7.2 启动并设置开机自启

刷新系统服务

sudo systemctl daemon-reload

启动Django服务

sudo systemctl start django

设置开机自启

sudo systemctl enable django

查看服务状态(确保active (running))

sudo systemctl status django

四、Vue3 前端部署

  1. 安装 Node.js 环境

安装Node.js 18(Vue3兼容版本)

curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt install -y nodejs

验证版本

node -v # 应显示v18.x.x
npm -v # 应显示8.x.x以上

  1. 准备前端项目目录

创建前端目录

mkdir -p /var/www/frontend
cd /var/www/frontend

上传本地Vue项目(本地终端执行)

scp -r /本地Vue项目路径/* deploy@1.2.3.4:/var/www/frontend

  1. 配置前端 API 地址
    修改 Vue 项目中 API 请求的基础路径(通常在src/utils/request.js):
    vim /var/www/frontend/src/utils/request.js

关键配置(使用相对路径通过 Nginx 代理):
import axios from ‘axios’

const service = axios.create({
baseURL: ‘/api’, // 对应Nginx的/api代理配置
timeout: 5000
})

export default service

  1. 构建生产版本

安装依赖(如遇权限问题可加–unsafe-perm)

npm install

构建静态文件(生成dist目录)

npm run build

五、Nginx 配置(连接前后端)

  1. 安装 Nginx
    sudo apt install -y nginx

启动服务并设置开机自启

sudo systemctl start nginx
sudo systemctl enable nginx

查看状态

sudo systemctl status nginx

  1. 创建 Nginx 配置文件

创建站点配置

sudo vim /etc/nginx/sites-available/default

替换为以下内容(替换服务器 IP):
server {
listen 80;
server_name 1.2.3.4; # 你的服务器IP或域名

# 前端静态文件配置
location / {
    root /var/www/frontend/dist;
    index index.html;
    try_files $uri $uri/ /index.html;  # 解决Vue路由刷新404
}

# 后端API代理(匹配前端的/api前缀)
location /api/ {
    proxy_pass http://127.0.0.1:8000/api/;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

# Django管理后台
location /admin/ {
    proxy_pass http://127.0.0.1:8000/admin/;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
}

# Django静态文件
location /static/ {
    alias /var/www/backend/staticfiles/;
    expires 30d;  # 静态文件缓存30天
}

# 媒体文件(如果需要)
location /media/ {
    alias /var/www/backend/media/;
}

}

  1. 验证并重启 Nginx

检查配置文件语法

sudo nginx -t

重启Nginx生效

sudo systemctl restart nginx

六、权限与访问测试

  1. 调整目录权限

确保Nginx能访问文件

sudo chown -R deploy:www-data /var/www/backend
sudo chown -R deploy:www-data /var/www/frontend
sudo chmod -R 755 /var/www

  1. 测试访问
    前端页面:浏览器访问 http://1.2.3.4(应显示 Vue 页面)
    后端接口:通过前端操作测试 API 交互,或直接访问 http://1.2.3.4/api/xxx
    Django 管理后台:访问 http://1.2.3.4/admin(用前面创建的超级用户登录)
    七、问题排查与日志查看
  2. 后端服务问题

查看Django服务日志

sudo journalctl -u django -f # -f实时刷新

查看Gunicorn错误(如果服务启动失败)

/var/www/backend/venv/bin/gunicorn --bind 127.0.0.1:8000 <项目名>.wsgi:application # 直接运行测试

  1. Nginx 问题

查看Nginx错误日志

sudo tail -f /var/log/nginx/error.log

查看访问日志

sudo tail -f /var/log/nginx/access.log

  1. 数据库问题

查看MySQL日志

sudo tail -f /var/log/mysql/error.log

测试数据库连接

mysql -u <用户名> -p # 输入密码后能登录则正常

  1. 端口占用检查

查看8000端口占用

sudo ss -tulpn | grep 8000

查看80端口占用

sudo ss -tulpn | grep 80

通过以上步骤,可在 Ubuntu 24.04 上完整部署 Vue3 前端和 Django5.0 后端,并通过 Nginx 实现前后端连通。每一步均针对 Ubuntu 系统特性优化,确保兼容性和稳定性。

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐