速卖通素材
奋斗

轻量服务器上如何同时安装并运行MySQL、Redis和Java应用(JAR包)?

服务器

在轻量服务器上同时运行 MySQL、Redis 和 Java 应用(JAR包)是完全可行的,但需要合理配置资源分配和服务管理。以下是详细的步骤指南:

一、前期准备

1. 系统选择

推荐使用 Ubuntu 20.04/22.04 或 CentOS 7/8(以 Ubuntu为例)

2. 基础环境安装

# 更新系统
sudo apt update && sudo apt upgrade -y

# 安装必要工具
sudo apt install -y curl wget vim net-tools htop

二、安装 Java 运行时

# 安装 OpenJDK 11(推荐用于大多数Spring Boot应用)
sudo apt install -y openjdk-11-jdk

# 验证安装
java -version

# 设置 JAVA_HOME
export JAVA_HOME=$(dirname $(dirname $(readlink -f $(which java))))
echo "export JAVA_HOME=$JAVA_HOME" >> ~/.bashrc
source ~/.bashrc

三、安装并配置 MySQL

1. 安装 MySQL

sudo apt install -y mysql-server

# 启动服务
sudo systemctl start mysql
sudo systemctl enable mysql

2. 安全配置

sudo mysql_secure_installation

3. 创建数据库和用户

-- 登录MySQL
sudo mysql

-- 创建数据库
CREATE DATABASE your_app_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- 创建用户并授权
CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'your_strong_password';
GRANT ALL PRIVILEGES ON your_app_db.* TO 'app_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;

4. 优化 MySQL 配置(针对小内存服务器)

sudo cp /etc/mysql/mysql.conf.d/mysqld.cnf /etc/mysql/mysql.conf.d/mysqld.cnf.bak

sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

添加/修改以下配置:

[mysqld]
# 根据服务器内存调整
innodb_buffer_pool_size = 128M
max_connections = 50
query_cache_type = 0
tmp_table_size = 16M
max_heap_table_size = 16M

重启MySQL:

sudo systemctl restart mysql

四、安装并配置 Redis

1. 安装 Redis

sudo apt install -y redis-server

# 启动服务
sudo systemctl start redis-server
sudo systemctl enable redis-server

2. 优化 Redis 配置

sudo cp /etc/redis/redis.conf /etc/redis/redis.conf.bak

sudo vim /etc/redis/redis.conf

关键配置项:

# 绑定本地访问
bind 127.0.0.1

# 保护模式
protected-mode yes

# 端口
port 6379

# 最大内存限制(根据服务器内存调整)
maxmemory 256mb
maxmemory-policy allkeys-lru

# 持久化策略
save 900 1
save 300 10
save 60 10000

# RDB压缩
rdbcompression yes

# AOF持久化
appendonly yes
appendfsync everysec

重启Redis:

sudo systemctl restart redis-server

3. 设置Redis密码(可选但推荐)

sudo vim /etc/redis/redis.conf
# 找到 requirepass 行,取消注释并设置密码
requirepass your_redis_password

五、部署 Java 应用

1. 上传 JAR 包

# 创建应用目录
sudo mkdir -p /opt/myapp
sudo chown $USER:$USER /opt/myapp

# 将你的 JAR 包上传到该目录
scp your-app.jar user@server:/opt/myapp/

2. 创建 systemd 服务文件

sudo vim /etc/systemd/system/myapp.service

内容如下:

[Unit]
Description=My Spring Boot Application
After=network.target mysql.service redis-server.service

[Service]
Type=simple
User=www-data
Group=www-data
WorkingDirectory=/opt/myapp
ExecStart=/usr/bin/java -Xms256m -Xmx512m 
    -jar /opt/myapp/your-app.jar 
    --spring.profiles.active=prod
Restart=on-failure
RestartSec=10
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=myapp

# 环境变量
Environment="SPRING_PROFILES_ACTIVE=prod"
Environment="REDIS_HOST=127.0.0.1"
Environment="REDIS_PORT=6379"
Environment="MYSQL_HOST=127.0.0.1"
Environment="MYSQL_PORT=3306"

[Install]
WantedBy=multi-user.target

3. 启动和管理应用

# 重新加载 systemd
sudo systemctl daemon-reload

# 启动应用
sudo systemctl start myapp

# 设置开机自启
sudo systemctl enable myapp

# 查看状态
sudo systemctl status myapp

# 查看日志
sudo journalctl -u myapp -f

六、配置文件示例

application.yml (Spring Boot)

server:
  port: 8080

spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/your_app_db?useSSL=false&serverTimezone=UTC&characterEncoding=utf8mb4
    username: app_user
    password: your_strong_password
    driver-class-name: com.mysql.cj.jdbc.Driver

  redis:
    host: 127.0.0.1
    port: 6379
    password: your_redis_password
    lettuce:
      pool:
        max-active: 8
        max-idle: 4
        min-idle: 2

mybatis:
  mapper-locations: classpath:mapper/*.xml

七、资源监控与优化

1. 安装监控工具

sudo apt install -y htop iotop iftop

2. 创建监控脚本

sudo vim /usr/local/bin/check_resources.sh
#!/bin/bash
echo "=== System Resources ==="
free -h
df -h
echo "=== Service Status ==="
systemctl is-active mysql redis-server myapp
echo "=== Memory Usage ==="
ps aux --sort=-%mem | head -10

3. 设置定时清理日志

sudo crontab -e

添加:

# 每天凌晨2点清理旧日志
0 2 * * * find /var/log/mysql -name "*.log" -mtime +7 -delete
0 2 * * * find /var/log/redis -name "*.log" -mtime +7 -delete
0 2 * * * find /var/log/myapp -name "*.log" -mtime +7 -delete

八、安全加固

1. 防火墙配置

sudo ufw allow ssh
sudo ufw allow 8080/tcp  # Java应用端口
sudo ufw enable

2. 限制外部访问

  • MySQL 只允许 localhost 连接
  • Redis 只允许 localhost 连接
  • Java应用可通过Nginx反向X_X暴露公网

3. Nginx 反向X_X(可选)

sudo apt install -y nginx
sudo vim /etc/nginx/sites-available/myapp
server {
    listen 80;
    server_name your_domain.com;

    location / {
        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;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

九、备份策略

1. MySQL 备份脚本

sudo vim /usr/local/bin/backup_mysql.sh
#!/bin/bash
BACKUP_DIR="/backups/mysql"
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p $BACKUP_DIR

# 备份所有数据库
mysqldump -u root -p'your_root_password' --all-databases > $BACKUP_DIR/all_databases_$DATE.sql

# 保留最近7天的备份
find $BACKUP_DIR -name "*.sql" -mtime +7 -delete

2. 设置定时备份

sudo crontab -e
# 每天凌晨3点备份
0 3 * * * /usr/local/bin/backup_mysql.sh

十、常见问题排查

问题 解决方案
Java应用启动失败 检查 journalctl -u myapp 日志
MySQL连接拒绝 确认 bind-address 和防火墙设置
Redis连接超时 检查 protected-mode 和密码配置
内存不足 调整 JVM 参数 -Xms/-Xmx 和 MySQL buffer
磁盘空间不足 定期清理日志和备份文件

总结

这种架构适合中小型项目,关键点在于:

  1. 资源分配:合理设置各服务的内存上限
  2. 服务依赖:通过 systemd 确保启动顺序正确
  3. 监控维护:建立日志收集和自动清理机制
  4. 安全防护:最小化开放端口,使用强密码

对于更高并发场景,建议考虑容器化部署(Docker)或微服务架构拆分。

未经允许不得转载:轻量云Cloud » 轻量服务器上如何同时安装并运行MySQL、Redis和Java应用(JAR包)?