Skip to content

Commit 65cca73

Browse files
author
Rizal Fauzie Ridwan
committed
initial commit
0 parents  commit 65cca73

File tree

6 files changed

+183
-0
lines changed

6 files changed

+183
-0
lines changed

.gitignore

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
app/laravel-echo-server.json
2+
app/server.sqlite
3+
app/temp*
4+
app/tmp*
5+
app/.env

Dockerfile

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
FROM node:10-alpine
2+
3+
LABEL maintainer="Rizal Fauzie Ridwan <rizal@fauzie.my.id>"
4+
5+
ENV NPM_CONFIG_LOGLEVEL=error
6+
7+
RUN apk add --update --no-cache jq bash sqlite && \
8+
npm install -g laravel-echo-server
9+
10+
COPY app /app
11+
12+
EXPOSE 6001
13+
14+
CMD /app/start.sh

README.md

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
# Laravel Echo Server Docker Image
2+
3+
Ready to use [Laravel Echo Server](https://github.com/tlaverdure/laravel-echo-server) as Docker image. Just pull, add config and run.
4+
5+
### Environment Configurations
6+
7+
| ENV | Default | Description |
8+
| ---------------- | ---------- | -------------------------------------------------------------------- |
9+
| `CLIENT_APP_ID` | random(16) | The authenticated with an API ID |
10+
| `CLIENT_APP_KEY` | random(32) | The authenticated with an API KEY |
11+
| `DATABASE` | `sqlite` | Database used to store data that should persist. `redis` or `sqlite` |
12+
13+
You can also use laravel echo server dotenv configuration for initial setup.
14+
Just map your env file as volume to /app/.env. See: `app/.env.example`
15+
16+
```bash
17+
-v /home/username/.env:/app/.env
18+
```
19+
20+
### Usage
21+
22+
[**Read More Here**](https://github.com/tlaverdure/laravel-echo-server)
23+
24+
---
25+
26+
Crafted by [fauzie](https://github.com/fauzie) with :heart: and :coffee:

app/.env.example

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
LARAVEL_ECHO_SERVER_AUTH_HOST=http://localhost
2+
LARAVEL_ECHO_SERVER_DEBUG=true
3+
LARAVEL_ECHO_SERVER_HOST=localhost
4+
LARAVEL_ECHO_SERVER_PORT=6001
5+
LARAVEL_ECHO_SERVER_REDIS_HOST=
6+
LARAVEL_ECHO_SERVER_REDIS_PORT=6379
7+
LARAVEL_ECHO_SERVER_REDIS_PASSWORD=
8+
LARAVEL_ECHO_SERVER_PROTO=http
9+
LARAVEL_ECHO_SERVER_SSL_CERT=
10+
LARAVEL_ECHO_SERVER_SSL_KEY=
11+
LARAVEL_ECHO_SERVER_SSL_CHAIN=

app/json.tmpl

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
{
2+
"authHost": "LARAVEL_ECHO_SERVER_AUTH_HOST",
3+
"authEndpoint": "LARAVEL_ECHO_AUTH_ENDPOINT",
4+
"clients": [
5+
{
6+
"appId": "CLIENT_APP_ID",
7+
"key": "CLIENT_APP_KEY"
8+
}
9+
],
10+
"database": "DATABASE",
11+
"databaseConfig": {
12+
"redis" : {
13+
"port": "LARAVEL_ECHO_SERVER_REDIS_PORT",
14+
"host": "LARAVEL_ECHO_SERVER_REDIS_HOST"
15+
},
16+
"sqlite": {
17+
"databasePath": "/app/server.sqlite"
18+
}
19+
},
20+
"devMode": "LARAVEL_ECHO_SERVER_DEBUG",
21+
"host": "LARAVEL_ECHO_SERVER_HOST",
22+
"port": "LARAVEL_ECHO_SERVER_PORT",
23+
"protocol": "LARAVEL_ECHO_SERVER_PROTO",
24+
"socketio": {
25+
"cookie": false,
26+
"cookiePath": false
27+
},
28+
"secureOptions": 67108864,
29+
"sslCertPath": "LARAVEL_ECHO_SERVER_SSL_CERT",
30+
"sslKeyPath": "LARAVEL_ECHO_SERVER_SSL_KEY",
31+
"sslCertChainPath": "LARAVEL_ECHO_SERVER_SSL_CHAIN",
32+
"sslPassphrase": "",
33+
"subscribers": {
34+
"http": true,
35+
"redis": true
36+
},
37+
"apiOriginAllow": {
38+
"allowCors": true,
39+
"allowOrigin": "ALLOW_ORIGIN",
40+
"allowMethods": "GET, POST",
41+
"allowHeaders": "Origin, Content-Type, X-Auth-Token, X-Requested-With, Accept, Authorization, X-CSRF-TOKEN, X-Socket-Id"
42+
}
43+
}

app/start.sh

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
#!/bin/bash
2+
3+
set -m
4+
5+
cd $(dirname $0)
6+
7+
if [[ -f ".env" ]]; then
8+
export $(egrep -v '^#' .env | xargs)
9+
fi
10+
11+
if [[ ! -f "laravel-echo-server.json" ]]; then
12+
#
13+
# CONFIGURATION PARAMETERS
14+
#
15+
LARAVEL_ECHO_SERVER_DEBUG=${LARAVEL_ECHO_SERVER_DEBUG:-false}
16+
LARAVEL_ECHO_SERVER_AUTH_HOST=${LARAVEL_ECHO_SERVER_AUTH_HOST:-http://localhost}
17+
LARAVEL_ECHO_AUTH_ENDPOINT=${LARAVEL_ECHO_AUTH_ENDPOINT:-/broadcasting/auth}
18+
19+
RAND_CLIENT_ID=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 16 | head -n 1)
20+
RAND_CLIENT_KEY=$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1)
21+
CLIENT_APP_ID=${CLIENT_APP_ID:-$RAND_CLIENT_ID}
22+
CLIENT_APP_KEY=${CLIENT_APP_KEY:-$RAND_CLIENT_KEY}
23+
24+
DATABASE=${DATABASE:-sqlite}
25+
26+
if [[ -z "${LARAVEL_ECHO_SERVER_REDIS_HOST}" && "${LARAVEL_ECHO_SERVER_REDIS_HOST}" != "" ]]; then
27+
DATABASE=redis
28+
LARAVEL_ECHO_SERVER_REDIS_PORT=${LARAVEL_ECHO_SERVER_REDIS_PORT:-6379}
29+
DATABASE_CMD="del(.databaseConfig.sqlite) | .databaseConfig.redis.host=\"${LARAVEL_ECHO_SERVER_REDIS_HOST}\" | .databaseConfig.redis.port=${LARAVEL_ECHO_SERVER_REDIS_PORT}"
30+
if [[ -n "${LARAVEL_ECHO_SERVER_REDIS_PASSWORD}" ]]; then
31+
DATABASE_CMD="${DATABASE_CMD} | .databaseConfig.redis.options.password=\"${LARAVEL_ECHO_SERVER_REDIS_PASSWORD}\""
32+
fi
33+
if [[ -n "${LARAVEL_ECHO_SERVER_REDIS_DB}" ]]; then
34+
DATABASE_CMD="${DATABASE_CMD} | .databaseConfig.redis.options.db=${LARAVEL_ECHO_SERVER_REDIS_DB}"
35+
fi
36+
else
37+
sqlite3 server.sqlite "create table aTable(field1 int); drop table aTable;"
38+
DATABASE_CMD='del(.databaseConfig.redis) | .subscribers.redis=false'
39+
fi
40+
41+
LARAVEL_ECHO_SERVER_HOST=${LARAVEL_ECHO_SERVER_HOST:-0.0.0.0}
42+
LARAVEL_ECHO_SERVER_PORT=${LARAVEL_ECHO_SERVER_PORT:-6001}
43+
LARAVEL_ECHO_SERVER_PROTO=${LARAVEL_ECHO_SERVER_PROTO:-http}
44+
LARAVEL_ECHO_ALLOW_ORIGIN=${LARAVEL_ECHO_ALLOW_ORIGIN:-*}
45+
46+
LARAVEL_ECHO_SERVER_SSL_CERT=${LARAVEL_ECHO_SERVER_SSL_CERT:-}
47+
LARAVEL_ECHO_SERVER_SSL_KEY=${LARAVEL_ECHO_SERVER_SSL_KEY:-}
48+
LARAVEL_ECHO_SERVER_SSL_CHAIN=${LARAVEL_ECHO_SERVER_SSL_CHAIN:-}
49+
50+
#
51+
# CONFIGURATION MODIFIERS
52+
#
53+
jq -r ".authHost=\"$LARAVEL_ECHO_SERVER_AUTH_HOST\" | .authEndpoint=\"$LARAVEL_ECHO_AUTH_ENDPOINT\" |
54+
.clients[0].appId=\"$CLIENT_APP_ID\" | .clients[0].key=\"$CLIENT_APP_KEY\" |
55+
.database=\"$DATABASE\" | $DATABASE_CMD |
56+
.devMode=$LARAVEL_ECHO_SERVER_DEBUG | .host=\"$LARAVEL_ECHO_SERVER_HOST\" | .port=\"$LARAVEL_ECHO_SERVER_PORT\" | .protocol=\"$LARAVEL_ECHO_SERVER_PROTO\" |
57+
.sslCertPath=\"$LARAVEL_ECHO_SERVER_SSL_CERT\" | .sslKeyPath=\"$LARAVEL_ECHO_SERVER_SSL_KEY\" | .sslCertChainPath=\"$LARAVEL_ECHO_SERVER_SSL_CHAIN\" |
58+
.apiOriginAllow.allowOrigin=\"$LARAVEL_ECHO_ALLOW_ORIGIN\"" json.tmpl > laravel-echo-server.json
59+
60+
echo " "
61+
echo "======================================================="
62+
echo " CONFIGURATION DETAILS"
63+
echo "======================================================="
64+
echo " "
65+
echo " App ID : ${CLIENT_APP_ID}"
66+
echo " App Key : ${CLIENT_APP_KEY}"
67+
echo " Auth : ${LARAVEL_ECHO_SERVER_AUTH_HOST}${LARAVEL_ECHO_AUTH_ENDPOINT}"
68+
echo " "
69+
echo "======================================================="
70+
echo " https://github.com/tlaverdure/laravel-echo-server"
71+
echo " "
72+
echo " "
73+
fi
74+
75+
if [[ "$LARAVEL_ECHO_SERVER_DEBUG" == true ]]; then
76+
export NPM_CONFIG_LOGLEVEL=info
77+
fi
78+
79+
# Start the server
80+
if lsof -Pi :6001 -sTCP:LISTEN -t >/dev/null; then
81+
exec "$@"
82+
else
83+
laravel-echo-server start
84+
fi

0 commit comments

Comments
 (0)