我们小公司使用了6年的项目部署方案,打包 + 一键部署详解,还挺方便

时间就如白驹过隙,转眼间已经是 2028 年了。小二入职一家初创公司已经 6 年了,眼瞅着开发团队从 3 个人壮大到 54 人,心里有时候会感觉挺不可思议的。

这些年,身边的同事来了又去,有些刚熟悉没多久,就因为看不到公司前景迅速撤退了,像他这样坚持下来的老员工,寥寥无几,大概也就四根手指头吧,如果不包括老板的话。

小二之所以没走,并不是因为他目光长远,看清楚了公司的发展前景,而是他自己不知道去哪里更好,只是没想到,公司在当地发展的还挺有模有样。

这是六年前他写下的一篇关于 编程喵🐱开源项目如何一键部署在云服务器上的方案,现在看起来虽然有些稚嫩,但足够的详细,使用起来也非常的便捷。有需要的小伙伴可以拿来作为参考和借鉴。

前情提示:不喜欢宝塔面板的小伙伴可以扭脸就走了,请冷酷无情点,下一篇上 Docker

云服务器

我们需要一台云服务器,我之前白嫖过一台丐版的,1 核1G 内存,并且已经安装了宝塔面板(安装教程戳链接🔗)。

这是从宝塔面板首页看到的服务器配置详情。

我们小公司使用了6年的项目部署方案,打包 + 一键部署详解,还挺方便

马上 618 了,阿里云服务器也开始整活了,需要白嫖的小伙伴可以关注下。

MySQL

登录宝塔面板,点击「数据库」→「添加数据库」,填写数据库名,宝塔面板会自动帮我们创建一个和数据库同名的账号,注意访问权限选择「本地服务器」。

我们小公司使用了6年的项目部署方案,打包 + 一键部署详解,还挺方便

在 codingmore 栏目中点击「导入」「从本地上传」编程喵的数据库文件。上传完成后点击导入。

我们小公司使用了6年的项目部署方案,打包 + 一键部署详解,还挺方便

DB 文件放在 coding-more/doc 目录下。

我们小公司使用了6年的项目部署方案,打包 + 一键部署详解,还挺方便

建议先做一次备份,点击「无备份」「备份」就可以将我们的数据库文件备份下来了,如果后面想恢复的话,直接点击「恢复」就可以了。

我们小公司使用了6年的项目部署方案,打包 + 一键部署详解,还挺方便

记住用户名,并复制密码,然后在数据库条目中点击「管理」

我们小公司使用了6年的项目部署方案,打包 + 一键部署详解,还挺方便

填写用户名和密码后,点击执行。

我们小公司使用了6年的项目部署方案,打包 + 一键部署详解,还挺方便

就可以看到编程喵的数据库文件了。

我们小公司使用了6年的项目部署方案,打包 + 一键部署详解,还挺方便

Nginx

Nginx 是一个高性能的 HTTP 和反向代理 Web 服务器,基本上就变成了一个服务器必须安装的前置条件之一。

宝塔面板中安装 Nginx 比较简单,直接在软件商店中搜「Nginx」就可以点击安装了。

我们小公司使用了6年的项目部署方案,打包 + 一键部署详解,还挺方便

Redis

宝塔面板中安装 Redis 也比较简单,直接在软件商店中搜「Redis」就可以点击安装了。

我们小公司使用了6年的项目部署方案,打包 + 一键部署详解,还挺方便

项目打包

1)codingmore-admin

编程喵的管理后端,注意修改生产环境下的 MySQL 用户名和密码,在 application-prod.yml 文件中。

我们小公司使用了6年的项目部署方案,打包 + 一键部署详解,还挺方便

然后把 application.yml 文件中的 active 修改为 prod 生产环境。

我们小公司使用了6年的项目部署方案,打包 + 一键部署详解,还挺方便

替换 OSS 配置。

我们小公司使用了6年的项目部署方案,打包 + 一键部署详解,还挺方便

2)codingmore-web

