从0开始部署上线,原始宝塔docker,前端后端配置

这篇具有很好参考价值的文章主要介绍了从0开始部署上线,原始宝塔docker,前端后端配置。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 多环境

指同一套项目代码在不同的阶段需要根据实际情况部署到不同的机器上,并且要调整配置。

1、本地环境(自己的电脑)localhost

2、开发环境(远程开发),大家连同一台机器,为了大家开发

3、测试环境(测试、开发、产品),独立的数据库,独立的服务器

4、预发布环境(体验服):和正式环境一致,用的正式数据库,更严谨,查出更多问题

5、正式环境(线上、公开对外访问的项目):尽量不要改动

6、沙箱环境(实验环境):为了实验。

2. 原始部署

在云服务器或者本地虚拟机上,(相关软件可以通过宝塔面板下载很方便)

相关linux命令

pwd:查看当前所在目录

mkdir services : 新建文件夹

cd services/:进入某目录

cd ../ :返回上一级目录

curl -o nginx-1.22.1.tar.gz https://nginx.org/download/nginx-1.22.1.tar.gz :下载软件,跟的第一个参数是文件名,第二个是具体的下载地址。

ls:当前目录的文件,也可以在ls 后面写一个文件路径,查看是否有这个文件

tar -zxvf nginx-1.22.1.tar.gz:解压软件,v表示解压过程是否可视化

rm -rf nginx-1.22.1.tar.gz :删除当前目录的nginx软件包

ls -alh:显示当前目录中各文件的大小

history:查询刚刚执行过的命令

unzip dist.zip -d user-center-front:解压到当前目录的其它文件夹

cat /usr/local/nginx:查看该目录下的文件;cat nginx.conf: 查看该配置文件

cp nginx.conf nginx.default.conf:复制该配置文件

mv nginx.conf ./conf/:移动,移到同目录下的conf文件夹中

ps -ef|grep 'nginx':查看nginx的启动用户

netstat -ntlp:查看占用的端口号

前端

本地项目跨域问题解决

/**
 * 在生产环境 代理是无法生效的,所以这里没有生产环境的配置
 * -------------------------------
 * The agent cannot take effect in the production environment
 * so there is no configuration of the production environment
 * For details, please see
 * https://pro.ant.design/docs/deploy
 */
