当前位置: 首页 > news >正文

.net+vue+oracle21xe部署教程

Vue + .NET + Oracle 项目部署教程(宝塔 + Docker)

本教程介绍如何将前后端分离项目部署到 Linux 服务器,包含数据库、后端、前端三部分。

环境说明

组件版本
操作系统Linux(Ubuntu/CentOS)
面板宝塔面板
数据库Oracle 21c XE(Docker 部署)
后端.NET 6(独立部署)
前端Vue 2 + Ant Design Vue
容器工具Docker

一、部署数据库(Oracle)

1.1 拉取 Oracle 镜像

由于 Docker Hub 在国内访问不稳定,需要使用镜像加速服务。

推荐:轩辕镜像(10 元可用很久,稳定快速)

官网:https://docker.xuanyuan.run

注册后会获得一个专属镜像域名,格式类似:xxxx.xuanyuan.run

# 使用轩辕镜像拉取dockerpull<你的轩辕镜像域名>/gvenzl/oracle-xe:21-slim

1.2 启动 Oracle 容器

# 创建数据目录sudomkdir-p/opt/oracle/datasudochmod777/opt/oracle/data# 启动容器dockerrun-d\--nameoracle-xe\-p1521:1521\-eORACLE_PASSWORD=<你的密码>\-v/opt/oracle/data:/opt/oracle/oradata\<你的镜像域名>/gvenzl/oracle-xe:21-slim

1.3 等待初始化

# 查看日志,等待出现 "DATABASE IS READY TO USE!"dockerlogs-foracle-xe

初始化大约需要 1-2 分钟,看到DATABASE IS READY TO USE!表示成功。

1.4 创建用户和表空间

# 进入容器dockerexec-itoracle-xe sqlplus / as sysdba

在 SQL*Plus 中执行:

-- 切换到 PDB 数据库(Oracle 21c 必须执行)ALTERSESSIONSETCONTAINER=XEPDB1;-- 创建表空间CREATETABLESPACE<表空间名>DATAFILE'/opt/oracle/oradata/XE/XEPDB1/<表空间名>.dbf'SIZE500M AUTOEXTENDONNEXT100M MAXSIZE UNLIMITED;-- 创建用户CREATEUSER<用户名>IDENTIFIEDBY<密码>DEFAULTTABLESPACE<表空间名>TEMPORARYTABLESPACEtemp;-- 授权GRANTCONNECT,RESOURCE,DBATO<用户名>;-- 退出EXIT;

1.5 导入数据

将 SQL 文件上传到服务器,然后导入:

# 把 SQL 文件复制到容器内dockercp/path/to/your/sql_files oracle-xe:/opt/oracle/oradata/# 进入容器dockerexec-itoracle-xebash# 批量导入cd/opt/oracle/oradata/sql_filesforfin*.sql;doecho"Importing$f..."echo"EXIT"|sqlplus-S<用户名>/<密码>@localhost:1521/XEPDB1 @"$f"done# 退出容器exit

1.6 验证连接

使用 DataGrip 或其他数据库工具连接:

字段
类型Oracle
主机服务器 IP
端口1521
连接类型Service Name
服务名XEPDB1
用户名你创建的用户名
密码你设置的密码

二、部署后端(.NET 6)

2.1 本地发布(独立部署)

在本地项目目录执行:

cdwebapi# 独立部署方式发布(服务器无需安装 .NET)dotnet publish Simple.WebApi/Simple.WebApi.csproj-cRelease-rlinux-x64 --self-containedtrue-o./publish

2.2 修改配置文件

编辑publish/appsettings.json,修改以下内容:

数据库连接(修改 HOST 为 localhost):

"DatabaseConfig":{"DataSource":"Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=XEPDB1)))","UserId":"<你的用户名>","Password":"<你的密码>"}

跨域配置(添加你的服务器 IP):

"AllowCors":["http://localhost:81","http://<你的服务器IP>"]

2.3 上传到服务器

publish目录上传到服务器:

# 在服务器上创建目录sudomkdir-p/opt/项目名/webapi# 上传 publish 目录到 /opt/项目名/webapi/

2.4 使用 tmux 后台运行

# 创建 tmux 会话tmux new-s<会话名># 进入项目目录并运行cd/opt/项目名/webapi/publishchmod+x Simple.WebApi ./Simple.WebApi# 分离会话:先按 Ctrl+B,松开后再按 D

2.5 验证后端

访问http://<服务器IP>:5216/swagger,能看到 Swagger 文档表示成功。


三、部署前端(Vue)

3.1 修改 API 地址

编辑项目根目录的.env文件:

NODE_ENV=production VUE_APP_PREVIEW=true VUE_APP_API_BASE_URL=http://<服务器IP>:5216/api

3.2 安装依赖并构建

cdweb# 安装依赖(使用淘宝镜像)npminstall--registry=https://registry.npmmirror.com --legacy-peer-deps# 构建npmrun build

构建完成后会生成dist目录。