编程喵的 Web 前端(网站门户、文章展示/文章详情等),注意修改生产环境下的 MySQL 用户名和密码,在 application-prod.yml 文件中。

我们小公司使用了6年的项目部署方案,打包 + 一键部署详解,还挺方便

然后把 application.yml 文件中的 active 修改为 prod 生产环境。

我们小公司使用了6年的项目部署方案,打包 + 一键部署详解,还挺方便

然后就可以双击 Maven 的 package 打包了。

我们小公司使用了6年的项目部署方案,打包 + 一键部署详解,还挺方便

3)codingmore-admin-web

admin 管理端的前端界面。在 Visual Studio Code 中,现在终端中执行 yarn install 安装项目的依赖插件。

我们小公司使用了6年的项目部署方案,打包 + 一键部署详解,还挺方便

再执行 yarn run build 就可以构建 codingmore-admin-web 的静态页面了。

我们小公司使用了6年的项目部署方案,打包 + 一键部署详解,还挺方便

会在项目的根目录中生成一个 dist 目录,里面就是打包好的管理端静态页面。

我们小公司使用了6年的项目部署方案,打包 + 一键部署详解,还挺方便

打包的时候有两个要点要补充下,在 config 目录下有三个配置文件,dev.env.js 是开发环境下的一些配置,index.js 是主配置,prod.env.js 是生产环境下的配置。

为了提高网站的性能,我们需要关闭 source map,设置 productionSourceMap: false,同时开启 js 和 css 的文件压缩功能。

我们小公司使用了6年的项目部署方案,打包 + 一键部署详解,还挺方便

这样打包后的文件大小就会小很多,放到服务器上也能减少网络请求的响应时间。

可以看得出,最大的一个 js 文件为 3.7M,压缩版只有 662kb,体积缩小了五倍。

我们小公司使用了6年的项目部署方案,打包 + 一键部署详解,还挺方便

将打包好的文件上传到服务器

在宝塔面板中点击「FTP」「添加 FTP」。

我们小公司使用了6年的项目部署方案,打包 + 一键部署详解,还挺方便

点击「根目录」

我们小公司使用了6年的项目部署方案,打包 + 一键部署详解,还挺方便

跳转到文件页。

我们小公司使用了6年的项目部署方案,打包 + 一键部署详解,还挺方便

点击上传,在 target 目录下选择上传的两个 jar 包,admin 和 web。

我们小公司使用了6年的项目部署方案,打包 + 一键部署详解,还挺方便

点击「开始上传」

我们小公司使用了6年的项目部署方案,打包 + 一键部署详解,还挺方便

还有 codingmore-admin-web 的静态文件。

我们小公司使用了6年的项目部署方案,打包 + 一键部署详解,还挺方便

一键部署

在软件商店里搜「 Java」关键字,可以看到一个「 Java 项目一键部署 3.5」的插件,安装它。

我们小公司使用了6年的项目部署方案,打包 + 一键部署详解,还挺方便

进入「Java 项目一键部署」面板。

我们小公司使用了6年的项目部署方案,打包 + 一键部署详解,还挺方便

可以在「容器管理」面板中选择 Tomcat 8 安装下,如果没有安装 JDK,在安装 Tomcat 8 的时候会默认安装一个 JDK 1.8。

我们小公司使用了6年的项目部署方案,打包 + 一键部署详解,还挺方便

进入 Spring Boot 面板,点击「添加项目」,点击「项目路径」右侧的文件夹图标,就可以上传部署我们的 Spring Boot 项目了。

我们小公司使用了6年的项目部署方案,打包 + 一键部署详解,还挺方便

codingmore-web(网站前端)

先选择 codingmore-web。

我们小公司使用了6年的项目部署方案,打包 + 一键部署详解,还挺方便

填写域名(编程喵的域名为 codingmore.top),修改端口号为 8081,application.yml 文件中定义的。

我们小公司使用了6年的项目部署方案,打包 + 一键部署详解,还挺方便

点击确定。

我们小公司使用了6年的项目部署方案,打包 + 一键部署详解,还挺方便

