※ 실 서버에 테스트하며 확인한 내용을 토대로 작성함. 참고용으로만 볼 것
관련 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 |
댓글