본문 바로가기

Software Engineering/Redis

[Redis] Ubuntu 환경에서 source code를 사용하여 redis 설치하기

사진: Unsplash 의 Masanao Tomomatsu

 

외부 인터넷에 접속할 수 없는 폐쇠망 환경에서는 소스 코드를 사용하여 redis를 설치해야 할 때가 있습니다. 소스 코드를 다운로드 받아 빌드하고 systemd를 사용하여 redis 서비스를 등록하는 방법을 알아보겠습니다. 진행은 소스 코드 다운로드, 빌드, config 파일 준비, 서비스 등록 순서로 진행합니다.

실행 환경

  • Ubuntu 20.04
  • Redis 6.2.7

소스 코드 다운로드

설치하려는 버전의 redis 소스 코드를 다운로드 합니다. 직접 외부망에 접속 할 수 없는 경우는 해당 파일을 다운로드 하여 내부 ftp 등을 사용하여 파일을 복사합니다. (소스 코드 다운로드 : https://download.redis.io/releases/)

# wget을 사용하여 직접 다운로드
$ wget https://download.redis.io/releases/redis-6.2.7.tar.gz
--2024-12-26 09:07:39--  https://download.redis.io/releases/redis-6.2.7.tar.gz
Resolving download.redis.io (download.redis.io)... 45.60.125.1
Connecting to download.redis.io (download.redis.io)|45.60.125.1|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 2487287 (2.4M) [application/octet-stream]
Saving to: ‘redis-6.2.7.tar.gz’

redis-6.2.7.tar.gz  100%[================>]   2.37M  1.76MB/s    in 1.4s    

2024-12-26 09:07:42 (1.76 MB/s) - ‘redis-6.2.7.tar.gz’ saved [2487287/2487287]

 

압출을 풀고, make 명령를 실행하여 컴파일을 진행합니다.

# 압축 해제
$ tar -xzvf redis-6.2.7.tar.gz 
...

# 폴더 이동
$ cd redis-6.2.7/

# 빌드 실행
redis-6.2.7$ make
...
Hint: It's a good idea to run 'make test' ;)
make[1]: Leaving directory '/home/jyblue/Download/redis-6.2.7/src'

 

./src 디렉토리를 확인해보면, redis-server, redis-cli 등의 파일이 생성된 것을 확인할 수 있습니다.

make test 명령을 실행하여 빌드 결과를 체크합니다. tcl 패키지가 없다면 sudo apt install tcl 명령으로 설치합니다.

!!! WARNING The following tests failed:

*** [err]: Active defrag in tests/unit/memefficiency.tcl
Expected 93628 > 100000 (context: type eval line 106 cmd {assert {$hits > 100000}} proc ::test)
Cleanup: may take some time... OK
make[1]: *** [Makefile:393: test] Error 1
make[1]: Leaving directory '/home/jyblue/Download/redis-6.2.7/src'
make: *** [Makefile:6: test] Error 2

 

test 결과 에러가 발생했지만, pc 사양 문제로 보입니다. 다음 단계로 넘어갑니다.

sudo make install 명령어를 실행하여 redis를 설치합니다. pkg-config 패키지가 없다면 미리 sudo apt install pkg-config 명령으로 설치합니다.

redis-6.2.7$ sudo make install
cd src && make install
make[1]: Entering directory '/home/jyblue/Download/redis-6.2.7/src'

Hint: It's a good idea to run 'make test' ;)

    INSTALL redis-server
    INSTALL redis-benchmark
    INSTALL redis-cli
make[1]: Leaving directory '/home/jyblue/Download/redis-6.2.7/src'

 

/usr/local/bin 위치로 이동해보면 redis-server, redis-cli, redis-benchmark 바이너리가 설치 된 것을 확인 할 수 있습니다.

$ ls -aul
total 26636
drwxr-xr-x  2 root root     4096 Dec 26 10:48 .
drwxr-xr-x 10 root root     4096 Oct 19 13:16 ..
-rwxr-xr-x  1 root root  7266408 Dec 26 10:47 redis-benchmark
lrwxrwxrwx  1 root root       12 Dec 26 10:48 redis-check-aof -> redis-server
lrwxrwxrwx  1 root root       12 Dec 26 10:48 redis-check-rdb -> redis-server
-rwxr-xr-x  1 root root  7184232 Dec 26 10:47 redis-cli
lrwxrwxrwx  1 root root       12 Dec 26 10:48 redis-sentinel -> redis-server
-rwxr-xr-x  1 root root 12809680 Dec 26 10:47 redis-server

 

redis 운영을 위한 설정 파일, 백업 파일을 저장할 폴더를 생성합니다.

# config 파일 기본 위치
redis-6.2.7$ sudo mkdir /etc/redis

# 백업 파일 기본 위치
redis-6.2.7$ sudo mkdir /var/redis

 

redis config 파일 생성을 위해서 파일을 복사합니다. redis 권장 컨벤션에 따라 운영할 포트 이름으로 conf 파일을 복사합니다. Data가 저장될 디렉토리도 포트 이름으로 생성합니다.

# config file
redis-6.2.7$ sudo cp redis.conf /etc/redis/6379.conf

# data and working dir
redis-6.2.7$ sudo mkdir /var/redis/6379

 

config 파일을 수정하여 필요한 설정을 진행합니다.

$ sudo vi /etc/redis/6379.conf

 

- 설정할 내용, 포트별로 구분해야하는 값을 적기

서비스 등록

서비스 설정 파일을 작성 합니다.

$ sudo vi /etc/systemd/system/redis_6379.service

 

포트 설정을 반영하여 아래 내용 처럼 작성합니다.

$ cat /etc/systemd/system/redis_6379.service
[Unit]
Description=Redis In-Memory Data Store
After=network.target

[Service]
ExecStart=/usr/local/bin/redis-server /etc/redis/6379.conf
ExecStop=/usr/local/bin/redis-cli shutdown
Restart=always
User=redis
Group=redis

[Install]
WantedBy=multi-user.target

 

사용자를 추가 합니다.

$ sudo adduser --system --group --no-create-home redis
Adding system user `redis' (UID 115) ...
Adding new group `redis' (GID 121) ...
Adding new user `redis' (UID 115) with group `redis' ...
Not creating home directory `/home/redis'.

$ sudo chown redis:redis /etc/redis/6379.conf

 

서비스를 시작합니다.

$ sudo systemctl start redis_6379
$ sudo systemctl status redis_6379
● redis_6379.service - Redis In-Memory Data Store
     Loaded: loaded (/etc/systemd/system/redis_6379.service; disabled; vendo>
     Active: active (running) since Thu 2024-12-26 11:31:07 UTC; 11s ago
   Main PID: 23057 (redis-server)
      Tasks: 5 (limit: 9076)
     Memory: 1.7M
     CGroup: /system.slice/redis_6379.service
             └─23057 /usr/local/bin/redis-server 127.0.0.1:6379

Dec 26 11:31:07 minipc-ubuntu systemd[1]: Started Redis In-Memory Data Store.

 

서비스 재시작을 등록합니다.

$ sudo systemctl enable redis_6379
Created symlink /etc/systemd/system/multi-user.target.wants/redis_6379.service → /etc/systemd/system/redis_6379.service.

$ sudo systemctl status redis_6379
● redis_6379.service - Redis In-Memory Data Store
     Loaded: loaded (/etc/systemd/system/redis_6379.service; enabled; vendor>
     Active: active (running) since Thu 2024-12-26 11:31:07 UTC; 1min 20s ago
   Main PID: 23057 (redis-server)
      Tasks: 5 (limit: 9076)
     Memory: 1.6M
     CGroup: /system.slice/redis_6379.service
             └─23057 /usr/local/bin/redis-server 127.0.0.1:6379

Dec 26 11:31:07 minipc-ubuntu systemd[1]: Started Redis In-Memory Data Store.

참고 문서

 

Install Redis from Source

Compile and install Redis from source

redis.io