一、需求分析
优点:测试服与正式服环境隔离,配置简单,多个开发者可以共用一个测试数据库和redis
二、安装镜像
因为正式服是装了宝塔面板,所以直接在宝塔面板上安装docker。
因为需要的虚拟机linux要有完整的系统命令,docker安装镜像为centos/systemd
以特权模式创建容器,并把虚拟机内的 22,3306,6379端口映射到实体机的 22000,13306,16379端口
docker run -itd --privileged=true -p 22000:22 -p 13306:3306 -p 16379:6379 --name mytest systemd:latest
三、虚拟机内Linux配置和软件安装
#配置yum为阿里云的源
rm -rf /etc/yum.repos.d/*
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
yum repolist
#查看linux时区
timedatectl
#设置时区为上海(中国标准时间)
sudo timedatectl set-timezone Asia/Shanghai
timedatectl
#虚拟机安装java
java -version
yum list java*jdk-devel
yum install java-1.8.0-openjdk-devel -y
#修改ls/ll显示的时间格式 2023-07-31 15:30
vi ~/.bashrc
# 自定义 ll 命令的时间格式
alias ll='ls -l --time-style="+%Y-%m-%d %H:%M"'
# 使配置立即生效
source ~/.bashrc
#查看虚拟机的IP,通常是172.17.0.2
ifconfig
#查看运行程序的端口
yum install -y net-tools
netstat -nlpt
#安装ssh
yum install -y openssh-server
# 编辑 SSH 配置文件
vi /etc/ssh/sshd_config
#启动和设置开机启动
systemctl start sshd
systemctl enable sshd
systemctl status sshd
#重置root密码(是从容器进来的,本来密码不知道)
passwd root
#在实体机中测试虚拟机中的端口连接
ssh root@172.17.0.2
exit
#安装mysql
#!注意 yum install -y mariadb-server 安装的是mysql5.5,版本很低
#下载mysql源安装包
yum install -y wget
wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
rpm -ivh mysql57-community-release-el7-11.noarch.rpm
#--nogpgcheck 不校验数字签名
yum -y install mysql-server --nogpgcheck
#启动
systemctl start mysqld
systemctl enable mysqld
systemctl status mysqld
#MySQL 5.7 安装后会生成一个临时 root 密码:
cat /var/log/mysqld.log | grep password
mysql_secure_installation
#输入上面查到的默认密码,设置新密码(至少8位,必须包含 大小写字母、数字、特殊字符)
#进入mysql
mysql -p'密码'
show databases;
#开放root用户远程登录
UPDATE mysql.user SET Host='%' WHERE User='root' AND Host='localhost';
FLUSH PRIVILEGES;
quit
#安装redis
#Redis 不在默认的 CentOS 仓库中,需先添加 EPEL仓库
yum install -y epel-release
yum install -y redis
systemctl start redis
systemctl enable redis
systemctl status redis
#进入redis
redis-cli
SET hello world
GET hello
quit
#开放外部访问 vi /etc/redis.conf
# 注释掉bind(默认仅监听本地)
# bind 127.0.0.1
# 关闭保护模式
protected-mode no
# 设置密码
requirepass 密码
#然后重启redis
systemctl restart redis
#安装nginx
yum install -y nginx
systemctl start nginx
systemctl enable nginx
systemctl status nginx
#nginx配置文件在/etc/nginx/nginx.conf
#虚拟机中的nginx不需要https
#此镜像中没有防火墙,不需要打开防火墙端口
#firewall-cmd --permanent --add-port=22/tcp
#firewall-cmd --permanent --add-port=3306/tcp
#firewall-cmd --permanent --add-port=6379/tcp
#firewall-cmd --permanent --add-port=80/tcp
#firewall-cmd --reload
#清理yum的硬盘空间
yum clean all
四、回到实体机中
测试端口和开放防火墙端口
telnet 172.17.0.2 3306
quit
telnet 172.17.0.2 6379
quit
telnet 172.17.0.2 80
quit
#开放防火墙端口
firewall-cmd --permanent --add-port=22000/tcp
firewall-cmd --permanent --add-port=13306/tcp
firewall-cmd --permanent --add-port=16379/tcp
firewall-cmd --reload
阿里云等的安全组,添加开放端口(最好指定IP)
#服务器配置系统hosts,把demo域名指向docker内网IP
vi /etc/hosts
172.17.0.2 demo.batsing.com
Nginx中配置vhost,将demo域名转发到域名自身
server {
listen 80;
server_name demo.batsing.com;
location / {
proxy_pass http://demo.batsing.com;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-NginX-Proxy true;
}
}
#虚拟机中配置网站
#参考一般的网站配置即可
五、本地开发与测试
日常用 batsing.com:22000 登录测试服,更新代码重启等
本地开发测试,数据库连接远程的 batsing.com:13306 ,Redis连接远程的 batsing.com:16379