Linux 部署项目

news2024/12/27 12:14:05

部署

  • Linux 部署项目
    • 1. 宝塔部署
      • 1.1 前端部署
      • 1.2 后端部署
    • 2. docker 部署
      • 2.1 后端部署
      • 2.2 前端部署
    • 3. 跨域问题
      • 3.1 Nginx 代理(推荐)
      • 3.2 修改后端服务
      • 3.3 添加 web 全局请求拦截器
    • 4. 域名解析
      • DNSPod
      • 添加域名

Linux 部署项目

1. 宝塔部署

准备工作:

记得打开防火墙端口

查看面板地址,后登录宝塔

/etc/init.d/bt default

1.1 前端部署

  1. 点击网站,选择 php 项目 ,添加站点,输入域名,提交

image-20230117170605962

  1. 复制 dist 文件夹中的文件到根目录下,已有文件就覆盖

image-20230117171015321

1.2 后端部署

  1. 创建项目文件夹,将 jar 包复制进去,复制文件夹和文件名备用

    image-20230117171836399

  2. 点击网站,选择 java 项目,添加 java 项目,输入信息,注意图中化框部分,然后提交

    image-20230117172743587

2. docker 部署

2.1 后端部署

Dockerfile 在后端根目录创建,代码如下

image-20230117193659207

FROM maven:3.5-jdk-8-alpine as builder

WORKDIR /app
COPY pom.xml .
COPY src ./src

# 用 maven 打包,跳过测试
RUN mvn package -DskipTests

CMD ["java","-jar","/app/target/user-center-0.0.1-SANPSHOT.jar","--spring.profiles.active=prod"]

将整个项目文件上传到服务器上(如 /www/wwwroot/user-center/),在该目录里根据 Dockerfile 构建镜像

FROM maven:3.5-jdk-8-alpine as builder

WORKDIR /app
COPY pom.xml .
COPY src ./src

RUN mvn package -DskipTests

CMD ["java","-jar","/app/target/user-center-0.0.1-SANPSHOT.jar","--spring.profiles.active=prod"]
# 没有权限时用 sudo,注意最后的点
sudo docker build -t user-center:v0.0.1 .

创建容器

# 后端 -p [主机] : [容器] 
# -d 后台运行
docker run -p 8088:8088 -d user-center:v0.0.1

2.2 前端部署

创建 docker 目录,里面放 Dockerfile 和 nginx.conf

image-20230117200624152

Dockerfile

FROM nginx

WORKDIR /usr/sharenginx/html/
USER root

COPY ./docker/nginx.conf /etc/nginx/conf.d/default.conf

COPY ./dist /usr/share/nginx/html/

# 显示写出端口号,并无实际作用
EXPOSE 80

CMD ["nginx","-g","daemon off;"]

nginx.conf

server {
    listen 80;
    # gzip config
    gzip on;
    gzip_min_length 1k;
    gzip_comp_level 9;
    gzip_types text/plain text/css text/javascript application/json application/javascript application/x-javascript application/xml;
    gzip_vary on;
    gzip_disable "MSIE [1-6]\.";

    root /usr/share/nginx/html;
    include /etc/nginx/mime.types;

    location / {
        try_files $uri /index.html;
    }

}

将整个项目文件上传到服务器上(如 /www/wwwroot/user-center-frontend/),在该目录里根据 Dockerfile 构建镜像

# 没有权限时用 sudo,注意最后的点
sudo docker build -t user-center-front:v0.0.1 .

创建容器

# 后端 -p [主机] : [容器] 
# -d 后台运行
docker run -p 80:80 -d user-center-frontend:v0.0.1

3. 跨域问题

3.1 Nginx 代理(推荐)

# 跨域配置
location ^~ /api/ {
    proxy_pass http://127.0.0.1:8080/api/;
    add_header 'Access-Control-Allow-Origin' $http_origin;
    add_header 'Access-Control-Allow-Credentials' 'true';
    add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS';
    add_header Access-Control-Allow-Headers '*';
    if ($request_method = 'OPTIONS') {
        add_header 'Access-Control-Allow-Credentials' 'true';
        add_header 'Access-Control-Allow-Origin' $http_origin;
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
        add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
        add_header 'Access-Control-Max-Age' 1728000;
        add_header 'Content-Type' 'text/plain; charset=utf-8';
        add_header 'Content-Length' 0;
        return 204;
    }
}