可以看到服务已经在启动了,点「日志」看一下。

我们小公司使用了6年的项目部署方案,打包 + 一键部署详解,还挺方便

没问题。

也可以在这个路径下使用终端工具看日志。

我们小公司使用了6年的项目部署方案,打包 + 一键部署详解,还挺方便

在安全面板里确认一下 8081 端口是否放开。

我们小公司使用了6年的项目部署方案,打包 + 一键部署详解,还挺方便

确认放开后,打开 Chrome 浏览器的无痕模式,输入 IP+端口号。

我们小公司使用了6年的项目部署方案,打包 + 一键部署详解,还挺方便

通过域名+端口号的形式也可以访问到。

我们小公司使用了6年的项目部署方案,打包 + 一键部署详解,还挺方便

codingmore-admin(网站管理端)

再次进入 「Java 项目一键部署」Spring Boot 面板中,添加 codingmore-admin 项目。

我们小公司使用了6年的项目部署方案,打包 + 一键部署详解,还挺方便

稍等片刻,来看一下日志。

我们小公司使用了6年的项目部署方案,打包 + 一键部署详解,还挺方便

启动没问题。

codingmore-admin 只是一个后端服务,界面是用 vue 完成的,所以我们此时可以通过 Swagger 来确认一下接口是否可以正常访问。

先放行 9002 端口。

我们小公司使用了6年的项目部署方案,打包 + 一键部署详解,还挺方便

在浏览器地址栏里输入 http://www.codingmore.top:9002/doc.html,可以看到我们用 Knife4j+Swagger 生成的 API 文档接口。

我们小公司使用了6年的项目部署方案,打包 + 一键部署详解,还挺方便

OK,这样就可以验证我们的 admin 端服务也正确运行了。

随后,为了减少服务器被攻击的可能性,我们关掉 9002 的端口。

Nginx 配置

codingmore-web

域名+端口号虽然可以访问,但不够优雅,我们想直接访问域名 codingmore.top,该怎么办呢?

可以使用 Nginx 进行端口转发。

Nginx 的实现原理是,用 Nginx 监听 80 端口,当有 HTTP 请求到来时,将 HTTP 请求的 HOST 等信息与配置文件进行匹配并转发给对应的端口。

比如说,当用户访问 codingmore.top 时,Nginx 从配置文件中得知这是一个 HTTP 请求,于是将此请求转发给 8081 端口的应用处理。

upstream codingmore_web_pool{
    server 127.0.0.1:8081;
}

server {
    listen       80;
    server_name  codingmore.top;
    access_log logs/codingmore_web.log;
    error_log logs/codingmore_web.error;

    #将所有请求转发给pool池的应用处理
    location / {
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://codingmore_web_pool;
    }
}

这就是所谓的端口转发,由软件统一监听某个域名上的某个端口(一般是80端口),当访问服务器的域名和端口符合要求时,就按照配置转发给指定的 Tomcat 服务器处理。我们常用的 Nginx 也有端口转发功能。

OK,原理了解完后,我们把这段配置复制到宝塔面板中的 Nginx 配置中。

我们小公司使用了6年的项目部署方案,打包 + 一键部署详解,还挺方便

点击「保存」。

再在浏览器中访问 codingmore.top 就可以请求到内容了。

我们小公司使用了6年的项目部署方案,打包 + 一键部署详解,还挺方便

既然如此,我们顺带把 8081 端口给关掉,减少一个服务器被攻击的可能性。

OK,这样我们就完成了 codingmore-web 也就是编程喵🐱前端的服务部署了。

codingmore-admin-web

codingmore-admin-web 打包后的文件是静态的,所以我们只需要在 Nginx 里添加 admin 的配置路径就 OK 了。

upstream codingmore_web_pool{
    server 127.0.0.1:8081;
}

