【技术派部署篇】云服务器部署技术派

1 环境搭建

1.1 JDK安装

# ubuntu
sudo apt update # 更新apt
apt install openjdk-8-jdk # 安装JDK

安装完毕之后,执行 java -version 命令进行验证:

1.2 Maven安装

cd ~
mkdir soft
cd soft
wget https://dlcdn.apache.org/maven/maven-3/3.8.8/binaries/apache-maven-3.8.8-bin.tar.gz
tar -zxvf apache-maven-3.8.8-bin.tar.gzvim ~/.bashrc# 在最后添加环境变量
export M2_HOME=/root/soft/apache-maven-3.8.8
PATH=$M2_HOME/bin:$PATH# 配置生效
source ~/.bashrc

下载了半天,发现是下载源有问题,换成国内的源下载应该会变快。

wget https://archive.apache.org/dist/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz tar -xzf apache-maven-3.3.9-bin.tar.gz

配置完成之后执行命令 mvn -version进行验证

国内添加阿里的镜像源,加快下载速度

vim ~/soft/apache-maven-3.8.8/conf/settings.xml# 在<mirros>标签中,添加下面的镜像源<mirror><id>alimaven</id><name>aliyun-maven</name><url>http://maven.aliyun.com/nexus/content/groups/public/</url><mirrorOf>central</mirrorOf></mirror># 腾讯云的镜像腾讯云服务器会快一点。<mirror><id>nexus-tencentyun</id><mirrorOf>*</mirrorOf><name>Nexus tencentyun</name><url>http://mirrors.cloud.tencent.com/nexus/repository/maven-public/</url>
</mirror> 

1.3 redis安装与配置

1.3.1 安装redis

安装 Redis

# 安装redis
sudo apt install redis-server

启动 Redis 服务

# 启动 Redis 服务: 安装完成后,启动 Redis 服务并设置为开机自启。 
sudo systemctl start redis-server
sudo systemctl enable redis-server

验证 Redis 是否安装成功

# 使用以下命令检查 Redis 服务的运行状态,如果显示为 active (running),则表示 Redis 已成功启动。
sudo systemctl status redis-server

还可以使用redis-cli命令连接到 Redis 服务器进行简单的测试:

redis-cli ping

如果返回 PONG,则说明 Redis 服务器正常工作。

1.3.2 配置redis

找到配置文件位置

# 找到redis安装目录,查看配置文件
whereis redis
ls

修改配置文件

vim /etc/redis/redis.conf

更推荐的方式是拷贝一份配置出来进行修改,如在用户目录下新增:

cd ~
mkdir soft
cd soft
mkdir redis
cd redis
cp /etc/redis/redis.conf ./

主要修改一下配置:

# 根据实际情况判断是否需要注释掉ip限定
bind 127.0.0.1# 开启后台任务
damenoize yes
# 配置 Redis 是否被监控管理。supervised 设置为 no,表示 Redis 不会受到外部进程管理的干扰。
supervised no# 设置访问密码
requirepass 你的密码# 端口号,建议需改默认的6379,避免被攻击
port 6388# 几个文件的路径调整一下
pidfile /root(这个是用户名)/soft/redis/redis.pid
logfile /root/redis/redis.log
dir /root/soft/redis/

写一个启动关闭脚本 :vim start.sh

#!/bin/bash# 检查 pid.log 文件是否存在
if [ -f pid.log ]; then# 读取 pid.log 中的每个 PID,检查是否存在该进程cat pid.log | while read pid; doif ps -p $pid > /dev/null; thenecho "Killing existing Redis process with PID $pid"kill $pidelseecho "Process $pid not found, skipping."fidone
fi# 启动 Redis 并记录新的 PID
redis-server ./redis.conf# 获取 Redis 的新 PID 并保存到 pid.log
new_pid=$(ps aux | grep '[r]edis' | awk '{print $2}')
echo $new_pid > pid.log# 检查 Redis 是否启动成功
if ps -p $new_pid > /dev/null; thenecho "Redis started successfully with PID $new_pid"
elseecho "Failed to start Redis"
fi

保存配置,添加执行权限