3.2 修改后端服务

// 添加注解
@CrossOrigin(origins = "http://43.138.134.226")

image-20230117191503826

3.3 添加 web 全局请求拦截器

@Configuration
public class WebMvcConfg implements WebMvcConfigurer {
	@Override
	public void addCorsMappings(CorsRegistry registry) {
    //设置允许跨域的路径
    	registry.addMapping("/**")
            //设置允许跨域请求的域名
            //当**Credentials为true时,**Origin不能为星号,需为具体的ip地址【如果接口不带cookie,ip无需设成具体ip】
            .allowedOrigins("http://localhost:9527", "http://127.0.0.1:9527", "http://127.0.0.1:8082", "http://127.0.0.1:8083")
            //是否允许证书 不再默认开启
            .allowCredentials(true)
            //设置允许的方法
            .allowedMethods("*")
            //跨域允许时间
            .maxAge(3600);
	}
}

4. 域名解析

DNSPod

可以设置二级域名

image-20230117210134042

添加域名

在宝塔中添加域名,注意要开启 nginx

image-20230117210228178

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1068622.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Kafka消费者群组和负载均衡

前言 在大数据时代,消息处理成为众多企业关注的焦点。而Kafka作为一种高性能、分布式的消息系统,通过其消费者群组和负载均衡的特性,实现了高效的消息处理和可靠的数据传递。 消费者群组 Kafka的消费者群组是一种灵活而强大的机制&#xff…

Java进阶——Java深入学习的笔记汇总 JVM底层、多线程、类加载 ...

前言 spring作为主流的 Java Web 开发的开源框架,是Java 世界最为成功的框架,持续不断深入认识spring框架是Java程序员不变的追求;而spring的底层其实就是Java,因此,深入学习Spring和深入学习Java是硬币的正反面&…

Win10系统打开组策略编辑器的两种方法

组策略编辑器是Win10电脑中很实用的工具,它可以帮助用户管理和设置计算机的安全性、网络连接、软件安装等各种策略。但是,很多新手用户不知道打开Win10电脑中组策略编辑器的方法步骤,下面小编给大家介绍两种简单的方法,帮助打开快…

uniapp EventChannel 页面跳转参数事件传递navigateBack,navigateTo 成功后通知事件区别

问题:navigateBack()emit事件在onload()监听不到 从A页面跳转到B页面,在B点击产生数据后,跳转回到A,并告诉A点击的数据是什么,使用: navigateBack() B页面&…

内存溢出和内存泄漏

内存溢出和内存泄漏 内存溢出 内存溢出相对于内存泄漏来说,尽管更容易被理解,但是同样的,内存溢出也是引发程序崩溃的罪魁祸首之一。由于GC一直在发展,所以一般情况下,除非应用程序占用的内存增长速度非常快&#xf…

李沐深度学习记录5:13.Dropout

Dropout从零开始实现 import torch from torch import nn from d2l import torch as d2l# 定义Dropout函数 def dropout_layer(X, dropout):assert 0 < dropout < 1# 在本情况中&#xff0c;所有元素都被丢弃if dropout 1:return torch.zeros_like(X)# 在本情况中&…

模拟器运行在AndroidStudio内部,设置其独立窗口显示

在窗口内部运行 设置成独立窗口 Android Studio->Settings或Preferences->Tools->Emulator->取消勾选Launch in the Running Devices tool window --->点击右下角的OK按钮 ---> 重启Android Studio 再次启动模拟器

二维码基础学习指南

1.二维码基础原理 二维码生成原理及解析代码_二维码算法及原理-CSDN博客 2. 关于字符容纳的分辨 2.1 数字编码(Numeric Mode) 数字编码的范围为 0~9。 对于数字编码&#xff0c;统计需要编码数字的个数是否为 3 的倍数&#xff1a;如果不是 3 的倍数&#xff0c;则剩下的 1 …

ios safari 浏览器跳转页面没有自适应

今天开发遇到了一个问题&#xff0c;当用户点击浏览器中的表单进行注册时&#xff0c;表单元素会放大&#xff0c;随后跳转页面无法还原到初始状态。 这是因为如果 的 font-size 被设定为 16px 或更大&#xff0c;那么 iOS 上的 Safari 将正常聚焦到输入表单中。但是&#xff…

NSSCTF [BJDCTF 2020]easy_md5 md5实现sql