export default {
  dev: {
    // localhost:8000/api/** -> https://preview.pro.ant.design/api/**
    '/api': {
      // 要代理的地址
      target: 'http://localhost:8080',
      // 配置了这个可以从 http 代理到 https
      // 依赖 origin 的功能可能需要这个,比如 cookie
      changeOrigin: true,
    },
  },
  test: {
    '/api/': {
      target: 'https://proapi.azurewebsites.net',
      changeOrigin: true,
      pathRewrite: { '^': '' },
    },
  },
  pre: {
    '/api/': {
      target: 'http://localhost:8080',
      changeOrigin: true,
      pathRewrite: { '^': '' },
    },
  },
 

远程配置

/**
 * request 网络请求工具
 * 更详细的 api 文档: https://github.com/umijs/umi-request
 */
import {extend} from 'umi-request';
import {message} from "antd";
import {history} from "@@/core/history";
import {stringify} from "querystring";

/**
 * 配置request请求时的默认参数
 */
const request = extend({
  credentials: 'include', // 默认请求是否带上cookie
  prefix: process.env.NODE_ENV === 'production' ? 'http://47.115.226.171:8080' : undefined
  // requestType: 'form',
});

/**
 * 所有请求拦截器
 */
request.interceptors.request.use((url, options): any => {
  console.log(`do request url = ${url}`)
  return {
    url,
    options: {
      ...options,
      headers: {},
    },
  };
});

/**
 * 所有响应拦截器
 */
request.interceptors.response.use(async (response, options): Promise<any> => {
  const res = await response.clone().json();
  if (res.code === 0) {
    return res.data;
  }
  if (res.code === 40100) {
    message.error('请先登录');
    history.replace({
      pathname: '/user/login',
      search: stringify({
        redirect: location.pathname,
      }),
    });
  } else {
    message.error(res.description)
  }
  return res.data;
});

export default request;

环境安装

需要 web 服务器:nginx 、apache、tomcat

安装 nginx 服务器:

  1. 用系统自带的软件包管理器快速安装,比如 centos 的 yum
  2. 自己到官网安装(参考文章)
curl -o nginx-1.21.6.tar.gz http://nginx.org/download/nginx-1.21.6.tar.gz
tar -zxvf nginx-1.21.6.tar.gz
cd nginx-1.21.6
yum install pcre pcre-devel -y
yum install openssl openssl-devel -y
./configure --with-http_ssl_module --with-http_v2_module --with-stream
make  
make install
ls /usr/local/nginx/sbin/nginx
vim /etc/profile
在最后一行添加:export PATH=$PATH:/usr/local/nginx/sbin	
nginx
netstat -ntlp 查看启动情况  

后端

项目中创建application-prod.yml的生产环境配置文件

spring:
    datasource:
        driver-class-name: com.mysql.jdbc.Driver
        url: jdbc:mysql://47.115.226.171:3306/universe
        username: root
        password: xxxx
    session:
        timeout: 86400
server:
    address: 0.0.0.0

java、maven

yum install -y java-1.8.0-openjdk*

curl -o apache-maven-3.8.5-bin.tar.gz https://dlcdn.apache.org/maven/maven-3/3.8.5/binaries/apache-maven-3.8.5-bin.tar.gz

git clone xxx 下载代码

打包构建,跳过测试
mvn package -DskipTests
//也可以本地package打包后,上传到服务器
//不间断运行
nohup java -jar java -jar ./user-center-backend-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod &

java -jar ./user-center-backend-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod

踩坑记录

连接数据库问题

问题:在连接远程数据库的时候连不上,首先是服务器本地可以访问mysql,当将mysql改为允许远程访问之后,本地和远程都不能访问了

在MySQL登录时出现Access denied for user 'root'@'自己电脑ip' (using password: YES) 拒绝访问

参考博客文章:https://www.cnblogs.com/zhongyehai/p/10695334.html

分析:首先确认服务器端口打开了3306,然后本地是能登进去,确认密码无误,远程还是不能访问

当时用的是$ use mysql; $ update user set Host=’%’ where User=‘root’;

修改成下面的就可以了(设置完毕退出后,可以注释掉skip --grant-tables再重启服务)

宝塔部署docker,Java,docker,前端,linux,java,后端

远程运行项目问题

问题:在本地打好jar包后运行没问题,上传到服务器无法访问

首先确保设置的访问端口打开了,这个很重要!!!

踩坑如下:

  1. 采用8080端口,宝塔面板上确认打开
  2. 不确定再去linux上查询一下:

        firewall-cmd --list-all 发现有8080端口,以为开了,此时还没有意识到问题的严重性!

      3. 接下来进行排查

3.1 远程访问端口,看是否能访问到,使用telnet ip 端口

报错无法连接主机,在23号端口失败,windows10没有telnet服务器选项勾选,遂此方法失败

3.2 服务器本地试试能不能访问到8080

curl ip 端口

3.3 通过nohup 运行jar包

3.4 本地服务器测试能不能访问到后台

curl -GET "0.0.0.0:8080/api/user/login"

报错:404

如果是GET接口,如果接口不存在会直接返回404,但是POST接口springboot返回的不是404而是405

3.5 查看nohup.out日志文件

发现没访问后台,再次确认8080端口开放没有,去云服务器后台管理一看没开8080 :)

打开8080,成功访问到后台

宝塔部署docker,Java,docker,前端,linux,java,后端

一些小问题

1. Error: Unable to access xxx文件

文件路径不对,找不到文件

2. springboot POST 405 错误

如果是GET接口,如果接口不存在会直接返回404,但是POST接口springboot返回的不是404而是405,所以要切记405并不是什么奇怪的问题只是找不到而已。

3. 宝塔部署

参考b站视频就行了

