顶部右侧自定义内容
顶部左侧自定义内容
当前位置:首页 > 我的文章 > 正文

怎么在Ubuntu系统部署项目

作者:8vznTUnG发布时间:2025-12-19 14:08分类: 我的文章 浏览:131评论:0


导读: 在 Ubuntu 系统部署项目是一个综合性操作,核心流程随项目类型(前端 / 后端 / 静态 / 动态)略有差异,但整体遵循环境准备 → 代码部署...
在 Ubuntu 系统部署项目是一个综合性操作,核心流程随项目类型(前端 / 后端 / 静态 / 动态)略有差异,但整体遵循环境准备 → 代码部署 → 服务配置 → 访问测试 → 运维保障 的逻辑。以下按「通用流程 + 不同项目类型实操」展开,覆盖最常见的 Web 项目场景(前端、Python/Java/Node.js 后端、静态站点)。

一、部署前准备(通用步骤)

1. 服务器基础配置(首次部署必做)

bash
 
运行
 
# 1. 更新系统包
sudo apt update && sudo apt upgrade -y

# 2. 安装基础工具(必备)
sudo apt install -y git wget curl vim unzip # git拉代码、vim编辑文件、解压等
 

2. 权限与目录规划(规范部署)

建议统一将项目放在 /var/www/(Web 项目)或 /opt/(非 Web 项目)目录,避免直接用 root 运行项目:
 
bash
 
运行
 
# 创建项目目录(以/var/www为例)
sudo mkdir -p /var/www/your-project
# 设置普通用户权限(假设当前用户为ubuntu)
sudo chown -R ubuntu:ubuntu /var/www/your-project
 

3. 拉取代码(Git 方式,最常用)

bash
 
运行
 
# 进入项目目录
cd /var/www/your-project
# 克隆代码仓库(GitHub/GitLab/Gitee)
git clone https://github.com/your-name/your-project.git . # 加.表示克隆到当前目录
# 若需指定分支
git clone -b dev https://github.com/your-name/your-project.git .
 
 
若没有 Git 仓库,可通过 scp 或 rz/sz(需安装 lrzsz)上传代码包,再解压:
 
bash
 
运行
 
unzip your-project.zip # 解压zip包
tar -zxvf your-project.tar.gz # 解压tar.gz包
 
 

二、不同类型项目部署实操

场景 1:静态项目(Vue/React/HTML/CSS/JS)

静态项目仅需Web 服务器(Nginx/Apache) 提供文件访问,核心是配置 Nginx 指向静态文件目录。
步骤 1:安装 Nginx
bash
 
运行
 
 
sudo apt install -y nginx
# 启动并设置开机自启
sudo systemctl start nginx
sudo systemctl enable nginx
# 验证是否启动成功(访问服务器IP,能看到Nginx默认页则成功)
 
步骤 2:构建静态文件(前端项目需打包)
bash
 
运行
 
 
# 进入项目目录
cd /var/www/your-project
# 安装依赖(需先装Node.js,见下方)
npm install
# 打包生成dist目录(Vue/React通用,若有自定义打包命令则用自己的)
npm run build
 
步骤 3:配置 Nginx 站点
bash
 
运行
 
# 创建Nginx配置文件(自定义名称,如your-project.conf)
sudo vim /etc/nginx/sites-available/your-project.conf
 
 
写入以下配置(替换 your-domain.com 为域名 / 服务器 IP,/var/www/your-project/dist 为实际打包目录):
 
nginx
 
server {
    listen 80; # 监听80端口
    server_name your-domain.com; # 域名/IP

    # 静态文件根目录(dist为打包后的目录)
    root /var/www/your-project/dist;
    index index.html index.htm;

    # 解决Vue/React路由刷新404问题
    location / {
        try_files $uri $uri/ /index.html;
    }

    # 静态资源缓存(可选)
    location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
        expires 30d;
        add_header Cache-Control "public, max-age=2592000";
    }
}
 
步骤 4:启用配置并重启 Nginx
bash
 
运行
 
# 启用站点(创建软链接到sites-enabled)
sudo ln -s /etc/nginx/sites-available/your-project.conf /etc/nginx/sites-enabled/
# 检查配置语法
sudo nginx -t
# 重启Nginx
sudo systemctl restart nginx
 
