从零搭建 Linux 开发服务器:VMware NAT 静态网络 + Docker + MySQL + Redis + 云服务器迁移

目标

本文记录一套企业开发中常见的 Linux 服务器搭建流程:

使用 VMware Workstation 创建 Linux 虚拟机

安装纯命令行 Linux 系统

配置 NAT 模式静态 IP

安装 Docker 和 Docker Compose

使用 Docker Compose 部署 MySQL、Redis

本地虚拟机开发完成后,迁移部署到云服务器 本文适合用于日常开发环境、测试环境、个人项目部署练习。

一、系统选择 企业里常见的 Linux 服务器系统主要有:

Rocky Linux / AlmaLinux:兼容 RHEL,适合企业服务器环境

Ubuntu Server LTS:社区活跃,资料多,云服务器常见

Debian:稳定,轻量

本文推荐使用:

Rocky Linux 9 Minimal

原因:

  • 接近企业生产环境
  • 纯命令行安装方便
  • 和 CentOS / RHEL 系列命令习惯一致
  • 适合学习服务器部署

二、下载 Linux 镜像

进入 Rocky Linux 官网下载 ISO:

https://rockylinux.org/download

选择:

Rocky Linux 9.x x86_64 Minimal ISO

如果觉得太慢就用镜像,点击就能下载

Verifying - USTC Mirrorshttps://mirrors.ustc.edu.cn/rocky/9.8/isos/x86_64/Rocky-9.8-x86_64-minimal.iso

Minimal ISO 是最小化安装镜像,默认没有图形界面,适合服务器使用。


三、VMware 创建虚拟机

打开 VMware Workstation,创建新的虚拟机。

建议配置:

类型:典型

系统:Linux

版本:Red Hat Enterprise Linux 9 64-bit

CPU:2 核 内存:2GB / 4GB

磁盘:40GB 起步

网络:NAT 模式

镜像:选择 Rocky Linux Minimal ISO

开发环境建议:

CPU:2 核 内存:4GB 磁盘:50GB

如果后面要跑多个容器,比如 MySQL、Redis、Nginx、Java 项目,建议内存至少 4GB。


四、VMware NAT 网络说明

我这里使用的是 VMware NAT 模式,子网是:

192.168.6.0/24

常见配置如下:

网段:192.168.6.0

子网掩码:255.255.255.0

网关:192.168.6.2

虚拟机 IP:192.168.6.100

DNS:8.8.8.8 / 114.114.114.114

注意:

VMware NAT 模式下,虚拟机可以访问外网,宿主机也可以访问虚拟机。

但是外部网络一般不能直接访问虚拟机,除非做端口转发。


五、安装 Rocky Linux

(选第一个)

(这边只要把ROOT密码设置一下就好,如果你自己用,用户可加可不加)

(点击安装)

安装时重点选择:

Installation Destination:选择磁盘

Root Password:设置 root 密码

User Creation:可选,建议创建普通用户

Software Selection:Minimal Install

安装完成后重启,进入纯命令行界面。

登录:

root


如果你直接在虚拟机里面是不能粘贴,你宿主机的数据的,所以你要下一个远程连接的软件,我这边推荐的是finalshell(FinalShell SSH工具,服务器管理,远程桌面加速软件,支持Windows,macOS,Linux,版本4.6.3,更新日期2025.5.21 - FinalShell官网)

这边连接软件里面的提示

旁边那个文件夹点一下,按流程就可以连接了,但是你还有可能发现一切都正常(密码,虚拟机状态),那你

就输入

sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config

sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/sshd_config systemctl restart sshd

然后再

sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

最后重启一下就能解决了

六、配置静态 IP

Rocky Linux 9 使用 NetworkManager 管理网络。

先查看网卡名称:

nmcli device

假设网卡名是:

ens160

查看当前连接名:

nmcli connection show

假设连接名也是 ens160,配置静态 IP:

nmcli connection modify ens160 ipv4.addresses 192.168.6.99/24

nmcli connection modify ens160 ipv4.gateway 192.168.6.2

nmcli connection modify ens160 ipv4.dns "8.8.8.8 114.114.114.114"

nmcli connection modify ens160 ipv4.method manual

nmcli connection up ens160

如果连接名不是 ens160,要替换成实际名称。

查看 IP:

ip addr

测试网络:

ping www.baidu.com

如果能 ping 通,说明网络正常。


七、基础环境初始化

更新系统:

dnf update -y

安装常用工具:

dnf install -y vim wget curl net-tools lrzsz unzip tar git bash-completion

查看系统版本:

cat /etc/os-release

关闭 SELinux,开发环境可以关闭,生产环境建议谨慎:

vim /etc/selinux/config

修改:

SELINUX=disabled

重启:

reboot

查看 SELinux 状态:

getenforce


八、防火墙配置

查看防火墙状态:

systemctl status firewalld

开发环境可以选择关闭:

systemctl stop firewalld

systemctl disable firewalld

如果不想关闭,可以开放端口:

firewall-cmd --permanent --add-port=3306/tcp

firewall-cmd --permanent --add-port=6379/tcp

firewall-cmd --permanent --add-port=8080/tcp

firewall-cmd --reload

生产环境建议不要直接关闭防火墙,而是按需开放端口。


九、安装 Docker

1. 安装依赖工具

复制代码
dnf install -y yum-utils

2. 添加 阿里云 Docker 稳定源(官方源国内会超时)

复制代码
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

3. 重建缓存(避免安装失败)

复制代码
dnf clean all && dnf makecache

4. 安装 Docker 引擎(完整版)

复制代码
dnf install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

5. 启动 Docker 并设置开机自启

复制代码
systemctl start docker
systemctl enable docker

6. 配置 国内镜像加速(必须加,否则拉镜像慢 / 失败)

复制代码
mkdir -p /etc/docker

tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": [
    "https://docker.m.daocloud.io",
    "https://docker.1ms.run",
    "https://docker.xuanyuan.me",
    "https://ccr.ccs.tencentyun.com"
  ]
}
EOF

docker info

7. 重启 Docker 使加速生效

复制代码
systemctl daemon-reload
systemctl restart docker

8. 查看版本(验证安装成功)

复制代码
docker version
docker compose version

十一、创建 Docker Compose 项目目录

建议统一放在:

mkdir -p /opt/docker
cd /opt/docker

创建 MySQL 和 Redis 目录:

mkdir -p mysql/data mysql/conf mysql/logs
mkdir -p redis/data redis/conf

(以后如果想加其他的中间件都先cd /opt/docker

然后

复制代码
# Nginx
mkdir -p nginx/conf nginx/html nginx/logs

# RabbitMQ
mkdir -p rabbitmq/data rabbitmq/conf rabbitmq/logs

# MinIO(文件存储)
mkdir -p minio/data minio/conf

# Grafana 监控
mkdir -p grafana/data

# Jenkins
mkdir -p jenkins/data

)


十二、准备 MySQL 配置文件

创建 MySQL 配置:

vim /opt/docker/mysql/conf/my.cnf

内容:

复制代码
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
default-time-zone=+8:00
max_connections=500

[client]
default-character-set=utf8mb4

[mysql]
default-character-set=utf8mb4

基本 i 插入 esc退出 :wq保存退出要知道


十三、准备 Redis 配置文件

创建 Redis 配置:

vim /opt/docker/redis/conf/redis.conf

内容:

复制代码
bind 0.0.0.0
protected-mode no
port 6379
requirepass 123456
appendonly yes
dir /data

注意:

开发环境可以这样配置,生产环境不要直接暴露 Redis 到公网。


十四、编写 docker-compose.yml

复制代码
cd /opt/docker
vim docker-compose.yml

内容:直接复制粘贴这个

复制代码
tee docker-compose.yml <<-'EOF'
services:
  mysql:
    image: mysql:8.0
    container_name: mysql8
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: 123456
      MYSQL_DATABASE: app_db
      TZ: Asia/Shanghai
    ports:
      - "3306:3306"
    volumes:
      - ./mysql/data:/var/lib/mysql
      - ./mysql/conf/my.cnf:/etc/mysql/conf.d/my.cnf
      - ./mysql/logs:/logs
    command: --default-authentication-plugin=mysql_native_password
    networks:
      - dev-net

  redis:
    image: redis:7
    container_name: redis7
    restart: always
    ports:
      - "6379:6379"
    volumes:
      - ./redis/data:/data
      - ./redis/conf/redis.conf:/etc/redis/redis.conf
    command: redis-server /etc/redis/redis.conf
    networks:
      - dev-net

networks:
  dev-net:
    driver: bridge
EOF

十五、启动容器

进入目录:

cd /opt/docker

启动:

docker compose up -d

这边经常会发生镜像源域名解析失败,

cat > /etc/docker/daemon.json <<'EOF'

{

"registry-mirrors": [

"https://docker.m.daocloud.io",

"https://docker.1ms.run",

"https://docker.xuanyuan.me",

"https://ccr.ccs.tencentyun.com"

]

}

EOF
systemctl daemon-reload

systemctl restart docker
cd /opt/docker

docker compose pull

docker compose up -d

按上面的操作换源就好或者到这里面去找

https://www.coderjia.cn/archives/dba3f94c-a021-468a-8ac6-e840f85867ea

1、启动容器

复制代码
docker compose up -d

-d 后台静默运行。

2、查看运行状

复制代码
docker compose ps

STATUS 显示 Up 就是正常启动。

查看日志:

docker logs mysql8
docker logs redis7


十六、测试 MySQL

进入 MySQL 容器:

docker exec -it mysql8 mysql -uroot -p

输入密码:

123456

执行 SQL:

show databases;

如果能看到数据库,说明 MySQL 启动成功。


十七、测试 Redis

进入 Redis 容器:

docker exec -it redis7 redis-cli

认证:

auth 123456

测试:

set name test

get name

如果能正常返回,说明 Redis 启动成功。


十八、宿主机连接虚拟机服务(用之前的远程连接软件也行)

虚拟机 IP:

192.168.6.100

宿主机连接 MySQL:

Host:192.168.6.100 Port:3306 User:root Password:123456

宿主机连接 Redis:

Host:192.168.6.100 Port:6379 Password:123456

如果连接失败,排查:

docker ps ss -tunlp

firewall-cmd --list-ports


十九、常用 Docker 命令

查看容器:

docker ps docker ps -a

启动容器:

docker start mysql8

停止容器:

docker stop mysql8

删除容器:

docker rm mysql8

查看日志:

docker logs -f mysql8

进入容器:

docker exec -it mysql8 bash

启动 Compose:

docker compose up -d

停止 Compose:

docker compose down

重启 Compose:

docker compose restart


二十、迁移到云服务器(Docker 标准迁移法・最简版)

本地虚拟机部署完成后,迁移到云服务器只需要迁移 2 样东西

  1. /opt/docker/docker-compose.yml
  2. 数据库备份文件:app_db.sql

不需要迁移:

  • mysql/data
  • mysql/conf
  • redis/data
  • redis/conf

更推荐迁移数据库备份,而不是直接复制 MySQL data 目录(跨环境容易启动失败)。


二十一、MySQL 数据备份

在虚拟机执行备份命令(导出你的业务数据库):

复制代码
docker exec mysql8 mysqldump -uroot -p123456 --databases app_db > /opt/docker/app_db.sql

如果要备份所有数据库(含系统库):

复制代码
docker exec mysql8 mysqldump -uroot -p123456 --all-databases > /opt/docker/all.sql

二十二、Redis 数据备份

Redis 已开启 AOF 持久化:

复制代码
appendonly yes

手动触发一次数据落地(确保数据最新):

docker exec redis7 redis-cli -a 123456 save

Redis 数据文件自动保存在:

复制代码
/opt/docker/redis/data

迁移时不需要拷贝 Redis 数据目录,重新启动容器后会自动重建。


二十三、上传文件到云服务器

假设云服务器 IP:1.2.3.4

推荐只上传 2 个核心文件(最干净、最安全):

复制代码
scp /opt/docker/docker-compose.yml root@1.2.3.4:/opt/docker/
scp /opt/docker/app_db.sql root@1.2.3.4:/opt/docker/

不推荐整目录上传,冗余文件太多。


二十四、云服务器初始化

云服务器推荐系统:Rocky Linux / Ubuntu Server

登录:

复制代码
ssh root@1.2.3.4

安装 Docker 和 Docker Compose(流程和本地虚拟机完全一样)。

创建目录:

复制代码
mkdir -p /opt/docker
cd /opt/docker

上传上面两个文件即可。


二十五、云服务器启动容器

进入目录:

cd /opt/docker

启动:

docker compose up -d

查看:

docker ps

所有配置、数据卷、密码、端口自动完成


二十六、恢复 MySQL 数据

上传 app_db.sql 后执行恢复:

复制代码
cat /opt/docker/app_db.sql | docker exec -i mysql8 mysql -uroot -p123456

恢复完成后进入 MySQL 验证:

复制代码
docker exec -it mysql8 mysql -uroot -p

show databases;
use app_db;
show tables;

二十七、云服务器安全组配置

必须在云厂商控制台开放端口:

  • 22(SSH)
  • 80(HTTP)
  • 443(HTTPS)
  • 3306(MySQL)
  • 6379(Redis)
  • 8080(Java 应用)

注意: 生产环境不建议把 3306、6379 暴露到公网 更安全做法:

  • MySQL / Redis 只允许内网访问
  • 应用服务器在内网访问数据库
  • 本地管理使用 SSH 隧道
  • Redis 必须设置密码
  • MySQL 使用强密码
  • 禁止 root 远程直接登录

二十八、生产环境建议(这个真的是重点啊,不要轻视安全问题,不然很容易就被黑了,不是开玩笑)

开发环境可以简单一些,但云服务器建议注意:

  1. 不要使用弱密码,比如 123456
  2. MySQL 和 Redis 不要直接暴露公网
  3. Docker Compose 文件里的密码不要随便上传到公开仓库
  4. 使用云服务器安全组限制来源 IP
  5. 定期备份 MySQL
  6. 重要服务加上 restart: always
  7. 日志要限制大小,避免磁盘被打满
  8. 建议使用 Nginx 做统一入口
  9. HTTPS 建议使用 Nginx + Let's Encrypt
  1. 数据目录和配置目录要分开管理

二十九、最终目录结构

最终 /opt/docker 目录大概如下:

复制代码
/opt/docker
├── docker-compose.yml   # 核心编排文件
├── app_db.sql           # 数据库备份
├── mysql                # 自动创建
│   ├── conf
│   ├── data
│   └── logs
└── redis                # 自动创建
    ├── conf
    └── data

三十、总结

本文完成了一套从本地虚拟机 → 云服务器的标准 Docker 部署流程:

  • VMware 创建 Linux 虚拟机
  • NAT 模式配置静态 IP
  • 初始化 Linux 基础环境
  • 安装 Docker & Docker Compose
  • 使用 Docker Compose 一键部署 MySQL + Redis
  • 备份数据库,迁移到云服务器
  • 云服务器一键启动容器
  • 恢复数据库
  • 配置安全组与安全策略

Docker 核心思想:一次配置,处处运行。 只需要维护 docker-compose.yml,即可在任何 Linux 环境快速重建整套环境。

相关推荐
xlq223221 小时前
64.TCP 可靠性与效率
网络·网络协议·tcp/ip
24zhgjx-lxq1 小时前
BGP路由黑洞
网络·安全·华为·智能路由器·hcip·ensp
RSTJ_16251 小时前
PYTHON+AI LLM DAY SIXTY-SIX
服务器·开发语言·python
Cx330❀2 小时前
【Linux网络】一文吃透 TCP Socket 编程
linux·运维·服务器·开发语言·网络·tcp/ip
砍材农夫2 小时前
物联网实战:Spring Boot MQTT | 模拟器Paho客户端拆解核心点
java·javascript·网络·spring boot·后端·物联网
zizle_lin2 小时前
WSL初始化Ubuntu的使用
linux·运维·ubuntu·wsl
J-Tony112 小时前
【计算机网络】TCP粘包和拆包
网络·tcp/ip·计算机网络
志栋智能2 小时前
轻量级 vs. 重平台:巡检超自动化的两种路径选择
运维·网络·人工智能·自动化
c++之路2 小时前
Linux 下 C++ 开发环境搭建
linux·运维·c++