본문 바로가기
Server/PHP

[Laravel] laravel-echo-server pm2 - 새로운 라라벨 Socket 구조

by 얽디 2025. 4. 11.

※ 실 서버에 테스트하며 확인한 내용을 토대로 작성함. 참고용으로만 볼 것

 

관련 npm 모듈 ( 리스트 중 << 표기)

[root@hagorud-web-L laravel]# npm list
hagorud@ /home/laravel
├── @tailwindcss/cli@4.0.9
├── axios@1.7.7
├── daisyui@5.0.0
├── forever@4.0.3
├── laravel-echo@1.16.1 <<
├── laravel-vite-plugin@1.2.0 << 
├── lodash@4.17.21
├── pm2@5.4.3 << // 스케쥴링(관리) 모듈 **
├── postcss@8.5.3
├── run@1.5.0 << 
├── socket.io-client@4.8.1 << 
├── [socket.io](<http://socket.io/>)@4.8.1 <<
├── tailwindcss@4.0.9
└── vite@6.2.0 <<

표기된 모듈이 없다면 설치 진행.

변경된 부분

  • 기존 방식과 다르게 서버 담당 엔지니어가 npm 모듈을 설치하는게 아닌 소스코드상에 node_module 폴더에서 npm파일이 관리된다.
  • 엔지니어가 서버에서 직접 설치하더라도 개발자가 git 배포 시 리셋되거나 변경됨.

httpd.d/ssl.conf 설정 추가사항

...
RewriteEngine on
RewriteCond %{REQUEST_URI}  ^/socket.io            [NC]
RewriteCond %{QUERY_STRING} transport=websocket    [NC]
RewriteRule /(.*)           ws://localhost:6001/$1 [P,L]
ProxyRequests Off
ProxyPass        /socket.io <http://localhost:6001/socket.io>
ProxyPassReverse /socket.io <http://localhost:6001/socket.io>
...

위 설정이 추가됨.

추가해주어야함.

laravel-echo-server

WebSockets을 활용한 실시간 기능을 Laravel 애플리케이션에서 쉽게 구현할 수 있도록 도와주는 툴

laravel-echo-server 실행되어야 socket이 활성화된다.

redis서버와 연동하며 laravel-echo-server.json에 DB 정보를 가지게 된다.

DB 정보가 수정되는 경우 해당 파일도 수정해야함.

 

laravel-echo-server 설정은 소스코드 디렉토리에 json파일로 이미 있다. 별도 설정을 진행하지 않아도 됨.

 [root@hagorud-web-L hagorud]# laravel-echo-server start

L A R A V E L  E C H O  S E R V E R

version 1.6.3

⚠ Starting server in DEV mode...

✔  Running at 127.0.0.1 on port 6001
✔  Channels are ready.
✔  Listening for http events...
✔  Listening for redis events...

Server ready!

실행 시 백그라운드 실행이 아니여서 ctrl C로 진행해야 나가짐. 허나 종료된다.

  • 명령어
초기화 (쓰면안됨)

laravel-echo-server init 
실행
laravel-echo-server start
종료 
laravel-echo-server stop

pm2 설정

pm2 : nodejs process manager (node.js 프로그램 관리 툴)

laravel-echo-server를 실행시키고 서버 부팅 시 자동으로 돌게하는 모듈.

만약 서버를 새로 구축했을 시 list가 안보인다.

허나 설정값은 echo-server와 동일하게 json파일로 저장되어 있으며 불러온 후 저장, 부팅시 실행하면 된다.

설정파일 불러오기

root@hagorud-web-L hagorud]# pm2 start echo-pm2.json 
[PM2][WARN] Applications laravel-echo-server not running, starting...
[PM2] App [laravel-echo-server] launched (1 instances)
┌────┬────────────────────┬──────────┬──────┬───────────┬──────────┬──────────┐
│ id │ name               │ mode     │ ↺    │ status    │ cpu      │ memory   │
├────┼────────────────────┼──────────┼──────┼───────────┼──────────┼──────────┤
│ 0  │ laravel-echo-serv… │ fork     │ 0    │ online    │ 0%       │ 26.1mb   │
└────┴────────────────────┴──────────┴──────┴───────────┴──────────┴──────────┘

설정파일 저장, 부팅시 실행 설정

[root@hagorud-web-L hagorud]# pm2 save
[PM2] Saving current process list...
[PM2] Successfully saved in /root/.pm2/dump.pm2