步骤 5:访问测试
浏览器输入 http://服务器IP 或 http://your-domain.com,即可访问静态项目。

场景 2:Python 后端项目(Django/Flask/FastAPI)

Python 项目需Python 环境 + 依赖安装 + WSGI/ASGI 服务器(Gunicorn/Uvicorn) + Nginx 反向代理(对外提供访问)。
步骤 1:安装 Python 环境
bash
 
运行
 
# 安装Python3及虚拟环境(推荐用虚拟环境隔离依赖)
sudo apt install -y python3 python3-pip python3-venv
# 创建虚拟环境
cd /var/www/your-project
python3 -m venv venv
# 激活虚拟环境
source venv/bin/activate
 
步骤 2:安装项目依赖
bash
 
运行
 
# 安装依赖(requirements.txt为项目依赖文件)
pip install -r requirements.txt
# 安装WSGI/ASGI服务器(Django/Flask用Gunicorn,FastAPI用Uvicorn)
pip install gunicorn # Django/Flask
# pip install uvicorn[standard] # FastAPI
 
步骤 3:测试项目运行
bash
 
运行
 
 
# Django测试
python manage.py runserver 0.0.0.0:8000
# Flask测试(假设入口文件为app.py,启动函数为app)
python app.py
# FastAPI测试(假设入口文件为main.py,启动函数为app)
uvicorn main:app --host 0.0.0.0 --port 8000
 
 
测试通过后,按 Ctrl+C 停止,下一步用守护进程运行。
步骤 4:配置 Systemd 守护进程(保证项目后台运行)
bash
 
运行
 
 
 
 
# 创建systemd服务文件(命名为your-project.service)
sudo vim /etc/systemd/system/your-project.service
 
 
写入以下配置(替换路径 / 参数为实际值):
 
ini
 
 
 
 
 
[Unit]
Description=Python Project (Gunicorn/Uvicorn)
After=network.target

[Service]
User=ubuntu # 运行用户(非root)
Group=ubuntu
WorkingDirectory=/var/www/your-project # 项目目录
ExecStart=/var/www/your-project/venv/bin/gunicorn --workers 4 --bind 127.0.0.1:8000 wsgi:application # Django/Flask
# ExecStart=/var/www/your-project/venv/bin/uvicorn main:app --workers 4 --bind 127.0.0.1:8000 # FastAPI
Restart=always # 进程崩溃自动重启

[Install]
WantedBy=multi-user.target
 
 
说明:
 
  • Django 的 wsgi.py 入口:wsgi:application(默认在项目根目录的 wsgi.py);
  • Flask 需先创建 wsgi.py:from app import app as application,再指向 wsgi:application
  • --workers 4:工作进程数,建议设为 CPU核心数*2+1
步骤 5:启动服务并设置开机自启
bash
 
运行
 
 
 
 
# 重新加载systemd配置
sudo systemctl daemon-reload
# 启动服务
sudo systemctl start your-project
# 设置开机自启
sudo systemctl enable your-project
# 查看服务状态(确认无报错)
sudo systemctl status your-project
 
步骤 6:配置 Nginx 反向代理(对外暴露 80 端口)
bash
 
运行
 
 
 
 
sudo vim /etc/nginx/sites-available/your-project.conf
 
 
写入配置:
 
nginx
 
 
 
 
 
server {
    listen 80;
    server_name your-domain.com;

    # 反向代理到Python服务
    location / {
        proxy_pass http://127.0.0.1:8000;
        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;
    }

    # 静态文件(Django需配置,Flask/FastAPI若有静态文件也需加)
    location /static/ {
        root /var/www/your-project; # Django静态文件根目录
        expires 30d;
    }
}
 
步骤 7:启用配置并重启 Nginx
bash
 
运行
 
 
 
 
sudo ln -s /etc/nginx/sites-available/your-project.conf /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx
 
步骤 8:访问测试
浏览器输入 http://服务器IP 或 http://your-domain.com,即可访问 Python 后端接口。

场景 3:Java 后端项目(Spring Boot)

Java 项目需JDK 环境 + 运行 Jar 包 + Systemd 守护进程 + Nginx 反向代理(可选,若需 80 端口访问)。
步骤 1:安装 JDK
bash
 