【手把手带你从0搭建个人网站,小白可懂的保姆级教程 | 2种方法让你拥有个人博客,程序员自学编程必备】 手把手带你从0搭建个人网站,小白可懂的保姆级教程 | 2种方法让你拥有个人博客,程序员自学编程必备_哔哩哔哩_bilibili

4. Docker部署

什么是docker:什么是Docker?看这一篇干货文章就够了! - 知乎

  1. 项目中添加Dockerfile
FROM maven:3.5-jdk-8-alpine as builder

# Copy local code to the container image.
WORKDIR /app
COPY pom.xml .
COPY src ./src

# Build a release artifact.
RUN mvn package -DskipTests

# Run the web service on container startup.
CMD ["java","-jar","/app/target/user_centor-0.0.1-SNAPSHOT.jar","--spring.profiles.active=prod"]
FROM nginx

WORKDIR /usr/share/nginx/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;"]

Dockerfile 编写:

  • FROM 依赖的基础镜像
  • WORKDIR 工作目录
  • COPY 从本机复制文件
  • RUN 执行命令
  • CMD / ENTRYPOINT(附加额外参数)指定运行容器时默认执行的命令
  1. git clone 项目地址
  2. 根据 Dockerfile 构建镜像:

巨慢,打包了2500s,可以本地打好jar包,复制就行了

# 后端
docker build -t user-center-backend:v0.0.1 .

# 前端
docker build -t user-center-front:v0.0.1 .
  1. Docker 构建优化:减少尺寸、减少构建时间(比如多阶段构建,可以丢弃之前阶段不需要的内容)
  2. docker run 启动:

docker run -p 8080:8080 user-center-backend:v0.0.1

虚拟化

端口映射:把本机的资源(实际访问地址)和容器内部的资源(应用启动端口)进行关联

目录映射:把本机的端口和容器应用的端口进行关联

进入容器:

docker exec -i -t fee2bbb7c9ee /bin/bash

查看进程:

docker ps

查看日志:

docker logs -f [container-id]

杀死容器:

docker kill

强制删除镜像:

docker rmi -f

6. 跨域问题

浏览器为了用户的安全,仅允许向 同域名、同端口 的服务器发送请求。

  1. 改为相同的域名和端口
  2. 网关支持(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. 后端修改

3.1 配置 @CrossOrigin 注解

3.2 添加 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:8080", "http://127.0.0.1:9527", "http://127.0.0.1:8082", "http://127.0.0.1:8083")
                //是否允许证书 不再默认开启
                .allowCredentials(true)
                //设置允许的方法
                .allowedMethods("*")
                //跨域允许时间
                .maxAge(3600);
        }
    }

3.3 定义新的 corsFilter Bean,参考:SpringBoot设置Cors跨域的四种方式 - 简书文章来源地址https://www.toymoban.com/news/detail-540570.html