chmod +x start.sh

启动redis服务

./start.sh

ss -lntp | grep 6379 确认是否启动:

1.4 MySQL安装

安装MySQL

sudo apt-get install mysql-server

设置开机启动:

sudo systemctl start mysql
sudo systemctl enable mysql

查询登陆密码:

grep "temporary password" /var/log/mysqld.log## 输出如下
# A temporary password is generated for root@localhost: xxxx

修改密码:

mysql> use mysql;mysql> alter user 'root'@'localhost' identified by '密码';mysql> flush privileges;

启动MySQL命令

# 启动
sudo service mysql start
# 或 sudo service mysqld start# 关闭
sudo service mysql stop# 重启
sudo service mysql restart

连接MySQL:

1.5 nginx配置

安装nginx:

sudo apt install nginx

验证安装:

sudo systemctl status nginx

如果 Nginx 已经成功安装并启动,你会看到类似以下的输出:

查看配置文件路径:

nginx -t

重新加载nginx配置:

nginx -s reload

配置访问域名:

cd /etc/nginx/vim nginx.conf# 添加子域名解析,每个域名一个独立的配置文件
# 在http的一级标签中,添加如下一行配置,表示在conf.d文件下的所有conf结尾的文件,都属于我们需要使用的nginx配置信息
include /etc/nginx/conf.d/*.conf;

添加论坛的域名解析规则

vim conf.d/forum.conf# 内容如下
upstream  forum_host {server 127.0.0.1:8080;
}
server {#  server_name forum.hhui.top;gzip on;gzip_buffers 32 4K;gzip_comp_level 6;gzip_min_length 100;gzip_types application/javascript text/css text/xml;gzip_disable "MSIE [1-6]\."; #配置禁用gzip条件,支持正则。此处表示ie6及以下不启用gzip(因为ie低版本不支持)gzip_vary on;location ~* ^.+\.(ico|gif|jpg|jpeg|png)$ {access_log   off;expires      1d;proxy_pass         http://forum_host;proxy_set_header   Host $host;proxy_set_header   X-Real-IP $remote_addr;proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;}location ~* ^.+\.(css|js|txt|xml|swf|wav|pptx)$ {access_log   off;expires      10m;proxy_pass         http://forum_host;proxy_set_header   Host $host;proxy_set_header   X-Real-IP $remote_addr;proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;}location / {proxy_set_header X-real-ip  $remote_addr;proxy_pass http://127.0.0.1:8080/;proxy_redirect default;}#   listen 443 ssl; # managed by Certbot#   ssl_certificate /usr/local/nginx/conf/conf.d/cert.pem;#   ssl_certificate_key /usr/local/nginx/conf/conf.d/key.pem;#   ssl_stapling on;#   ssl_stapling_verify on;#  resolver 8.8.8.8 8.8.4.4 1.1.1.1 valid=60s;#   resolver_timeout 2s;
}server {
#    if ($host = forum.hhui.top) {
#        return 301 https://$host$request_uri;
#    } # managed by Certbotlisten 80;#   server_name forum.hhui.top;return 404; # managed by Certbot
}

证书使用let's encrypt生成

主要修改点如下:

  1. 移除 HTTPS 相关配置:删除了 listen 443 ssl; 以及所有与 ssl_certificatessl_certificate_keyssl_stapling 等相关的配置行。
  2. 调整重定向逻辑:移除了 80 端口配置中重定向到 HTTPS 的部分,因为现在没有 HTTPS 了。
  3. server_name配置server_name 可以根据你的需求选择保留或移除。如果保留,可以指定特定的 IP 地址(如 server_name <你的 IP 地址>;),这样 Nginx 只会对匹配该 IP 的请求进行响应;如果移除,Nginx 会响应所有未被其他 server 块匹配的请求。

修改完配置文件后,使用 sudo nginx -t 检查配置文件语法是否正确,然后通过 sudo nginx -s reload重新加载 Nginx 配置使更改生效。

2 源码部署方式

源码的部署方式表示直接使用源码进行构建,下面直接以paicoding的github上main分支的源码为例进行说明

2.1 下载源码,并构建

下载

cd ~/
mkdir workspace
cd workspace
git clone git@github.com:itwanger/paicoding.git
或
git clone https://gitee.com/itwanger/paicoding.git

构建

cd paicoding
mvn clean install -DskipTests=ture -U

2.2 修改配置

在服务器上运行技术派时,原则上我们是希望以prod环境为主(表示这个是生产环境,如果是在测试机上进行部署,可以选择test)

首先第一步就是修改对应环境的配置信息

数据库配置:

vim paicoding-web/src/main/resources-env/prod/application-dal.yml# 修改数据库和redis的连接密码spring:datasource:url: jdbc:mysql://localhost:3306/${database.name}?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghaiusername: 真实的用户名password: 真实的密码redis:host: 真实的redis地址port: 真实的redis端口password: 真实的redis访问密码

oss配置:

生产环境上的图片默认上传到阿里云,因此也需要修改对应的配置

vim paicoding-web/src/main/resources-env/prod/application-image.ymlimage:# 服务器保存图片的绝对地址abs-tmp-path: /home/admin/storage/# 图片前缀web-img-path: forum/img/# 临时存储目录tmp-upload-path: /tmp/forum/# 图片访问域名cdn-host: https://paicoding.com/oss:type: ali # 这个表示是使用阿里云的ossprefix: xxxendpoint: xxxak: xxxsk: xxxbucket: xxxhost: https://cdn.tobebetterjavaer.com/ # 访问图片的域名前缀

注意,当没有oss时,希望直接将图片保存到服务器上,可以如下设置(一般不建议这么干,一个是安全风险,一个是静态图片的存储与网络资源都将占用服务器,会导致服务器本身负载高)

log文件配置:

vim paicoding-web/src/main/resources-env/prod/application-web.ymllog:path: /home/admin/workspace/paicoding/logs # 请使用实际的地址进行替换
env:name: prod

2.3 登录方式修改

技术派默认提供的是根据微信公众号的验证码方式来实现登录,因此如果希望在你自己的服务器上部署时,请完整的替换相应的微信公众号二维码、微信开放平台对接的相关的配置参数,具体详情可参考

下面列出基本的修改点:

1.配置文件 application-config.yml

  • view.site.contactMeWxQrCode: 公众号二维码
  • view.site.wxLoginUrl: 公众号二维码解码后的文本

2.微信公众号平台

开启开发者相关权限,设置回调url

登录方式主要使用的是微信公众平台的回调机制,因此需要设置白名单,当前没有使用直接调用微信公众号接口获取信息的功能,因此无需设置开发者id,密码等信息

2.4 启动

以上修改完毕之后,可以直接启动服务(注意无需初始化数据库表,默认的库名 pai_coding,可以通过修改application.yml配置文件中的database.name来替换)

# 进入源码根目录
cd ~/workspace/paicoding
# 给启动命令脚本添加执行权限
chmod +x launch.sh
# 启动
./launch.sh start

启动完毕之后,可以再当前目录看到新增一个 logs 目录,下面会有两个日志文件

  • pai-prod.log:系统日志
  • req-prod.log:外部请求日志

当系统日志中输出 启动成功,点击查看首页 的字样时,表示正常启动了,此时可以进行访问

说明:

重新部署命令: launch.sh start会重新打包,并将之前运行的.jar 重名为 .jar.bak 的本分文件

重启命令:launch.sh restart单纯的重启,不会重新打包

若部署的不是prod环境,需要修改launch.sh脚本中的配置,将下面的 -Pprod 修改为 -P新环境

  • jvm参数,根据实际的机器情况进行需改调整

3 jar包部署方式

jar包部署的方式主要针对的是直接上传一个fat-jar包到服务器上运行,编译打包的过程可以是本机、也可以是jenkins,这里以简单的本机为例进行说明

3.1 SSH配置

我们采用scp的方式上传jar包,因此直接配置ssh访问服务器会省事很多,避免每次都需要输入密码

  1. 本地生成密钥对:一般可通过在本地终端输入相关命令(如ssh-keygen)来生成密钥对。
ssh-keygen -t rsa -b 2048 -C "your_email@example.com"

  1. 服务器添加配置
    • 打开服务器上的~/.ssh/authorized_keys文件,命令为vim ~/.ssh/authorized_keys
    • 在文件中添加本机公钥内容。 如示例中的公钥内容:ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDVDpviHo9nRJ+i3S8KYZAi3Yp33J3whqdWb2W3hhjkiPZiih76Q/lvCinwVWi0NlvWZheBfENKiN0d4p3xaF6GC+DfrITwcIHm0/PbVOxWmuatfqD+C0CKYZxIshYsmRWFFXqRz83sCPHv4O66HEIfnlynKPdayygdG++K6wPTBNyKznk8C8Ghpd7q2UngMWjWv7s+jWp0tRQQmyRnJhcSogGzcs8W39l2U5Qy7IscWkB8OJ8ZfRynTVAFoVpMSJh6nrBbp9idREWT6zW9UdAvy9PG9IuWTX7oBQv+XYQBH1q5Y0ZqTJ2Ot35jUCLK35T+9uFkJcQH20VwW3VL6Epb your_email@example.com (实际操作中请替换为自己的本机公钥) 。

配置完成后,就可以使用 scp 方式上传 jar 包到服务器,无需每次都输入密码。

  1. 使用 scp 命令上传 JAR 包:命令格式为scp -r 本地JAR包路径 用户名@服务器IP地址:服务器目标路径
  • 如果是上传单个 JAR 包,假设本地 JAR 包路径为C:\Users\user\Downloads\paicoding - web - 0.0.1 - SNAPSHOT.jar,服务器用户名为admin,服务器 IP 地址为192.168.1.100,希望将 JAR 包上传到服务器的/home/admin/jar_files/目录下,那么命令为:
scp -r C:\Users\user\Downloads\paicoding - web - 0.0.1 - SNAPSHOT.jar admin@192.168.1.100:/home/admin/jar_files/
  • 如果是上传整个包含 JAR 包的目录,例如C:\Users\user\Desktop\jar_packages目录下有多个 JAR 包,要上传到服务器的/home/admin/jar_files/目录,命令为:
scp -r C:\Users\user\Desktop\jar_packages\* admin@192.168.1.100:/home/admin/jar_files/
  • 执行命令后,如果 SSH 密钥对配置正确,就会开始上传 JAR 包。如果提示输入密码,说明 SSH 密钥对配置可能有问题,需要重新检查配置。

在上传过程中,会显示上传进度和相关信息。上传完成后,就可以在服务器的指定目标路径下找到上传的 JAR 包。

3.2 项目配置

和源码配置修改相同

  • prod:数据库配置,oss配置,登录配置

3.3 打包上传

主要使用 deploy.sh 脚本实现本地编译打包、上传、运行等操作,注意上面几个动作是一体的

  • 修改deploy.sh脚本中,需要上传的jar包目录、目标ip地址

chmod +x deploy.sh
# 打包jar,并上传到服务器,关闭旧的应用,重新启动新的应用
./deploy.sh prod

4 总结

本文以 Linux 系统为运行环境,介绍基础环境搭建,含 JDK、Maven、Redis、MySQL、Nginx 的安装与配置。提供源码和 Jar 包两种部署方式,前者需下载构建、修改配置再启动;后者要配置 ssh、项目信息,用脚本打包上传。欢迎实操反馈问题。

5 参考链接

  1. 技术派服务器部署指导手册
  2. 项目仓库(GitHub):https://github.com/itwanger/paicoding
  3. 项目仓库(码云):https://gitee.com/itwanger/paicoding
  4. 项目演示地址:https://paicoding.com

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

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

相关文章

Linux:35.其他IPC和IPC原理+信号量入门

通过命名管道队共享内存的数据发送进行保护的bug&#xff1a; 命名管道挂掉后&#xff0c;进程也挂掉了。 6.systemV消息队列 原理:进程间IPC:原理->看到同一份资源->维护成为一个队列。 过程&#xff1a; 进程A,进程B进行通信。 让操作系统提供一个队列结构&#xff0c;…

【数据结构】红黑树超详解 ---一篇通关红黑树原理(含源码解析+动态构建红黑树)

一.什么是红黑树 红黑树是一种自平衡的二叉查找树&#xff0c;是计算机科学中用到的一种数据结构。1972年出现&#xff0c;最初被称为平衡二叉B树。1978年更名为“红黑树”。是一种特殊的二叉查找树&#xff0c;红黑树的每一个节点上都有存储表示节点的颜色。每一个节点可以是…

2024年第十五届蓝桥杯CC++大学A组--成绩统计

2024年第十五届蓝桥杯C&C大学A组--成绩统计 题目&#xff1a; 动态规划&#xff0c; 对于该题&#xff0c;考虑动态规划解法&#xff0c;先取前k个人的成绩计算其方差&#xff0c;并将成绩记录在数组中&#xff0c;记录当前均值&#xff0c;设小蓝已检查前i-1个人的成绩&…

vue2使用ezuikit-js播放萤石视频

需求&#xff1a;需要在大屏上播放萤石视频&#xff0c;用到官方的ezuikit-js插件实现&#xff0c;并实现视频播放切换功能。有个问题至今没有解决&#xff0c;就是萤石视频的宽高是固定的&#xff0c;不会根据大屏缩放进行自适应。我这边做了简单的刷新自适应。 1.下载ezuikit…

爱普生TG-5510CA和TG-5510CB晶振成为服务器中的理想之选

在数字化时代&#xff0c;服务器作为数据存储、处理与传输的核心枢纽&#xff0c;其性能的优劣直接影响着整个信息系统的运行效率与稳定性。从企业内部的数据中心到云计算服务提供商的大规模集群&#xff0c;服务器需要应对海量数据的高速处理与频繁交互。而在服务器复杂精密的…

使用opentelemetry 可观测监控springboot应用的指标、链路实践,使用zipkin展示链路追踪数据,使用grafana展示指标

1.安装docker&#xff0c;docker-compose &#xff08;1&#xff09;安装依赖包 yum install -y yum-utils device-mapper-persistent-data lvm22.2、部署dockertar xvf docker-20.10.19.tgz cp docker/* /usr/bin/vim /usr/lib/systemd/system/docker.service[Unit] Descript…

5. 蓝桥公园

题目描述 小明喜欢观景&#xff0c;于是今天他来到了蓝桥公园。 已知公园有 N 个景点&#xff0c;景点和景点之间一共有 M 条道路。小明有 Q 个观景计划&#xff0c;每个计划包含一个起点 stst 和一个终点 eded&#xff0c;表示他想从 stst 去到 eded。但是小明的体力有限&am…

虚幻基础:碰撞帧运算

能帮到你的话&#xff0c;就给个赞吧 &#x1f618; 文章目录 碰撞碰撞盒线段检测 帧运算&#xff1a;每个程序流就是一帧的计算结果速度过快时(10000)&#xff0c;导致每帧移动过大(83)&#xff0c;从而导致碰撞盒错过而没有碰撞速度快的碰撞要用线段检测 碰撞 碰撞盒 线段检…

Qt 入门 3 之对话框 QDialog

Qt 入门 3 之对话框 QDialog 本文从以下几点分开讲述&#xff1a; - 对话框的基本原理介绍 - 两种不同类型的对话框 - 一个由多个窗口组成并且窗口间可以相互切换的程序 1.模态和非模态对话框 QDialog 类是所有对话框窗口类的基类。对话框窗口是一个经常用来完成短小任务或者…

数据结构——哈希技术及链地址法

目录 一、哈希的定义 二、哈希冲突定义 三、构造哈希函数的方法 四、四种解决哈希冲突的方法 4.1 开放地址法 4.2 链地址法 4.3 再散列函数法 4.4 公共区溢出法 五、链地址法结构体设计 六、基本操作的实现 6.1 哈希函数 6.2 初始化 6.3 插入值 6.4 删除值 6.5 查…

算法思想之前缀和(二)

欢迎拜访&#xff1a;雾里看山-CSDN博客 本篇主题&#xff1a;算法思想之前缀和(二) 发布时间&#xff1a;2025.4.11 隶属专栏&#xff1a;算法 目录 滑动窗口算法介绍核心思想大致步骤 例题和为 K 的子数组题目链接题目描述算法思路代码实现 和可被 K 整除的子数组题目链接题目…

开源的7B参数OCR视觉大模型:RolmOCR

1. 背景介绍 早些时候&#xff0c;Allen Institute for AI 发布了 olmOCR&#xff0c;这是一个基于 Qwen2-VL-7B 视觉语言模型&#xff08;VLM&#xff09;的开源工具&#xff0c;用于处理 PDF 和其他复杂文档的 OCR&#xff08;光学字符识别&#xff09;。开发团队对该工具的…

移动端六大语言速记:第14部分 - 数据库操作

移动端六大语言速记:第14部分 - 数据库操作 本文将对比Java、Kotlin、Flutter(Dart)、Python、ArkTS和Swift这六种移动端开发语言在数据库操作方面的特性,帮助开发者理解和掌握各语言的数据库编程能力。 14. 数据库操作 14.1 SQL查询 各语言SQL查询实现方式对比: 特性Ja…

有哪些反爬机制可能会影响Python爬取视频?如何应对这些机制?

文章目录 前言常见反爬机制及影响1. IP 封禁2. 验证码3. 请求头验证4. 动态加载5. 加密与混淆6. 行为分析 应对方法1. 应对 IP 封禁2. 应对验证码3. 应对请求头验证4. 应对动态加载5. 应对加密与混淆6. 应对行为分析 前言 在使用 Python 爬取视频时&#xff0c;会遇到多种反爬…

ESP32开发入门:基于VSCode+PlatformIO环境搭建指南

前言 ESP32作为一款功能强大的物联网开发芯片&#xff0c;结合PlatformIO这一现代化嵌入式开发平台&#xff0c;可以大幅提升开发效率。本文将详细介绍如何在VSCode中搭建ESP32开发环境&#xff0c;并分享实用开发技巧。 一、环境安装&#xff08;Windows/macOS/Linux&#xf…

DeepSeek:穿透行业知识壁垒的搜索引擎攻防战

DeepSeek&#xff1a;穿透行业知识壁垒的搜索引擎攻防战 文 / 产业智能观察组&#xff08;人机协同创作&#xff09; 一、搜索引擎的"认知折叠"危机 2024年Q1数据显示&#xff0c;百度搜索结果前10页中&#xff0c;61.7%的内容存在"伪专业化"现象——看似…

SQL 外键(Foreign Key)详细讲解

1. 什么是外键&#xff1f;​​ ​​定义​​&#xff1a;外键是数据库表中的一列&#xff08;或一组列&#xff09;&#xff0c;用于​​建立两个表之间的关联关系​​。外键的值必须匹配另一个表的主键&#xff08;Primary Key&#xff09;或唯一约束&#xff08;Unique Con…

5G中的DU和CU的作用

在5G网络架构中&#xff0c;CU&#xff08;Centralized Unit&#xff0c;集中单元&#xff09; 和 DU&#xff08;Distributed Unit&#xff0c;分布单元&#xff09; 是无线接入网&#xff08;RAN&#xff09;的重要组成部分&#xff0c;它们的分工和作用如下&#xff1a; 1.…

深度解析 n8n:强大的开源工作流自动化平台

在数字化时代&#xff0c;企业和个人面临着日益复杂的工作流程和多样化的应用工具&#xff0c;如何高效整合这些资源、实现工作流的自动化成为提升效率的关键。n8n 作为一款开源的工作流自动化平台&#xff0c;凭借其强大的功能、广泛的应用集成能力和灵活的部署方式&#xff0…

ruby超高级语法

以下是 Ruby 中一些 极度硬核 的语法和底层特性&#xff0c;涉及元编程的深渊、虚拟机原理、语法黑魔法等&#xff0c;适用于追求极限的 Ruby 开发者&#xff1a; 高级语法一 一、语法核弹级操作 1. 动态修改继承链 class A; def foo; "A"; end end class B; def …