在 Ubuntu 系统部署项目是一个综合性操作,核心流程随项目类型(前端 / 后端 / 静态 / 动态)略有差异,但整体遵循环境准备 → 代码部署 → 服务配置 → 访问测试 → 运维保障 的逻辑。以下按「通用流程 + 不同项目类型实操」展开,覆盖最常见的 Web 项目场景(前端、Python/Java/Node.js 后端、静态站点)。
# 1. 更新系统包
sudo apt update && sudo apt upgrade -y
# 2. 安装基础工具(必备)
sudo apt install -y git wget curl vim unzip # git拉代码、vim编辑文件、解压等
建议统一将项目放在 /var/www/(Web 项目)或 /opt/(非 Web 项目)目录,避免直接用 root 运行项目:
# 创建项目目录(以/var/www为例)
sudo mkdir -p /var/www/your-project
# 设置普通用户权限(假设当前用户为ubuntu)
sudo chown -R ubuntu:ubuntu /var/www/your-project
# 进入项目目录
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)上传代码包,再解压:
unzip your-project.zip # 解压zip包
tar -zxvf your-project.tar.gz # 解压tar.gz包
静态项目仅需Web 服务器(Nginx/Apache) 提供文件访问,核心是配置 Nginx 指向静态文件目录。
sudo apt install -y nginx
# 启动并设置开机自启
sudo systemctl start nginx
sudo systemctl enable nginx
# 验证是否启动成功(访问服务器IP,能看到Nginx默认页则成功)
# 进入项目目录
cd /var/www/your-project
# 安装依赖(需先装Node.js,见下方)
npm install
# 打包生成dist目录(Vue/React通用,若有自定义打包命令则用自己的)
npm run build
# 创建Nginx配置文件(自定义名称,如your-project.conf)
sudo vim /etc/nginx/sites-available/your-project.conf
写入以下配置(替换 your-domain.com 为域名 / 服务器 IP,/var/www/your-project/dist 为实际打包目录):
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";
}
}
# 启用站点(创建软链接到sites-enabled)
sudo ln -s /etc/nginx/sites-available/your-project.conf /etc/nginx/sites-enabled/
# 检查配置语法
sudo nginx -t
# 重启Nginx
sudo systemctl restart nginx
浏览器输入 http://服务器IP 或 http://your-domain.com,即可访问静态项目。
Python 项目需Python 环境 + 依赖安装 + WSGI/ASGI 服务器(Gunicorn/Uvicorn) + Nginx 反向代理(对外提供访问)。
# 安装Python3及虚拟环境(推荐用虚拟环境隔离依赖)
sudo apt install -y python3 python3-pip python3-venv
# 创建虚拟环境
cd /var/www/your-project
python3 -m venv venv
# 激活虚拟环境
source venv/bin/activate
# 安装依赖(requirements.txt为项目依赖文件)
pip install -r requirements.txt
# 安装WSGI/ASGI服务器(Django/Flask用Gunicorn,FastAPI用Uvicorn)
pip install gunicorn # Django/Flask
# pip install uvicorn[standard] # FastAPI
# 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 停止,下一步用守护进程运行。
# 创建systemd服务文件(命名为your-project.service)
sudo vim /etc/systemd/system/your-project.service
写入以下配置(替换路径 / 参数为实际值):
[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。
# 重新加载systemd配置
sudo systemctl daemon-reload
# 启动服务
sudo systemctl start your-project
# 设置开机自启
sudo systemctl enable your-project
# 查看服务状态(确认无报错)
sudo systemctl status your-project
sudo vim /etc/nginx/sites-available/your-project.conf
写入配置:
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;
}
}
sudo ln -s /etc/nginx/sites-available/your-project.conf /etc/nginx/sites-enabled/
sudo nginx -t
sudo systemctl restart nginx
浏览器输入 http://服务器IP 或 http://your-domain.com,即可访问 Python 后端接口。
Java 项目需JDK 环境 + 运行 Jar 包 + Systemd 守护进程 + Nginx 反向代理(可选,若需 80 端口访问)。
# 安装OpenJDK(推荐11/17,适配Spring Boot)
sudo apt install -y openjdk-17-jdk
# 验证安装
java -version
javac -version
cd /var/www/your-project
# 测试运行(假设Jar包为your-project.jar)
java -jar your-project.jar
测试通过后,按 Ctrl+C 停止,配置后台运行。
sudo vim /etc/systemd/system/your-project.service
写入配置:
[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
sudo systemctl daemon-reload
sudo systemctl start your-project
sudo systemctl enable your-project
sudo systemctl status your-project
sudo vim /etc/nginx/sites-available/your-project.conf
写入配置:
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 访问。
# 查看项目服务日志(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 # 错误日志
# 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
Ubuntu 默认用 ufw 防火墙,仅开放必要端口(80/443/22):
# 启用防火墙
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
用 Let's Encrypt 免费证书配置 HTTPS:
# 安装Certbot
sudo apt install -y certbot python3-certbot-nginx
# 申请并配置证书(自动修改Nginx配置)
sudo certbot --nginx -d your-domain.com
# 设置证书自动续期
sudo certbot renew --dry-run
- 项目无法访问:
- 检查防火墙是否开放端口;
- 检查服务是否运行(
systemctl status your-project);
- 检查 Nginx 配置(
nginx -t)和日志。
- 依赖安装失败:
- Python:确保虚拟环境激活,换国内源(
pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple);
- Node.js:换国内源(
npm config set registry https://registry.npmmirror.com)。
- 进程崩溃:
- 查看日志(
journalctl -u your-project);
- 检查内存 / CPU 是否不足(
top/htop)。
以上是 Ubuntu 部署项目的核心流程,不同项目(如 Node.js、PHP)的部署逻辑类似,核心是「环境 + 服务运行 + 反向代理」。若需具体项目(如 Node.js、PHP)的部署细节,可进一步说明。
发表评论: