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

从零开始使用 Ansible 自动化部署 SpringBoot Web 应用(含 MySQL、Redis、Vue、Nginx)

文章目录

    • 1. 安装 Ansible
    • 2. 创建 Ansible Playbook
    • 3. MySQL 自动化部署
    • 4. Redis 自动化部署
    • 5. Spring Boot 后端部署
    • 6. Vue 前端部署
    • 7. Nginx 配置
    • 8. 运行 Ansible Playbook
    • 9. 验证部署
    • 10. 总结

本教程使用 Ansible 实现全栈应用的自动化部署,包括:

  • 后端:Spring Boot(运行在 Tomcat 或 jar 方式)
  • 数据库:MySQL
  • 缓存:Redis
  • 前端:Vue.js(部署在 Nginx)
  • 代理:Nginx(反向代理 Vue 和 Spring Boot)

1. 安装 Ansible

在 Ansible 控制节点(本地机器或 CI/CD 服务器)上安装:(本文以Centos为例)

# CentOS/RHEL
sudo yum install epel-release --allowerasing -y
sudo yum install ansible -y

确保 Ansible 已正确安装,先检查 Ansible 是否安装:

rpm -qa | grep ansible

在这里插入图片描述

如果没有输出,说明 ansible 没有安装,请执行以下命令安装它。

检查 ansible 是否在 PATH 里,如果安装了 ansible,但仍然提示 command not found,执行:

which ansible

在这里插入图片描述

如果没有输出,可能 PATH 没有包含 ansible,可以尝试:

export PATH=$PATH:/usr/local/bin:/usr/bin:/usr/sbin
source ~/.bashrc

然后再尝试:

ansible --version

配置 Ansible Hosts
编辑 /etc/ansible/hosts 添加你的目标服务器:

vim /etc/ansible/hosts

[web]
47.92.101.102 ansible_user=root ansible_ssh_private_key_file=~/.ssh/id_rsa

测试连接:

ansible all -m ping

2. 创建 Ansible Playbook

创建 目录结构:

mkdir -p ansible-playbook/{roles/{mysql,redis,springboot,vue,nginx}/tasks,vars,files,templates}
cd ansible-playbook

3. MySQL 自动化部署

MySQL 任务文件(roles/mysql/tasks/main.yml)

- name: 安装 MySQL
  apt:
    name: mysql-server
    state: present
  become: yes

- name: 启动 MySQL 并开机自启
  service:
    name: mysql
    state: started
    enabled: yes

- name: 创建数据库
  mysql_db:
    name: myappdb
    state: present

- name: 创建 MySQL 用户
  mysql_user:
    name: myappuser
    password: mypassword
    priv: 'myappdb.*:ALL'
    state: present

4. Redis 自动化部署

Redis 任务文件(roles/redis/tasks/main.yml)

- name: 安装 Redis
  apt:
    name: redis-server
    state: present
  become: yes

- name: 启动 Redis 并开机自启
  service:
    name: redis-server
    state: started
    enabled: yes

5. Spring Boot 后端部署

Spring Boot 任务文件(roles/springboot/tasks/main.yml)
yaml
复制
编辑

- name: 复制 Spring Boot JAR
  copy:
    src: files/myapp.jar
    dest: /opt/myapp.jar
    owner: root
    group: root
    mode: '0755'

- name: 配置 Spring Boot Systemd 服务
  template:
    src: templates/myapp.service.j2
    dest: /etc/systemd/system/myapp.service

- name: 重新加载 Systemd 并启动服务
  systemd:
    name: myapp
    state: started
    enabled: yes
    daemon_reload: yes

Systemd 服务模板(roles/springboot/templates/myapp.service.j2)

Description=Spring Boot Web App
After=network.target

[Service]
User=root
WorkingDirectory=/opt
ExecStart=/usr/bin/java -jar /opt/myapp.jar
SuccessExitStatus=143
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

6. Vue 前端部署

Vue 任务文件(roles/vue/tasks/main.yml)

- name: 安装 Nginx
  apt:
    name: nginx
    state: present
  become: yes

- name: 复制 Vue 项目文件
  copy:
    src: files/dist/
    dest: /var/www/html/
    owner: www-data
    group: www-data
    mode: '0755'

7. Nginx 配置

Nginx 任务文件(roles/nginx/tasks/main.yml)
yaml
复制
编辑

- name: 复制 Nginx 配置文件
  template:
    src: templates/nginx.conf.j2
    dest: /etc/nginx/sites-available/default

- name: 重启 Nginx
  service:
    name: nginx
    state: restarted

Nginx 配置模板(roles/nginx/templates/nginx.conf.j2)
nginx

server {
    listen 80;
    server_name myapp.com;

    location / {
        root /var/www/html;
        index index.html;
        try_files $uri $uri/ /index.html;
    }

    location /api/ {
        proxy_pass http://127.0.0.1:8080/;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

8. 运行 Ansible Playbook

创建 主 Playbook 文件(site.yml):

yaml
复制
编辑

- hosts: web
  become: yes
  roles:
    - mysql
    - redis
    - springboot
    - vue
    - nginx

执行 Ansible Playbook

ansible-playbook site.yml

9. 验证部署

📌 检查各个服务状态

# 检查 MySQL
systemctl status mysql

# 检查 Redis
systemctl status redis-server

# 检查 Spring Boot 应用
systemctl status myapp

# 检查 Nginx
systemctl status nginx

📌 访问 Web 应用

  • 前端:http://服务器IP/
  • 后端 API:http://服务器IP/api/

10. 总结

✅ 自动化部署:MySQL、Redis、Spring Boot、Vue、Nginx
✅ 可扩展:支持多服务器部署
✅ 持续集成:可与 Jenkins、GitLab CI 结合
✅ 一键部署:ansible-playbook site.yml 即可完成部署

🎯 这样就实现了 全栈 SpringBoot Web 应用的自动化部署!

在这里插入图片描述


一个人可以走的很快,但一群人才能走的更远



http://www.kler.cn/a/596403.html

相关文章:

  • 反转函数的reverse和reversed的区别
  • 虚拟路由与单页应用(SPA):详解
  • centos7安装单机kafka
  • Elasticsearch:可配置的推理 API 端点分块设置
  • 动态规划-基础
  • Unity游戏开发入门:用C#控制游戏对象移动
  • UniRel论文复现过程中的问题解决办法(全)
  • JVM 运行时数据区解析
  • Harmony OS【获取本地json数据的方法】
  • 字符串A+B
  • 图解 ThreadLocal
  • Linux CenterOS系统ifconfig没有ens33 IP地址解决方法
  • 群体智能优化算法-灰狼优化算法(Grey Wolf Optimizer, GWO,含Matlab源代码)
  • Java-servlet(七)详细讲解Servlet注解
  • 单表达式倒计时工具:datetime的极度优雅(智普清言)
  • 进行光学和傅立叶光学领域的全息图仿真
  • 【leetcode题解】二分算法
  • 【002安卓开发方案调研】之Kotlin+Jetpack开发方案
  • 无人机点对点技术要点分析!
  • mayfly-go开源的一站式 Web 管理平台