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

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

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.gz

vim ~/.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; do
        if ps -p $pid > /dev/null; then
            echo "Killing existing Redis process with PID $pid"
            kill $pid
        else
            echo "Process $pid not found, skipping."
        fi
    done
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; then
    echo "Redis started successfully with PID $new_pid"
else
    echo "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 Certbot


    listen 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/Shanghai
    username: 真实的用户名
    password: 真实的密码
  redis:
    host: 真实的redis地址
    port: 真实的redis端口
    password: 真实的redis访问密码

oss配置:

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

vim paicoding-web/src/main/resources-env/prod/application-image.yml

image:
  # 服务器保存图片的绝对地址
  abs-tmp-path: /home/admin/storage/
  # 图片前缀
  web-img-path: forum/img/
  # 临时存储目录
  tmp-upload-path: /tmp/forum/
  # 图片访问域名
  cdn-host: https://paicoding.com/
  oss:
    type: ali # 这个表示是使用阿里云的oss
    prefix: xxx
    endpoint: xxx
    ak: xxx
    sk: xxx
    bucket: xxx
    host: https://cdn.tobebetterjavaer.com/ # 访问图片的域名前缀

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

log文件配置:

vim paicoding-web/src/main/resources-env/prod/application-web.yml

log:
  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

相关文章:

  • jeecg启动所需要安装的软件
  • GitHub Desktop 推送报错 Authentication Failed 身份验证失败
  • HarmonyOS 5.0分布式开发深度踩坑指南:从理论到实践的突围之路
  • Java递归练习----猴子偷桃
  • 基于ueditor编辑器的功能开发之增加自定义一键排版功能
  • Java IO 流
  • 【资料分享】瑞芯微RK3576,8核2.2GHz+6T算力NPU工业核心板说明书
  • STM32(基于标准库)
  • 多模态大模型[CLIP/Flamingo/Coca/BLIP]
  • Unity入门
  • 图谱可视化的海洋生物信息查询网站的设计与实现(springboot+ssm+vue)含文档
  • 十八、TCP多线程、多进程并发服务器
  • 气动V型调节开关球阀气源连接尺寸与方式全解析-耀圣
  • 2025 GGS全球游戏峰会前瞻预告:全新版本控制平台Perforce P4、龙智游戏开发及管理解决方案等即将亮相
  • 【家政平台开发(37)】家政平台蜕变记:性能优化与代码重构揭秘
  • Dify添加ollama插件
  • OpenHarmony5.0.2 音频audio适配
  • js中this的指向问题
  • 智能测试用例生成:老旧平台页面查询功能的大模型改造
  • 跨站请求是什么?
  • 出国越南做网站8000保底/seo关键词怎么填
  • 如何做自己的论坛网站/国内10大搜索引擎
  • 网站后wordpress文章编辑页面/百度seo排名优化排行
  • 网站title在哪里/360搜索推广
  • 网站软件设计/seo知识培训
  • 换空间对网站的影响/手游推广个人合作平台