开局一个框 啥都没有用 然后我们进行抓包 发现存在提示 这里是一个sql语句 看到了 是md5加密后的 这里也是看了wp 才知道特殊MD5 可以被识别为 注入的万能钥匙 ffifdyopmd5 加密后是 276F722736C95D99E921722CF9ED621C转变为字符串 后是 or6 乱码这里就可以实现 注入 所…

一款构建Python命令行应用的开源库

1 简介 当我们编写 Python 程序时&#xff0c;我们经常需要与用户进行交互&#xff0c;接收输入并输出结果。Python 提供了许多方法来实现这一点&#xff0c;其中一个非常方便的方法是使用 typer 库。typer 是一个用于构建命令行应用程序的 Python 库&#xff0c;它使得创建命令…

Qt元对象系统 day4

Qt元对象系统 day4 元对象 元对象系统是一个基于标准C的扩展&#xff0c;为Qt提供了信号与槽机制、实时类型信息、动态属性系统。元对象可以操作、创建、描述或是执行其他对象&#xff0c;元对象又称为基对象元对象组成 QObject&#xff1a; QT 对象模型的核心&#xff0c;绝…

2023年9月:比特币逆势崛起!全球市场暴跌中的优异表现引人瞩目!

比特币在 9 月份上涨&#xff0c;而许多传统资产遭受了重大损失&#xff0c;凸显了加密货币的多元化特性。全球市场的压力似乎源于政府债券收益率上升和油价上涨。 随着比特币链上指标在本月的改善&#xff0c;强劲的基本面发挥了关键作用。稳定币市值在去年下降后趋于稳定&am…

RDkit的安装

1.一定要以管理员模式运行anaconda 2.用Anaconda创建一个新的虚环境 conda create -n my-rdkit python3.63.(进入)虚环境 #windows conda deactivate4.安装 conda install -c rdkit rdkit # 解释: -c 是选择channels, 选择从哪里下载, 第一个rdkit是通道,第二个是我们需要的…

SaaS和CRM软件系统间的关系

CRM系统和SaaS的概念是很多企业并不熟知的&#xff0c;CRM的字眼也是在数字化转型的浪潮下才渐渐出现在大家的眼前&#xff0c;让更多人认识到数字化工具的作用&#xff0c;但你清楚CRM系统和SaaS的关系吗&#xff1f; 什么是SaaS&#xff1f;SaaS可以理解为一种服务方式。厂商…

如何做好sop流程图?sop流程图用什么软件做?

5.如何做好sop流程图&#xff1f;sop流程图用什么软件做&#xff1f; 建立标准作业程序sop已经成为企业进步和发展的必经之路&#xff0c;不过&#xff0c;很多刚刚开始着手搭建sop的企业并不知道要如何操作&#xff0c;对于如何做sop流程图、用什么软件做sop流程图等问题充满…

数据中心负载测试中常见的挑战和解决方案有哪些?

数据中心负载测试中常见的挑战一个是搭建真实的测试环境&#xff0c;需要考虑到数据中心的规模、硬件设备、网络拓扑等因素&#xff0c;以确保测试的准确性和可靠性。在进行负载测试时&#xff0c;需要合理管理资源&#xff0c;包括服务器、存储设备、网络带宽等&#xff0c;以…

Selenium进行无界面爬虫开发

在网络爬虫开发中&#xff0c;利用Selenium进行无界面浏览器自动化是一种常见且强大的技术。无界面浏览器可以模拟真实用户的行为&#xff0c;解决动态加载页面和JavaScript渲染的问题&#xff0c;给爬虫带来了更大的便利。本文将为您介绍如何利用Selenium进行无界面浏览器自动…

C++ — 指针和数组的关系?

在本文中&#xff0c;您将了解数组与指针之间的关系&#xff0c;并在程序中有效地使用它们。 指针是保存地址的变量。指针不仅可以存储单个变量的地址&#xff0c;还可以存储数组单元的地址。 看以下示例&#xff1a; int* ptr; // 定义指针变量ptr int a[5]; ptr &a[2…

关于JDK于JRE路径配置问题

今天在配置tomcat时发现&#xff0c;无法找到jre的路径&#xff0c;在网上找了半天&#xff0c;才知道&#xff0c;JDK11版本之后&#xff0c;jre的路径默认和JDK路径一致&#xff0c;JDK11之后的文件夹中不再包含jre文件夹&#xff0c;由此在配置JRE环境变量时&#xff0c;只需…