Compare commits
11 Commits
Author | SHA1 | Date | |
---|---|---|---|
d55c24cfe0 | |||
e2b9e60b36 | |||
47ef821c0f | |||
0f07c8c6ab | |||
af053b4d53 | |||
de69776bc8 | |||
cce94cd210 | |||
ed6a036d8d | |||
3871670c91 | |||
0e93b2e780 | |||
1b5f805195 |
15
app/.dockerignore
Normal file
15
app/.dockerignore
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
**/.env
|
||||||
|
**/*.env
|
||||||
|
**/.env.example
|
||||||
|
**/storage/app/*
|
||||||
|
**/storage/debugbar
|
||||||
|
**/storage/framework/cache/*
|
||||||
|
**/storage/framework/sessions/*
|
||||||
|
**/storage/framework/views/*
|
||||||
|
**/storage/framework/testing/*
|
||||||
|
**/storage/logs/*
|
||||||
|
**/vendor/
|
||||||
|
**/node_modules/
|
||||||
|
**/public/build/
|
||||||
|
**/public/storage
|
||||||
|
|
15
app/application/package-lock.json
generated
15
app/application/package-lock.json
generated
@ -15,7 +15,6 @@
|
|||||||
"sass": "^1.47.0",
|
"sass": "^1.47.0",
|
||||||
"simplebar": "^5.3.4",
|
"simplebar": "^5.3.4",
|
||||||
"smooth-scroll": "^16.1.3",
|
"smooth-scroll": "^16.1.3",
|
||||||
"sweetalert2": "^11.0.18",
|
|
||||||
"vanillajs-datepicker": "^1.2.0",
|
"vanillajs-datepicker": "^1.2.0",
|
||||||
"waypoints": "^4.0.1"
|
"waypoints": "^4.0.1"
|
||||||
},
|
},
|
||||||
@ -1659,15 +1658,6 @@
|
|||||||
"url": "https://github.com/chalk/supports-color?sponsor=1"
|
"url": "https://github.com/chalk/supports-color?sponsor=1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/sweetalert2": {
|
|
||||||
"version": "11.7.12",
|
|
||||||
"resolved": "https://registry.npmjs.org/sweetalert2/-/sweetalert2-11.7.12.tgz",
|
|
||||||
"integrity": "sha512-TQJy8mQymJLzqWPQOMQErd81Zd/rSYr0UL4pEc7bqEihtjS+zt7LWJXLhfPp93e+Hf3Z2FHMB6QGNskAMCsdTg==",
|
|
||||||
"funding": {
|
|
||||||
"type": "individual",
|
|
||||||
"url": "https://github.com/sponsors/limonte"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/tapable": {
|
"node_modules/tapable": {
|
||||||
"version": "2.2.1",
|
"version": "2.2.1",
|
||||||
"resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
|
"resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
|
||||||
@ -3050,11 +3040,6 @@
|
|||||||
"has-flag": "^4.0.0"
|
"has-flag": "^4.0.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"sweetalert2": {
|
|
||||||
"version": "11.7.12",
|
|
||||||
"resolved": "https://registry.npmjs.org/sweetalert2/-/sweetalert2-11.7.12.tgz",
|
|
||||||
"integrity": "sha512-TQJy8mQymJLzqWPQOMQErd81Zd/rSYr0UL4pEc7bqEihtjS+zt7LWJXLhfPp93e+Hf3Z2FHMB6QGNskAMCsdTg=="
|
|
||||||
},
|
|
||||||
"tapable": {
|
"tapable": {
|
||||||
"version": "2.2.1",
|
"version": "2.2.1",
|
||||||
"resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
|
"resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz",
|
||||||
|
@ -15,7 +15,6 @@
|
|||||||
"sass": "^1.47.0",
|
"sass": "^1.47.0",
|
||||||
"simplebar": "^5.3.4",
|
"simplebar": "^5.3.4",
|
||||||
"smooth-scroll": "^16.1.3",
|
"smooth-scroll": "^16.1.3",
|
||||||
"sweetalert2": "^11.0.18",
|
|
||||||
"vanillajs-datepicker": "^1.2.0",
|
"vanillajs-datepicker": "^1.2.0",
|
||||||
"waypoints": "^4.0.1"
|
"waypoints": "^4.0.1"
|
||||||
},
|
},
|
||||||
|
@ -23,8 +23,8 @@
|
|||||||
<form method="post" action="{{ route('profile.update-password') }}">
|
<form method="post" action="{{ route('profile.update-password') }}">
|
||||||
@csrf
|
@csrf
|
||||||
@method('PUT')
|
@method('PUT')
|
||||||
<x-private.forms.input :title="__('validation.attributes.password')" name="password" type="password" required />
|
<x-private.forms.input :title="__('validation.attributes.password')" name="password" type="password" autocomplete="off" required />
|
||||||
<x-private.forms.input :title="__('validation.attributes.password_confirmation')" name="password_confirmation" type="password" required />
|
<x-private.forms.input :title="__('validation.attributes.password_confirmation')" name="password_confirmation" autocomplete="off" type="password" required />
|
||||||
<button class="btn btn-primary" type="submit">{{ __('Save') }}</button>
|
<button class="btn btn-primary" type="submit">{{ __('Save') }}</button>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
|
@ -37,7 +37,7 @@
|
|||||||
<span class="input-group-text" id="basic-addon2">
|
<span class="input-group-text" id="basic-addon2">
|
||||||
<svg class="icon icon-xs text-gray-600" fill="currentColor" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" d="M5 9V7a5 5 0 0110 0v2a2 2 0 012 2v5a2 2 0 01-2 2H5a2 2 0 01-2-2v-5a2 2 0 012-2zm8-2v2H7V7a3 3 0 016 0z" clip-rule="evenodd"></path></svg>
|
<svg class="icon icon-xs text-gray-600" fill="currentColor" viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path fill-rule="evenodd" d="M5 9V7a5 5 0 0110 0v2a2 2 0 012 2v5a2 2 0 01-2 2H5a2 2 0 01-2-2v-5a2 2 0 012-2zm8-2v2H7V7a3 3 0 016 0z" clip-rule="evenodd"></path></svg>
|
||||||
</span>
|
</span>
|
||||||
<input type="password" name="password" placeholder="Password" @demo value="{{ config('app.demo_password', null) }}" @endif class="form-control" id="password" required>
|
<input type="password" name="password" placeholder="Password" @demo value="{{ config('app.demo_password', null) }}" @endif class="form-control" id="password" autocomplete="off" required>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<!-- End of Form -->
|
<!-- End of Form -->
|
||||||
|
@ -19,51 +19,9 @@
|
|||||||
const d = document;
|
const d = document;
|
||||||
|
|
||||||
import * as bootstrap from 'bootstrap';
|
import * as bootstrap from 'bootstrap';
|
||||||
import Swal from 'sweetalert2';
|
|
||||||
import SmoothScroll from 'smooth-scroll';
|
import SmoothScroll from 'smooth-scroll';
|
||||||
|
|
||||||
d.addEventListener("DOMContentLoaded", function(event) {
|
d.addEventListener("DOMContentLoaded", function(event) {
|
||||||
|
|
||||||
const swalWithBootstrapButtons = Swal.mixin({
|
|
||||||
customClass: {
|
|
||||||
confirmButton: 'btn btn-primary me-3',
|
|
||||||
cancelButton: 'btn btn-gray'
|
|
||||||
},
|
|
||||||
buttonsStyling: false
|
|
||||||
});
|
|
||||||
|
|
||||||
var themeSettingsEl = document.getElementById('theme-settings');
|
|
||||||
var themeSettingsExpandEl = document.getElementById('theme-settings-expand');
|
|
||||||
|
|
||||||
if(themeSettingsEl) {
|
|
||||||
|
|
||||||
var themeSettingsCollapse = new bootstrap.Collapse(themeSettingsEl, {
|
|
||||||
show: true,
|
|
||||||
toggle: false
|
|
||||||
});
|
|
||||||
|
|
||||||
if (window.localStorage.getItem('settings_expanded') === 'true') {
|
|
||||||
themeSettingsCollapse.show();
|
|
||||||
themeSettingsExpandEl.classList.remove('show');
|
|
||||||
} else {
|
|
||||||
themeSettingsCollapse.hide();
|
|
||||||
themeSettingsExpandEl.classList.add('show');
|
|
||||||
}
|
|
||||||
|
|
||||||
themeSettingsEl.addEventListener('hidden.bs.collapse', function () {
|
|
||||||
themeSettingsExpandEl.classList.add('show');
|
|
||||||
window.localStorage.setItem('settings_expanded', false);
|
|
||||||
});
|
|
||||||
|
|
||||||
themeSettingsExpandEl.addEventListener('click', function () {
|
|
||||||
themeSettingsExpandEl.classList.remove('show');
|
|
||||||
window.localStorage.setItem('settings_expanded', true);
|
|
||||||
setTimeout(function() {
|
|
||||||
themeSettingsCollapse.show();
|
|
||||||
}, 300);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// options
|
// options
|
||||||
const breakpoints = {
|
const breakpoints = {
|
||||||
sm: 540,
|
sm: 540,
|
||||||
@ -82,13 +40,6 @@ d.addEventListener("DOMContentLoaded", function(event) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
var iconNotifications = d.querySelector('.notification-bell');
|
|
||||||
if (iconNotifications) {
|
|
||||||
iconNotifications.addEventListener('shown.bs.dropdown', function () {
|
|
||||||
iconNotifications.classList.remove('unread');
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
[].slice.call(d.querySelectorAll('[data-background]')).map(function(el) {
|
[].slice.call(d.querySelectorAll('[data-background]')).map(function(el) {
|
||||||
el.style.background = 'url(' + el.getAttribute('data-background') + ')';
|
el.style.background = 'url(' + el.getAttribute('data-background') + ')';
|
||||||
});
|
});
|
||||||
@ -129,68 +80,6 @@ d.addEventListener("DOMContentLoaded", function(event) {
|
|||||||
});
|
});
|
||||||
})
|
})
|
||||||
|
|
||||||
if(d.querySelector('.input-slider-container')) {
|
|
||||||
[].slice.call(d.querySelectorAll('.input-slider-container')).map(function(el) {
|
|
||||||
var slider = el.querySelector(':scope .input-slider');
|
|
||||||
var sliderId = slider.getAttribute('id');
|
|
||||||
var minValue = slider.getAttribute('data-range-value-min');
|
|
||||||
var maxValue = slider.getAttribute('data-range-value-max');
|
|
||||||
|
|
||||||
var sliderValue = el.querySelector(':scope .range-slider-value');
|
|
||||||
var sliderValueId = sliderValue.getAttribute('id');
|
|
||||||
var startValue = sliderValue.getAttribute('data-range-value-low');
|
|
||||||
|
|
||||||
var c = d.getElementById(sliderId),
|
|
||||||
id = d.getElementById(sliderValueId);
|
|
||||||
|
|
||||||
noUiSlider.create(c, {
|
|
||||||
start: [parseInt(startValue)],
|
|
||||||
connect: [true, false],
|
|
||||||
//step: 1000,
|
|
||||||
range: {
|
|
||||||
'min': [parseInt(minValue)],
|
|
||||||
'max': [parseInt(maxValue)]
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (d.getElementById('input-slider-range')) {
|
|
||||||
var c = d.getElementById("input-slider-range"),
|
|
||||||
low = d.getElementById("input-slider-range-value-low"),
|
|
||||||
e = d.getElementById("input-slider-range-value-high"),
|
|
||||||
f = [d, e];
|
|
||||||
|
|
||||||
noUiSlider.create(c, {
|
|
||||||
start: [parseInt(low.getAttribute('data-range-value-low')), parseInt(e.getAttribute('data-range-value-high'))],
|
|
||||||
connect: !0,
|
|
||||||
tooltips: true,
|
|
||||||
range: {
|
|
||||||
min: parseInt(c.getAttribute('data-range-value-min')),
|
|
||||||
max: parseInt(c.getAttribute('data-range-value-max'))
|
|
||||||
}
|
|
||||||
}), c.noUiSlider.on("update", function (a, b) {
|
|
||||||
f[b].textContent = a[b]
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
if (d.getElementById('loadOnClick')) {
|
|
||||||
d.getElementById('loadOnClick').addEventListener('click', function () {
|
|
||||||
var button = this;
|
|
||||||
var loadContent = d.getElementById('extraContent');
|
|
||||||
var allLoaded = d.getElementById('allLoadedText');
|
|
||||||
|
|
||||||
button.classList.add('btn-loading');
|
|
||||||
button.setAttribute('disabled', 'true');
|
|
||||||
|
|
||||||
setTimeout(function () {
|
|
||||||
loadContent.style.display = 'block';
|
|
||||||
button.style.display = 'none';
|
|
||||||
allLoaded.style.display = 'block';
|
|
||||||
}, 1500);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
var scroll = new SmoothScroll('a[href*="#"]', {
|
var scroll = new SmoothScroll('a[href*="#"]', {
|
||||||
speed: 500,
|
speed: 500,
|
||||||
speedAsDuration: true
|
speedAsDuration: true
|
||||||
@ -199,68 +88,4 @@ d.addEventListener("DOMContentLoaded", function(event) {
|
|||||||
if(d.querySelector('.current-year')){
|
if(d.querySelector('.current-year')){
|
||||||
d.querySelector('.current-year').textContent = new Date().getFullYear();
|
d.querySelector('.current-year').textContent = new Date().getFullYear();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Glide JS
|
|
||||||
|
|
||||||
if (d.querySelector('.glide')) {
|
|
||||||
new Glide('.glide', {
|
|
||||||
type: 'carousel',
|
|
||||||
startAt: 0,
|
|
||||||
perView: 3
|
|
||||||
}).mount();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (d.querySelector('.glide-testimonials')) {
|
|
||||||
new Glide('.glide-testimonials', {
|
|
||||||
type: 'carousel',
|
|
||||||
startAt: 0,
|
|
||||||
perView: 1,
|
|
||||||
autoplay: 2000
|
|
||||||
}).mount();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (d.querySelector('.glide-clients')) {
|
|
||||||
new Glide('.glide-clients', {
|
|
||||||
type: 'carousel',
|
|
||||||
startAt: 0,
|
|
||||||
perView: 5,
|
|
||||||
autoplay: 2000
|
|
||||||
}).mount();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (d.querySelector('.glide-news-widget')) {
|
|
||||||
new Glide('.glide-news-widget', {
|
|
||||||
type: 'carousel',
|
|
||||||
startAt: 0,
|
|
||||||
perView: 1,
|
|
||||||
autoplay: 2000
|
|
||||||
}).mount();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (d.querySelector('.glide-autoplay')) {
|
|
||||||
new Glide('.glide-autoplay', {
|
|
||||||
type: 'carousel',
|
|
||||||
startAt: 0,
|
|
||||||
perView: 3,
|
|
||||||
autoplay: 2000
|
|
||||||
}).mount();
|
|
||||||
}
|
|
||||||
|
|
||||||
// Pricing countup
|
|
||||||
var billingSwitchEl = d.getElementById('billingSwitch');
|
|
||||||
if(billingSwitchEl) {
|
|
||||||
const countUpStandard = new countUp.CountUp('priceStandard', 99, { startVal: 199 });
|
|
||||||
const countUpPremium = new countUp.CountUp('pricePremium', 199, { startVal: 299 });
|
|
||||||
|
|
||||||
billingSwitchEl.addEventListener('change', function() {
|
|
||||||
if(billingSwitch.checked) {
|
|
||||||
countUpStandard.start();
|
|
||||||
countUpPremium.start();
|
|
||||||
} else {
|
|
||||||
countUpStandard.reset();
|
|
||||||
countUpPremium.reset();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
});
|
});
|
||||||
|
@ -1,8 +0,0 @@
|
|||||||
**/*.env
|
|
||||||
**/*.env.example
|
|
||||||
application/bootstrap/cache/*
|
|
||||||
application/storage/**
|
|
||||||
application/vendor/**
|
|
||||||
application/node_modules/**
|
|
||||||
application/public/build/**
|
|
||||||
application/public/storage
|
|
@ -103,6 +103,7 @@ php artisan config:cache
|
|||||||
php artisan event:cache
|
php artisan event:cache
|
||||||
php artisan route:cache
|
php artisan route:cache
|
||||||
php artisan view:cache
|
php artisan view:cache
|
||||||
|
php artisan storage:link
|
||||||
if [ "$role" = "app" ]; then
|
if [ "$role" = "app" ]; then
|
||||||
php artisan migrate --force
|
php artisan migrate --force
|
||||||
fi
|
fi
|
||||||
|
@ -5,7 +5,10 @@ if [ "$role" = "app" ]; then
|
|||||||
exec unitd --no-daemon --control unix:/var/run/control.unit.sock --user unit --group unit
|
exec unitd --no-daemon --control unix:/var/run/control.unit.sock --user unit --group unit
|
||||||
elif [ "$role" = "queue" ]; then
|
elif [ "$role" = "queue" ]; then
|
||||||
echo "Running the queue..."
|
echo "Running the queue..."
|
||||||
php /var/www/html/artisan queue:work --verbose --sleep=5 --tries=10
|
while [ true ]
|
||||||
|
do
|
||||||
|
php /var/www/html/artisan queue:work --verbose --sleep=5 --tries=10 --max-time=3600
|
||||||
|
done
|
||||||
elif [ "$role" = "websockets" ]; then
|
elif [ "$role" = "websockets" ]; then
|
||||||
echo "Running the websockets..."
|
echo "Running the websockets..."
|
||||||
php /var/www/html/artisan reverb:start --port=9000
|
php /var/www/html/artisan reverb:start --port=9000
|
||||||
|
@ -5,7 +5,10 @@ if [ "$role" = "app" ]; then
|
|||||||
exec unitd --no-daemon --control unix:/var/run/control.unit.sock --user unit --group unit
|
exec unitd --no-daemon --control unix:/var/run/control.unit.sock --user unit --group unit
|
||||||
elif [ "$role" = "queue" ]; then
|
elif [ "$role" = "queue" ]; then
|
||||||
echo "Running the queue..."
|
echo "Running the queue..."
|
||||||
|
while [ true ]
|
||||||
|
do
|
||||||
php /var/www/html/artisan queue:work --verbose --sleep=5 --tries=10 --max-time=3600
|
php /var/www/html/artisan queue:work --verbose --sleep=5 --tries=10 --max-time=3600
|
||||||
|
done
|
||||||
elif [ "$role" = "websockets" ]; then
|
elif [ "$role" = "websockets" ]; then
|
||||||
echo "Running the websockets..."
|
echo "Running the websockets..."
|
||||||
php /var/www/html/artisan reverb:start --port=9000
|
php /var/www/html/artisan reverb:start --port=9000
|
||||||
|
@ -28,6 +28,9 @@ services:
|
|||||||
- redis
|
- redis
|
||||||
- reverb
|
- reverb
|
||||||
env_file: app/application/.env
|
env_file: app/application/.env
|
||||||
|
environment:
|
||||||
|
CONTAINER_ROLE: app
|
||||||
|
UNIT_SOURCE: '["172.16.0.0/12"]'
|
||||||
queue:
|
queue:
|
||||||
build:
|
build:
|
||||||
context: app
|
context: app
|
||||||
@ -80,6 +83,8 @@ services:
|
|||||||
redis:
|
redis:
|
||||||
image: redis:3.0-alpine
|
image: redis:3.0-alpine
|
||||||
# restart: always
|
# restart: always
|
||||||
|
volumes:
|
||||||
|
- ./redis/data:/data
|
||||||
db:
|
db:
|
||||||
image: docker.io/mysql:8.0.33
|
image: docker.io/mysql:8.0.33
|
||||||
command: --default-authentication-plugin=mysql_native_password
|
command: --default-authentication-plugin=mysql_native_password
|
||||||
|
@ -11,15 +11,18 @@ services:
|
|||||||
ports:
|
ports:
|
||||||
- ${DOCKER_NGINX_PORT}:80
|
- ${DOCKER_NGINX_PORT}:80
|
||||||
app:
|
app:
|
||||||
image: korelf/service-captcha:0.8.0
|
image: korelf/service-captcha:0.8.2
|
||||||
# restart: always
|
# restart: always
|
||||||
depends_on:
|
depends_on:
|
||||||
- db
|
- db
|
||||||
- redis
|
- redis
|
||||||
- reverb
|
- reverb
|
||||||
env_file: app/.env
|
env_file: app/.env
|
||||||
|
environment:
|
||||||
|
CONTAINER_ROLE: app
|
||||||
|
UNIT_SOURCE: '["172.16.0.0/12"]'
|
||||||
queue:
|
queue:
|
||||||
image: korelf/service-captcha:0.8.0
|
image: korelf/service-captcha:0.8.2
|
||||||
# restart: always
|
# restart: always
|
||||||
depends_on:
|
depends_on:
|
||||||
- db
|
- db
|
||||||
@ -28,7 +31,7 @@ services:
|
|||||||
CONTAINER_ROLE: queue
|
CONTAINER_ROLE: queue
|
||||||
env_file: app/.env
|
env_file: app/.env
|
||||||
reverb:
|
reverb:
|
||||||
image: korelf/service-captcha:0.8.0
|
image: korelf/service-captcha:0.8.2
|
||||||
# restart: always
|
# restart: always
|
||||||
depends_on:
|
depends_on:
|
||||||
- db
|
- db
|
||||||
@ -39,7 +42,7 @@ services:
|
|||||||
ports:
|
ports:
|
||||||
- ${DOCKER_WEBSOCKET_PORT}:9000
|
- ${DOCKER_WEBSOCKET_PORT}:9000
|
||||||
scheduler:
|
scheduler:
|
||||||
image: korelf/service-captcha:0.8.0
|
image: korelf/service-captcha:0.8.2
|
||||||
# restart: always
|
# restart: always
|
||||||
depends_on:
|
depends_on:
|
||||||
- db
|
- db
|
||||||
@ -50,6 +53,8 @@ services:
|
|||||||
redis:
|
redis:
|
||||||
image: redis:3.0-alpine
|
image: redis:3.0-alpine
|
||||||
# restart: always
|
# restart: always
|
||||||
|
volumes:
|
||||||
|
- ./redis/data:/data
|
||||||
swagger:
|
swagger:
|
||||||
image: swaggerapi/swagger-ui
|
image: swaggerapi/swagger-ui
|
||||||
depends_on:
|
depends_on:
|
||||||
|
@ -62,6 +62,8 @@ services:
|
|||||||
- ./app/application:/var/www/html
|
- ./app/application:/var/www/html
|
||||||
redis:
|
redis:
|
||||||
image: redis:3.0-alpine
|
image: redis:3.0-alpine
|
||||||
|
volumes:
|
||||||
|
- ./redis/data:/data
|
||||||
db:
|
db:
|
||||||
image: mysql:8.0.33
|
image: mysql:8.0.33
|
||||||
command: --default-authentication-plugin=mysql_native_password
|
command: --default-authentication-plugin=mysql_native_password
|
||||||
|
1
redis/.gitignore
vendored
Normal file
1
redis/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
data/
|
Loading…
Reference in New Issue
Block a user