准备工作:
提前购买好阿里云服务器,本文使用的是阿里云ECS服务器,操作系统是Alibaba Cloud Linux 3.2104 64位
。
1.安装docker
在阿里云服务器上安装docker其实有官方的教程,这里是针对本文使用的操作系统Alibaba Cloud Linux 3
的安装教程:
部署并使用Docker(Alibaba Cloud Linux 3)
关于其它操作系统的docker安装教程可以查看以下:
对于Alibaba Cloud Linux 3
操作系统而言,如果是安装dnf源中默认的docker(podman-docker)的话,操作非常简单,只需运行以下命令即可安装:
dnf -y install docker
再运行以下命令查看docker是否安装成功:
docker images
看到显示如下信息的话,则是安装成功:
注意:使用这种方式安装的podman-docker是没有守护进程的(systemd),因此后续无需关注podman-docker的运行状态,即无需进行systemctl
命令的相关操作,直接使用docker即可。类似systemctl start docker
,systemctl status docker
都是没有必要执行,而且也是无法执行的,否则会报如下错误:
Failed to start docker.service: Unit docker.service not found.
想要通过docker启动一个容器的话直接docker run image-name即可。
2.docker部署redis并远程连接
2.1部署ECS服务器本机访问的redis
通过docker部署redis并不难,简单的只需要以下命令即可启动一个最新版本的redis容器,并指定容器名称为redis-test,映射端口到外部虚拟机:
docker run -itd --name redis-test -p 6379:6379 redis
然后可以通过以下命令进入容器内部:
docker exec -it redis-test /bin/bash
使用redis-cli
命令可启动redis客户端,并执行相应的redis操作:
[root@iZ0jl11vshonpsvr9c0trnZ ~]# docker exec -it redis-test /bin/bash
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
root@9b7ccfceb5e2:/data# redis-cli
127.0.0.1:6379> set key1 value1
OK
127.0.0.1:6379> get key1
"value1"
127.0.0.1:6379> exit
root@9b7ccfceb5e2:/data#
然而这样部署的redis无法被应用远程连接,还需要修改一些配置。
2.2修改redis配置文件redis.conf
redis.conf是redis的配置文件,可以从官网下载:http://download.redis.io/redis-stable/redis.conf
这里将其下载后放置在/etc
目录下,即绝对路径为:/etc/redis.conf
接下来需要修改redis.conf配置文件中的两处地方
第一处,需要开启地址授权,可以将bind 127.0.0.1
注释掉或者是将后面的ip改成0.0.0.0
。这样表示所有的ip都能访问该redis服务,否则只有本机可以访问。
第二处,将protected-mode
的值改成no
,默认为yes
结果如下:
2.3检查服务器防火墙是否开放6379端口
可以选择只修改开放6379端口或者是关闭防火墙(非生产环境)
#执行下面代码 如果返回yes 就代表开启了 返回no 就代表没有
#也有可能显示firewallD没有在运行,这时端口是开放的
firewall-cmd --query-port=6379/tcp
#如果上面返回no 执行下面的这个代码,开通端口
#如果是yes,可以不用执行略过
firewall-cmd --zone=public --add-port=6379/tcp --permanent
#然后重启防火请
firewall-cmd --reload
2.4检查阿里云服务器的安全组是否开放了6379端口
如果没有开放的话可以修改该ECS服务器对应安全组的配置或者选择新建一个安全组分配给该ECS服务器。
可以选择“快速添加”入方向的访问规则,如下:
2.5指定redis.conf启动redis服务
由于我们做的修改是在redis.conf配置文件中,所以在启动redis的时候需要指定redis.conf才可以让redis按照我们修改的配置启动。
可以使用以下命令启动一个可远程连接的redis服务:
docker run -p 6379:6379 --name redis-test -v /etc/redis.conf:/etc/redis/redis.conf -v /usr/local/redis/data:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes
该命令的解释如下:
-p 6379:6379 端口映射,前者表示主机部分,后者表示容器部分。--name redis-test 指定该容器名称,查看和进行操作都比较方便。-v 挂载目录,规则与端口映射相同。这里挂载了redis.conf配置文件以及redis存储数据的文件夹。-d redis 表示后台启动redisredis-server /etc/redis/redis.conf 以配置文件启动redis,加载容器内的conf文件,最终找到的是挂载的目录/etc/redis.conf--appendonly yes 指定redis持久化的方式为AOF
3.redis远程连接demo
在一个springboot项目中添加jedis依赖
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.2.0</version>
</dependency>
编写单元测试程序如下:
import org.junit.Test;
import redis.clients.jedis.Jedis;
public class RedisConnectTest {
@Test
public void TestPing() {
Jedis jedis = new Jedis("1.2.3.4",6379);
System.out.println("TestPing >>>>>>>>>>>>> "+jedis.ping());
}
}
运行TestPing()方法即可验证是否可以成功连接远程redis
参考资料:
Spring boot连接远程阿里云服务器中的Redis(修改redis.conf配置文件+开放端口)