运行
 
 
 
 
# 安装OpenJDK(推荐11/17,适配Spring Boot)
sudo apt install -y openjdk-17-jdk
# 验证安装
java -version
javac -version
 
步骤 2:运行 Jar 包(测试)
bash
 
运行
 
 
 
 
cd /var/www/your-project
# 测试运行(假设Jar包为your-project.jar)
java -jar your-project.jar
 
 
测试通过后,按 Ctrl+C 停止,配置后台运行。
步骤 3:配置 Systemd 守护进程
bash
 
运行
 
 
 
 
sudo vim /etc/systemd/system/your-project.service
 
 
写入配置:
 
ini
 
 
 
 
 
[Unit]
Description=Spring Boot Project
After=network.target

[Service]
User=ubuntu
Group=ubuntu
WorkingDirectory=/var/www/your-project
ExecStart=/usr/bin/java -jar your-project.jar --server.port=8080 # 指定端口
Restart=always
# 可选:设置JVM参数
# ExecStart=/usr/bin/java -Xms512m -Xmx1024m -jar your-project.jar --server.port=8080

[Install]
WantedBy=multi-user.target
 
步骤 4:启动服务并设置开机自启
bash
 
运行
 
 
 
 
sudo systemctl daemon-reload
sudo systemctl start your-project
sudo systemctl enable your-project
sudo systemctl status your-project
 
步骤 5:配置 Nginx 反向代理(可选,暴露 80 端口)
bash
 
运行
 
 
 
 
sudo vim /etc/nginx/sites-available/your-project.conf
 
 
写入配置:
 
nginx
 
 
 
 
 
server {
    listen 80;
    server_name your-domain.com;

    location / {
        proxy_pass http://127.0.0.1:8080;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}
 
 
启用配置并重启 Nginx 后,即可通过 http://服务器IP 访问。

三、部署后运维(必做)

1. 日志查看(排错必备)

bash
 
运行
 
 
 
 
# 查看项目服务日志(Python/Java)
sudo journalctl -u your-project -f # -f实时跟踪
# 查看Nginx日志
sudo tail -f /var/log/nginx/access.log # 访问日志
sudo tail -f /var/log/nginx/error.log # 错误日志
 

2. 项目更新(迭代部署)

bash
 
运行
 
 
 
 
# 1. 拉取最新代码
cd /var/www/your-project
git pull
# 2. 重新构建/安装依赖(按需)
# 前端:npm install && npm run build
# Python:source venv/bin/activate && pip install -r requirements.txt
# Java:替换新的Jar包
# 3. 重启服务
sudo systemctl restart your-project
# 4. 重启Nginx(若配置有变更)
sudo systemctl restart nginx
 

3. 防火墙配置(安全)

Ubuntu 默认用 ufw 防火墙,仅开放必要端口(80/443/22):
 
bash
 
运行
 
 
 
 
# 启用防火墙
sudo ufw enable
# 允许SSH(22端口)
sudo ufw allow 22
# 允许HTTP(80端口)
sudo ufw allow 80
# 允许HTTPS(443端口,若配置SSL)
sudo ufw allow 443
# 查看防火墙状态
sudo ufw status
 

4. 配置 HTTPS(可选,推荐)

用 Let's Encrypt 免费证书配置 HTTPS:
 
bash
 
运行
 
 
 
 
# 安装Certbot
sudo apt install -y certbot python3-certbot-nginx
# 申请并配置证书(自动修改Nginx配置)
sudo certbot --nginx -d your-domain.com
# 设置证书自动续期
sudo certbot renew --dry-run
 

四、常见问题排查

  1. 项目无法访问
    • 检查防火墙是否开放端口;
    • 检查服务是否运行(systemctl status your-project);
    • 检查 Nginx 配置(nginx -t)和日志。
  2. 依赖安装失败
    • Python:确保虚拟环境激活,换国内源(pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple);
    • Node.js:换国内源(npm config set registry https://registry.npmmirror.com)。
  3. 进程崩溃
    • 查看日志(journalctl -u your-project);
    • 检查内存 / CPU 是否不足(top/htop)。
 
以上是 Ubuntu 部署项目的核心流程,不同项目(如 Node.js、PHP)的部署逻辑类似,核心是「环境 + 服务运行 + 反向代理」。若需具体项目(如 Node.js、PHP)的部署细节,可进一步说明。
 
 

标签:


发表评论: