
외부 인터넷에 접속할 수 없는 폐쇠망 환경에서는 소스 코드를 사용하여 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
'Software Engineering > Redis' 카테고리의 다른 글
| [Redis] Ubuntu에 apt-get으로 설치한 redis 기본 설정 내용 살펴 보기 (0) | 2025.01.01 |
|---|---|
| [Redis] Ubuntu 환경에서 source code로 설치한 redis 삭제하기 (4) | 2024.12.28 |
| [Redis] Ubuntu 환경에서 Redis 외부 접속 설정하기 (1) | 2024.12.17 |
| [Redis] Ubuntu에 설치된 Redis 삭제하기 (apt-get 사용) (0) | 2024.12.17 |
| [Redis] Ubuntu 환경에서 Redis 설치 방법 (1) | 2024.12.17 |