[root@hagorud-web-L hagorud]# pm2 startup
[PM2] Init System found: systemd
Platform systemd
Template
[Unit]
Description=PM2 process manager
Documentation=https://pm2.keymetrics.io/
After=network.target

[Service]
Type=forking
User=root
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
Environment=PATH=/root/.nvm/versions/node/v20.9.0/bin:/root/.local/bin:/root/bin:/usr/local/sbin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
Environment=PM2_HOME=/root/.pm2
PIDFile=/root/.pm2/pm2.pid
Restart=on-failure

ExecStart=/root/.nvm/versions/node/v20.9.0/lib/node_modules/pm2/bin/pm2 resurrect
ExecReload=/root/.nvm/versions/node/v20.9.0/lib/node_modules/pm2/bin/pm2 reload all
ExecStop=/root/.nvm/versions/node/v20.9.0/lib/node_modules/pm2/bin/pm2 kill

[Install]
WantedBy=multi-user.target

Target path
/etc/systemd/system/pm2-root.service
Command list
[ 'systemctl enable pm2-root' ]
[PM2] Writing init configuration in /etc/systemd/system/pm2-root.service
[PM2] Making script booting at startup...
[PM2] [-] Executing: systemctl enable pm2-root...
[PM2] [v] Command successfully executed.
+---------------------------------------+
[PM2] Freeze a process list on reboot via:
$ pm2 save

[PM2] Remove init script via:
$ pm2 unstartup systemd

확인

[root@hagorud-web-L hagorud]# pm2 list
┌────┬────────────────────┬──────────┬──────┬───────────┬──────────┬──────────┐
│ id │ name               │ mode     │ ↺    │ status    │ cpu      │ memory   │
├────┼────────────────────┼──────────┼──────┼───────────┼──────────┼──────────┤
│ 0  │ laravel-echo-serv… │ fork     │ 0    │ online    │ 0%       │ 77.4mb   │
└────┴────────────────────┴──────────┴──────┴───────────┴──────────┴──────────┘
[root@iwinv-web-L iwinv]# netstat -nltp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    

tcp        0      0 127.0.0.1:6001          0.0.0.0:*               LISTEN      4995/laravel-echo-s

vite

vite.config.js은 기존 server.xml이다. ssl 인증 작업을 해주어야 하며 추후 iwinv.kr로 전환 시 확인하여 수정해야한다.

 

vite.config.js 확인 명령어

라라벨 디렉토리로 이동 후 명령어 진행

cd /home/hagorud
npm run dev

 

위 사진처럼 정상 출력 시 문제 없음.

구조 정리

+-------------------+     +------------------------+     +----------------+
|   클라이언트      | --> |    Laravel 서버        | --> | Redis (Pub/Sub)|
| (Vue/React + Vite)|     |   (Broadcast 이벤트)   |     |  (이벤트 브로커)|
+-------------------+     +------------------------+     +----------------+
|                                |                          |
|                                |                          |
v                                v                          v
+-------------------+     +------------------------+     +----------------+
| Laravel Echo 서버 | <-- |   PM2로 관리되는 프로세스 | <-- | Redis (구독)   |
|   ([Socket.io](<http://socket.io/>))    |     | (Queue Worker, Echo 등) |     | (Pub/Sub 방식)  |
+-------------------+     +------------------------+     +----------------+
|
|
v
+-------------------+
|  클라이언트 (HMR) |
|   WebSocket 통신 |
+-------------------+

구성 요소 역할

Vite (프론트엔드 개발 빌드 툴) 개발 환경에서 빠른 번들링 및 HMR 지원
클라이언트 (Vue/React) Laravel Echo + Socket.io를 사용하여 WebSocket 데이터 수신
Laravel 서버 이벤트 발생 시 Redis를 통해 메시지 브로드캐스트
Redis Pub/Sub 방식으로 Laravel 이벤트를 Laravel Echo Server로 전달
Laravel Echo Server WebSocket을 관리하고 클라이언트와 실시간 데이터 통신
PM2 Laravel Echo Server와 Queue Worker를 백그라운드에서 안정적으로 실행 및 관리

'Server > PHP' 카테고리의 다른 글

php 업로드 용량 설정  (0) 2021.12.20
PHP <? 코드를 사용할수 있게 설정  (0) 2021.11.07
PHP 에러코드 On/Off 설정  (0) 2021.11.07

댓글