阿里云ECS云服务器部署Java后端完整流程
·
一、准备工作
1. 连接服务器
在阿里云官网先买一个服务器,(注意要先注册自己的账号和认证才可购买,有便宜套餐)https://ecs-buy.aliyun.com/ecs?spm=5176.42028462.0.d_0_0_0.5d64154ahtlT6B#/custom/prepay/cn-hangzhou
2. 更新系统
# CentOS/RHEL
yum update -y
# Ubuntu/Debian
apt update && apt upgrade -y
二、安装Docker
1. 检查是否已安装
docker --version
docker-compose --version
2. 安装Docker(如未安装)
# CentOS/RHEL
yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
# Ubuntu/Debian
apt install -y ca-certificates curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
apt update
apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
3. 启动并验证Docker
systemctl start docker
systemctl enable docker
docker --version
docker run hello-world
三、安装JDK 17
1. 检查是否已安装
java -version
2. 安装JDK 17
# 方式1:使用包管理器(推荐)
# CentOS/RHEL
yum install -y java-17-openjdk java-17-openjdk-devel
# Ubuntu/Debian
apt install -y openjdk-17-jdk
# 方式2:手动下载安装
cd /opt
wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz
tar -zxvf jdk-17_linux-x64_bin.tar.gz
mv jdk-17* jdk-17
3. 配置环境变量(手动安装需要)
vim /etc/profile
# 添加以下内容
export JAVA_HOME=/opt/jdk-17
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib
# 使配置生效
source /etc/profile
4. 验证安装
java -version
javac -version
echo $JAVA_HOME
四、安装MySQL(使用Docker)
1. 创建MySQL数据目录
mkdir -p /data/mysql/{data,conf,logs}
2. 创建MySQL配置文件
cat > /data/mysql/conf/my.cnf << 'EOF'
[mysqld]
user=mysql
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
default-time-zone='+8:00'
max_connections=1000
max_connect_errors=100
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
EOF
3. 启动MySQL容器
docker run -d \
--name mysql \
--restart=always \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=你的密码 \
-v /data/mysql/data:/var/lib/mysql \
-v /data/mysql/conf/my.cnf:/etc/mysql/conf.d/my.cnf \
-v /data/mysql/logs:/var/log/mysql \
mysql:8.0
4. 验证MySQL
docker ps | grep mysql
docker exec -it mysql mysql -uroot -p
# 进入MySQL后执行
SHOW VARIABLES LIKE 'character%';
SELECT VERSION();
exit
5. MySQL导入SQL文件创建数据库(云服务器导入)
5.1 上传SQL文件到服务器

5.2 导入SQL到MySQL
创建数据库后导入
# 1. 先创建数据库
docker exec -i mysql mysql -uroot -pRoot123456 << EOF
CREATE DATABASE IF NOT EXISTS your_database CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
EOF
# 2. 导入SQL到指定数据库
docker exec -i mysql mysql -uroot -pRoot123456 your_database < /root/your_database.sql
# 3. 验证导入
docker exec -it mysql mysql -uroot -pRoot123456 -e "USE your_database; SHOW TABLES;"
6.MySql安装失败的场景
6.1 解决MySQL启动失败问题
看截图:


看上面报错图片,这是Docker的iptables网络配置问题:
(1) 先停止并删除失败的容器
docker stop mysql 2>/dev/null
docker rm mysql 2>/dev/null
(2) 重启Docker服务(关键步骤)
systemctl restart docker
# 等待几秒后验证
systemctl status docker
(3) 清理Docker网络
# 查看现有网络
docker network ls
# 删除未使用的网络
docker network prune -f
# 重新加载防火墙规则
systemctl restart firewalld
# 或者如果使用iptables
service iptables restart
(4)重新启动MySQL
docker run -d \
--name mysql \
--restart=always \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=你的密码 \
-e TZ=Asia/Shanghai \
-v /data/mysql/data:/var/lib/mysql \
-v /data/mysql/conf/my.cnf:/etc/mysql/conf.d/my.cnf \
-v /data/mysql/logs:/var/log/mysql \
mysql:8.0
(5) 验证容器启动
# 查看容器状态
docker ps -a | grep mysql
# 查看容器日志
docker logs mysql
# 如果正常应该看到:MySQL init process done. Ready for start up.
6.2 解决系统没有iptables服务

系统没有iptables服务,这是正常的。现代系统使用firewalld或nftables。直接修复Docker配置。
🚀 直接解决方案
(1)配置Docker并重启
# 创建Docker配置
mkdir -p /etc/docker
cat > /etc/docker/daemon.json << 'EOF'
{
"iptables": true,
"registry-mirrors": ["https://mirror.ccs.tencentyun.com"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "3"
}
}
EOF
# 重启Docker
systemctl daemon-reload
systemctl restart docker
# 验证Docker状态
systemctl status docker
(2) 直接启动MySQL(简化版,不挂载配置文件)
# 删除旧容器
docker rm -f mysql 2>/dev/null
# 启动MySQL(不使用配置文件挂载,避免路径问题)
docker run -d \
--name mysql \
--restart=always \
-p 3306:3306 \
-e MYSQL_ROOT_PASSWORD=Root123456 \
-e TZ=Asia/Shanghai \
-v /data/mysql/data:/var/lib/mysql \
mysql:8.0
# 等待启动
echo "等待MySQL启动..."
sleep 15
# 查看状态
docker ps
# 查看日志
docker logs mysql | tail -30
(3)测试MySQL
# 测试连接
docker exec mysql mysql -uroot -pRoot123456 -e "SELECT VERSION();"
# 如果成功,应该看到MySQL版本号
6.3 navicat连接远程服务器的mysql报错

因为ecs云服服务器未开通mysql 3306端口,因此需要开通mysql远程访问端口才能解决


五、安装Redis(使用Docker)
1. 创建Redis目录
mkdir -p /data/redis/{data,conf}
2. 下载Redis配置文件
wget -O /data/redis/conf/redis.conf http://download.redis.io/redis-stable/redis.conf
# 修改配置
sed -i 's/bind 127.0.0.1/bind 0.0.0.0/g' /data/redis/conf/redis.conf
sed -i 's/protected-mode yes/protected-mode no/g' /data/redis/conf/redis.conf
sed -i 's/# requirepass foobared/requirepass 你的密码/g' /data/redis/conf/redis.conf
sed -i 's/appendonly no/appendonly yes/g' /data/redis/conf/redis.conf
3. 启动Redis容器
docker run -d \
--name redis \
--restart=always \
-p 6379:6379 \
-v /data/redis/data:/data \
-v /data/redis/conf/redis.conf:/etc/redis/redis.conf \
redis:latest redis-server /etc/redis/redis.conf
4. 验证Redis
docker ps | grep redis
docker exec -it redis redis-cli
# 进入Redis后执行
AUTH 你的密码
PING
INFO server
exit
5.验证失败解决方案

问题分析:Redis容器不断重启
看到问题了!Redis容器状态是 "Restarting (1)" ,说明容器启动失败后在不断重启。
🚨 问题诊断
5.1.查看容器日志(最重要)
# 查看Redis容器的错误日志
docker logs redis
# 查看最后50行日志
docker logs --tail 50 redis
# 实时查看日志
docker logs -f redis
先执行这个命令,把输出内容。
5.2🔧 快速修复方案
# 1. 停止并删除问题容器
docker stop redis 2>/dev/null
docker rm redis 2>/dev/null
# 2. 检查端口是否被占用
netstat -tlnp | grep 6379
# 如果有其他进程占用,先kill掉
# 3. 使用最简配置重新启动(不挂载配置文件)
docker run -d \
--name redis \
--restart=always \
-p 6379:6379 \
redis:latest
# 4. 等待几秒后检查状态
sleep 5
docker ps | grep redis
# 5. 测试连接
docker exec redis redis-cli ping
5.3最后验证安装成功截图