server {
    listen       80;
    server_name  codingmore.top;
    access_log /home/www/codingmore_web.log;
    error_log /home/www/codingmore_web.error;

    location /admin {
        alias /www/wwwroot/itwanger/dist/; # 根目录
        index index.html;
    }

    #将所有请求转发给pool池的应用处理
    location / {
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://codingmore_web_pool;
    }
}

我们在 server 中增加了一个 admin 的 location,也就是说,当我们访问 codingmore.top/admin 的时候,就去请求 /www/wwwroot/itwanger/dist/ 目录下的静态文件。

这里讲一下 root 和 alias 的区别:

  • root:实际访问的地址前缀是 root + 请求的 path路径,即 admin => /www/wwwroot/itwanger/dist/admin
  • alias: 实际访问的就是 /www/wwwroot/itwanger/dist

注意两者的区别。我们来访问下codingmore.top/admin

我们小公司使用了6年的项目部署方案,打包 + 一键部署详解,还挺方便

OK。

编程喵🐱是一个前后端分离项目,前端的请求如何访问后端的 API 接口呢?简单聊一下。

打开 codingmore-admin-web/config/prod.env.js 文件,里面有一个 VUE_APP_BASE_API 属性,它的值为 /api,也就意味着前端的请求会发送到 /api 这个前缀路径下。

'use strict'
module.exports = {
  NODE_ENV: '"production"',
  VUE_APP_BASE_API: '"/api"'
}

那我们的 codingmore-admin 后端服务是跑在 9002 端口下的,这就意味着,我们需要在 Nginx 中增加一个路径,将 api 前缀的请求转发到 9002 下。

OK,来看一下完整的配置内容。

upstream codingmore_web_pool{
    server 127.0.0.1:8081;
}

upstream codingmore_admin_pool{
    server 127.0.0.1:9002/;
}

server {
    listen       80;
    server_name  codingmore.top;
    access_log /home/www/codingmore_web.log;
    error_log /home/www/codingmore_web.error;

    location /admin {
        alias /www/wwwroot/itwanger/dist/; # 根目录
        index index.html;
    }

    location /api/ {
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://codingmore_admin_pool;
    }

    #将所有请求转发给pool池的应用处理
    location / {
        proxy_set_header Host $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://codingmore_web_pool;
    }
}

ok,登录 admin 端,可以看到我们的文章管理页面了。

我们小公司使用了6年的项目部署方案,打包 + 一键部署详解,还挺方便

网站域名

没有什么使我停留——除了目的,纵然岸旁有玫瑰、有绿荫、有宁静的港湾,我是不系之舟

本文已收录到 GitHub 上星标 2.6k+ 的开源专栏《Java 程序员进阶之路》,据说每一个优秀的 Java 程序员都喜欢她,风趣幽默、通俗易懂。内容包括 Java 基础、Java 并发编程、Java 虚拟机、Java 企业级开发(Git、Nginx、Maven、Intellij IDEA、Spring、Spring Boot、Redis、MySql 等等)、Java 面试等核心知识点。学 Java,就认准 Java 程序员进阶之路😄。

https://github.com/itwanger/toBeBetterJavaer

star 了这个仓库就等于你拥有了成为了一名优秀 Java 工程师的潜力。

我们小公司使用了6年的项目部署方案,打包 + 一键部署详解,还挺方便