3.3 通过宝塔部署

  1. 登录宝塔面板
  2. 点击网站添加站点
  3. 填写信息:
    • 域名:填写服务器 IP
    • 根目录:/www/wwwroot/项目名
    • PHP 版本:选纯静态
  4. 点击提交

3.4 上传前端文件

将本地web/dist目录里的所有文件上传到宝塔创建的站点根目录。

3.5 配置 Nginx

在宝塔中点击站点的设置配置文件,添加以下配置:

# Vue Router history 模式(放在 root 配置下面) location / { try_files $uri $uri/ /index.html; } # API 反向代理(放在 server 块内) location /api/ { proxy_pass http://127.0.0.1:5216/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; }

保存后重启站点或 Nginx。


四、验证部署

项目访问地址
前端页面http://<服务器IP>:端口
后端 APIhttp://<服务器IP>:5216/api/
Swagger 文档http://<服务器IP>:5216/swagger

五、常见问题

Docker 拉取镜像超时

国内访问 Docker Hub 不稳定,使用镜像加速:

# 配置镜像加速(需要 sudo 权限)sudomkdir-p/etc/dockersudotee/etc/docker/daemon.json<<-'EOF' { "registry-mirrors": ["https://你的镜像域名"] } EOFsudosystemctl daemon-reloadsudosystemctl restartdocker

npm install 依赖冲突

使用--legacy-peer-deps参数:

npminstall--registry=https://registry.npmmirror.com --legacy-peer-deps

Oracle 21c 创建用户报 ORA-65096

Oracle 21c XE 是容器数据库,需要先切换到 PDB:

ALTERSESSIONSETCONTAINER=XEPDB1;CREATEUSER<用户名>IDENTIFIEDBY<密码>DEFAULTTABLESPACE<表空间名>;

后端无法连接数据库

检查appsettings.json中的HOST是否为localhostSERVICE_NAME是否为XEPDB1

前端页面刷新 404

确保 Nginx 配置了try_files $uri $uri/ /index.html;


六、tmux 常用命令

# 查看所有会话tmuxls# 进入会话tmux attach-t<会话名># 分离会话# 先按 Ctrl+B,松开后再按 D# 结束会话tmux kill-session-t<会话名>
http://www.jsqmd.com/news/957547/

相关文章:

  • 为什么我们需要关心物理AI? 谈自动驾驶、数字孪生与仿真训练
  • 安卓虚拟摄像头开源项目:5大技术特性深度解析与完整部署指南
  • Nexus Mods App:5分钟掌握游戏模组管理的终极解决方案
  • 艺学启航:编程语言性能实测:不同项目精准选型指南
  • spring websocket实现扫码登录
  • 2026年分体式超声波液位计十大品牌排行榜:国产技术突围与全场景选型实战指南 - 水质仪表品牌排行榜
  • 数据库语句 触发器 作业
  • 如何用PyVista实现专业级3D可视化:从数据到洞察的完整指南
  • 为什么我建议2026年程序员转行首先要选网络安全?
  • 遇上 Bug 别慌:用 GPT-5.5 + Claude 3.5 双重验证解决复杂代码报错
  • 微信与手机厂商合作推A2A助手,超级App与系统级AI助手争夺AI时代入口
  • 如何在Linux系统上安装Realtek 8852AE Wi-Fi 6驱动:完整指南
  • 如何利用Chinese-Medical-DIALOGUE-Data构建智能医疗对话系统:5大关键技术解析
  • 如何5分钟完成配置:3DS平台终极宝可梦存档管理器完整指南
  • 从百度程序员被抓事件,聊聊企业内部数据防篡改的3个技术方案(附脚本审计思路)
  • 基于小程序的酒店管理系统毕业设计
  • 3大3D渲染范式革新:F3D如何重塑跨平台可视化技术栈
  • 2026年 重庆水处理药剂厂家推荐榜单:聚合氯化铝/聚丙烯酰胺/次氯酸钠/硫酸亚铁/氯酸钠/漂白粉品牌精选与深度解析 - 品牌企业推荐师(官方)
  • 国际EMBA怎么选?5大主流国际EMBA项目全方位对比分析
  • 中医舌诊用YOLO11舌苔识别工具:含BiFPN+SDI增强模块、标注数据集与可视化界面
  • GHelper终极指南:10MB替代Armoury Crate的华硕笔记本控制神器
  • XHS-Downloader:小红书作品批量下载工具全攻略
  • 2026年青海西宁市TOP5折扣力度大的家电门店,你了解几家?
  • 动态规划-0-1背包问题
  • 微信好友检测秘籍:3分钟发现谁悄悄删了你,彻底清理无效社交
  • 基于小程序的青年公寓服务平台毕设
  • 战略管理国际EMBA怎么选?2026五大顶尖项目深度解析
  • 2026年祛痘精华液哪家好:权威TOP5专业深度测评 - 13425704091
  • 提升到底有多大?GPT-5.5 编程实测:从零构建 Web 应用的效率极限
  • 终极解决方案:CAD Sketcher 0.27.6安装失败问题深度剖析与修复指南