六、安装Nacos 2(使用Docker)
1. 创建Nacos目录
mkdir -p /data/nacos/{logs,conf}
2. 下载Nacos配置
# 下载自定义配置文件(可选)
cat > /data/nacos/conf/application.properties << 'EOF'
server.port=8848
nacos.core.auth.enabled=true
nacos.core.auth.plugin.nacos.token.secret.key=SecretKey012345678901234567890123456789012345678901234567890123456789
EOF
3. 启动Nacos(单机模式)
docker run -d \
--name nacos \
--restart=always \
-p 8848:8848 \
-p 9848:9848 \
-e MODE=standalone \
-e SPRING_DATASOURCE_PLATFORM=mysql \
-e MYSQL_SERVICE_HOST=你的MySQL地址 \
-e MYSQL_SERVICE_PORT=3306 \
-e MYSQL_SERVICE_DB_NAME=nacos_config \
-e MYSQL_SERVICE_USER=root \
-e MYSQL_SERVICE_PASSWORD=你的MySQL密码 \
-e NACOS_AUTH_ENABLE=true \
-v /data/nacos/logs:/home/nacos/logs \
nacos/nacos-server:v2.2.3
4. 初始化Nacos数据库
# 下载Nacos数据库脚本
wget https://raw.githubusercontent.com/alibaba/nacos/develop/distribution/conf/mysql-schema.sql
# 导入数据库
docker exec -i mysql mysql -uroot -p你的密码 << EOF
CREATE DATABASE IF NOT EXISTS nacos_config CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE nacos_config;
source /tmp/mysql-schema.sql;
EOF
# 或手动导入
docker cp mysql-schema.sql mysql:/tmp/
docker exec -it mysql bash
mysql -uroot -p
CREATE DATABASE nacos_config;
USE nacos_config;
SOURCE /tmp/mysql-schema.sql;
exit
5. 验证Nacos
docker ps | grep nacos
docker logs nacos
# 访问Web界面
# http://你的服务器IP:8848/nacos
# 默认账号密码:nacos/nacos
七、安装MinIO(使用Docker)
1. 创建MinIO目录
mkdir -p /data/minio/{data,config}
2. 启动MinIO容器
docker run -d \
--name minio \
--restart=always \
-p 9000:9000 \
-p 9001:9001 \
-e MINIO_ROOT_USER=admin \
-e MINIO_ROOT_PASSWORD=admin123456 \
-v /data/minio/data:/data \
-v /data/minio/config:/root/.minio \
minio/minio server /data --console-address ":9001"
3. 验证MinIO
docker ps | grep minio
docker logs minio
# 访问Web界面
# http://你的服务器IP:9001
# 使用上面设置的账号密码登录
八、配置安全组规则
在阿里云控制台开放以下端口:
- 3306: MySQL
- 6379: Redis
- 8848: Nacos
- 9848: Nacos gRPC
- 9000: MinIO API
- 9001: MinIO Console
- 你的应用端口: 如8080
九、验证所有服务
创建验证脚本
cat > /root/check_services.sh << 'EOF'
#!/bin/bash
echo "=== 检查JDK ==="
java -version
echo -e "\n=== 检查Docker ==="
docker --version
echo -e "\n=== 检查运行中的容器 ==="
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"
echo -e "\n=== 检查MySQL ==="
docker exec mysql mysql -uroot -p你的密码 -e "SELECT VERSION();" 2>/dev/null && echo "MySQL: OK" || echo "MySQL: FAILED"
echo -e "\n=== 检查Redis ==="
docker exec redis redis-cli -a 你的密码 PING 2>/dev/null && echo "Redis: OK" || echo "Redis: FAILED"
echo -e "\n=== 检查Nacos ==="
curl -s http://localhost:8848/nacos/v1/console/health > /dev/null && echo "Nacos: OK" || echo "Nacos: FAILED"
echo -e "\n=== 检查MinIO ==="
curl -s http://localhost:9000/minio/health/live > /dev/null && echo "MinIO: OK" || echo "MinIO: FAILED"
echo -e "\n=== 端口监听情况 ==="
netstat -tlnp | grep -E '3306|6379|8848|9000|9001'
EOF
chmod +x /root/check_services.sh
./check_services.sh
十、Docker Compose统一管理(推荐)
创建docker-compose.yml
mkdir -p /data/docker-compose
cd /data/docker-compose
cat > docker-compose.yml << 'EOF'
version: '3.8'
services:
mysql:
image: mysql:8.0
container_name: mysql
restart: always
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: 你的密码
TZ: Asia/Shanghai
volumes:
- /data/mysql/data:/var/lib/mysql
- /data/mysql/conf/my.cnf:/etc/mysql/conf.d/my.cnf
- /data/mysql/logs:/var/log/mysql
networks:
- backend
redis:
image: redis:latest
container_name: redis
restart: always
ports:
- "6379:6379"
command: redis-server /etc/redis/redis.conf
volumes:
- /data/redis/data:/data
- /data/redis/conf/redis.conf:/etc/redis/redis.conf
networks:
- backend
nacos:
image: nacos/nacos-server:v2.2.3
container_name: nacos
restart: always
ports:
- "8848:8848"
- "9848:9848"
environment:
MODE: standalone
SPRING_DATASOURCE_PLATFORM: mysql
MYSQL_SERVICE_HOST: mysql
MYSQL_SERVICE_PORT: 3306
MYSQL_SERVICE_DB_NAME: nacos_config
MYSQL_SERVICE_USER: root
MYSQL_SERVICE_PASSWORD: 你的密码
NACOS_AUTH_ENABLE: true
volumes:
- /data/nacos/logs:/home/nacos/logs
depends_on:
- mysql
networks:
- backend
minio:
image: minio/minio
container_name: minio
restart: always
ports:
- "9000:9000"
- "9001:9001"
environment:
MINIO_ROOT_USER: admin
MINIO_ROOT_PASSWORD: admin123456
command: server /data --console-address ":9001"
volumes:
- /data/minio/data:/data
- /data/minio/config:/root/.minio
networks:
- backend
networks:
backend:
driver: bridge
EOF
启动所有服务
docker-compose up -d
docker-compose ps
docker-compose logs -f
十一、常用运维命令
# 查看所有容器
docker ps -a
# 查看容器日志
docker logs -f 容器名
# 重启容器
docker restart 容器名
# 停止容器
docker stop 容器名
# 进入容器
docker exec -it 容器名 bash
# 查看容器资源使用
docker stats
# 备份数据
tar -czf backup-$(date +%Y%m%d).tar.gz /data/
十二、防火墙配置
# CentOS/RHEL
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --permanent --add-port=6379/tcp
firewall-cmd --permanent --add-port=8848/tcp
firewall-cmd --permanent --add-port=9848/tcp
firewall-cmd --permanent --add-port=9000/tcp
firewall-cmd --permanent --add-port=9001/tcp
firewall-cmd --reload
# Ubuntu/Debian
ufw allow 3306/tcp
ufw allow 6379/tcp
ufw allow 8848/tcp
ufw allow 9848/tcp
ufw allow 9000/tcp
ufw allow 9001/tcp
ufw reload
完成!✅
所有服务已部署完成,访问地址:
- Nacos: http://你的IP:8848/nacos (nacos/nacos)
- MinIO: http://你的IP:9001 (admin/admin123456)
- MySQL: 你的IP:3306
- Redis: 你的IP:6379
更多推荐






所有评论(0)