Original: https://www.cnblogs.com/qing-gee/p/16384825.html
Author: 沉默王二
Title: 我们小公司使用了6年的项目部署方案,打包 + 一键部署详解,还挺方便

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/594048/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Spring进一步学习

    1、beans.xml编写 2、别名 (1)alias (2)name 3、依赖注入(DI) (1)数组注入 (2)List注入 (3)Map注入 (4)set注入 (5)Null…

    Java 2023年6月5日
    066
  • 【每日一题】leetcode3无重复字符的最长子串

    题目描述 给定一个字符串 s ,请你找出其中不含有重复字符的最长子串的长度。 示例 输入: s = “abcabcbb” 输出: 3 解释: 因为无重复字符…

    Java 2023年6月9日
    065
  • 百度BAE JAVA环境项目部署和调试

    起初在一个应用挂在虚拟主机上,昨天早上虚拟主机挂了。本来考虑迁移到SAE上的,但之前发现SAE的JVM云豆消耗的太快(PS:我是中级开发者,每月 10000云豆,如果有哪位大神对S…

    Java 2023年5月29日
    046
  • go使用barcode库生成二维码并扫描其内容

    导入barcode包 使用barcode库生成二维码 这里复习一下defer关键字的主要用法:延迟执行,主要是关闭流时用到,在return之前执行,当有多个defer关键字时采用先…

    Java 2023年6月13日
    072
  • JDBC线程池创建与DBCP源码阅读

    创建数据库连接是一个比较消耗性能的操作,同时在并发量较大的情况下创建过多的连接对服务器形成巨大的压力。对于资源的频繁分配﹑释放所造成的问题,使用连接池技术是一种比较好的解决方式。 …

    Java 2023年5月29日
    066
  • 30个类手写Spring核心原理之动态数据源切换(8)

    本文节选自《Spring 5核心原理》 阅读本文之前,请先阅读以下内容: 30个类手写Spring核心原理之自定义ORM(上)(6) 30个类手写Spring核心原理之自定义ORM…

    Java 2023年6月7日
    092
  • 谷歌浏览器安装react-developer-tools报错

    谷歌浏览器用一下react-developer-tools插件,结果使得原来的本来可以运行的react项目也报错,类似下面这种:Uncaught TypeError: Cannot…

    Java 2023年6月6日
    086
  • 手把手教你使用 Spring Boot 3 开发上线一个前后端分离的生产级系统(一)-介绍

    项目简介 novel 是一套基于时下 最新 Java 技术栈 Spring Boot 3 + Vue 3 开发的前后端分离 学习型开源项目,配备详细的项目开发文档手把手教你 从零开…

    Java 2023年6月8日
    056
  • Spring(四):HelloSpring

    上一篇学习了控制反转(IoC)的本质和具体实现方法,这次我们就学习写一个小的项目来体验这个过程。 一、项目构建 1.Maven依赖(导包) <dependencies>…

    Java 2023年6月15日
    078
  • 修改java版本环境变量不生效

    修改java版本环境变量不生效 起因 先上图说明问题(电脑含有多个java版本,因为需要维护很老的项目,需要切换至以前的java版本,当然也可以不用修改环境变量,直接指定) 环境变…

    Java 2023年6月5日
    090
  • 设计模式-day01

    1,设计模式概述 1.1 软件设计模式的产生背景 “设计模式”最初并不是出现在软件设计中,而是被用于建筑领域的设计中。 1977年美国著名建筑大师、加利福尼…

    Java 2023年6月13日
    046
  • 二叉树查找和删除指定结点

    二叉树查找指定的节点 前序查找的思路 1.先判断当前节点的no是否等于要查找的2.如果是相等,则返回当前节点3.如果不等,则判断当前节点的左子节点是否为空,如果不为空,则递归前序查…

    Java 2023年6月15日
    063
  • C#、Java和JS实现SHA256+BASE64加密总结

    C#、Java和JS实现SHA256+BASE64加密总结 https://www.cnblogs.com/muphy/p/10781449.html posted on2021-…

    Java 2023年5月29日
    093
  • 可变参数

    可变参数 当不确定需要传进多少个参数的时候,就可以使用 一个方法里最多只有一个可变参数,并且位置在最后面 他的写法是 int… n、double… n、St…

    Java 2023年6月6日
    054
  • Spring HttpInvoker 从实战到源码追溯

    Spring HttpInvoker 作为 Spring 家族中老牌远程调用模型 (RPC 框架),深受开发者喜爱。 其主要目的是来执行基于 HTTP 的远程调用(轻松穿越防火墙)…

    Java 2023年5月29日
    064
  • 题目: 给定一个数组,添加元素(优化)

    package com.gao.test; import java.util.Scanner; /* 题目: 给定一个数组,在数组下标为2的位置上添加一个元素 */ public …

    Java 2023年6月5日
    061
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球