到了这里,关于从0开始部署上线,原始宝塔docker,前端后端配置的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Mac Docker安装配置nginx,配置代理前端访问服务器后端访问本地启动项目

     或者直接通过docker客户端查看 --name NginxTest:容器名称 -p 8080:8080:映射端口 -d nginx:设置容器后台运行  docker客户端查看 1)全局块:配置服务器整体运行的配置指令 nginx 服务器整体运行的配置指令,主要包括配置运行 Nginx 服务器的用户(组)、允许生成的 worker process 数,

    2024年02月02日
    浏览(68)
  • docker持久化部署vue前端nodejs后端项目-- 01. docker以及docker-compose在window以及linux的安装

    本章节主要来讲述docker desktop 界面版本使用以及docker-compose 的安装和使用 GIT地址:添加链接描述 docker 专栏:点击此处 章节 1 docker以及docker-compose在window以及linux的安装 2 项目对应的docker-compose结构 3 怎么将docker-compose项目部署到服务器上 4 配置服务器JENKINS环境 额外篇 章节

    2024年02月04日
    浏览(50)
  • 使用宝塔面板部署前端项目到服务器

    目录 文章目录 前言 一、第一步:创建文件夹 二、第二步:部署前端项目 三、第三步:打开防火墙 前言 第一步:创建文件夹 第二步:部署前端项目 第三步:打开防火墙 总结 在此之前,我们已经创建了宝塔面板账号、拥有了一台服务器。现在,我们想让我们的前端能够像

    2024年02月03日
    浏览(70)
  • 前端项目部署上线nginx反向代理

    参考 https://www.cnblogs.com/wangjingguan/articles/12817442.html 项目部署—需要服务器+域名 ● 部署(手动/自动化)到服务器—打包/构建(发版)、上线 下载模块包 yarn add webpack-dev-serve -D 在package.json自定义webpack开发服务器启动命令serve 启动当前工程里的webpack开发服务器 yarn serve 服务器配置

    2024年02月09日
    浏览(45)
  • tomcat部署前端vue项目(项目上线具体操作)

    在linux上安装tomcat可以直接在linux服务器上通过wget方式直接下载tomcat,也可以把本地的tomcat上传到服务器。 具体操作步骤如下: 创建一个tomcat目录,位置可以根据自己情况选择 将上传的tomcat复制到上面目录 进入tomcat目录 解压tomcat 进入tomcat的bin目录 启动tomcat 关闭tomcat 删除

    2024年02月01日
    浏览(49)
  • 【前端】Vue 部署上线清除浏览器缓存的方式

    修改根目录index.html 在 head 里面添加下面代码 1 2 meta http-equiv = \\\"pragram\\\" content = \\\"no-cache\\\" meta http-equiv = \\\"cache-control\\\" content = \\\"no-cache, no-store, must-revalidate\\\"   配置 nginx 不缓存 html vue默认配置,打包后css和js的名字后面都加了哈希值,不会有缓存问题。但是index.html在服务器端可能是有

    2024年02月09日
    浏览(40)
  • 宝塔+docker+jenkins部署vue项目(保姆级教程)

    在软件商城安装Docker管理器 使用命令行 jenkins_home为我创建的目录 可以修改任意目录 我这里设置的端口为8080 启动之前需要在云服务器管理平台和宝塔开通相应端口号 代表成功 首次加载比较慢、需要等待很长时间 到这个页面算是初始化完成了 输入密码路径为 之前设置的路

    2024年02月03日
    浏览(49)
  • Unbutu系统-Docker安装、JDK环境配置,Docker常用指令、Docker安装MySQL、Redis、Tomcat、Nginx,前端后分离项目部署

    目录 1、防火墙 1.1、查看防火墙状态 1.2、开启防火墙 1.3、关闭防火墙 1.4、重启防火墙 1.5、查看防火墙版本 2、安装JDK 2.1、官网下载tar包 2.3、解压tar.gz文件 2.4、配置环境变量 2.4.1、查看安装路径 2.4.2、设置环境变量 2.4.3、执行该让环境变量生效 2.4.4、查看JDK版本 3、Docker

    2024年02月04日
    浏览(56)
  • 【ubuntu】ubuntu 20.04安装docker,使用nginx部署前端项目,nginx.conf文件配置

    docker 官网:Install Docker Engine on Ubuntu 1.将apt升级到最新 2.使用apt安装 docker 和 docker-compose (遇到提示输入 y ) 3.将当前用户添加到docker用户组 4.运行hello-world 运行成功 1.修改配置文件 修改conf/nginx.conf 2.重新挂载 给容器设置自启动(如果提示就去掉sudo) 给docker设置开机自启动

    2024年01月20日
    浏览(57)
  • docsify项目部署(华为云+宝塔+centos+docker+nginx)踩坑指南

    首先在服务器中安装docker 由于之前我的python默认版本升级到了python3,但yum执行使用的是python2,就遇到报错 解决: 将首行/usr/bin/python改为/usr/bin/python2. 其次 遇到第二个类似的错误,同理 将首行/usr/bin/python后加个2 接下来安装 显示版本 参考链接:(3条消息) docsify快速部署搭建

    2024年02月11日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包