v1.0
This commit is contained in:
commit
407859b310
6
.env.dist
Normal file
6
.env.dist
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
# must be the same that SITE_VERSION define in php-fpm/.env
|
||||||
|
DOCKER_IMAGE_VERSION="3.25"
|
||||||
|
# docker image tag = DOCKER_IMAGE_VERSION
|
||||||
|
DOCKER_IMAGE=gmouchet/wwwgmo-php-fpm
|
||||||
|
NGINX_PORT=8085
|
||||||
|
PMA_PORT_WEB=8084
|
||||||
5
.gitignore
vendored
Normal file
5
.gitignore
vendored
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
**/vendor
|
||||||
|
**/certs/*
|
||||||
|
.env
|
||||||
|
helm-old
|
||||||
|
mariadb-old
|
||||||
5
.vscode/settings.json
vendored
Normal file
5
.vscode/settings.json
vendored
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"editor.fontSize": 13,
|
||||||
|
"terminal.integrated.fontSize": 13,
|
||||||
|
"window.zoomLevel": 1.4,
|
||||||
|
}
|
||||||
212
README.md
Normal file
212
README.md
Normal file
@ -0,0 +1,212 @@
|
|||||||
|
# wwwgmo stack
|
||||||
|
## Description
|
||||||
|
Examples site with nginx, phpfpm, mysql, phpmyadmin, elasticsearch and kibana
|
||||||
|
## Build environment
|
||||||
|
|
||||||
|
|**folders**|**description**|
|
||||||
|
|:---|:---|
|
||||||
|
|docker.sh|files to build the docker image|
|
||||||
|
|docker/mariadb|env file|
|
||||||
|
|docker/nginx|config file|
|
||||||
|
|docker/php-fpm|files to create docker image|
|
||||||
|
|src|site source|
|
||||||
|
|
||||||
|
## Docker
|
||||||
|
### Global environment variables
|
||||||
|
|
||||||
|
Copy file ALL `.env.dist` to `.env`
|
||||||
|
Complete or modify the values according to your needs
|
||||||
|
|
||||||
|
### Build
|
||||||
|
#### Install plugin php for elasticsearch
|
||||||
|
|
||||||
|
./docker.sh install
|
||||||
|
|
||||||
|
#### Build image
|
||||||
|
|
||||||
|
./docker.sh build
|
||||||
|
or
|
||||||
|
|
||||||
|
./docker.sh build-no-cache
|
||||||
|
|
||||||
|
### Start
|
||||||
|
|
||||||
|
./docker.sh start
|
||||||
|
|
||||||
|
#### Check
|
||||||
|
|
||||||
|
docker exec wwwgmo-mariadb mysql -uroot -p<MYSQL_ROOT_PASSWORD> mysql -e 'SELECT user,host FROM mysql.user;'
|
||||||
|
|
||||||
|
docker exec wwwgmo-elasticsearch curl -u elastic:<ELASTIC_PASSWORD> http://wwwgmo-elasticsearch:9200/_cluster/health?pretty
|
||||||
|
|
||||||
|
docker exec wwwgmo-php-fpm curl -s -u elastic:<ELASTIC_PASSWORD> http://wwwgmo-elasticsearch:9200/_cluster/health?pretty
|
||||||
|
|
||||||
|
#### Access
|
||||||
|
|
||||||
|
http://<server_name>:<NGINX_PORT>
|
||||||
|
|
||||||
|
## kubernetes
|
||||||
|
|
||||||
|
|**folders**|**description**|
|
||||||
|
|:---|:---|
|
||||||
|
|deploy.sh|files to deploy on k8s or k3s (see ./deploy.s -h)|
|
||||||
|
|helm|Chart root folder|
|
||||||
|
|Chart.yaml|Charts file|
|
||||||
|
|values-configs.yml|configs file use for kubernetes manifest|
|
||||||
|
|values-secrets.yaml|secrets file for kubernetes manifet (Must be encrypted with sops in a production environment)|
|
||||||
|
|templates/elasticsearch|manifests for elasticsearch|
|
||||||
|
|templates/kibana|manifests for kibana|
|
||||||
|
|templates/mariadb|manifests for mariadb|
|
||||||
|
|templates/phpmyadmin|manifests for phpmyadmin|
|
||||||
|
|templates/php-fpm|manifest for php-fpm|
|
||||||
|
|
||||||
|
### Secret registry (regcred)
|
||||||
|
|
||||||
|
You need credential to pull an image from private registry.
|
||||||
|
|
||||||
|
Create or modify the secret
|
||||||
|
```
|
||||||
|
kubectl create secret docker-registry secret-regcred --dry-run \
|
||||||
|
--docker-server=https://index.docker.io/v1/ \
|
||||||
|
--docker-username=<username> \
|
||||||
|
--docker-password=<secret> \
|
||||||
|
--docker-email=<adress@sample.com> -o yaml > helm/template/site/secret-regcred.yaml
|
||||||
|
```
|
||||||
|
### Certificats
|
||||||
|
|
||||||
|
cat certs/gmolab.net.key | base64 -w0
|
||||||
|
|
||||||
|
copy the base64 result into file `values-secrets-kXs.yaml` in ssl_key key
|
||||||
|
|
||||||
|
cat certs/gmolab.net.crt | base64 -w0
|
||||||
|
|
||||||
|
copy the base64 result into file `values-config-kXs.yaml` in ssl_crt key
|
||||||
|
|
||||||
|
### Docker image version
|
||||||
|
|
||||||
|
In the `helm/Chart.yaml` file, the `appVersion` value must match the version of the docker image (see DOCKER_IMAGE_VERSION in the `.env` file and SITE_VERSION in the `docker/php-fpm/.env` file)
|
||||||
|
|
||||||
|
## Deployment by script
|
||||||
|
|
||||||
|
This is the recommended way
|
||||||
|
|
||||||
|
>This script builds the docker image based on the Kubernetes VM architecture (AMD64 or ARM64). At each deployment the minor version of the image is incremented by 1.
|
||||||
|
|
||||||
|
./deploy.md -n wwwgmo -k k3s
|
||||||
|
|
||||||
|
## Manual deployment
|
||||||
|
### Set kubesystem config
|
||||||
|
|
||||||
|
rm -f $HOST/.kube/config
|
||||||
|
|
||||||
|
for **k3s**
|
||||||
|
|
||||||
|
ln -s $HOST/.kube/k3s $HOST/.kube/config
|
||||||
|
|
||||||
|
for **k8s**
|
||||||
|
|
||||||
|
ln -s $HOST/.kube/k8s $HOST/.kube/config
|
||||||
|
|
||||||
|
### Set namespace and kube system
|
||||||
|
|
||||||
|
export NS=wwwgmo
|
||||||
|
export KUBE_SYS=k3s|k8s
|
||||||
|
|
||||||
|
### Test template
|
||||||
|
|
||||||
|
helm template $NS --set kube=$KUBE_SYS ./helm --values=./helm/values-configs.yaml --values=./helm/values-secrets.yaml --namespace $NS
|
||||||
|
|
||||||
|
### Chart deployment
|
||||||
|
|
||||||
|
helm upgrade $NS --set kube=$KUBE_SYS ./helm --install --atomic --cleanup-on-fail --values=./helm/values-configs.yaml --values=./helm/values-secrets.yaml --namespace $NS --create-namespace
|
||||||
|
|
||||||
|
|
||||||
|
## Remove
|
||||||
|
|
||||||
|
helm uninstall $NS -n $NS
|
||||||
|
kubectl delete namespaces $NS
|
||||||
|
|
||||||
|
## NOTES
|
||||||
|
### Cronjob
|
||||||
|
When we deploy manually (I do not why) you must trig manually the cronjob to make a DB backup to termine correctly the helm command
|
||||||
|
|
||||||
|
kubectl create job -n $NS --from=cronjob/cronjob-mariadb-backupdb dbbackup-$(date +%Y-%m-%d-%H-%M-%S)
|
||||||
|
|
||||||
|
## Database
|
||||||
|
Not necessary because created during deployment. We leave the procedure below for information
|
||||||
|
|
||||||
|
First export NS environment variable
|
||||||
|
|
||||||
|
export NS=<your_namespace>
|
||||||
|
|
||||||
|
You can use `createDBOnKube.sh` or create manually with below commands
|
||||||
|
|
||||||
|
#### Create user
|
||||||
|
```bash
|
||||||
|
kubectl -n $NS exec statefulset-mariadb-0 --container mariadb -- /bin/bash -c "/usr/bin/mysql -u root -p<rootPass> -e \"CREATE USER 'gmo_db'@'%' IDENTIFIED BY '<dbPass>';\""
|
||||||
|
```
|
||||||
|
#### Check user
|
||||||
|
```bash
|
||||||
|
kubectl -n $NS exec statefulset-mariadb-0 --container mariadb -- /bin/bash -c "/usr/bin/mysql -u root -p<rootPass> -e 'SELECT user,host FROM mysql.user;'"
|
||||||
|
```
|
||||||
|
#### Create database
|
||||||
|
```bash
|
||||||
|
kubectl -n $NS exec statefulset-mariadb-0 --container mariadb -- /bin/bash -c "/usr/bin/mysql -u root -p<rootPass> -e \"CREATE DATABASE gmo_db;\""
|
||||||
|
```
|
||||||
|
#### Check database
|
||||||
|
```bash
|
||||||
|
kubectl -n $NS exec statefulset-mariadb-0 --container mariadb -- /bin/bash -c "/usr/bin/mysql -u root -p<rootPass> -e 'SHOW DATABASES;'"
|
||||||
|
```
|
||||||
|
#### Grants access
|
||||||
|
```bash
|
||||||
|
kubectl -n $NS exec statefulset-mariadb-0 --container mariadb -- /bin/bash -c "/usr/bin/mysql -u root -p<rootpass> -e \"GRANT ALL PRIVILEGES ON gmo_db.* TO 'gmo_db'@'%';FLUSH PRIVILEGES;\""
|
||||||
|
```
|
||||||
|
#### Check grants
|
||||||
|
```bash
|
||||||
|
kubectl -n $NS exec statefulset-mariadb-0 --container mariadb -- /bin/bash -c "/usr/bin/mysql -u root -p<rootPass> -e \"SHOW GRANTS FOR 'gmo_db'@'%';\""
|
||||||
|
```
|
||||||
|
## Troubeshooting
|
||||||
|
### How to Fix "Pods stuck in Terminating status" Error
|
||||||
|
```bash
|
||||||
|
kubectl get pods --all-namespaces | grep Terminating | while read line; do
|
||||||
|
pod_name=$(echo $line | awk '{print $2}' ) \
|
||||||
|
name_space=$(echo $line | awk '{print $1}' ); \
|
||||||
|
kubectl delete pods $pod_name -n $name_space --grace-period=0 --force
|
||||||
|
done
|
||||||
|
```
|
||||||
|
|
||||||
|
## Sources
|
||||||
|
[Elasticsearch-PHP](https://www.elastic.co/guide/en/elasticsearch/client/php-api/current/index.html)
|
||||||
|
[Pull an Image from a Private Registry](https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/)
|
||||||
|
[MariaDB Statefulset](https://mariadb.org/create-statefulset-mariadb-application-in-k8s/)
|
||||||
|
[PHP-FPM, nginx, kubernetes and docker](https://matthewpalmer.net/kubernetes-app-developer/articles/php-fpm-nginx-kubernetes.html)
|
||||||
|
|
||||||
|
## Changelog
|
||||||
|
### 3.25 (2024-04-14)
|
||||||
|
**New features:**
|
||||||
|
* added elasticsearch and kibana
|
||||||
|
* added option `install` to script `docker.sh` to install php elasticserch module
|
||||||
|
* created `deploy.sh` script
|
||||||
|
|
||||||
|
**Fixed bugs:**
|
||||||
|
* problem with display environment var in php site
|
||||||
|
|
||||||
|
**Updated:**
|
||||||
|
* added new features in README.md
|
||||||
|
* added Changelog part in README.md
|
||||||
|
---
|
||||||
|
|
||||||
|
### 2.5 (2024-03-29)
|
||||||
|
**Fixed bugs:**
|
||||||
|
* fixed somes bugs
|
||||||
|
|
||||||
|
**New features:**
|
||||||
|
* posibility to deploy on k3s or k8s
|
||||||
|
|
||||||
|
**Updated:**
|
||||||
|
* updated README.md
|
||||||
|
---
|
||||||
|
|
||||||
|
### 1.0 (2024-03-01)
|
||||||
|
* Created from scratch
|
||||||
|
|
||||||
44
configmap-nginx-not.yaml
Normal file
44
configmap-nginx-not.yaml
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
# First, create a ConfigMap whose contents are used
|
||||||
|
# as the nginx.conf file in the web server.
|
||||||
|
# This server uses /var/www/html as its
|
||||||
|
# root document directory. When the server gets a
|
||||||
|
# request for *.php, it will forward that request
|
||||||
|
# to our PHP-FPM container.
|
||||||
|
|
||||||
|
kind: ConfigMap
|
||||||
|
apiVersion: v1
|
||||||
|
metadata:
|
||||||
|
name: configmap-nginx
|
||||||
|
labels:
|
||||||
|
{{- include "site.labels" . | nindent 4 }}
|
||||||
|
|
||||||
|
data:
|
||||||
|
default.conf: |
|
||||||
|
|
||||||
|
server {
|
||||||
|
listen 8080 default_server;
|
||||||
|
# Set nginx to serve files from the shared volume!
|
||||||
|
root /var/www/html/web;
|
||||||
|
index index.php;
|
||||||
|
server_name _;
|
||||||
|
|
||||||
|
location / {
|
||||||
|
try_files $uri $uri/ =404;
|
||||||
|
}
|
||||||
|
|
||||||
|
location ~ \.php$ {
|
||||||
|
root /var/www/html/web;
|
||||||
|
try_files $uri =404;
|
||||||
|
include fastcgi_params;
|
||||||
|
fastcgi_pass 127.0.0.1:9000;
|
||||||
|
fastcgi_param HTTP_PROXY "";
|
||||||
|
fastcgi_param SCRIPT_FILENAME $request_filename;
|
||||||
|
#fastcgi_split_path_info ^(.+\.php)(/.+)$;
|
||||||
|
#try_files $uri =404;
|
||||||
|
#include fastcgi_params;
|
||||||
|
#fastcgi_param REQUEST_METHOD $request_method;
|
||||||
|
#fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
|
||||||
|
#fastcgi_pass 127.0.0.1:9000;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
66
configmap-nginx.yaml.old
Normal file
66
configmap-nginx.yaml.old
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: configmap-nginx
|
||||||
|
labels:
|
||||||
|
{{- include "site.labels" . | nindent 4 }}
|
||||||
|
|
||||||
|
data:
|
||||||
|
default.conf: |
|
||||||
|
# from http://geekyplatypus.com/dockerise-your-php-application-with-nginx-and-php7-fpm/
|
||||||
|
# Gzip Settings
|
||||||
|
gzip on;
|
||||||
|
|
||||||
|
# gzip_vary on;
|
||||||
|
gzip_proxied any;
|
||||||
|
gzip_comp_level 5;
|
||||||
|
# gzip_buffers 16 8k;
|
||||||
|
# gzip_http_version 1.1;
|
||||||
|
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
|
||||||
|
|
||||||
|
# Security Headers
|
||||||
|
#add_header Content-Security-Policy "default-src 'self' https: data: 'unsafe-inline' 'unsafe-eval';" always;
|
||||||
|
#add_header X-Xss-Protection "1; mode=block" always;
|
||||||
|
#add_header X-Frame-Options "SAMEORIGIN" always;
|
||||||
|
#add_header X-Content-Type-Options "nosniff" always;
|
||||||
|
#add_header Referrer-Policy "origin-when-cross-origin" always;
|
||||||
|
#add_header Strict-Transport-Security "max-age=31536000" always;
|
||||||
|
|
||||||
|
server {
|
||||||
|
index index.php;
|
||||||
|
root /var/www/html/web;
|
||||||
|
listen 8080;
|
||||||
|
server_name _;
|
||||||
|
error_log /dev/stderr;
|
||||||
|
access_log /dev/stdout;
|
||||||
|
|
||||||
|
location = /favicon.ico {
|
||||||
|
log_not_found off;
|
||||||
|
access_log off;
|
||||||
|
}
|
||||||
|
|
||||||
|
location = /robots.txt {
|
||||||
|
allow all;
|
||||||
|
log_not_found off;
|
||||||
|
access_log off;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Deny all attempts to access hidden files such as .htaccess, .htpasswd, .DS_Store (Mac).
|
||||||
|
# Keep logging the requests to parse later (or to pass to firewall utilities such as fail2ban)
|
||||||
|
location ~ /\. {
|
||||||
|
deny all;
|
||||||
|
}
|
||||||
|
|
||||||
|
location / {
|
||||||
|
disable_symlinks off;
|
||||||
|
try_files $uri $uri/ /index.php;
|
||||||
|
}
|
||||||
|
|
||||||
|
location ~* \.php$ {
|
||||||
|
fastcgi_pass 127.0.0.1:9000;
|
||||||
|
#fastcgi_pass archivescacm-php-fpm:9000;
|
||||||
|
include fastcgi_params;
|
||||||
|
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
61
createDbOnKube.sh
Executable file
61
createDbOnKube.sh
Executable file
@ -0,0 +1,61 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# check yq is installed
|
||||||
|
if [ ! -f "/usr/local/bin/yq" ]; then
|
||||||
|
echo "yq does not exist"
|
||||||
|
echo "see https://github.com/mikefarah/yq/releases/ to install yq"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
# check env var NS (namespace is define)
|
||||||
|
if [ -z "${NS}" ]; then
|
||||||
|
echo "Environmet var NS is not defined"
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
echo "Namespace is $NS"
|
||||||
|
|
||||||
|
# set rootPass
|
||||||
|
root_pass=$(yq .mariadb.rootPass < helm/values-secrets-k3s.yaml)
|
||||||
|
# set user db
|
||||||
|
db_user=$(yq .site.phpfpmSite.db.user < helm/values-configs-k3s.yaml)
|
||||||
|
# set pass db
|
||||||
|
db_user_pass=$(yq .mariadb.dbPass < helm/values-secrets-k3s.yaml)
|
||||||
|
# set db name
|
||||||
|
db_name=$(yq .site.phpfpmSite.db.name < helm/values-configs-k3s.yaml)
|
||||||
|
|
||||||
|
echo "Root pass: $root_pass"
|
||||||
|
echo "DB user: $db_user"
|
||||||
|
echo "DB user pass: $db_user_pass"
|
||||||
|
echo "DB name: $db_name"
|
||||||
|
echo -e "\n"
|
||||||
|
echo "Create user if not exists"
|
||||||
|
kubectl -n $NS exec statefulset-mariadb-0 --container mariadb -- /bin/bash -c \
|
||||||
|
"/usr/bin/mysql -u root -p$root_pass -e \"CREATE USER IF NOT EXISTS '$db_user'@'%' IDENTIFIED BY '$db_user_pass';\""
|
||||||
|
|
||||||
|
echo "Check user ------------"
|
||||||
|
kubectl -n $NS exec statefulset-mariadb-0 --container mariadb -- /bin/bash -c \
|
||||||
|
"/usr/bin/mysql -u root -p$root_pass -e \"SELECT user,host FROM mysql.user WHERE user LIKE '$db_user%';\""
|
||||||
|
echo -e "-----------------------\n"
|
||||||
|
|
||||||
|
echo "Create database if not exists"
|
||||||
|
kubectl -n $NS exec statefulset-mariadb-0 --container mariadb -- /bin/bash -c \
|
||||||
|
"/usr/bin/mysql -u root -p$root_pass -e \"CREATE DATABASE IF NOT EXISTS $db_name;\""
|
||||||
|
|
||||||
|
echo "Check database---------"
|
||||||
|
kubectl -n $NS exec statefulset-mariadb-0 --container mariadb -- /bin/bash -c \
|
||||||
|
"/usr/bin/mysql -u root -p$root_pass -e \"SHOW DATABASES;\""
|
||||||
|
echo -e "-----------------------\n"
|
||||||
|
|
||||||
|
echo "Grants access"
|
||||||
|
kubectl -n $NS exec statefulset-mariadb-0 --container mariadb -- /bin/bash -c \
|
||||||
|
"/usr/bin/mysql -u root -p$root_pass -e \"GRANT ALL PRIVILEGES ON $db_name.* TO '$db_user'@'%';FLUSH PRIVILEGES;\""
|
||||||
|
|
||||||
|
echo "Check access-----------"
|
||||||
|
kubectl -n $NS exec statefulset-mariadb-0 --container mariadb -- /bin/bash -c \
|
||||||
|
"/usr/bin/mysql -u root -p$root_pass -e \"SHOW GRANTS FOR '$db_user'@'%';\""
|
||||||
|
echo -e "-----------------------\n"
|
||||||
|
|
||||||
|
#kubectl -n $NS exec statefulset-mariadb-0 --container mariadb -- /bin/bash -c \
|
||||||
|
#"/usr/bin/mysql -u root -p$root_pass -e \"DROP USER IF EXISTS '$db_user'@'%';\""
|
||||||
|
|
||||||
|
#kubectl -n $NS exec statefulset-mariadb-0 --container mariadb -- /bin/bash -c \
|
||||||
|
#"/usr/bin/mysql -u root -p$root_pass -e \"DROP DATABASE IF EXISTS $db_name;\""
|
||||||
1
cron
Normal file
1
cron
Normal file
@ -0,0 +1 @@
|
|||||||
|
/usr/bin/mysqldump --verbose --hex-blob --complete-insert --single-transaction --skip-lock-tables --skip-add-locks --routines -h service-mariadb -uroot -ppa55w0rd wwwgmo | gzip - > /var/backups/$MYSQL_DATABASE-$(date +%Y-%m-%d_%H%M%S).sql.gz; find /var/backups/ -type f -mindepth 1 -mtime +14 -exec rm {} \;
|
||||||
142
deploy.sh
Executable file
142
deploy.sh
Executable file
@ -0,0 +1,142 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
############################################################
|
||||||
|
# Decription: Preinst linux GMo cloned server from VMWare WS
|
||||||
|
# Author: Gilles Mouchet (gilles.mouchet@gmail.com)
|
||||||
|
# Creation Date: 07-Apr-2024
|
||||||
|
# Version: 1.0
|
||||||
|
#
|
||||||
|
# V1.0 - 07-Apr-2024 - GMo
|
||||||
|
# Added
|
||||||
|
# - Creation of script from scratch
|
||||||
|
#
|
||||||
|
############################################################
|
||||||
|
|
||||||
|
version="1.0"
|
||||||
|
|
||||||
|
usage() {
|
||||||
|
cat << EOF
|
||||||
|
Usage: ./deploy.sh options
|
||||||
|
Deploy application on kubernetes
|
||||||
|
Options:
|
||||||
|
-n namespace
|
||||||
|
-k kubernetes system (k3s or k8s)
|
||||||
|
-h display this help text
|
||||||
|
-v version
|
||||||
|
EOF
|
||||||
|
}
|
||||||
|
|
||||||
|
options=$(getopt n:k:hv "$*")
|
||||||
|
[ $? -eq 0 ] || {
|
||||||
|
echo "Incorrect options provided"
|
||||||
|
usage
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
eval set -- "$options"
|
||||||
|
no_args="true"
|
||||||
|
while true; do
|
||||||
|
case "$1" in
|
||||||
|
-k)
|
||||||
|
shift
|
||||||
|
case "$1" in
|
||||||
|
k3s)
|
||||||
|
kube_sys=$1
|
||||||
|
;;
|
||||||
|
k8s)
|
||||||
|
kube_sys=$1
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
usage
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
;;
|
||||||
|
-n)
|
||||||
|
shift
|
||||||
|
ns=$1
|
||||||
|
;;
|
||||||
|
--)
|
||||||
|
shift
|
||||||
|
break
|
||||||
|
;;
|
||||||
|
-h)
|
||||||
|
usage
|
||||||
|
exit
|
||||||
|
;;
|
||||||
|
-v)
|
||||||
|
cat << EOF
|
||||||
|
deploy.sh $version
|
||||||
|
Copyright (C) 2021-`date +"%Y"` - GMo Free Software.
|
||||||
|
Written by Gilles Mouchet (gilles.mouchet@gmail.com)
|
||||||
|
EOF
|
||||||
|
exit
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
usage
|
||||||
|
exit 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
shift
|
||||||
|
no_args="false"
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ -z "${kube_sys}" ] || [ -z "${ns}" ]; then
|
||||||
|
usage
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# increment minor version at each deploy
|
||||||
|
# get Chart verion
|
||||||
|
chart_version=$(grep appVersion helm/Chart.yaml | cut -d '"' -f2)
|
||||||
|
# get Chart major version
|
||||||
|
chart_major_version=$(echo $chart_version | cut -d'.' -f1)
|
||||||
|
# get Chart minor verison
|
||||||
|
chart_minor_version=$(echo $chart_version | cut -d'.' -f2)
|
||||||
|
# increment minor version
|
||||||
|
let "chart_minor_version++"
|
||||||
|
# set new version
|
||||||
|
chart_new_version=$chart_major_version.$chart_minor_version
|
||||||
|
|
||||||
|
# replace in .env, .env.dist and Chart the version
|
||||||
|
env_file=(.env .env.dist ./docker/php-fpm/.env ./docker/php-fpm/.env.dist ./helm/Chart.yaml)
|
||||||
|
for f in ${env_file[@]}; do
|
||||||
|
case $f in
|
||||||
|
.env|.env.dist)
|
||||||
|
#sed -e "s|DOCKER_IMAGE_VERSION=\"$chart_version\"|DOCKER_IMAGE_VERSION=\"$chart_new_version\"|" < $f
|
||||||
|
sed -i "s|DOCKER_IMAGE_VERSION=\"$chart_version\"|DOCKER_IMAGE_VERSION=\"$chart_new_version\"|" $f
|
||||||
|
;;
|
||||||
|
./docker/php-fpm/.env|./docker/php-fpm/.env.dist)
|
||||||
|
#sed -e "s|SITE_VERSION=\"$chart_version\"|SITE_VERSION=\"$chart_new_version\"|" < $f
|
||||||
|
sed -i "s|SITE_VERSION=\"$chart_version\"|SITE_VERSION=\"$chart_new_version\"|" $f
|
||||||
|
;;
|
||||||
|
./helm/Chart.yaml)
|
||||||
|
#sed -e "s|appVersion: \"$chart_version\"|appVersion: \"$chart_new_version\"|" < $f
|
||||||
|
sed -i "s|appVersion: \"$chart_version\"|appVersion: \"$chart_new_version\"|" $f
|
||||||
|
;;
|
||||||
|
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
echo $chart_version
|
||||||
|
echo $chart_new_version
|
||||||
|
echo $ns
|
||||||
|
echo $kube_sys
|
||||||
|
|
||||||
|
# git commit
|
||||||
|
git add .env.dist docker/php-fpm/.env.dist helm/Chart.yaml
|
||||||
|
git commit -m "deploy version $chart_new_version"
|
||||||
|
|
||||||
|
# build image and push in repo
|
||||||
|
./docker.sh install
|
||||||
|
./docker.sh build
|
||||||
|
./docker.sh push
|
||||||
|
|
||||||
|
# set config to connect kubernetes
|
||||||
|
rm -f $HOME/.kube/config
|
||||||
|
ln -s $HOME/.kube/$kube_sys $HOME/.kube/config
|
||||||
|
|
||||||
|
#helm template --set kube=$kube_sys ./helm --values=./helm/values-configs.yaml --values=./helm/values-secrets.yaml --namespace $ns --create-namespace
|
||||||
|
# deploy Chart
|
||||||
|
helm upgrade $ns --set kube=$kube_sys ./helm --install --atomic --cleanup-on-fail --values=./helm/values-configs.yaml --values=./helm/values-secrets.yaml --namespace $ns --create-namespace
|
||||||
|
|
||||||
|
kubectl create job -n $NS --from=cronjob/cronjob-mariadb-backupdb dbbackup-$(date +%Y-%m-%d-%H-%M-%S)
|
||||||
98
docker-compose.yml
Normal file
98
docker-compose.yml
Normal file
@ -0,0 +1,98 @@
|
|||||||
|
# GMo Lab
|
||||||
|
#version: '2.3'
|
||||||
|
services:
|
||||||
|
|
||||||
|
## Linux nginx mysql php
|
||||||
|
wwwgmo-nginx:
|
||||||
|
container_name: wwwgmo-nginx
|
||||||
|
hostname: wwwgmo-nginx
|
||||||
|
image: nginxinc/nginx-unprivileged:1.23-alpine
|
||||||
|
volumes:
|
||||||
|
- './docker/nginx/default.conf:/etc/nginx/conf.d/default.conf'
|
||||||
|
- './certs:/etc/nginx/certs/'
|
||||||
|
- './src:/var/www/html:rw,cached'
|
||||||
|
ports:
|
||||||
|
- '${NGINX_PORT}:8080' #local:docker
|
||||||
|
depends_on:
|
||||||
|
- wwwgmo-php-fpm
|
||||||
|
#
|
||||||
|
wwwgmo-php-fpm:
|
||||||
|
container_name: wwwgmo-php-fpm
|
||||||
|
hostname: wwwgmo-php-fpm
|
||||||
|
#image: wwwgmo
|
||||||
|
image: ${DOCKER_IMAGE}:${DOCKER_IMAGE_VERSION}
|
||||||
|
env_file:
|
||||||
|
- ./docker/php-fpm/.env
|
||||||
|
volumes:
|
||||||
|
- './src/:/var/www/html:rw,cached'
|
||||||
|
build:
|
||||||
|
context: .
|
||||||
|
dockerfile: ./docker/php-fpm/Dockerfile
|
||||||
|
ports:
|
||||||
|
- '9000:9000' #local:docker
|
||||||
|
depends_on:
|
||||||
|
- wwwgmo-mariadb
|
||||||
|
|
||||||
|
wwwgmo-mariadb:
|
||||||
|
container_name: wwwgmo-mariadb
|
||||||
|
hostname: wwwgmo-mariadb
|
||||||
|
#image: mysql:8.0-debian
|
||||||
|
#image: mysql/mysql-server:8.0.27-aarch64
|
||||||
|
image: mariadb:10.11.7
|
||||||
|
volumes:
|
||||||
|
- 'wwwgmo-mariadb:/var/lib/mysql:z'
|
||||||
|
env_file:
|
||||||
|
- ./docker/mariadb/.env # ports:
|
||||||
|
|
||||||
|
wwwgmo-phpmyadmin:
|
||||||
|
container_name: wwwgmo-pma
|
||||||
|
image: phpmyadmin
|
||||||
|
links:
|
||||||
|
- wwwgmo-mariadb
|
||||||
|
env_file:
|
||||||
|
- ./docker/mariadb/.env
|
||||||
|
restart: always
|
||||||
|
ports:
|
||||||
|
- ${PMA_PORT_WEB}:80
|
||||||
|
|
||||||
|
# EK
|
||||||
|
wwwgmo-elasticsearch:
|
||||||
|
container_name: wwwgmo-elasticsearch
|
||||||
|
hostname: wwwgmo-elasticsearch
|
||||||
|
image: 'docker.elastic.co/elasticsearch/elasticsearch:7.17.19'
|
||||||
|
#image: 'docker.elastic.co/elasticsearch/elasticsearch:8.8.1'
|
||||||
|
volumes:
|
||||||
|
- 'wwwgmo-elasticsearch:/usr/share/elasticsearch/data'
|
||||||
|
restart: unless-stopped
|
||||||
|
env_file:
|
||||||
|
- ./docker/elasticsearch/.env
|
||||||
|
ulimits:
|
||||||
|
memlock:
|
||||||
|
soft: -1
|
||||||
|
hard: -1
|
||||||
|
nofile:
|
||||||
|
soft: 65536
|
||||||
|
hard: 65536
|
||||||
|
cap_add:
|
||||||
|
- IPC_LOCK
|
||||||
|
ports:
|
||||||
|
- '9200:9200'
|
||||||
|
- '9300:9300'
|
||||||
|
|
||||||
|
# kibana
|
||||||
|
wwwgmo_kibana:
|
||||||
|
container_name: wwwgmo-kibana
|
||||||
|
hostname: wwwgmo-kibana
|
||||||
|
image: docker.elastic.co/kibana/kibana:7.17.19
|
||||||
|
#image: docker.elastic.co/kibana/kibana:8.8.1
|
||||||
|
restart: unless-stopped
|
||||||
|
env_file:
|
||||||
|
- ./docker/kibana/.env
|
||||||
|
ports:
|
||||||
|
- 5601:5601
|
||||||
|
depends_on:
|
||||||
|
- wwwgmo-elasticsearch
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
wwwgmo-mariadb:
|
||||||
|
wwwgmo-elasticsearch:
|
||||||
80
docker.sh
Executable file
80
docker.sh
Executable file
@ -0,0 +1,80 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
_UID=$(id -u)
|
||||||
|
_GID=$(id -g)
|
||||||
|
|
||||||
|
export $(grep -v '^#' .env | xargs)
|
||||||
|
|
||||||
|
# check if certs folder exite in src
|
||||||
|
if [ ! -d "./src/certs" ]; then
|
||||||
|
mkdir ./src/certs
|
||||||
|
fi
|
||||||
|
|
||||||
|
while test $# -gt 0
|
||||||
|
do
|
||||||
|
case "$1" in
|
||||||
|
install)
|
||||||
|
env UID=${_UID} GID=${_GID} docker compose up -d wwwgmo-php-fpm
|
||||||
|
#docker exec --user root wwwgmo-php-fpm "/bin/sh -c 'cd /var/www/html/; composer require elasticsearch/elasticsearch'"
|
||||||
|
docker exec --user root wwwgmo-php-fpm /bin/sh -c "cd /var/www/html; composer require elasticsearch/elasticsearch"
|
||||||
|
env UID=${_UID} GID=${_GID} docker compose stop
|
||||||
|
;;
|
||||||
|
start)
|
||||||
|
env UID=${_UID} GID=${_GID} docker compose up -d;
|
||||||
|
docker exec --user root wwwgmo-php-fpm composer install --no-interaction
|
||||||
|
;;
|
||||||
|
start-nginx)
|
||||||
|
env UID=${_UID} GID=${_GID} docker compose up -d wwwgmo-nginx
|
||||||
|
;;
|
||||||
|
start-db)
|
||||||
|
env UID=${_UID} GID=${_GID} docker compose up -d wwwgmo-mariadb
|
||||||
|
;;
|
||||||
|
stop)
|
||||||
|
env UID=${_UID} GID=${_GID} docker compose stop
|
||||||
|
;;
|
||||||
|
bash)
|
||||||
|
docker exec -it wwwgmo-php-fpm /bin/sh
|
||||||
|
;;
|
||||||
|
bash-root)
|
||||||
|
docker exec --user root -it wwwgmo-php-fpm /bin/sh
|
||||||
|
;;
|
||||||
|
logs)
|
||||||
|
docker logs wwwgmo-php-fpm -f
|
||||||
|
;;
|
||||||
|
build-no-cache)
|
||||||
|
#cp ./certs/ca.pem ./src/certs/.
|
||||||
|
sudo chown -R $_UID:$_GID ./src/
|
||||||
|
env UID=${_UID} GID=${_GID} docker compose build --pull --no-cache
|
||||||
|
env UID=${_UID} GID=${_GID} docker compose up -d;
|
||||||
|
#docker exec --user root wwwgmo-php-fpm composer install --no-interaction
|
||||||
|
sleep 5 # wait mysql container up
|
||||||
|
#docker exec -it wwwgmo-mariadb /bin/bash -c "mysql -u root --password=password -e \
|
||||||
|
# \"CREATE USER IF NOT EXISTS 'xmaroot'@'%' IDENTIFIED BY 'sqlAdmin'; \
|
||||||
|
# GRANT ALL PRIVILEGES ON *.* TO 'xmaroot'@'%'; \
|
||||||
|
# flush privileges;\""
|
||||||
|
env UID=${_UID} GID=${_GID} docker compose stop
|
||||||
|
;;
|
||||||
|
build)
|
||||||
|
#cp ./certs/ca.pem ./src/certs/.
|
||||||
|
sudo chown -R $_UID:$_GID ./src/
|
||||||
|
env UID=${_UID} GID=${_GID} docker compose build
|
||||||
|
env UID=${_UID} GID=${_GID} docker compose up -d;
|
||||||
|
#docker exec --user root wwwgmo-php-fpm composer install --no-interaction
|
||||||
|
#sleep 5 # wait mysql container up
|
||||||
|
#docker exec -it wwwgmo-mysql /bin/bash -c "mysql -u root --password=password -e \
|
||||||
|
# \"CREATE USER IF NOT EXISTS 'xmaroot'@'%' IDENTIFIED BY 'sqlAdmin'; \
|
||||||
|
# GRANT ALL PRIVILEGES ON *.* TO 'xmaroot'@'%'; \
|
||||||
|
# flush privileges;\""
|
||||||
|
env UID=${_UID} GID=${_GID} docker compose stop
|
||||||
|
;;
|
||||||
|
push)
|
||||||
|
docker image push ${DOCKER_IMAGE}:${DOCKER_IMAGE_VERSION}
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "docker.sh [start|stop|install|logs|bash-root|bash|build|build-no-cache|push]"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
exit 0
|
||||||
6
docker/elasticsearch/.env.dist
Normal file
6
docker/elasticsearch/.env.dist
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
xpack.security.transport.ssl.enabled=true
|
||||||
|
xpack.security.enabled=true
|
||||||
|
discovery.type=single-node
|
||||||
|
cluster.name=gmo_es_cluster
|
||||||
|
ELASTIC_USERNAME=elastic
|
||||||
|
ELASTIC_PASSWORD=pa55w0rd
|
||||||
4
docker/kibana/.env.dist
Normal file
4
docker/kibana/.env.dist
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
ELASTICSEARCH_HOSTS=http://wwwgmo-elasticsearch:9200
|
||||||
|
ELASTICSEARCH_USERNAME=elastic
|
||||||
|
ELASTICSEARCH_PASSWORD=pa55w0rd
|
||||||
|
xpack.security.enabled=true
|
||||||
13
docker/mariadb/.env.dist
Normal file
13
docker/mariadb/.env.dist
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
# mariadb
|
||||||
|
MYSQL_ROOT_PASSWORD=pa55w0rd
|
||||||
|
# db wwwgmo
|
||||||
|
MYSQL_DATABASE=wwwgmo
|
||||||
|
MYSQL_USER=wwwgmo
|
||||||
|
MYSQL_PASSWORD=password
|
||||||
|
MYSQL_TCP_PORT=3306
|
||||||
|
# phpmyadmin
|
||||||
|
PMA_HOST=wwwgmo-mariadb
|
||||||
|
PMA_USER=root
|
||||||
|
PMA_PASSWORD=pa55w0rd
|
||||||
|
PMA_PORT=3306
|
||||||
|
PMA_ARBITRARY=1
|
||||||
58
docker/nginx/default.conf
Normal file
58
docker/nginx/default.conf
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
# from http://geekyplatypus.com/dockerise-your-php-application-with-nginx-and-php7-fpm/
|
||||||
|
# Gzip Settings
|
||||||
|
gzip on;
|
||||||
|
|
||||||
|
# gzip_vary on;
|
||||||
|
gzip_proxied any;
|
||||||
|
gzip_comp_level 5;
|
||||||
|
# gzip_buffers 16 8k;
|
||||||
|
# gzip_http_version 1.1;
|
||||||
|
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
|
||||||
|
|
||||||
|
# Security Headers
|
||||||
|
#add_header Content-Security-Policy "default-src 'self' https: data: 'unsafe-inline' 'unsafe-eval';" always;
|
||||||
|
#add_header X-Xss-Protection "1; mode=block" always;
|
||||||
|
#add_header X-Frame-Options "SAMEORIGIN" always;
|
||||||
|
#add_header X-Content-Type-Options "nosniff" always;
|
||||||
|
#add_header Referrer-Policy "origin-when-cross-origin" always;
|
||||||
|
#add_header Strict-Transport-Security "max-age=31536000" always;
|
||||||
|
|
||||||
|
server {
|
||||||
|
index index.php;
|
||||||
|
root /var/www/html;
|
||||||
|
listen 8080;
|
||||||
|
server_name _;
|
||||||
|
error_log /dev/stderr;
|
||||||
|
access_log /dev/stdout;
|
||||||
|
|
||||||
|
location = /favicon.ico {
|
||||||
|
log_not_found off;
|
||||||
|
access_log off;
|
||||||
|
}
|
||||||
|
|
||||||
|
location = /robots.txt {
|
||||||
|
allow all;
|
||||||
|
log_not_found off;
|
||||||
|
access_log off;
|
||||||
|
}
|
||||||
|
|
||||||
|
# Deny all attempts to access hidden files such as .htaccess, .htpasswd, .DS_Store (Mac).
|
||||||
|
# Keep logging the requests to parse later (or to pass to firewall utilities such as fail2ban)
|
||||||
|
location ~ /\. {
|
||||||
|
deny all;
|
||||||
|
}
|
||||||
|
|
||||||
|
location / {
|
||||||
|
disable_symlinks off;
|
||||||
|
try_files $uri $uri/ /index.php;
|
||||||
|
}
|
||||||
|
|
||||||
|
location ~* \.php$ {
|
||||||
|
#fastcgi_pass 127.0.0.1:9000;
|
||||||
|
fastcgi_pass wwwgmo-php-fpm:9000;
|
||||||
|
#fastcgi_pass archivescacm-php-fpm:9000;
|
||||||
|
include fastcgi_params;
|
||||||
|
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
22
docker/php-fpm/.env.dist
Normal file
22
docker/php-fpm/.env.dist
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
# site
|
||||||
|
SITE_TITLE="Stack GMo - PHP-FPM - MariaDB - Elasticsearch"
|
||||||
|
# must be the same that DOCKER_IMAGE_VERSION define in .env
|
||||||
|
SITE_VERSION="3.25"
|
||||||
|
# db
|
||||||
|
DB_NAME=wwwgmo
|
||||||
|
DB_USER=wwwgmo
|
||||||
|
DB_PASSWORD=password
|
||||||
|
DB_HOST=wwwgmo-mariadb
|
||||||
|
DB_PORT=3306
|
||||||
|
DB_TABLE=tbl_email
|
||||||
|
# PMA
|
||||||
|
# the port must be the same as PMA_PORT_WEB define in .env on root project path
|
||||||
|
PMA_URL=http://gmoadm.gmolab.net:8084
|
||||||
|
KIBANA_URL=http://gmoadm.gmolab.net:5601
|
||||||
|
# Elsaticsearch/kibana
|
||||||
|
ES_HOST=wwwgmo-elasticsearch:9200
|
||||||
|
ES_USER=elastic
|
||||||
|
ES_PASSWORD=pa55w0rd
|
||||||
|
ES_INDEX=wwwgmo_index
|
||||||
|
KIB_PORT=5601
|
||||||
|
|
||||||
31
docker/php-fpm/Dockerfile
Normal file
31
docker/php-fpm/Dockerfile
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
#https://hub.docker.com/r/rhamdeew/docker-php-8-fpm-alpine/dockerfile
|
||||||
|
#https://github.com/elastic/elasticsearch-php
|
||||||
|
|
||||||
|
FROM php:8.2.6-fpm-alpine
|
||||||
|
LABEL maintainer="gilles.mouchet@gmail.com"
|
||||||
|
|
||||||
|
RUN apk add --no-cache mysql-client msmtp perl wget procps shadow libzip libpng libjpeg-turbo libwebp freetype icu
|
||||||
|
|
||||||
|
RUN apk add --no-cache --virtual build-essentials \
|
||||||
|
icu-dev icu-libs zlib-dev g++ make automake autoconf libzip-dev \
|
||||||
|
libpng-dev libwebp-dev libjpeg-turbo-dev freetype-dev && \
|
||||||
|
docker-php-ext-configure gd --enable-gd --with-freetype --with-jpeg --with-webp && \
|
||||||
|
docker-php-ext-install gd && \
|
||||||
|
docker-php-ext-install mysqli && \
|
||||||
|
docker-php-ext-install pdo_mysql && \
|
||||||
|
docker-php-ext-install intl && \
|
||||||
|
docker-php-ext-install opcache && \
|
||||||
|
docker-php-ext-install exif && \
|
||||||
|
docker-php-ext-install zip && \
|
||||||
|
apk del build-essentials && rm -rf /usr/src/php*
|
||||||
|
|
||||||
|
# install composer
|
||||||
|
RUN wget https://getcomposer.org/composer-stable.phar -O /usr/local/bin/composer && chmod +x /usr/local/bin/composer
|
||||||
|
RUN composer require elasticsearch/elasticsearch
|
||||||
|
# Switch en user www-data
|
||||||
|
USER www-data
|
||||||
|
WORKDIR /app
|
||||||
|
COPY --chown=www-data ./src/ /app/
|
||||||
|
COPY --chown=www-data ./docker/php-fpm/php.ini /usr/local/etc/php/php.ini
|
||||||
|
|
||||||
|
EXPOSE 9000/tcp
|
||||||
16
docker/php-fpm/php.ini
Normal file
16
docker/php-fpm/php.ini
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
; For php.ini production
|
||||||
|
date.timezone = "Europe/Zurich"
|
||||||
|
memory_limit = 128M
|
||||||
|
; This is the php.ini-production INI file.
|
||||||
|
zend.exception_ignore_args = On
|
||||||
|
; In production, it is recommended to set this to 0 to reduce the output
|
||||||
|
; of sensitive information in stack traces.
|
||||||
|
zend.exception_string_param_max_len = 0
|
||||||
|
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
|
||||||
|
display_errors = Off
|
||||||
|
display_startup_errors = Off
|
||||||
|
mysqlnd.collect_memory_statistics = Off
|
||||||
|
log_errors = On
|
||||||
|
error_log = /dev/stderr
|
||||||
|
zend.assertions = -1
|
||||||
|
expose_php = Off
|
||||||
29
helm/Chart.yaml
Normal file
29
helm/Chart.yaml
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
apiVersion: v2
|
||||||
|
name: www-site
|
||||||
|
description: www-site
|
||||||
|
|
||||||
|
maintainers:
|
||||||
|
- name: GMOLab
|
||||||
|
email: gilles.mouchet@gmail.com
|
||||||
|
|
||||||
|
# A chart can be either an 'application' or a 'library' chart.
|
||||||
|
#
|
||||||
|
# Application charts are a collection of templates that can be packaged into versioned archives
|
||||||
|
# to be deployed.
|
||||||
|
#
|
||||||
|
# Library charts provide useful utilities or functions for the chart developer. They're included as
|
||||||
|
# a dependency of application charts to inject those utilities and functions into the rendering
|
||||||
|
# pipeline. Library charts do not define any templates and therefore cannot be deployed.
|
||||||
|
type: application
|
||||||
|
|
||||||
|
# This is the chart version. This version number should be incremented each time you make changes
|
||||||
|
# to the chart and its templates, including the app version.
|
||||||
|
# Versions are expected to follow Semantic Versioning (https://semver.org/)
|
||||||
|
version: 1.0.0
|
||||||
|
|
||||||
|
# This is the version number of the application being deployed. This version number should be
|
||||||
|
# incremented each time you make changes to the application. Versions are not expected to
|
||||||
|
# follow Semantic Versioning. They should reflect the version the application is using.
|
||||||
|
# It is recommended to use it with quotes.
|
||||||
|
# Also set the docker image tag
|
||||||
|
appVersion: "1.0"
|
||||||
62
helm/templates/_helpers.tpl
Normal file
62
helm/templates/_helpers.tpl
Normal file
@ -0,0 +1,62 @@
|
|||||||
|
{{/*
|
||||||
|
Expand the name of the chart.
|
||||||
|
*/}}
|
||||||
|
{{- define "site.name" -}}
|
||||||
|
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create a default fully qualified app name.
|
||||||
|
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
|
||||||
|
If release name contains chart name it will be used as a full name.
|
||||||
|
*/}}
|
||||||
|
{{- define "site.fullname" -}}
|
||||||
|
{{- if .Values.fullnameOverride }}
|
||||||
|
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
|
||||||
|
{{- else }}
|
||||||
|
{{- $name := default .Chart.Name .Values.nameOverride }}
|
||||||
|
{{- if contains $name .Release.Name }}
|
||||||
|
{{- .Release.Name | trunc 63 | trimSuffix "-" }}
|
||||||
|
{{- else }}
|
||||||
|
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create chart name and version as used by the chart label.
|
||||||
|
*/}}
|
||||||
|
{{- define "site.chart" -}}
|
||||||
|
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Common labels
|
||||||
|
*/}}
|
||||||
|
{{- define "site.labels" -}}
|
||||||
|
helm.sh/chart: {{ include "site.chart" . }}
|
||||||
|
{{ include "site.selectorLabels" . }}
|
||||||
|
{{- if .Chart.AppVersion }}
|
||||||
|
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
|
||||||
|
{{- end }}
|
||||||
|
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Selector labels
|
||||||
|
*/}}
|
||||||
|
{{- define "site.selectorLabels" -}}
|
||||||
|
app.kubernetes.io/name: {{ include "site.name" . }}
|
||||||
|
app.kubernetes.io/instance: {{ .Release.Name }}
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
{{/*
|
||||||
|
Create the name of the service account to use
|
||||||
|
*/}}
|
||||||
|
{{- define "site.serviceAccountName" -}}
|
||||||
|
{{- if .Values.serviceAccount.create }}
|
||||||
|
{{- default (include "site.fullname" .) .Values.serviceAccount.name }}
|
||||||
|
{{- else }}
|
||||||
|
{{- default "default" .Values.serviceAccount.name }}
|
||||||
|
{{- end }}
|
||||||
|
{{- end }}
|
||||||
17
helm/templates/elasticsearch/configmap-elasticsearch.yaml
Normal file
17
helm/templates/elasticsearch/configmap-elasticsearch.yaml
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: configmap-elasticsearch
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app: site
|
||||||
|
tier: elastic
|
||||||
|
{{- include "site.labels" . | nindent 4 }}
|
||||||
|
data:
|
||||||
|
cluster.name: "wwwgmo-es"
|
||||||
|
discovery.type: "single-node"
|
||||||
|
ES_JAVA_OPTS: "-Xms512m -Xmx512m"
|
||||||
|
ELASTIC_USERNAME: elastic
|
||||||
|
ELASTIC_HOST: "service-elasticsearch"
|
||||||
|
xpack.security.enabled: "true"
|
||||||
|
xpack.security.transport.ssl.enabled: "true"
|
||||||
12
helm/templates/elasticsearch/secret-elasticsearch.yaml
Normal file
12
helm/templates/elasticsearch/secret-elasticsearch.yaml
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Secret
|
||||||
|
metadata:
|
||||||
|
name: secret-elasticsearch
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app: site
|
||||||
|
tier: elasticsearch
|
||||||
|
{{- include "site.labels" . | nindent 4 }}
|
||||||
|
type: Opaque
|
||||||
|
stringData:
|
||||||
|
ELASTIC_PASSWORD: "{{ required ".Values.elastic.password entry is required!" .Values.elastic.password }}"
|
||||||
19
helm/templates/elasticsearch/service-elasticsearch.yaml
Normal file
19
helm/templates/elasticsearch/service-elasticsearch.yaml
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
kind: Service
|
||||||
|
apiVersion: v1
|
||||||
|
metadata:
|
||||||
|
name: service-elasticsearch
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app: site
|
||||||
|
tier: elastic
|
||||||
|
{{- include "site.labels" . | nindent 4 }}
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
app: site
|
||||||
|
tier: elastic
|
||||||
|
clusterIP: None
|
||||||
|
ports:
|
||||||
|
- port: 9200
|
||||||
|
name: rest
|
||||||
|
- port: 9300
|
||||||
|
name: inter-node
|
||||||
131
helm/templates/elasticsearch/statefulset-elasticsearch.yaml
Normal file
131
helm/templates/elasticsearch/statefulset-elasticsearch.yaml
Normal file
@ -0,0 +1,131 @@
|
|||||||
|
apiVersion: apps/v1
|
||||||
|
kind: StatefulSet
|
||||||
|
metadata:
|
||||||
|
name: statefulset-elasticsearch
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app: site
|
||||||
|
tier: elastic
|
||||||
|
{{- include "site.labels" . | nindent 4 }}
|
||||||
|
spec:
|
||||||
|
serviceName: service-elasticsearch
|
||||||
|
# do not modify replica
|
||||||
|
replicas: 1
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: site
|
||||||
|
tier: elastic
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: site
|
||||||
|
tier: elastic
|
||||||
|
{{- include "site.labels" . | nindent 8 }}
|
||||||
|
annotations:
|
||||||
|
checksum/configmap-env: {{ include (print $.Chart.Name "/templates/elasticsearch/configmap-elasticsearch.yaml") . | sha256sum }}
|
||||||
|
checksum/secret-env: {{ include (print $.Chart.Name "/templates/elasticsearch/secret-elasticsearch.yaml") . | sha256sum }}
|
||||||
|
spec:
|
||||||
|
priorityClassName: {{ required ".Values.elastic.priorityClassName entry is required!" .Values.elastic.priorityClassName }}
|
||||||
|
automountServiceAccountToken: false
|
||||||
|
containers:
|
||||||
|
- name: elasticsearch
|
||||||
|
image: docker.elastic.co/elasticsearch/elasticsearch:{{ required ".Values.elastic.imageTag entry is required!" .Values.elastic.imageTag }}
|
||||||
|
imagePullPolicy: IfNotPresent
|
||||||
|
|
||||||
|
ports:
|
||||||
|
- containerPort: 9200
|
||||||
|
name: rest
|
||||||
|
protocol: TCP
|
||||||
|
- containerPort: 9300
|
||||||
|
name: inter-node
|
||||||
|
protocol: TCP
|
||||||
|
|
||||||
|
volumeMounts:
|
||||||
|
- name: data
|
||||||
|
mountPath: /usr/share/elasticsearch/data
|
||||||
|
|
||||||
|
envFrom:
|
||||||
|
- configMapRef:
|
||||||
|
name: configmap-elasticsearch
|
||||||
|
- secretRef:
|
||||||
|
name: secret-elasticsearch
|
||||||
|
env:
|
||||||
|
- name: node.name
|
||||||
|
valueFrom:
|
||||||
|
fieldRef:
|
||||||
|
fieldPath: metadata.name
|
||||||
|
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
cpu: 100m
|
||||||
|
memory: 850Mi
|
||||||
|
ephemeral-storage: 128M
|
||||||
|
limits:
|
||||||
|
cpu: 1000m
|
||||||
|
memory: 1250Mi
|
||||||
|
ephemeral-storage: 512M
|
||||||
|
|
||||||
|
#No readiness probe : The node has to be immediatly resolvable
|
||||||
|
#No startup probe : The node has to be immediatly resolvable
|
||||||
|
livenessProbe:
|
||||||
|
exec:
|
||||||
|
command:
|
||||||
|
- "/bin/sh"
|
||||||
|
- "-c"
|
||||||
|
#- "curl -s --cacert /usr/share/elasticsearch/config/certificates/ca.pem https://localhost:9200 | grep -q 'missing authentication credentials'"
|
||||||
|
- "curl -s http://localhost:9200 | grep -q 'missing authentication credentials'"
|
||||||
|
periodSeconds: 10
|
||||||
|
failureThreshold: 3
|
||||||
|
initialDelaySeconds: 30
|
||||||
|
timeoutSeconds: 5
|
||||||
|
|
||||||
|
initContainers:
|
||||||
|
- name: fix-permissions
|
||||||
|
image: busybox
|
||||||
|
imagePullPolicy: IfNotPresent
|
||||||
|
command: ["sh", "-c", "chown -R 1000:1000 /usr/share/elasticsearch/data"]
|
||||||
|
securityContext:
|
||||||
|
privileged: true
|
||||||
|
volumeMounts:
|
||||||
|
- name: data
|
||||||
|
mountPath: /usr/share/elasticsearch/data
|
||||||
|
- name: increase-vm-max-map
|
||||||
|
image: busybox
|
||||||
|
imagePullPolicy: IfNotPresent
|
||||||
|
command: ["sysctl", "-w", "vm.max_map_count=262144"]
|
||||||
|
securityContext:
|
||||||
|
privileged: true
|
||||||
|
- name: increase-fd-ulimit
|
||||||
|
image: busybox
|
||||||
|
imagePullPolicy: IfNotPresent
|
||||||
|
command: ["sh", "-c", "ulimit -n 65536"]
|
||||||
|
securityContext:
|
||||||
|
privileged: true
|
||||||
|
|
||||||
|
topologySpreadConstraints:
|
||||||
|
- maxSkew: 1
|
||||||
|
topologyKey: kubernetes.io/hostname
|
||||||
|
whenUnsatisfiable: ScheduleAnyway
|
||||||
|
labelSelector:
|
||||||
|
matchLabels:
|
||||||
|
app: elasticsearch
|
||||||
|
tier: elasticsearch
|
||||||
|
|
||||||
|
volumeClaimTemplates:
|
||||||
|
- metadata:
|
||||||
|
name: data
|
||||||
|
labels:
|
||||||
|
app: elastic
|
||||||
|
tier: elastic
|
||||||
|
spec:
|
||||||
|
{{- if eq "k3s" $.Values.kube }}
|
||||||
|
accessModes: [ "ReadWriteOnce" ]
|
||||||
|
storageClassName: {{ required ".Values.elastic.persistentVolumeClaim.k3sStorageClassName entry is required!" .Values.elastic.persistentVolumeClaim.k3sStorageClassName }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if eq "k8s" $.Values.kube }}
|
||||||
|
accessModes: [ "ReadWriteMany" ]
|
||||||
|
storageClassName: {{ required ".Values.elastic.persistentVolumeClaim.k8sStorageClassName entry is required!" .Values.elastic.persistentVolumeClaim.k8sStorageClassName }}
|
||||||
|
{{- end }}
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: {{ required ".Values.elastic.persistentVolumeClaim.storageRequest entry is required!" .Values.elastic.persistentVolumeClaim.storageRequest }}
|
||||||
12
helm/templates/kibana/configmap-kibana.yaml
Normal file
12
helm/templates/kibana/configmap-kibana.yaml
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: configmap-kibana
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app: site
|
||||||
|
tier: kibana
|
||||||
|
{{- include "site.labels" . | nindent 4 }}
|
||||||
|
data:
|
||||||
|
ELASTICSEARCH_HOSTS: "{{ required ".Values.kibana.host entry is required!" .Values.kibana.host }}"
|
||||||
|
ELASTICSEARCH_USERNAME: "{{ required ".Values.kibana.username entry is required!" .Values.kibana.username }}"
|
||||||
74
helm/templates/kibana/deployment-kibana.yaml
Normal file
74
helm/templates/kibana/deployment-kibana.yaml
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: deployment-kibana
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app: site
|
||||||
|
tier: kibana
|
||||||
|
{{- include "site.labels" . | nindent 4 }}
|
||||||
|
spec:
|
||||||
|
replicas: 1
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: site
|
||||||
|
tier: kibana
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: site
|
||||||
|
tier: kibana
|
||||||
|
{{- include "site.labels" . | nindent 8 }}
|
||||||
|
spec:
|
||||||
|
priorityClassName: {{ required ".Values.kibana.priorityClassName entry is required!" .Values.kibana.priorityClassName }}
|
||||||
|
automountServiceAccountToken: false
|
||||||
|
containers:
|
||||||
|
- name: kibana
|
||||||
|
image: docker.elastic.co/kibana/kibana:7.17.10
|
||||||
|
imagePullPolicy: IfNotPresent
|
||||||
|
|
||||||
|
envFrom:
|
||||||
|
- configMapRef:
|
||||||
|
name: configmap-kibana
|
||||||
|
- secretRef:
|
||||||
|
name: secret-kibana
|
||||||
|
#env:
|
||||||
|
# - name: ELASTICSEARCH_HOSTS
|
||||||
|
# value: '["http://statefulset-elasticsearch-0.service-elasticsearch:9200"]'
|
||||||
|
# - name: ELASTICSEARCH_USERNAME
|
||||||
|
# value: elastic
|
||||||
|
# - name: ELASTICSEARCH_PASSWORD
|
||||||
|
# value: password
|
||||||
|
|
||||||
|
ports:
|
||||||
|
- containerPort: 5601
|
||||||
|
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
cpu: 100m
|
||||||
|
memory: 300Mi
|
||||||
|
ephemeral-storage: 128M
|
||||||
|
limits:
|
||||||
|
cpu: 1000m
|
||||||
|
memory: 1Gi
|
||||||
|
ephemeral-storage: 512M
|
||||||
|
startupProbe:
|
||||||
|
tcpSocket:
|
||||||
|
port: 5601
|
||||||
|
failureThreshold: 12
|
||||||
|
periodSeconds: 10
|
||||||
|
livenessProbe:
|
||||||
|
tcpSocket:
|
||||||
|
port: 5601
|
||||||
|
periodSeconds: 10
|
||||||
|
failureThreshold: 3
|
||||||
|
initialDelaySeconds: 30
|
||||||
|
timeoutSeconds: 5
|
||||||
|
topologySpreadConstraints:
|
||||||
|
- maxSkew: 1
|
||||||
|
topologyKey: kubernetes.io/hostname
|
||||||
|
whenUnsatisfiable: ScheduleAnyway
|
||||||
|
labelSelector:
|
||||||
|
matchLabels:
|
||||||
|
app: stackgmo
|
||||||
|
tier: kibana
|
||||||
29
helm/templates/kibana/ingress-kibana.yaml
Normal file
29
helm/templates/kibana/ingress-kibana.yaml
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
name: ingress-kibana
|
||||||
|
spec:
|
||||||
|
{{- if eq "k3s" $.Values.kube }}
|
||||||
|
ingressClassName: traefik
|
||||||
|
{{- end }}
|
||||||
|
{{- if eq "k8s" $.Values.kube }}
|
||||||
|
ingressClassName: nginx
|
||||||
|
{{- end }}
|
||||||
|
tls:
|
||||||
|
- hosts:
|
||||||
|
{{ required ".Values.site.ingress.kibana.hosts entry is required!" .Values.site.ingress.kibana.hosts }}
|
||||||
|
secretName: secret-ingress-tls
|
||||||
|
|
||||||
|
rules:
|
||||||
|
- host: {{ required ".Values.site.urlKibana entry is required!" .Values.site.urlKibana }}
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- path: /
|
||||||
|
pathType: Prefix
|
||||||
|
backend:
|
||||||
|
service:
|
||||||
|
name: service-kibana
|
||||||
|
port:
|
||||||
|
number: 5601
|
||||||
|
|
||||||
10
helm/templates/kibana/secret-kibana.yaml
Normal file
10
helm/templates/kibana/secret-kibana.yaml
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Secret
|
||||||
|
metadata:
|
||||||
|
name: secret-kibana
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
{{- include "site.labels" . | nindent 4 }}
|
||||||
|
type: Opaque
|
||||||
|
stringData:
|
||||||
|
ELASTICSEARCH_PASSWORD: "{{ required ".Values.elastic.password entry is required!" .Values.elastic.password }}"
|
||||||
15
helm/templates/kibana/service-kibana.yaml
Normal file
15
helm/templates/kibana/service-kibana.yaml
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: service-kibana
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app: site
|
||||||
|
tier: kibana
|
||||||
|
{{- include "site.labels" . | nindent 4 }}
|
||||||
|
spec:
|
||||||
|
ports:
|
||||||
|
- port: 5601
|
||||||
|
selector:
|
||||||
|
app: site
|
||||||
|
tier: kibana
|
||||||
38
helm/templates/mariadb/configmap-mariadb.yaml
Normal file
38
helm/templates/mariadb/configmap-mariadb.yaml
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
name: configmap-mariadb-envvars
|
||||||
|
labels:
|
||||||
|
{{- include "site.labels" . | nindent 4 }}
|
||||||
|
data:
|
||||||
|
MYSQL_DATABASE: "{{ required ".Values.mariadb.databaseName entry is required!" .Values.mariadb.databaseName }}"
|
||||||
|
MYSQL_USER: "{{ required ".Values.site.phpfpmSite.db.user entry is required!" .Values.site.phpfpmSite.db.user }}"
|
||||||
|
MYSQL_PASSWORD: "{{ required ".Values.mariadb.dbPass entry is required!" .Values.mariadb.dbPass }}"
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
name: configmap-mariadb-config
|
||||||
|
labels:
|
||||||
|
{{- include "site.labels" . | nindent 4 }}
|
||||||
|
data:
|
||||||
|
docker.cnf: |
|
||||||
|
[mysqld]
|
||||||
|
skip-host-cache
|
||||||
|
skip-name-resolve
|
||||||
|
sql_mode=""
|
||||||
|
innodb_buffer_pool_size={{ required ".Values.mariadb.innoDbBufferPoolSize entry is required!" .Values.mariadb.innoDbBufferPoolSize }}
|
||||||
|
thread_cache_size = 128
|
||||||
|
sort_buffer_size = 5M
|
||||||
|
join_buffer_size = 64M
|
||||||
|
bulk_insert_buffer_size = 16M
|
||||||
|
tmp_table_size = 32M
|
||||||
|
max_heap_table_size = 32M
|
||||||
|
innodb_open_files = 400
|
||||||
|
innodb_io_capacity = 400
|
||||||
|
innodb_flush_method = O_DIRECT
|
||||||
|
query_cache_type=1
|
||||||
|
query_cache_size={{ required ".Values.mariadb.queryCacheSize entry is required!" .Values.mariadb.queryCacheSize }}
|
||||||
|
query_cache_limit={{ required ".Values.mariadb.queryCacheLimit entry is required!" .Values.mariadb.queryCacheLimit }}
|
||||||
53
helm/templates/mariadb/cronjob-mariadb-bckdb.yaml
Normal file
53
helm/templates/mariadb/cronjob-mariadb-bckdb.yaml
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
apiVersion: batch/v1
|
||||||
|
kind: CronJob
|
||||||
|
metadata:
|
||||||
|
name: cronjob-mariadb-backupdb
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
{{- include "site.labels" . | nindent 4 }}
|
||||||
|
spec:
|
||||||
|
schedule: "30 20 * * *"
|
||||||
|
successfulJobsHistoryLimit: 1
|
||||||
|
failedJobsHistoryLimit: 3
|
||||||
|
concurrencyPolicy: Forbid
|
||||||
|
startingDeadlineSeconds: 120
|
||||||
|
jobTemplate:
|
||||||
|
spec:
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: mariadb
|
||||||
|
tier: cronjob
|
||||||
|
{{- include "site.labels" . | nindent 12 }}
|
||||||
|
annotations:
|
||||||
|
checksum/configmap-env: {{ include (print $.Chart.Name "/templates/mariadb/configmap-mariadb.yaml") . | sha256sum }}
|
||||||
|
checksum/secret-env: {{ include (print $.Chart.Name "/templates/mariadb/secret-mariadb.yaml") . | sha256sum }}
|
||||||
|
spec:
|
||||||
|
automountServiceAccountToken: false
|
||||||
|
containers:
|
||||||
|
- image: {{ required ".Values.mariadb.repository entry is required!" .Values.mariadb.repository }}:{{ required ".Values.mariadb.tag entry is required!" .Values.mariadb.tag }}
|
||||||
|
imagePullPolicy: IfNotPresent
|
||||||
|
name: cronjob-mariadb-backupdb
|
||||||
|
envFrom:
|
||||||
|
- configMapRef:
|
||||||
|
name: configmap-mariadb-envvars
|
||||||
|
- secretRef:
|
||||||
|
name: secret-mariadb
|
||||||
|
command: ["/bin/sh", "-c"]
|
||||||
|
args:
|
||||||
|
- set -x;
|
||||||
|
ls -l /var/backups;
|
||||||
|
/usr/bin/mysqldump --verbose --hex-blob --complete-insert --single-transaction --skip-lock-tables --skip-add-locks --routines -h service-mariadb -uroot -p$MYSQL_ROOT_PASSWORD $MYSQL_DATABASE | gzip - > /var/backups/$MYSQL_DATABASE-$(date +%Y-%m-%d_%H%M%S).sql.gz;
|
||||||
|
find /var/backups/ -mindepth 1 -type f -mtime +14 -exec rm {} \;
|
||||||
|
volumeMounts:
|
||||||
|
- name: mariadb-datadir-bck
|
||||||
|
mountPath: /var/backups
|
||||||
|
|
||||||
|
restartPolicy: OnFailure
|
||||||
|
|
||||||
|
terminationGracePeriodSeconds: {{ required ".Values.mariadb.terminationGracePeriodSeconds entry is required!" .Values.mariadb.terminationGracePeriodSeconds }}
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
- name: mariadb-datadir-bck
|
||||||
|
persistentVolumeClaim:
|
||||||
|
claimName: pvc-mariadb-datadir-bck
|
||||||
47
helm/templates/mariadb/pvc-mariadb.yaml
Normal file
47
helm/templates/mariadb/pvc-mariadb.yaml
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
name: pvc-mariadb-datadir
|
||||||
|
labels:
|
||||||
|
{{- include "site.labels" . | nindent 4 }}
|
||||||
|
annotations:
|
||||||
|
helm.sh/resource-policy: keep
|
||||||
|
spec:
|
||||||
|
{{- if eq "k3s" $.Values.kube }}
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
storageClassName: {{ required ".Values.mariadb.persistentVolumeClaim.k3sStorageClassName entry is required!" .Values.mariadb.persistentVolumeClaim.k3sStorageClassName }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if eq "k8s" $.Values.kube }}
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteMany
|
||||||
|
storageClassName: {{ required ".Values.mariadb.persistentVolumeClaim.k8sStorageClassName entry is required!" .Values.mariadb.persistentVolumeClaim.k8sStorageClassName }}
|
||||||
|
{{- end }}
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: {{ required ".Values.site.marioadb.persistentVolumeClaim.storageRequest entry is required!" .Values.mariadb.persistentVolumeClaim.storageRequest }}
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
name: pvc-mariadb-datadir-bck
|
||||||
|
labels:
|
||||||
|
{{- include "site.labels" . | nindent 4 }}
|
||||||
|
annotations:
|
||||||
|
helm.sh/resource-policy: keep
|
||||||
|
spec:
|
||||||
|
{{- if eq "k3s" $.Values.kube }}
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
storageClassName: {{ required ".Values.mariadb.persistentVolumeClaim.k3sStorageClassName entry is required!" .Values.mariadb.persistentVolumeClaim.k3sStorageClassName }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if eq "k8s" $.Values.kube }}
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteMany
|
||||||
|
storageClassName: {{ required ".Values.mariadb.persistentVolumeClaim.k8sStorageClassName entry is required!" .Values.mariadb.persistentVolumeClaim.k8sStorageClassName }}
|
||||||
|
{{- end }}
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: {{ required ".Values.mariadb.persistentVolumeClaim.backupdDbStorageRequest entry is required!" .Values.mariadb.persistentVolumeClaim.backupdDbStorageRequest }}
|
||||||
10
helm/templates/mariadb/secret-mariadb.yaml
Normal file
10
helm/templates/mariadb/secret-mariadb.yaml
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Secret
|
||||||
|
metadata:
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
name: secret-mariadb
|
||||||
|
labels:
|
||||||
|
{{- include "site.labels" . | nindent 4 }}
|
||||||
|
type: Opaque
|
||||||
|
stringData:
|
||||||
|
MYSQL_ROOT_PASSWORD: "{{ required ".Values.mariadb.rootPass entry is required!" .Values.mariadb.rootPass }}"
|
||||||
14
helm/templates/mariadb/service-mariadb.yaml
Normal file
14
helm/templates/mariadb/service-mariadb.yaml
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
name: service-mariadb
|
||||||
|
labels:
|
||||||
|
{{- include "site.labels" . | nindent 4 }}
|
||||||
|
spec:
|
||||||
|
ports:
|
||||||
|
- port: 3306
|
||||||
|
selector:
|
||||||
|
app: mariadb
|
||||||
|
tier: mariadb
|
||||||
|
clusterIP: None #Headless service, commmunication will no go throught service proxy
|
||||||
93
helm/templates/mariadb/statefulset-mariadb.yaml
Normal file
93
helm/templates/mariadb/statefulset-mariadb.yaml
Normal file
@ -0,0 +1,93 @@
|
|||||||
|
apiVersion: apps/v1
|
||||||
|
kind: StatefulSet
|
||||||
|
metadata:
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
name: statefulset-mariadb
|
||||||
|
labels:
|
||||||
|
{{- include "site.labels" . | nindent 4 }}
|
||||||
|
spec:
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: mariadb
|
||||||
|
tier: mariadb
|
||||||
|
serviceName: "mariadb"
|
||||||
|
replicas: 1
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: mariadb
|
||||||
|
tier: mariadb
|
||||||
|
{{- include "site.labels" . | nindent 8 }}
|
||||||
|
annotations:
|
||||||
|
checksum/configmap: {{ include (print $.Template.BasePath "/mariadb/configmap-mariadb.yaml") . | sha256sum }}
|
||||||
|
checksum/secret: {{ include (print $.Template.BasePath "/mariadb/secret-mariadb.yaml") . | sha256sum }}
|
||||||
|
checksum/values-config: {{ .Files.Get "values-config-k3s.yaml" | sha256sum }}
|
||||||
|
spec:
|
||||||
|
automountServiceAccountToken: false
|
||||||
|
containers:
|
||||||
|
- image: {{ required ".Values.mariadb.repository entry is required!" .Values.mariadb.repository }}:{{ required ".Values.mariadb.tag entry is required!" .Values.mariadb.tag }}
|
||||||
|
imagePullPolicy: IfNotPresent
|
||||||
|
name: mariadb
|
||||||
|
envFrom:
|
||||||
|
- configMapRef:
|
||||||
|
name: configmap-mariadb-envvars
|
||||||
|
- secretRef:
|
||||||
|
name: secret-mariadb
|
||||||
|
|
||||||
|
ports:
|
||||||
|
- containerPort: 3306
|
||||||
|
name: mariadb
|
||||||
|
|
||||||
|
startupProbe:
|
||||||
|
tcpSocket:
|
||||||
|
port: 3306
|
||||||
|
failureThreshold: 12
|
||||||
|
periodSeconds: 10
|
||||||
|
timeoutSeconds: 5
|
||||||
|
|
||||||
|
livenessProbe:
|
||||||
|
tcpSocket:
|
||||||
|
port: 3306
|
||||||
|
periodSeconds: 60
|
||||||
|
failureThreshold: 1
|
||||||
|
initialDelaySeconds: 0
|
||||||
|
timeoutSeconds: 5
|
||||||
|
|
||||||
|
readinessProbe:
|
||||||
|
tcpSocket:
|
||||||
|
port: 3306
|
||||||
|
periodSeconds: 10
|
||||||
|
failureThreshold: 3
|
||||||
|
initialDelaySeconds: 0
|
||||||
|
timeoutSeconds: 5
|
||||||
|
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
memory: "{{ required ".Values.mariadb.ressourceRequest.memory entry is required!" .Values.mariadb.ressourceRequest.memory }}"
|
||||||
|
cpu: "{{ required ".Values.mariadb.ressourceRequest.cpu entry is required!" .Values.mariadb.ressourceRequest.cpu }}"
|
||||||
|
ephemeral-storage: "{{ required ".Values.mariadb.ressourceRequest.ephemeralStorage entry is required!" .Values.mariadb.ressourceRequest.ephemeralStorage }}"
|
||||||
|
limits:
|
||||||
|
memory: "{{ required ".Values.mariadb.ressourceLimit.memory entry is required!" .Values.mariadb.ressourceLimit.memory }}"
|
||||||
|
cpu: "{{ required ".Values.mariadb.ressourceLimit.cpu entry is required!" .Values.mariadb.ressourceLimit.cpu }}"
|
||||||
|
ephemeral-storage: "{{ required ".Values.mariadb.ressourceLimit.ephemeralStorage entry is required!" .Values.mariadb.ressourceLimit.ephemeralStorage }}"
|
||||||
|
|
||||||
|
volumeMounts:
|
||||||
|
- name: mariadb-datadir
|
||||||
|
mountPath: /var/lib/mysql
|
||||||
|
- name: mariadb-config
|
||||||
|
mountPath: /etc/mysql/conf.d/
|
||||||
|
|
||||||
|
lifecycle:
|
||||||
|
preStop:
|
||||||
|
exec:
|
||||||
|
command: ["/bin/sh","-c","pkill -SIGTERM mariadb"]
|
||||||
|
|
||||||
|
terminationGracePeriodSeconds: {{ required ".Values.mariadb.terminationGracePeriodSeconds entry is required!" .Values.mariadb.terminationGracePeriodSeconds }}
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
- name: mariadb-datadir
|
||||||
|
persistentVolumeClaim:
|
||||||
|
claimName: pvc-mariadb-datadir
|
||||||
|
- name: mariadb-config
|
||||||
|
configMap:
|
||||||
|
name: configmap-mariadb-config
|
||||||
37
helm/templates/php-fpm/configmap-nginx.yaml
Normal file
37
helm/templates/php-fpm/configmap-nginx.yaml
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: configmap-nginx
|
||||||
|
labels:
|
||||||
|
{{- include "site.labels" . | nindent 4 }}
|
||||||
|
|
||||||
|
data:
|
||||||
|
default.conf: |
|
||||||
|
server {
|
||||||
|
index index.php;
|
||||||
|
root /var/www/html/web;
|
||||||
|
listen 8080;
|
||||||
|
server_name _;
|
||||||
|
charset utf-8;
|
||||||
|
error_log /dev/stderr;
|
||||||
|
access_log /dev/stdout;
|
||||||
|
|
||||||
|
# Deny all attempts to access hidden files such as .htaccess, .htpasswd, .DS_Store (Mac).
|
||||||
|
# Keep logging the requests to parse later (or to pass to firewall utilities such as fail2ban)
|
||||||
|
location ~ /\. {
|
||||||
|
deny all;
|
||||||
|
}
|
||||||
|
|
||||||
|
location / {
|
||||||
|
index index.php;
|
||||||
|
try_files $uri $uri/ /index.php?$query_string;
|
||||||
|
}
|
||||||
|
|
||||||
|
location ~ \.php$ {
|
||||||
|
fastcgi_split_path_info ^(.+\.php)(/.+)$;
|
||||||
|
fastcgi_pass 127.0.0.1:9000;
|
||||||
|
fastcgi_index index.php;
|
||||||
|
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
|
||||||
|
include fastcgi_params;
|
||||||
|
}
|
||||||
|
}
|
||||||
20
helm/templates/php-fpm/configmap-site.yaml
Normal file
20
helm/templates/php-fpm/configmap-site.yaml
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: configmap-phpfpm
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
{{- include "site.labels" . | nindent 4 }}
|
||||||
|
data:
|
||||||
|
SITE_VERSION: "{{ required ".Chart.AppVersion entry is required!" .Chart.AppVersion }}"
|
||||||
|
SITE_TITLE: "{{ required ".Values.site.phpfpmSite.site.title entry is required!" .Values.site.phpfpmSite.site.title }}"
|
||||||
|
DB_HOST: "{{ required ".Values.site.phpfpmSite.db.host entry is required!" .Values.site.phpfpmSite.db.host }}"
|
||||||
|
DB_USER: "{{ required ".Values.site.phpfpmSite.db.user entry is required!" .Values.site.phpfpmSite.db.user }}"
|
||||||
|
DB_NAME: "{{ required ".Values.site.phpfpmSite.db.name entry is required!" .Values.site.phpfpmSite.db.name }}"
|
||||||
|
DB_PORT: "{{ required ".Values.site.phpfpmSite.db.port entry is required!" .Values.site.phpfpmSite.db.port }}"
|
||||||
|
DB_TABLE: "{{ required ".Values.site.phpfpmSite.db.tabl entry is required!" .Values.site.phpfpmSite.db.tabl }}"
|
||||||
|
PMA_URL: "https://{{ required ".Values.site.urlPma entry is required!" .Values.site.urlPma }}"
|
||||||
|
ES_HOST: "{{ required ".Values.site.phpfpmSite.es.host entry is required!" .Values.site.phpfpmSite.es.host }}"
|
||||||
|
ES_USER: "{{ required ".Values.site.phpfpmSite.es.user entry is required!" .Values.site.phpfpmSite.es.user }}"
|
||||||
|
ES_INDEX: "{{ required ".Values.site.phpfpmSite.es.index entry is required!" .Values.site.phpfpmSite.es.index }}"
|
||||||
|
KIBANA_URL: "https://{{ required ".Values.site.utlKibana entry is required!" .Values.site.urlKibana }}"
|
||||||
181
helm/templates/php-fpm/deployment-site.yaml
Normal file
181
helm/templates/php-fpm/deployment-site.yaml
Normal file
@ -0,0 +1,181 @@
|
|||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
|
||||||
|
metadata:
|
||||||
|
name: deployment-site
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app: site
|
||||||
|
tier: backend
|
||||||
|
# {{- include "site.labels" . | nindent 4 }}
|
||||||
|
|
||||||
|
spec:
|
||||||
|
replicas: {{ required ".Values.site.replicas entry is required!" .Values.site.replicas }}
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: site
|
||||||
|
tier: backend
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
type: RollingUpdate
|
||||||
|
rollingUpdate:
|
||||||
|
maxUnavailable: 25%
|
||||||
|
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: site
|
||||||
|
tier: backend
|
||||||
|
# {{- include "site.labels" . | nindent 8 }}
|
||||||
|
annotations:
|
||||||
|
checksum/configmap-nginx: {{ include (print $.Chart.Name "/templates/php-fpm/configmap-nginx.yaml") . | sha256sum }}
|
||||||
|
checksum/values-config: {{ .Files.Get "values-config-k3s.yaml" | sha256sum }}
|
||||||
|
checksum/values-secrets: {{ .Files.Get "values-secrets-k3s.yaml" | sha256sum }}
|
||||||
|
spec:
|
||||||
|
# if private registry. See README.md
|
||||||
|
imagePullSecrets:
|
||||||
|
- name: secret-regcred
|
||||||
|
containers:
|
||||||
|
## Container 1 : Nginx
|
||||||
|
- image: {{ required ".Values.site.nginxSite.repository entry is required!" .Values.site.nginxSite.repository }}:{{ required ".Values.site.nginxSite.tag entry is required!" .Values.site.nginxSite.tag }}
|
||||||
|
imagePullPolicy: {{ required ".Values.site.nginxSite.pullPolicy entry is required!" .Values.site.nginxSite.pullPolicy }}
|
||||||
|
name: nginx
|
||||||
|
ports:
|
||||||
|
- containerPort: 8080
|
||||||
|
name: nginx
|
||||||
|
|
||||||
|
volumeMounts:
|
||||||
|
# config ngnix
|
||||||
|
- name: volume-configmap-nginx
|
||||||
|
mountPath: {{ required ".Values.site.nginxSite.nginxConfigPath entry is required!" .Values.site.nginxSite.nginxConfigPath }}
|
||||||
|
subPath: default.conf
|
||||||
|
# site datas
|
||||||
|
- name: volume-pvc-site-files
|
||||||
|
mountPath: {{ required ".Values.site.filesMountPath entry is required!" .Values.site.filesMountPath }}
|
||||||
|
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
memory: "{{ required ".Values.site.nginxSite.ressourceRequest.memory entry is required!" .Values.site.nginxSite.ressourceRequest.memory }}"
|
||||||
|
cpu: "{{ required ".Values.site.nginxSite.ressourceRequest.cpu entry is required!" .Values.site.nginxSite.ressourceRequest.cpu }}"
|
||||||
|
ephemeral-storage: "{{ required ".Values.site.nginxSite.ressourceRequest.ephemeralStorage entry is required!" .Values.site.nginxSite.ressourceRequest.ephemeralStorage }}"
|
||||||
|
limits:
|
||||||
|
memory: "{{ required ".Values.site.nginxSite.ressourceLimit.memory entry is required!" .Values.site.nginxSite.ressourceLimit.memory }}"
|
||||||
|
cpu: "{{ required ".Values.site.nginxSite.ressourceLimit.cpu entry is required!" .Values.site.nginxSite.ressourceLimit.cpu }}"
|
||||||
|
ephemeral-storage: "{{ required ".Values.site.nginxSite.ressourceLimit.ephemeralStorage entry is required!" .Values.site.nginxSite.ressourceLimit.ephemeralStorage }}"
|
||||||
|
|
||||||
|
startupProbe:
|
||||||
|
tcpSocket:
|
||||||
|
port: 8080
|
||||||
|
#port: 80
|
||||||
|
failureThreshold: 30
|
||||||
|
periodSeconds: 10
|
||||||
|
|
||||||
|
livenessProbe:
|
||||||
|
tcpSocket:
|
||||||
|
port: 8080
|
||||||
|
#port: 80
|
||||||
|
periodSeconds: 30
|
||||||
|
failureThreshold: 3 #Default 3
|
||||||
|
initialDelaySeconds: 0
|
||||||
|
|
||||||
|
readinessProbe:
|
||||||
|
exec:
|
||||||
|
command:
|
||||||
|
- "/bin/sh"
|
||||||
|
- "-c"
|
||||||
|
- "curl -s http://localhost:8080"
|
||||||
|
periodSeconds: 10
|
||||||
|
failureThreshold: 3
|
||||||
|
initialDelaySeconds: 0
|
||||||
|
timeoutSeconds: 5
|
||||||
|
|
||||||
|
securityContext:
|
||||||
|
runAsNonRoot: true
|
||||||
|
runAsUser: 82
|
||||||
|
runAsGroup: 82
|
||||||
|
allowPrivilegeEscalation: false
|
||||||
|
#capabilities:
|
||||||
|
# drop:
|
||||||
|
# - ALL
|
||||||
|
|
||||||
|
### Container 2 : PHP-FPM
|
||||||
|
- image: {{ required ".Values.site.phpfpmSite.repository entry is required!" .Values.site.phpfpmSite.repository }}:{{ required ".Chart.AppVersion entry is required!" .Chart.AppVersion }}
|
||||||
|
imagePullPolicy: {{ required ".Values.site.phpfpmSite.pullPolicy entry is required!" .Values.site.phpfpmSite.pullPolicy }}
|
||||||
|
name: phpfpm
|
||||||
|
|
||||||
|
envFrom:
|
||||||
|
- configMapRef:
|
||||||
|
name: configmap-phpfpm
|
||||||
|
- secretRef:
|
||||||
|
name: secret-site
|
||||||
|
|
||||||
|
ports:
|
||||||
|
- containerPort: 9000
|
||||||
|
name: phpfpm
|
||||||
|
|
||||||
|
startupProbe:
|
||||||
|
tcpSocket:
|
||||||
|
port: 9000
|
||||||
|
failureThreshold: 30
|
||||||
|
periodSeconds: 10
|
||||||
|
|
||||||
|
livenessProbe:
|
||||||
|
tcpSocket:
|
||||||
|
port: 9000
|
||||||
|
periodSeconds: 30
|
||||||
|
failureThreshold: 3 #Default 3
|
||||||
|
initialDelaySeconds: 0
|
||||||
|
|
||||||
|
readinessProbe:
|
||||||
|
tcpSocket:
|
||||||
|
port: 9000
|
||||||
|
periodSeconds: 10
|
||||||
|
failureThreshold: 3
|
||||||
|
initialDelaySeconds: 0
|
||||||
|
timeoutSeconds: 5
|
||||||
|
|
||||||
|
securityContext:
|
||||||
|
runAsNonRoot: true
|
||||||
|
runAsUser: 82
|
||||||
|
runAsGroup: 82
|
||||||
|
allowPrivilegeEscalation: false
|
||||||
|
#capabilities:
|
||||||
|
# drop:
|
||||||
|
# - ALL
|
||||||
|
|
||||||
|
volumeMounts:
|
||||||
|
- name: volume-site-sources
|
||||||
|
mountPath: {{ required ".Values.site.sourcesMountPath entry is required!" .Values.site.sourcesMountPath }}
|
||||||
|
- name: volume-pvc-site-files
|
||||||
|
mountPath: {{ required ".Values.site.filesMountPath entry is required!" .Values.site.filesMountPath }}
|
||||||
|
|
||||||
|
lifecycle:
|
||||||
|
postStart:
|
||||||
|
exec:
|
||||||
|
command:
|
||||||
|
- "/bin/sh"
|
||||||
|
- "-c"
|
||||||
|
- |
|
||||||
|
cp -r /app/. {{ required ".Values.site.filesMountPath entry is required!" .Values.site.filesMountPath }}
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
# config ngnix
|
||||||
|
- name: volume-configmap-nginx
|
||||||
|
configMap:
|
||||||
|
name: configmap-nginx
|
||||||
|
defaultMode: 420
|
||||||
|
# site datas
|
||||||
|
- name: volume-pvc-site-files
|
||||||
|
persistentVolumeClaim:
|
||||||
|
claimName: pvc-site-files
|
||||||
|
- name: volume-site-sources
|
||||||
|
emptyDir: {}
|
||||||
|
|
||||||
|
securityContext:
|
||||||
|
runAsNonRoot: true
|
||||||
|
runAsUser: 82
|
||||||
|
runAsGroup: 82
|
||||||
|
fsGroup: 82
|
||||||
|
fsGroupChangePolicy: "Always"
|
||||||
|
seccompProfile:
|
||||||
|
type: RuntimeDefault
|
||||||
46
helm/templates/php-fpm/ingress-site.yaml
Normal file
46
helm/templates/php-fpm/ingress-site.yaml
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
---
|
||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
name: ingress-site
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app: site
|
||||||
|
tier: backend
|
||||||
|
# {{- include "site.labels" . | nindent 4 }} # label provenant de _helpers.tpl (label informatif pas obligatoire)
|
||||||
|
annotations:
|
||||||
|
{{- if eq "k3s" $.Values.kube }}
|
||||||
|
traefik.ingress.kubernetes.io/redirect-entry-point: https
|
||||||
|
traefik.ingress.kubernetes.io/preserve-host: "true"
|
||||||
|
{{- end }}
|
||||||
|
{{- if eq "k8s" $.Values.kube }}
|
||||||
|
#kubernetes.io/ingress.allow-http: "false"
|
||||||
|
#nginx.ingress.kubernetes.io/affinity: "cookie"
|
||||||
|
##nginx.ingress.kubernetes.io/session-cookie-name: "SAUTHSESSION*"
|
||||||
|
#nginx.ingress.kubernetes.io/proxy-body-size: "32m"
|
||||||
|
#nginx.org/client-max-body-size: "32m"
|
||||||
|
{{- end }}
|
||||||
|
|
||||||
|
spec:
|
||||||
|
{{- if eq "k3s" $.Values.kube }}
|
||||||
|
ingressClassName: traefik
|
||||||
|
{{- end }}
|
||||||
|
{{- if eq "k8s" $.Values.kube }}
|
||||||
|
ingressClassName: nginx
|
||||||
|
{{- end }}
|
||||||
|
tls:
|
||||||
|
- hosts:
|
||||||
|
{{ required ".Values.site.ingress.site.hosts entry is required!" .Values.site.ingress.site.hosts }}
|
||||||
|
secretName: secret-ingress-tls
|
||||||
|
rules:
|
||||||
|
- host: {{ required ".Values.site.host entry is required!" .Values.site.host }}
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- path: /
|
||||||
|
pathType: Prefix
|
||||||
|
backend:
|
||||||
|
service:
|
||||||
|
name: service-site
|
||||||
|
port:
|
||||||
|
number: 8080
|
||||||
|
|
||||||
25
helm/templates/php-fpm/pvc-site.yaml
Normal file
25
helm/templates/php-fpm/pvc-site.yaml
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: PersistentVolumeClaim
|
||||||
|
metadata:
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
name: pvc-site-files
|
||||||
|
labels:
|
||||||
|
app: site
|
||||||
|
tier: backend
|
||||||
|
# {{- include "site.labels" . | nindent 4 }}
|
||||||
|
annotations:
|
||||||
|
helm.sh/resource-policy: keep
|
||||||
|
spec:
|
||||||
|
{{- if eq "k3s" $.Values.kube }}
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteOnce
|
||||||
|
storageClassName: {{ required ".Values.site.persistentVolumeClaim.k3sStorageClassName entry is required!" .Values.site.persistentVolumeClaim.k3sStorageClassName }}
|
||||||
|
{{- end }}
|
||||||
|
{{- if eq "k8s" $.Values.kube }}
|
||||||
|
accessModes:
|
||||||
|
- ReadWriteMany
|
||||||
|
storageClassName: {{ required ".Values.site.persistentVolumeClaim.k8sStorageClassName entry is required!" .Values.site.persistentVolumeClaim.k8sStorageClassName }}
|
||||||
|
{{- end }}
|
||||||
|
resources:
|
||||||
|
requests:
|
||||||
|
storage: {{ required ".Values.site.persistentVolumeClaim.storageRequest entry is required!" .Values.site.persistentVolumeClaim.storageRequest }}
|
||||||
10
helm/templates/php-fpm/secret-ingress-tls.yaml
Normal file
10
helm/templates/php-fpm/secret-ingress-tls.yaml
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
data:
|
||||||
|
#tls.crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUZpakNDQTNLZ0F3SUJBZ0lVQnNaUlB4aW1oRjRLMTFnWFgyTWtzZXdvb0drd0RRWUpLb1pJaHZjTkFRRUwKQlFBd2diNHhDekFKQmdOVkJBWVRBa05JTVEwd0N3WURWUVFJRXdSV1lYVmtNUTB3Q3dZRFZRUUhFd1JPZVc5dQpNU0V3SHdZRFZRUUtFeGhIVFU4Z1RHRmliM0poZEc5cGNtVWdLR2R0YjJ4aFlpa3hNREF1QmdOVkJBc1RKMU5KClRFRkNJQ2hUZVhOMFpXMWxJR2x1Wm05eWJXRjBhVzl1SUd4aFltOXlZWFJ2YVhKbEtURVNNQkFHQTFVRUF4TUoKUjAxUFRHRmlJRU5CTVNnd0pnWUpLb1pJaHZjTkFRa0JGaGxsZUhCc2IybDBMbWR0YjNSbFkyaEFaMjFoYVd3dQpZMjl0TUI0WERUSXpNRFF5TWpBMk1EWXdObG9YRFRJME1EUXlNVEEyTURZd05sb3dnY0V4Q3pBSkJnTlZCQVlUCkFrTklNUTB3Q3dZRFZRUUlFd1JXWVhWa01RMHdDd1lEVlFRSEV3Uk9lVzl1TVNFd0h3WURWUVFLRXhoSFRVOGcKVEdGaWIzSmhkRzlwY21VZ0tHZHRiMnhoWWlreE1EQXVCZ05WQkFzVEoxTkpURUZDSUNoVGVYTjBaVzFsSUdsdQpabTl5YldGMGFXOXVJR3hoWW05eVlYUnZhWEpsS1RFVk1CTUdBMVVFQXhRTUtpNW5iVzlzWVdJdWJtVjBNU2d3CkpnWUpLb1pJaHZjTkFRa0JGaGxsZUhCc2IybDBMbWR0YjNSbFkyaEFaMjFoYVd3dVkyOXRNSUlCSWpBTkJna3EKaGtpRzl3MEJBUUVGQUFPQ0FROEFNSUlCQ2dLQ0FRRUFsUy9ncEpXdkNKZG9WQitqWFNoVG14c0hjTkx6NFp4agpTN21lNVhWSHRySWRlR0czUHlwb0VXTGJEcGcxVjB6aHVZbDJYajJmWTFuWnJRRm5IWnprZERLZGJybzYxZFVkCmdSVCsxNXBnWjl0NXZPWHdUUlNqWnFQVlAvaHdRSVlxTXV1T1lJbzNVQ090TmtwVHhSaUc4alpPU3hYdEQvRWIKQmdYR0N2d2l2cnBQMWVTUzdPYmJaQzVHaC9LYW9xZkhIbkhnejVZQnloMmJjTzM0czFibDZKb1UzWjNIOEhrcQpFN2JCSWlVTzNHcjY4bnVrWUdxZ3M5ZURRRWlZV2I4OHA0Rkh2N2dzWXdpV2VlQTE0N2J0bDlDUjRzR0hRdngwCjBnbkRVZkNnaTdBeTExZkZYYzNndlN0K0ErdUFtLzRmR3MrN0lJT0Y1MFQxQjNSMFRtYUxud0lEQVFBQm8zc3cKZVRBSkJnTlZIUk1FQWpBQU1CY0dBMVVkRVFRUU1BNkNEQ291WjIxdmJHRmlMbTVsZERBVEJnTlZIU1VFRERBSwpCZ2dyQmdFRkJRY0RBVEFkQmdOVkhRNEVGZ1FVSS9jeDFsbzhiN3Q1MmNNK256SEdLL0NiZ2trd0h3WURWUjBqCkJCZ3dGb0FVNVJKTnFPMjJTTzlVQXFPek0vTnZBTXViK1c0d0RRWUpLb1pJaHZjTkFRRUxCUUFEZ2dJQkFLQzgKcDJTZHRqSGpMQXBsS0tYMG9aVUJoOEJUVC9Vd0JTSXBJZkdxVS9rNlRJZG9rc2JTWGV1OVYwZHI4UWtFbXAxMgpJOU9jNWRIVDlBcDJZM0xMYTNzRmVJWDRvWkgrZkZ0alRBcmlPT2lpUk1IOEpDWERqZEhvelF0ZEQ2eEtBRm83CnJyaEsvQXUrNEdaSE1oclM3MFBUM3lJNHB5L2w4dVRrSUpIUXh2LytwUXkxN0RNN2w2NXpMSEFOR1JjVGhpcXoKQTVBRjNacU9SSGUyUXpLdnJ5NVFIcFB1ak9LNFFVMzA1WTVXRXE5OEVCRnVUK29zd2FORHloSGVteWlzdW1kNwpXcHZaTS9hNm50ZmNJT1Q3K3JiR3BWWG1wU1ZJaGFFcExhdWQrUWI2eDlIV0hwRFc3dDV3ZklDUjBXU3NNWTBnCnlla1pWRzZtMGpvUXpBbUpQM3JvRldSRlNTM3NrOExKTTAzYnJMeWJJNmdGWVFqdEpBK2t4T1Z5VVNmeXE0T0gKTml6YWxVdzZUeDlkRFV2YlRSelA0UXhSSGRna1NqelFaVHlMN1ZjKzBGU1BqOWk5S1dNcDk4NkNsUXE4RkdpUAoydkxkNnJUOFM3WEdjY3JWUlk2TllYdGRSWVVKS2lnWkNmYWExSWZ1L3J2NHRadGpnREFkRjlUSGd5VW1zMU43Cm4xTUZkQTZiZVZKRUtjc1VqZDRtMUdtc1FBLzloN1JreVJUclRLOEc2eWE0MU5ZRjJZTCtVM2JnU1pyaFFrM3EKbVp1TFdIOGx0SkwvR0FiN0J3K2VYMzUyVlZ0T09GNS9xNTY0RUlkcHJVWkJNTDJlYmxwMCtJTDZ4cFBhSjNDQQo4TW51amllbWh3aVFFRmpBMDNsNkltc2pzMHYxRVBGL082dm5iUE5nCi0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K
|
||||||
|
tls.crt: {{- required ".Values.site.ssl_crt entry is required!" .Values.site.ssl_crt | nindent 4 }}
|
||||||
|
tls.key: {{- required ".Values.site.ssl_key entry is required!" .Values.site.ssl_key | nindent 4 }}
|
||||||
|
kind: Secret
|
||||||
|
metadata:
|
||||||
|
name: secret-ingress-tls
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
type: kubernetes.io/tls
|
||||||
8
helm/templates/php-fpm/secret-regcred.yaml
Normal file
8
helm/templates/php-fpm/secret-regcred.yaml
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
data:
|
||||||
|
.dockerconfigjson: eyJhdXRocyI6eyJodHRwczovL2luZGV4LmRvY2tlci5pby92MS8iOnsidXNlcm5hbWUiOiJnbW91Y2hldCIsInBhc3N3b3JkIjoiT3B0MW11c1ByaW1lX0RvY2tlciIsImVtYWlsIjoiZ21vdWNoZXRAYmx1ZXdpbi5jaCIsImF1dGgiOiJaMjF2ZFdOb1pYUTZUM0IwTVcxMWMxQnlhVzFsWDBSdlkydGxjZz09In19fQ==
|
||||||
|
kind: Secret
|
||||||
|
metadata:
|
||||||
|
name: secret-regcred
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
type: kubernetes.io/dockerconfigjson
|
||||||
12
helm/templates/php-fpm/secret-site.yaml
Normal file
12
helm/templates/php-fpm/secret-site.yaml
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Secret
|
||||||
|
metadata:
|
||||||
|
name: secret-site
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
{{- include "site.labels" . | nindent 4 }}
|
||||||
|
type: Opaque
|
||||||
|
stringData:
|
||||||
|
DB_PASSWORD: "{{ required ".Values.mariadb.dbPass entry is required!" .Values.mariadb.dbPass }}"
|
||||||
|
ES_PASSWORD: "{{ required ".Values.elastic.password entry is required!" .Values.elastic.password }}"
|
||||||
|
|
||||||
18
helm/templates/php-fpm/service-site.yaml
Normal file
18
helm/templates/php-fpm/service-site.yaml
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: service-site
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
labels:
|
||||||
|
app: site
|
||||||
|
tier: backend
|
||||||
|
# {{- include "site.labels" . | nindent 4 }}
|
||||||
|
|
||||||
|
spec:
|
||||||
|
ports:
|
||||||
|
- port: 8080
|
||||||
|
protocol: TCP
|
||||||
|
selector:
|
||||||
|
app: site
|
||||||
|
tier: backend
|
||||||
|
type: ClusterIP
|
||||||
32
helm/templates/phpmyadmin/deployment-pma.yaml
Normal file
32
helm/templates/phpmyadmin/deployment-pma.yaml
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
---
|
||||||
|
apiVersion: apps/v1
|
||||||
|
kind: Deployment
|
||||||
|
metadata:
|
||||||
|
name: deployment-pma
|
||||||
|
labels:
|
||||||
|
app: phpmyadmin
|
||||||
|
spec:
|
||||||
|
replicas: 1
|
||||||
|
selector:
|
||||||
|
matchLabels:
|
||||||
|
app: phpmyadmin
|
||||||
|
template:
|
||||||
|
metadata:
|
||||||
|
labels:
|
||||||
|
app: phpmyadmin
|
||||||
|
spec:
|
||||||
|
containers:
|
||||||
|
- name: phpmyadmin
|
||||||
|
image: phpmyadmin
|
||||||
|
ports:
|
||||||
|
- containerPort: 80
|
||||||
|
env:
|
||||||
|
- name: PMA_HOST
|
||||||
|
value: service-mariadb
|
||||||
|
- name: PMA_PORT
|
||||||
|
value: "3306"
|
||||||
|
- name: MYSQL_ROOT_PASSWORD
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: secret-mariadb
|
||||||
|
key: MYSQL_ROOT_PASSWORD
|
||||||
42
helm/templates/phpmyadmin/ingress-pma.yaml
Normal file
42
helm/templates/phpmyadmin/ingress-pma.yaml
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
apiVersion: networking.k8s.io/v1
|
||||||
|
kind: Ingress
|
||||||
|
metadata:
|
||||||
|
name: ingress-pma
|
||||||
|
namespace: {{ .Release.Namespace }}
|
||||||
|
annotations:
|
||||||
|
{{- if eq "k3s" $.Values.kube }}
|
||||||
|
traefik.ingress.kubernetes.io/redirect-entry-point: https
|
||||||
|
traefik.ingress.kubernetes.io/preserve-host: "true"
|
||||||
|
#traefik.ingress.kubernetes.io/rewrite-target: /
|
||||||
|
#traefik.ingress.kubernetes.io/rule-type: PathPrefixStrip
|
||||||
|
{{- end }}
|
||||||
|
{{- if eq "k8s" $.Values.kube }}
|
||||||
|
#kubernetes.io/ingress.allow-http: "false"
|
||||||
|
#nginx.ingress.kubernetes.io/affinity: "cookie"
|
||||||
|
##nginx.ingress.kubernetes.io/session-cookie-name: "SAUTHSESSION*"
|
||||||
|
#nginx.ingress.kubernetes.io/proxy-body-size: "32m"
|
||||||
|
#nginx.org/client-max-body-size: "32m"
|
||||||
|
{{- end }}
|
||||||
|
spec:
|
||||||
|
{{- if eq "k3s" $.Values.kube }}
|
||||||
|
ingressClassName: traefik
|
||||||
|
{{- end }}
|
||||||
|
{{- if eq "k8s" $.Values.kube }}
|
||||||
|
ingressClassName: nginx
|
||||||
|
{{- end }}
|
||||||
|
tls:
|
||||||
|
- hosts:
|
||||||
|
{{ required ".Values.site.ingress.pma.hosts entry is required!" .Values.site.ingress.pma.hosts }}
|
||||||
|
secretName: secret-ingress-tls
|
||||||
|
rules:
|
||||||
|
- host: {{ required ".Values.site.urlPma entry is required!" .Values.site.urlPma }}
|
||||||
|
http:
|
||||||
|
paths:
|
||||||
|
- path: /
|
||||||
|
pathType: Prefix
|
||||||
|
backend:
|
||||||
|
service:
|
||||||
|
name: service-pma
|
||||||
|
port:
|
||||||
|
number: 80
|
||||||
|
|
||||||
14
helm/templates/phpmyadmin/service-pma.yaml
Normal file
14
helm/templates/phpmyadmin/service-pma.yaml
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Service
|
||||||
|
metadata:
|
||||||
|
name: service-pma
|
||||||
|
spec:
|
||||||
|
# type: NodePort
|
||||||
|
type: ClusterIP
|
||||||
|
selector:
|
||||||
|
app: phpmyadmin
|
||||||
|
ports:
|
||||||
|
- protocol: TCP
|
||||||
|
port: 80
|
||||||
|
targetPort: 80
|
||||||
109
helm/values-configs.yaml
Normal file
109
helm/values-configs.yaml
Normal file
@ -0,0 +1,109 @@
|
|||||||
|
# which kubernetes distribution we deploy
|
||||||
|
#kube: k3s
|
||||||
|
#kube: k8s
|
||||||
|
|
||||||
|
# elasticsearch
|
||||||
|
elastic:
|
||||||
|
priorityClassName: system-cluster-critical
|
||||||
|
imageTag: 7.17.16
|
||||||
|
persistentVolumeClaim:
|
||||||
|
storageRequest: 1Gi
|
||||||
|
k3sStorageClassName: local-path
|
||||||
|
k8sStorageClassName: longhorn
|
||||||
|
|
||||||
|
kibana:
|
||||||
|
username: elastic
|
||||||
|
priorityClassName: system-node-critical
|
||||||
|
host: http://statefulset-elasticsearch-0.service-elasticsearch:9200
|
||||||
|
|
||||||
|
mariadb:
|
||||||
|
repository: mariadb
|
||||||
|
pullPolicy: Always
|
||||||
|
tag: "10.11.7"
|
||||||
|
databaseName: gmo_db
|
||||||
|
innoDbBufferPoolSize: 256M
|
||||||
|
queryCacheSize: 256M
|
||||||
|
queryCacheLimit: 4M
|
||||||
|
ressourceRequest:
|
||||||
|
memory: 300Mi
|
||||||
|
cpu: 100m
|
||||||
|
ephemeralStorage: 128M
|
||||||
|
ressourceLimit:
|
||||||
|
memory: 1250Mi #1250 Mo RAM, au delà eviction
|
||||||
|
cpu: 200m # 0.1 core de CPU, au delà CPU Throttle
|
||||||
|
ephemeralStorage: 512M #512 Mo de storage non persistent (en + de ce qui est dans l'image), au delà éviction
|
||||||
|
terminationGracePeriodSeconds: 60
|
||||||
|
persistentVolumeClaim:
|
||||||
|
storageRequest: 5Gi
|
||||||
|
backupdDbStorageRequest: 10Gi
|
||||||
|
k3sStorageClassName: local-path
|
||||||
|
k8sStorageClassName: longhorn
|
||||||
|
|
||||||
|
site:
|
||||||
|
host: wwwgmo.gmolab.net
|
||||||
|
urlPma: wwwgmo-pma.gmolab.net
|
||||||
|
urlKibana: wwwgmo-kibana.gmolab.net
|
||||||
|
replicas: 1
|
||||||
|
priorityClassName: business-app-critical
|
||||||
|
terminationGracePeriodSeconds: 60
|
||||||
|
filesMountPath: /var/www/html/web
|
||||||
|
sourcesMountPath: /var/www/html
|
||||||
|
ssl_crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUZQekNDQXllZ0F3SUJBZ0lKQU5YN2sxZ3dnOVNjTUEwR0NTcUdTSWIzRFFFQkN3VUFNSUcrTVFzd0NRWUQKVlFRR0V3SkRTREVOTUFzR0ExVUVDQk1FVm1GMVpERU5NQXNHQTFVRUJ4TUVUbmx2YmpFaE1COEdBMVVFQ2hNWQpSMDFQSUV4aFltOXlZWFJ2YVhKbElDaG5iVzlzWVdJcE1UQXdMZ1lEVlFRTEV5ZFRTVXhCUWlBb1UzbHpkR1Z0ClpTQnBibVp2Y20xaGRHbHZiaUJzWVdKdmNtRjBiMmx5WlNreEVqQVFCZ05WQkFNVENVZE5UMHhoWWlCRFFURW8KTUNZR0NTcUdTSWIzRFFFSkFSWVpaWGh3Ykc5cGRDNW5iVzkwWldOb1FHZHRZV2xzTG1OdmJUQWVGdzB5TkRBMApNVE14TmpRNU5EQmFGdzB5TlRBME1UTXhOalE1TkRCYU1JSEJNUXN3Q1FZRFZRUUdFd0pEU0RFTk1Bc0dBMVVFCkNCTUVWbUYxWkRFTk1Bc0dBMVVFQnhNRVRubHZiakVoTUI4R0ExVUVDaE1ZUjAxUElFeGhZbTl5WVhSdmFYSmwKSUNobmJXOXNZV0lwTVRBd0xnWURWUVFMRXlkVFNVeEJRaUFvVTNsemRHVnRaU0JwYm1admNtMWhkR2x2YmlCcwpZV0p2Y21GMGIybHlaU2t4RlRBVEJnTlZCQU1VRENvdVoyMXZiR0ZpTG01bGRERW9NQ1lHQ1NxR1NJYjNEUUVKCkFSWVpaWGh3Ykc5cGRDNW5iVzkwWldOb1FHZHRZV2xzTG1OdmJUQ0NBU0l3RFFZSktvWklodmNOQVFFQkJRQUQKZ2dFUEFEQ0NBUW9DZ2dFQkFKVXY0S1NWcndpWGFGUWZvMTBvVTVzYkIzRFM4K0djWTB1NW51VjFSN2F5SFhoaAp0ejhxYUJGaTJ3NllOVmRNNGJtSmRsNDluMk5aMmEwQlp4MmM1SFF5blc2Nk90WFZIWUVVL3RlYVlHZmJlYnpsCjhFMFVvMmFqMVQvNGNFQ0dLakxyam1DS04xQWpyVFpLVThVWWh2STJUa3NWN1EveEd3WUZ4Z3I4SXI2NlQ5WGsKa3V6bTIyUXVSb2Z5bXFLbnh4NXg0TStXQWNvZG0zRHQrTE5XNWVpYUZOMmR4L0I1S2hPMndTSWxEdHhxK3ZKNwpwR0Jxb0xQWGcwQkltRm0vUEtlQlI3KzRMR01JbG5uZ05lTzI3WmZRa2VMQmgwTDhkTklKdzFId29JdXdNdGRYCnhWM040TDByZmdQcmdKditIeHJQdXlDRGhlZEU5UWQwZEU1bWk1OENBd0VBQWFNN01Ea3dDUVlEVlIwVEJBSXcKQURBWEJnTlZIUkVFRURBT2dnd3FMbWR0YjJ4aFlpNXVaWFF3RXdZRFZSMGxCQXd3Q2dZSUt3WUJCUVVIQXdFdwpEUVlKS29aSWh2Y05BUUVMQlFBRGdnSUJBR2RhMEJIVHNkOE1wNElYeEhRUFFZNGxrcGJsVmdIZzJFaFAxTFhsClpRbkxZckRPR1hEejB3dHdsaHI2NndjaTk3NU4vL1o3aFJzMUs4N2s3YmhWOFdBZklLYzA5ZHlhc2ZrbFhRZTgKNWU0cUNSVGhPV084aCtsSVVmbElSOHE3OVpBRG53N0pBMEZWZ20zdEUwcnpja1VmaXBFVVUyTCtlNDBIZnhSVgpxcDJ6b2MySVMwRnZ2MEZkNWUwd0krMng5TzFzMkZPcUNRa3lOZWU1SCtidGNnYXJkODdJbzZIeWhBMnYrZnIzCm1DenNkNzdiMkQ2K2FLVmNKWFNnR09BNVRRUjQ4TWVVOGNndEpxTkcwWXJGS045L2FBc2lGRWZMelJpdzhoRHcKanRiVUxTT1Btdm1FMXJXTGdpb28vNk5tcFNkWkZJaVFxQ0cyb3BiNUR3UjJrTGpjZkZ4N3loWGhzUllCdCt6Vwp3dzBlbjJSdXlEV3VqbWJtQUo5K0Uxb2hWTU00SXIzK21EcklPQlArcVRSak82UFB0NGVFT1JnUUlyd2U0WHJ5CkhWYjF5NXpPSHN6STZESkN1QXc4YjBaN293MnZCY3orVllsemt3M0lINWdGS01KeWVxZktKa0xkSzRqZlVLVHkKN3MvR3NRMEI5SERhT1U1OWdaOXJUMTE4SFpBVCtqZG9vaFhwOTI4MFhjeThUbHZZWE1veDIxZ0xLaE1jUFFkZgoyOWJvOEVCQnhhWUtMNWszcVRzamg4ZWd0KzFibFZCRTdzMk1BcGdJaFJxVlZTcmxSMldXWGovT2VOcFJXMlM0CjQrSWg5YXc5eWMrc0lValJ3Y2pCM1EwaG9iTWMrbEROQXRYM080OUxnMldaUmJWRnFxbFpVZWZyenRRa0pyZW8KK255TQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg==
|
||||||
|
|
||||||
|
nginxSite:
|
||||||
|
repository: nginxinc/nginx-unprivileged
|
||||||
|
pullPolicy: Always
|
||||||
|
tag: "1.23"
|
||||||
|
nginxConfigPath: /etc/nginx/conf.d/default.conf
|
||||||
|
ressourceRequest:
|
||||||
|
memory: 16M #16 Mo RAM
|
||||||
|
cpu: 50m # 0.05 core de CPU
|
||||||
|
ephemeralStorage: 512M #512 Mo de storage non persistent (en + de ce qui est dans l'image)
|
||||||
|
ressourceLimit:
|
||||||
|
memory: 128M #128 Mo RAM, au delà eviction
|
||||||
|
cpu: 500m # 0.5 core de CPU, au delà CPU Throttle
|
||||||
|
ephemeralStorage: 512M #512 Mo de storage non persistent (en + de ce qui est dans l'image), au delà éviction
|
||||||
|
|
||||||
|
ingress:
|
||||||
|
site:
|
||||||
|
hosts:
|
||||||
|
- wwwgmo.gmolab.net
|
||||||
|
pma:
|
||||||
|
hosts:
|
||||||
|
- wwwgmo-pma.gmolab.net
|
||||||
|
kibana:
|
||||||
|
hosts:
|
||||||
|
- wwwgmo-kibana.gmolab.net
|
||||||
|
|
||||||
|
phpfpmSite:
|
||||||
|
repository: gmouchet/wwwgmo-php-fpm
|
||||||
|
pullPolicy: Always
|
||||||
|
ressourceRequest:
|
||||||
|
memory: 16M #16 Mo RAM
|
||||||
|
cpu: 50m # 0.05 core de CPU
|
||||||
|
ephemeralStorage: 512M #512 Mo de storage non persistent (en + de ce qui est dans l'image)
|
||||||
|
ressourceLimit:
|
||||||
|
memory: 128M #128 Mo RAM, au delà eviction
|
||||||
|
cpu: 500m # 0.5 core de CPU, au delà CPU Throttle
|
||||||
|
ephemeralStorage: 512M #512 Mo de storage non persistent (en + de ce qui est dans l'image), au delà éviction
|
||||||
|
site:
|
||||||
|
title: "Stack GMo - PHP-FPM - MariaDB - Elasticsearch"
|
||||||
|
db:
|
||||||
|
name: gmo_db
|
||||||
|
user: gmo_db
|
||||||
|
host: service-mariadb
|
||||||
|
port: 3306
|
||||||
|
tabl: tbl_email
|
||||||
|
es:
|
||||||
|
host: service-elasticsearch:9200
|
||||||
|
user: elastic
|
||||||
|
index: wwwgmo_index
|
||||||
|
|
||||||
|
persistentVolumeClaim:
|
||||||
|
storageRequest: 1Gi
|
||||||
|
k3sStorageClassName: local-path
|
||||||
|
k8sStorageClassName: longhorn
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
10
helm/values-secrets.yaml
Normal file
10
helm/values-secrets.yaml
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
site:
|
||||||
|
ssl_key: LS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tCk1JSUV2UUlCQURBTkJna3Foa2lHOXcwQkFRRUZBQVNDQktjd2dnU2pBZ0VBQW9JQkFRQ1ZMK0NrbGE4SWwyaFUKSDZOZEtGT2JHd2R3MHZQaG5HTkx1WjdsZFVlMnNoMTRZYmMvS21nUll0c09tRFZYVE9HNWlYWmVQWjlqV2RtdApBV2Nkbk9SME1wMXV1anJWMVIyQkZQN1htbUJuMjNtODVmQk5GS05tbzlVLytIQkFoaW95NjQ1Z2lqZFFJNjAyClNsUEZHSWJ5Tms1TEZlMFA4UnNHQmNZSy9DSyt1ay9WNUpMczV0dGtMa2FIOHBxaXA4Y2VjZURQbGdIS0hadHcKN2ZpelZ1WG9taFRkbmNmd2VTb1R0c0VpSlE3Y2F2cnllNlJnYXFDejE0TkFTSmhadnp5bmdVZS91Q3hqQ0paNQo0RFhqdHUyWDBKSGl3WWRDL0hUU0NjTlI4S0NMc0RMWFY4VmR6ZUM5SzM0RDY0Q2IvaDhhejdzZ2c0WG5SUFVICmRIUk9ab3VmQWdNQkFBRUNnZ0VBRGpNRXRrV0tQUGx1M3ZXS21VeEVTNGY5WTZTckVtSE4wRXIyTDdBWThrVHUKVkhpTElNSksyTDl5OVdiNzlMZUc2SFRkUlBKU2l2bmwrUGNnTnd1cGNYeDd5dFV1SjdvUUE5V0VFcHRKUDdsVApxSmRZdkNLOFpxd3Q3aTBabEsvd1c1dXdsOG12K0JCZE9tOUZSOXQzYjBoSFFyMloxdmJ1SG9XZ0tETFZUOEoxCis1MXlISC9VbGlIb0E4bzkxYUd3K3F5KzllWlJrdGpxSmlOWXpGMUMzVDB5Sk1yQXdxZXU4Z09ic2k3c2kwMWkKZ254d1VISDVVckNjaXZRTzQxWFBjUW5QYzQ5dTE4bkFRSGRxTTZNL05yTzZwWENUTnY0OHY2OEZsaDlmanBqawpvUDVJN0IwRThOTE5ZSDkyMEJUbE1hRFUvYVAwdE9HRXJHblgyWElBY1FLQmdRQzZRbFpJMjAyTmZMWnVSVmhoCjBMN3A4VklXWnE3UEl2US9tRHF4Rlc4WllkQk14RXY2UFZVTTl6VHVsVVh2TlM2SE9ncHAxUGxGVVNHM2dQRzUKZU1nR1piTTZjczJwM1dmOVVjZ1ZQYXM3Q2lGYnRZZXdJS0dYMWY5OHFMTU4ybkFTd2dVU0N5eUQrZER0UVpDWQp1VlRybnhZbUkrOHlBUFpOR3pSVUVNUnh1UUtCZ1FETkRBalpWTmNOeGJaVW1YWkZrMEp1YnNLUGZVMStYZVdrCkxCYkVCaDZwVG5hOWNVTE5Cc0F1ZjI4cEpFS1FQeXc4SVFEUDIwaDJXWUdIQ1FtNFZyMEM1TVN3TFVxNGdsalgKNHJ3bmxSZE44MDNqbjJTVUJjV1lGSGdNc1EyN2ZRT2lvNnVnUnUrZ0U2ZDMwa0lYTW1waUp4eHNuN3V5L0JBOAp1Z0pBc1R6MEZ3S0JnRE56ejlJZ2dyUHJGNW91bmRPbmpwV2hqRU9UNmdaZWFZcUh5dTdRTlBpV0JLeXdMU3piCmRIczRidTdaWFpCTzZLT0NiUTMvUHp6ZXhLbWtmU0gzTTRwUTNjbnZuTkNuME9veGhVd1kxUXhpS0FUbGlLNG0KMVh6VUtOZU80cWVaQ0F5bWZEQVgxaHcvRG0vOEJLMnJ4TUd5R0xSQWlQc1BPUHJqNFBpNENReEJBb0dBTmw0bgpob0N4V095QWtPUHo4VFMvbTRwd3VoMHVUQUJYb0hVMFFCdWpTNThMYXVXNklhVFZsajZoMmRYTWRIVGJwTUhYCmRrV2RiQXdGaFNtSFUwSmtjWHo1RGdHa1cxSHNmcW1XM0NQeS91OHhTdFo3azZnSUlXL2orUEdGUTU0OU5ZV1MKUHpndjExRCt5WTJOaXBzS2pDWDBxblNjRHpRNGxmRjRJWEVkU1ZjQ2dZRUF0VVQ2Y1BYdnYxamM4WVUvN3BjTApXR21WYldjcDNXbW5VK2FoaXBVM2l6YmxEUGkvWUR0aVhKSFVoYUl1TnZySVBKL2VIT1psejRPcVViS015YzFyCjV2blUrajg3MnZOdGViVkphemd1SHBHTzY3SVFrNHdJamp0TlQrQUYybUhjdnJUVTYyay9hWHJFSGN4ekZMMTMKcW1TcHNUVWtJYXFaZ2VMUERWMWNOZWc9Ci0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS0K
|
||||||
|
|
||||||
|
mariadb:
|
||||||
|
rootPass: pa55w0rd
|
||||||
|
dbPass: passw0rd
|
||||||
|
|
||||||
|
elastic:
|
||||||
|
password: pa55w0rd
|
||||||
|
|
||||||
34
src/checkindex.php
Normal file
34
src/checkindex.php
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
|
||||||
|
require_once 'config.php';
|
||||||
|
function checkindex($user,$password,$host,$index)
|
||||||
|
{
|
||||||
|
$curl = curl_init();
|
||||||
|
|
||||||
|
// construct url
|
||||||
|
curl_setopt($curl, CURLOPT_URL,"http://".$user.":".$password."@".$host."/".$index);
|
||||||
|
//curl_setopt($curl, CURLOPT_URL,"http://elasti:".$es_password."@".$es_host."/gmo_index");
|
||||||
|
curl_setopt($curl, CURLOPT_NOBODY, true);
|
||||||
|
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT ,5); // connect timeout
|
||||||
|
curl_setopt($curl, CURLOPT_TIMEOUT, 10); // curl timeout
|
||||||
|
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
|
||||||
|
|
||||||
|
if(FALSE === curl_exec($curl)){
|
||||||
|
//echo('open '.$es_index.' failed'."\n");
|
||||||
|
$retCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
|
||||||
|
return $retCode;
|
||||||
|
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
// Fetch the HTTP-code (cred: @GZipp)
|
||||||
|
$retCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
|
||||||
|
|
||||||
|
return $retCode;
|
||||||
|
//echo('HTTP return code='.$retcode."\n");
|
||||||
|
}
|
||||||
|
curl_close($curl);
|
||||||
|
|
||||||
|
}
|
||||||
|
return checkindex($es_user,$es_password,$es_host,$es_index)
|
||||||
|
?>
|
||||||
10
src/composer.json
Normal file
10
src/composer.json
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
{
|
||||||
|
"config": {
|
||||||
|
"allow-plugins": {
|
||||||
|
"php-http/discovery": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"elasticsearch/elasticsearch": "^8.13"
|
||||||
|
}
|
||||||
|
}
|
||||||
966
src/composer.lock
generated
Normal file
966
src/composer.lock
generated
Normal file
@ -0,0 +1,966 @@
|
|||||||
|
{
|
||||||
|
"_readme": [
|
||||||
|
"This file locks the dependencies of your project to a known state",
|
||||||
|
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||||
|
"This file is @generated automatically"
|
||||||
|
],
|
||||||
|
"content-hash": "56a8f0b49795e6a4e319b9bce9722c3b",
|
||||||
|
"packages": [
|
||||||
|
{
|
||||||
|
"name": "elastic/transport",
|
||||||
|
"version": "v8.8.0",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/elastic/elastic-transport-php.git",
|
||||||
|
"reference": "cdf9f63a16ec6bfb4c881ab89aa0e2a61fb7c20b"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/elastic/elastic-transport-php/zipball/cdf9f63a16ec6bfb4c881ab89aa0e2a61fb7c20b",
|
||||||
|
"reference": "cdf9f63a16ec6bfb4c881ab89aa0e2a61fb7c20b",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"composer-runtime-api": "^2.0",
|
||||||
|
"php": "^7.4 || ^8.0",
|
||||||
|
"php-http/discovery": "^1.14",
|
||||||
|
"php-http/httplug": "^2.3",
|
||||||
|
"psr/http-client": "^1.0",
|
||||||
|
"psr/http-factory": "^1.0",
|
||||||
|
"psr/http-message": "^1.0 || ^2.0",
|
||||||
|
"psr/log": "^1 || ^2 || ^3"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"nyholm/psr7": "^1.5",
|
||||||
|
"php-http/mock-client": "^1.5",
|
||||||
|
"phpstan/phpstan": "^1.4",
|
||||||
|
"phpunit/phpunit": "^9.5"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Elastic\\Transport\\": "src/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"description": "HTTP transport PHP library for Elastic products",
|
||||||
|
"keywords": [
|
||||||
|
"PSR_17",
|
||||||
|
"elastic",
|
||||||
|
"http",
|
||||||
|
"psr-18",
|
||||||
|
"psr-7",
|
||||||
|
"transport"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/elastic/elastic-transport-php/issues",
|
||||||
|
"source": "https://github.com/elastic/elastic-transport-php/tree/v8.8.0"
|
||||||
|
},
|
||||||
|
"time": "2023-11-08T10:51:51+00:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "elasticsearch/elasticsearch",
|
||||||
|
"version": "v8.13.0",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/elastic/elasticsearch-php.git",
|
||||||
|
"reference": "221723e9497515ec82833995a97c8546d9b6499a"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/elastic/elasticsearch-php/zipball/221723e9497515ec82833995a97c8546d9b6499a",
|
||||||
|
"reference": "221723e9497515ec82833995a97c8546d9b6499a",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"elastic/transport": "^8.8",
|
||||||
|
"guzzlehttp/guzzle": "^7.0",
|
||||||
|
"php": "^7.4 || ^8.0",
|
||||||
|
"psr/http-client": "^1.0",
|
||||||
|
"psr/http-message": "^1.1 || ^2.0",
|
||||||
|
"psr/log": "^1|^2|^3"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"ext-yaml": "*",
|
||||||
|
"ext-zip": "*",
|
||||||
|
"mockery/mockery": "^1.5",
|
||||||
|
"nyholm/psr7": "^1.5",
|
||||||
|
"php-http/message-factory": "^1.0",
|
||||||
|
"php-http/mock-client": "^1.5",
|
||||||
|
"phpstan/phpstan": "^1.4",
|
||||||
|
"phpunit/phpunit": "^9.5",
|
||||||
|
"psr/http-factory": "^1.0",
|
||||||
|
"symfony/finder": "~4.0",
|
||||||
|
"symfony/http-client": "^5.0|^6.0|^7.0"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Elastic\\Elasticsearch\\": "src/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"description": "PHP Client for Elasticsearch",
|
||||||
|
"keywords": [
|
||||||
|
"client",
|
||||||
|
"elastic",
|
||||||
|
"elasticsearch",
|
||||||
|
"search"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/elastic/elasticsearch-php/issues",
|
||||||
|
"source": "https://github.com/elastic/elasticsearch-php/tree/v8.13.0"
|
||||||
|
},
|
||||||
|
"time": "2024-03-27T15:09:06+00:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "guzzlehttp/guzzle",
|
||||||
|
"version": "7.8.1",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/guzzle/guzzle.git",
|
||||||
|
"reference": "41042bc7ab002487b876a0683fc8dce04ddce104"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/guzzle/guzzle/zipball/41042bc7ab002487b876a0683fc8dce04ddce104",
|
||||||
|
"reference": "41042bc7ab002487b876a0683fc8dce04ddce104",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"ext-json": "*",
|
||||||
|
"guzzlehttp/promises": "^1.5.3 || ^2.0.1",
|
||||||
|
"guzzlehttp/psr7": "^1.9.1 || ^2.5.1",
|
||||||
|
"php": "^7.2.5 || ^8.0",
|
||||||
|
"psr/http-client": "^1.0",
|
||||||
|
"symfony/deprecation-contracts": "^2.2 || ^3.0"
|
||||||
|
},
|
||||||
|
"provide": {
|
||||||
|
"psr/http-client-implementation": "1.0"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"bamarni/composer-bin-plugin": "^1.8.2",
|
||||||
|
"ext-curl": "*",
|
||||||
|
"php-http/client-integration-tests": "dev-master#2c025848417c1135031fdf9c728ee53d0a7ceaee as 3.0.999",
|
||||||
|
"php-http/message-factory": "^1.1",
|
||||||
|
"phpunit/phpunit": "^8.5.36 || ^9.6.15",
|
||||||
|
"psr/log": "^1.1 || ^2.0 || ^3.0"
|
||||||
|
},
|
||||||
|
"suggest": {
|
||||||
|
"ext-curl": "Required for CURL handler support",
|
||||||
|
"ext-intl": "Required for Internationalized Domain Name (IDN) support",
|
||||||
|
"psr/log": "Required for using the Log middleware"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"bamarni-bin": {
|
||||||
|
"bin-links": true,
|
||||||
|
"forward-command": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"files": [
|
||||||
|
"src/functions_include.php"
|
||||||
|
],
|
||||||
|
"psr-4": {
|
||||||
|
"GuzzleHttp\\": "src/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Graham Campbell",
|
||||||
|
"email": "hello@gjcampbell.co.uk",
|
||||||
|
"homepage": "https://github.com/GrahamCampbell"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Michael Dowling",
|
||||||
|
"email": "mtdowling@gmail.com",
|
||||||
|
"homepage": "https://github.com/mtdowling"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Jeremy Lindblom",
|
||||||
|
"email": "jeremeamia@gmail.com",
|
||||||
|
"homepage": "https://github.com/jeremeamia"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "George Mponos",
|
||||||
|
"email": "gmponos@gmail.com",
|
||||||
|
"homepage": "https://github.com/gmponos"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Tobias Nyholm",
|
||||||
|
"email": "tobias.nyholm@gmail.com",
|
||||||
|
"homepage": "https://github.com/Nyholm"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Márk Sági-Kazár",
|
||||||
|
"email": "mark.sagikazar@gmail.com",
|
||||||
|
"homepage": "https://github.com/sagikazarmark"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Tobias Schultze",
|
||||||
|
"email": "webmaster@tubo-world.de",
|
||||||
|
"homepage": "https://github.com/Tobion"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Guzzle is a PHP HTTP client library",
|
||||||
|
"keywords": [
|
||||||
|
"client",
|
||||||
|
"curl",
|
||||||
|
"framework",
|
||||||
|
"http",
|
||||||
|
"http client",
|
||||||
|
"psr-18",
|
||||||
|
"psr-7",
|
||||||
|
"rest",
|
||||||
|
"web service"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/guzzle/guzzle/issues",
|
||||||
|
"source": "https://github.com/guzzle/guzzle/tree/7.8.1"
|
||||||
|
},
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"url": "https://github.com/GrahamCampbell",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://github.com/Nyholm",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://tidelift.com/funding/github/packagist/guzzlehttp/guzzle",
|
||||||
|
"type": "tidelift"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"time": "2023-12-03T20:35:24+00:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "guzzlehttp/promises",
|
||||||
|
"version": "2.0.2",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/guzzle/promises.git",
|
||||||
|
"reference": "bbff78d96034045e58e13dedd6ad91b5d1253223"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/guzzle/promises/zipball/bbff78d96034045e58e13dedd6ad91b5d1253223",
|
||||||
|
"reference": "bbff78d96034045e58e13dedd6ad91b5d1253223",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": "^7.2.5 || ^8.0"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"bamarni/composer-bin-plugin": "^1.8.2",
|
||||||
|
"phpunit/phpunit": "^8.5.36 || ^9.6.15"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"bamarni-bin": {
|
||||||
|
"bin-links": true,
|
||||||
|
"forward-command": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"GuzzleHttp\\Promise\\": "src/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Graham Campbell",
|
||||||
|
"email": "hello@gjcampbell.co.uk",
|
||||||
|
"homepage": "https://github.com/GrahamCampbell"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Michael Dowling",
|
||||||
|
"email": "mtdowling@gmail.com",
|
||||||
|
"homepage": "https://github.com/mtdowling"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Tobias Nyholm",
|
||||||
|
"email": "tobias.nyholm@gmail.com",
|
||||||
|
"homepage": "https://github.com/Nyholm"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Tobias Schultze",
|
||||||
|
"email": "webmaster@tubo-world.de",
|
||||||
|
"homepage": "https://github.com/Tobion"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Guzzle promises library",
|
||||||
|
"keywords": [
|
||||||
|
"promise"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/guzzle/promises/issues",
|
||||||
|
"source": "https://github.com/guzzle/promises/tree/2.0.2"
|
||||||
|
},
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"url": "https://github.com/GrahamCampbell",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://github.com/Nyholm",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://tidelift.com/funding/github/packagist/guzzlehttp/promises",
|
||||||
|
"type": "tidelift"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"time": "2023-12-03T20:19:20+00:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "guzzlehttp/psr7",
|
||||||
|
"version": "2.6.2",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/guzzle/psr7.git",
|
||||||
|
"reference": "45b30f99ac27b5ca93cb4831afe16285f57b8221"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/guzzle/psr7/zipball/45b30f99ac27b5ca93cb4831afe16285f57b8221",
|
||||||
|
"reference": "45b30f99ac27b5ca93cb4831afe16285f57b8221",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": "^7.2.5 || ^8.0",
|
||||||
|
"psr/http-factory": "^1.0",
|
||||||
|
"psr/http-message": "^1.1 || ^2.0",
|
||||||
|
"ralouphie/getallheaders": "^3.0"
|
||||||
|
},
|
||||||
|
"provide": {
|
||||||
|
"psr/http-factory-implementation": "1.0",
|
||||||
|
"psr/http-message-implementation": "1.0"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"bamarni/composer-bin-plugin": "^1.8.2",
|
||||||
|
"http-interop/http-factory-tests": "^0.9",
|
||||||
|
"phpunit/phpunit": "^8.5.36 || ^9.6.15"
|
||||||
|
},
|
||||||
|
"suggest": {
|
||||||
|
"laminas/laminas-httphandlerrunner": "Emit PSR-7 responses"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"bamarni-bin": {
|
||||||
|
"bin-links": true,
|
||||||
|
"forward-command": false
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"GuzzleHttp\\Psr7\\": "src/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Graham Campbell",
|
||||||
|
"email": "hello@gjcampbell.co.uk",
|
||||||
|
"homepage": "https://github.com/GrahamCampbell"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Michael Dowling",
|
||||||
|
"email": "mtdowling@gmail.com",
|
||||||
|
"homepage": "https://github.com/mtdowling"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "George Mponos",
|
||||||
|
"email": "gmponos@gmail.com",
|
||||||
|
"homepage": "https://github.com/gmponos"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Tobias Nyholm",
|
||||||
|
"email": "tobias.nyholm@gmail.com",
|
||||||
|
"homepage": "https://github.com/Nyholm"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Márk Sági-Kazár",
|
||||||
|
"email": "mark.sagikazar@gmail.com",
|
||||||
|
"homepage": "https://github.com/sagikazarmark"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Tobias Schultze",
|
||||||
|
"email": "webmaster@tubo-world.de",
|
||||||
|
"homepage": "https://github.com/Tobion"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Márk Sági-Kazár",
|
||||||
|
"email": "mark.sagikazar@gmail.com",
|
||||||
|
"homepage": "https://sagikazarmark.hu"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "PSR-7 message implementation that also provides common utility methods",
|
||||||
|
"keywords": [
|
||||||
|
"http",
|
||||||
|
"message",
|
||||||
|
"psr-7",
|
||||||
|
"request",
|
||||||
|
"response",
|
||||||
|
"stream",
|
||||||
|
"uri",
|
||||||
|
"url"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/guzzle/psr7/issues",
|
||||||
|
"source": "https://github.com/guzzle/psr7/tree/2.6.2"
|
||||||
|
},
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"url": "https://github.com/GrahamCampbell",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://github.com/Nyholm",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://tidelift.com/funding/github/packagist/guzzlehttp/psr7",
|
||||||
|
"type": "tidelift"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"time": "2023-12-03T20:05:35+00:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "php-http/discovery",
|
||||||
|
"version": "1.19.4",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/php-http/discovery.git",
|
||||||
|
"reference": "0700efda8d7526335132360167315fdab3aeb599"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/php-http/discovery/zipball/0700efda8d7526335132360167315fdab3aeb599",
|
||||||
|
"reference": "0700efda8d7526335132360167315fdab3aeb599",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"composer-plugin-api": "^1.0|^2.0",
|
||||||
|
"php": "^7.1 || ^8.0"
|
||||||
|
},
|
||||||
|
"conflict": {
|
||||||
|
"nyholm/psr7": "<1.0",
|
||||||
|
"zendframework/zend-diactoros": "*"
|
||||||
|
},
|
||||||
|
"provide": {
|
||||||
|
"php-http/async-client-implementation": "*",
|
||||||
|
"php-http/client-implementation": "*",
|
||||||
|
"psr/http-client-implementation": "*",
|
||||||
|
"psr/http-factory-implementation": "*",
|
||||||
|
"psr/http-message-implementation": "*"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"composer/composer": "^1.0.2|^2.0",
|
||||||
|
"graham-campbell/phpspec-skip-example-extension": "^5.0",
|
||||||
|
"php-http/httplug": "^1.0 || ^2.0",
|
||||||
|
"php-http/message-factory": "^1.0",
|
||||||
|
"phpspec/phpspec": "^5.1 || ^6.1 || ^7.3",
|
||||||
|
"sebastian/comparator": "^3.0.5 || ^4.0.8",
|
||||||
|
"symfony/phpunit-bridge": "^6.4.4 || ^7.0.1"
|
||||||
|
},
|
||||||
|
"type": "composer-plugin",
|
||||||
|
"extra": {
|
||||||
|
"class": "Http\\Discovery\\Composer\\Plugin",
|
||||||
|
"plugin-optional": true
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Http\\Discovery\\": "src/"
|
||||||
|
},
|
||||||
|
"exclude-from-classmap": [
|
||||||
|
"src/Composer/Plugin.php"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Márk Sági-Kazár",
|
||||||
|
"email": "mark.sagikazar@gmail.com"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Finds and installs PSR-7, PSR-17, PSR-18 and HTTPlug implementations",
|
||||||
|
"homepage": "http://php-http.org",
|
||||||
|
"keywords": [
|
||||||
|
"adapter",
|
||||||
|
"client",
|
||||||
|
"discovery",
|
||||||
|
"factory",
|
||||||
|
"http",
|
||||||
|
"message",
|
||||||
|
"psr17",
|
||||||
|
"psr7"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/php-http/discovery/issues",
|
||||||
|
"source": "https://github.com/php-http/discovery/tree/1.19.4"
|
||||||
|
},
|
||||||
|
"time": "2024-03-29T13:00:05+00:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "php-http/httplug",
|
||||||
|
"version": "2.4.0",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/php-http/httplug.git",
|
||||||
|
"reference": "625ad742c360c8ac580fcc647a1541d29e257f67"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/php-http/httplug/zipball/625ad742c360c8ac580fcc647a1541d29e257f67",
|
||||||
|
"reference": "625ad742c360c8ac580fcc647a1541d29e257f67",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": "^7.1 || ^8.0",
|
||||||
|
"php-http/promise": "^1.1",
|
||||||
|
"psr/http-client": "^1.0",
|
||||||
|
"psr/http-message": "^1.0 || ^2.0"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"friends-of-phpspec/phpspec-code-coverage": "^4.1 || ^5.0 || ^6.0",
|
||||||
|
"phpspec/phpspec": "^5.1 || ^6.0 || ^7.0"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Http\\Client\\": "src/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Eric GELOEN",
|
||||||
|
"email": "geloen.eric@gmail.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Márk Sági-Kazár",
|
||||||
|
"email": "mark.sagikazar@gmail.com",
|
||||||
|
"homepage": "https://sagikazarmark.hu"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "HTTPlug, the HTTP client abstraction for PHP",
|
||||||
|
"homepage": "http://httplug.io",
|
||||||
|
"keywords": [
|
||||||
|
"client",
|
||||||
|
"http"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/php-http/httplug/issues",
|
||||||
|
"source": "https://github.com/php-http/httplug/tree/2.4.0"
|
||||||
|
},
|
||||||
|
"time": "2023-04-14T15:10:03+00:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "php-http/promise",
|
||||||
|
"version": "1.3.1",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/php-http/promise.git",
|
||||||
|
"reference": "fc85b1fba37c169a69a07ef0d5a8075770cc1f83"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/php-http/promise/zipball/fc85b1fba37c169a69a07ef0d5a8075770cc1f83",
|
||||||
|
"reference": "fc85b1fba37c169a69a07ef0d5a8075770cc1f83",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": "^7.1 || ^8.0"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"friends-of-phpspec/phpspec-code-coverage": "^4.3.2 || ^6.3",
|
||||||
|
"phpspec/phpspec": "^5.1.2 || ^6.2 || ^7.4"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Http\\Promise\\": "src/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Joel Wurtz",
|
||||||
|
"email": "joel.wurtz@gmail.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Márk Sági-Kazár",
|
||||||
|
"email": "mark.sagikazar@gmail.com"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Promise used for asynchronous HTTP requests",
|
||||||
|
"homepage": "http://httplug.io",
|
||||||
|
"keywords": [
|
||||||
|
"promise"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/php-http/promise/issues",
|
||||||
|
"source": "https://github.com/php-http/promise/tree/1.3.1"
|
||||||
|
},
|
||||||
|
"time": "2024-03-15T13:55:21+00:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "psr/http-client",
|
||||||
|
"version": "1.0.3",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/php-fig/http-client.git",
|
||||||
|
"reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/php-fig/http-client/zipball/bb5906edc1c324c9a05aa0873d40117941e5fa90",
|
||||||
|
"reference": "bb5906edc1c324c9a05aa0873d40117941e5fa90",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": "^7.0 || ^8.0",
|
||||||
|
"psr/http-message": "^1.0 || ^2.0"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-master": "1.0.x-dev"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Psr\\Http\\Client\\": "src/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "PHP-FIG",
|
||||||
|
"homepage": "https://www.php-fig.org/"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Common interface for HTTP clients",
|
||||||
|
"homepage": "https://github.com/php-fig/http-client",
|
||||||
|
"keywords": [
|
||||||
|
"http",
|
||||||
|
"http-client",
|
||||||
|
"psr",
|
||||||
|
"psr-18"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"source": "https://github.com/php-fig/http-client"
|
||||||
|
},
|
||||||
|
"time": "2023-09-23T14:17:50+00:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "psr/http-factory",
|
||||||
|
"version": "1.0.2",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/php-fig/http-factory.git",
|
||||||
|
"reference": "e616d01114759c4c489f93b099585439f795fe35"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/php-fig/http-factory/zipball/e616d01114759c4c489f93b099585439f795fe35",
|
||||||
|
"reference": "e616d01114759c4c489f93b099585439f795fe35",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": ">=7.0.0",
|
||||||
|
"psr/http-message": "^1.0 || ^2.0"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-master": "1.0.x-dev"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Psr\\Http\\Message\\": "src/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "PHP-FIG",
|
||||||
|
"homepage": "https://www.php-fig.org/"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Common interfaces for PSR-7 HTTP message factories",
|
||||||
|
"keywords": [
|
||||||
|
"factory",
|
||||||
|
"http",
|
||||||
|
"message",
|
||||||
|
"psr",
|
||||||
|
"psr-17",
|
||||||
|
"psr-7",
|
||||||
|
"request",
|
||||||
|
"response"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"source": "https://github.com/php-fig/http-factory/tree/1.0.2"
|
||||||
|
},
|
||||||
|
"time": "2023-04-10T20:10:41+00:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "psr/http-message",
|
||||||
|
"version": "2.0",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/php-fig/http-message.git",
|
||||||
|
"reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/php-fig/http-message/zipball/402d35bcb92c70c026d1a6a9883f06b2ead23d71",
|
||||||
|
"reference": "402d35bcb92c70c026d1a6a9883f06b2ead23d71",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": "^7.2 || ^8.0"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-master": "2.0.x-dev"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Psr\\Http\\Message\\": "src/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "PHP-FIG",
|
||||||
|
"homepage": "https://www.php-fig.org/"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Common interface for HTTP messages",
|
||||||
|
"homepage": "https://github.com/php-fig/http-message",
|
||||||
|
"keywords": [
|
||||||
|
"http",
|
||||||
|
"http-message",
|
||||||
|
"psr",
|
||||||
|
"psr-7",
|
||||||
|
"request",
|
||||||
|
"response"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"source": "https://github.com/php-fig/http-message/tree/2.0"
|
||||||
|
},
|
||||||
|
"time": "2023-04-04T09:54:51+00:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "psr/log",
|
||||||
|
"version": "3.0.0",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/php-fig/log.git",
|
||||||
|
"reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/php-fig/log/zipball/fe5ea303b0887d5caefd3d431c3e61ad47037001",
|
||||||
|
"reference": "fe5ea303b0887d5caefd3d431c3e61ad47037001",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": ">=8.0.0"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-master": "3.x-dev"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"psr-4": {
|
||||||
|
"Psr\\Log\\": "src"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "PHP-FIG",
|
||||||
|
"homepage": "https://www.php-fig.org/"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "Common interface for logging libraries",
|
||||||
|
"homepage": "https://github.com/php-fig/log",
|
||||||
|
"keywords": [
|
||||||
|
"log",
|
||||||
|
"psr",
|
||||||
|
"psr-3"
|
||||||
|
],
|
||||||
|
"support": {
|
||||||
|
"source": "https://github.com/php-fig/log/tree/3.0.0"
|
||||||
|
},
|
||||||
|
"time": "2021-07-14T16:46:02+00:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "ralouphie/getallheaders",
|
||||||
|
"version": "3.0.3",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/ralouphie/getallheaders.git",
|
||||||
|
"reference": "120b605dfeb996808c31b6477290a714d356e822"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/ralouphie/getallheaders/zipball/120b605dfeb996808c31b6477290a714d356e822",
|
||||||
|
"reference": "120b605dfeb996808c31b6477290a714d356e822",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": ">=5.6"
|
||||||
|
},
|
||||||
|
"require-dev": {
|
||||||
|
"php-coveralls/php-coveralls": "^2.1",
|
||||||
|
"phpunit/phpunit": "^5 || ^6.5"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"autoload": {
|
||||||
|
"files": [
|
||||||
|
"src/getallheaders.php"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Ralph Khattar",
|
||||||
|
"email": "ralph.khattar@gmail.com"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "A polyfill for getallheaders.",
|
||||||
|
"support": {
|
||||||
|
"issues": "https://github.com/ralouphie/getallheaders/issues",
|
||||||
|
"source": "https://github.com/ralouphie/getallheaders/tree/develop"
|
||||||
|
},
|
||||||
|
"time": "2019-03-08T08:55:37+00:00"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "symfony/deprecation-contracts",
|
||||||
|
"version": "v3.4.0",
|
||||||
|
"source": {
|
||||||
|
"type": "git",
|
||||||
|
"url": "https://github.com/symfony/deprecation-contracts.git",
|
||||||
|
"reference": "7c3aff79d10325257a001fcf92d991f24fc967cf"
|
||||||
|
},
|
||||||
|
"dist": {
|
||||||
|
"type": "zip",
|
||||||
|
"url": "https://api.github.com/repos/symfony/deprecation-contracts/zipball/7c3aff79d10325257a001fcf92d991f24fc967cf",
|
||||||
|
"reference": "7c3aff79d10325257a001fcf92d991f24fc967cf",
|
||||||
|
"shasum": ""
|
||||||
|
},
|
||||||
|
"require": {
|
||||||
|
"php": ">=8.1"
|
||||||
|
},
|
||||||
|
"type": "library",
|
||||||
|
"extra": {
|
||||||
|
"branch-alias": {
|
||||||
|
"dev-main": "3.4-dev"
|
||||||
|
},
|
||||||
|
"thanks": {
|
||||||
|
"name": "symfony/contracts",
|
||||||
|
"url": "https://github.com/symfony/contracts"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"autoload": {
|
||||||
|
"files": [
|
||||||
|
"function.php"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"notification-url": "https://packagist.org/downloads/",
|
||||||
|
"license": [
|
||||||
|
"MIT"
|
||||||
|
],
|
||||||
|
"authors": [
|
||||||
|
{
|
||||||
|
"name": "Nicolas Grekas",
|
||||||
|
"email": "p@tchwork.com"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Symfony Community",
|
||||||
|
"homepage": "https://symfony.com/contributors"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"description": "A generic function and convention to trigger deprecation notices",
|
||||||
|
"homepage": "https://symfony.com",
|
||||||
|
"support": {
|
||||||
|
"source": "https://github.com/symfony/deprecation-contracts/tree/v3.4.0"
|
||||||
|
},
|
||||||
|
"funding": [
|
||||||
|
{
|
||||||
|
"url": "https://symfony.com/sponsor",
|
||||||
|
"type": "custom"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://github.com/fabpot",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"url": "https://tidelift.com/funding/github/packagist/symfony/symfony",
|
||||||
|
"type": "tidelift"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"time": "2023-05-23T14:45:45+00:00"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"packages-dev": [],
|
||||||
|
"aliases": [],
|
||||||
|
"minimum-stability": "stable",
|
||||||
|
"stability-flags": [],
|
||||||
|
"prefer-stable": false,
|
||||||
|
"prefer-lowest": false,
|
||||||
|
"platform": [],
|
||||||
|
"platform-dev": [],
|
||||||
|
"plugin-api-version": "2.6.0"
|
||||||
|
}
|
||||||
36
src/config.php
Normal file
36
src/config.php
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
//shared variables
|
||||||
|
$curYear = date('Y');
|
||||||
|
$data_csv_file = "sampleData.csv";
|
||||||
|
|
||||||
|
// Site
|
||||||
|
$site_version = getenv('SITE_VERSION');
|
||||||
|
$site_title = getenv('SITE_TITLE');
|
||||||
|
$site_copyright = "Version ". $site_version ." (c) 2022-". $curYear ." - Gilles Mouchet (gilles.mouchet@gmail.com)";
|
||||||
|
// DB
|
||||||
|
$host = getenv('DB_HOST');
|
||||||
|
$db = getenv('DB_NAME');
|
||||||
|
$user = getenv('DB_USER');
|
||||||
|
$password = getenv('DB_PASSWORD');
|
||||||
|
$table = getenv('DB_TABLE');
|
||||||
|
// PMA
|
||||||
|
$pmaUrl = getenv('PMA_URL');
|
||||||
|
// Kibana
|
||||||
|
$kibanaUrl = getenv('KIBANA_URL');
|
||||||
|
|
||||||
|
//site url
|
||||||
|
// get http_host without port
|
||||||
|
//list($realHost,)=explode(':',$_SERVER['HTTP_HOST']);
|
||||||
|
// phpmyadmin url
|
||||||
|
//$urlPhpMyAdmin="http://" . $realHost . ":" . getenv('PMA_PORT');
|
||||||
|
|
||||||
|
// site DB
|
||||||
|
$db_site_title = "GMo - Database";
|
||||||
|
|
||||||
|
// ES
|
||||||
|
$es_site_title = "GMo - Elasticsearch";
|
||||||
|
$es_host = getenv('ES_HOST');
|
||||||
|
$es_user = getenv('ES_USER');
|
||||||
|
$es_password = getenv('ES_PASSWORD');
|
||||||
|
$es_index = getenv('ES_INDEX');
|
||||||
22
src/connect-es.php
Normal file
22
src/connect-es.php
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
<?php
|
||||||
|
require_once "./vendor/autoload.php";
|
||||||
|
use Elastic\Elasticsearch\ClientBuilder;
|
||||||
|
|
||||||
|
require_once 'config.php';
|
||||||
|
function connect_es($es_host, $es_user, $es_password)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
// Connect to es
|
||||||
|
return ClientBuilder::create()
|
||||||
|
->setHosts([$es_host])
|
||||||
|
->setBasicAuthentication($es_user, $es_password)
|
||||||
|
->build();
|
||||||
|
//return $client;
|
||||||
|
}
|
||||||
|
catch (PDOException $e) {
|
||||||
|
die($e->getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return connect_es($es_host, $es_user, $es_password)
|
||||||
|
|
||||||
|
?>
|
||||||
16
src/connect.php
Normal file
16
src/connect.php
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
<?php
|
||||||
|
require_once 'config.php';
|
||||||
|
function connect($host, $db, $user, $password)
|
||||||
|
{
|
||||||
|
$dsn = "mysql:host=$host;dbname=$db;charset=UTF8";
|
||||||
|
|
||||||
|
try {
|
||||||
|
$options = [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION];
|
||||||
|
|
||||||
|
return new PDO($dsn, $user, $password, $options);
|
||||||
|
} catch (PDOException $e) {
|
||||||
|
die($e->getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return connect($host, $db, $user, $password);
|
||||||
66
src/createindex.php
Normal file
66
src/createindex.php
Normal file
@ -0,0 +1,66 @@
|
|||||||
|
<?php
|
||||||
|
require_once 'config.php';
|
||||||
|
// connect to es
|
||||||
|
$client = require 'connect-es.php';
|
||||||
|
?>
|
||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
||||||
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<title><?php echo $es_site_title." v".$site_version ?></title>
|
||||||
|
<!-- <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous"> -->
|
||||||
|
<link rel="stylesheet" type="text/css" href="css/bootstrap.min.css">
|
||||||
|
<link rel="stylesheet" type="text/css" href="css/gmo.css">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h2><?php echo $es_site_title ?></h2>
|
||||||
|
<?php echo $site_copyright; echo "<hr>"; ?>
|
||||||
|
<?php
|
||||||
|
|
||||||
|
// check if index exist
|
||||||
|
echo "Check if index <b>".$es_index."</b> exists<br>";
|
||||||
|
$params = [
|
||||||
|
'index' => $es_index,
|
||||||
|
];
|
||||||
|
|
||||||
|
try {
|
||||||
|
$response = $client->indices()->delete($params);
|
||||||
|
echo "Index <b>".$es_index."</b> exists. It is deleted and created<br>";
|
||||||
|
}
|
||||||
|
catch (Exception $e) {
|
||||||
|
echo "Index <b>".$es_index."</b> doesn't exist. <b>".$es_index."</b> will be created<br>";
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create Index
|
||||||
|
echo "Create index <b>".$es_index."</b><br>";
|
||||||
|
$params = [
|
||||||
|
'index' => $es_index,
|
||||||
|
'body' => [
|
||||||
|
'settings' => [
|
||||||
|
'number_of_replicas' => 0
|
||||||
|
],
|
||||||
|
],
|
||||||
|
];
|
||||||
|
$response = $client->indices()->create($params);
|
||||||
|
|
||||||
|
// create document in index
|
||||||
|
$row = 0;
|
||||||
|
echo "<hr>";
|
||||||
|
if (($handle = fopen($data_csv_file, "r")) !== FALSE) {
|
||||||
|
while (($data = fgetcsv($handle, 300, ";")) !== FALSE) {
|
||||||
|
$row++;
|
||||||
|
$firstname = $data[0];
|
||||||
|
$lastname = $data[1];
|
||||||
|
$email = $data[2];
|
||||||
|
echo 'Adding: '.$row .' '.$firstname.' '.$lastname.' ('.$email.')<br>';
|
||||||
|
$params = [
|
||||||
|
'index' => $es_index,
|
||||||
|
'body' => [ 'id' => $row, 'firstname' => $firstname, 'lastname' => $lastname, 'email' => $email]
|
||||||
|
];
|
||||||
|
$response = $client->index($params);
|
||||||
|
}
|
||||||
|
fclose($handle);
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
58
src/createtable.php
Normal file
58
src/createtable.php
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
<?php
|
||||||
|
require_once 'config.php';
|
||||||
|
// conection db
|
||||||
|
$conn = require 'connect.php';
|
||||||
|
?>
|
||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
||||||
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<title><?php echo $db_site_title." v".$site_version ?></title>
|
||||||
|
<!-- <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous"> -->
|
||||||
|
<link rel="stylesheet" type="text/css" href="css/bootstrap.min.css">
|
||||||
|
<link rel="stylesheet" type="text/css" href="css/gmo.css">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h2><?php echo $db_site_title ?></h2>
|
||||||
|
<?php echo $site_copyright; echo "<hr>"; ?>
|
||||||
|
<?php
|
||||||
|
|
||||||
|
// sql to create table
|
||||||
|
$sql = "CREATE TABLE IF NOT EXISTS $table (
|
||||||
|
id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
|
||||||
|
firstname VARCHAR(30) NOT NULL,
|
||||||
|
lastname VARCHAR(30) NOT NULL,
|
||||||
|
email VARCHAR(50) UNIQUE,
|
||||||
|
reg_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
mod_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
|
||||||
|
)";
|
||||||
|
|
||||||
|
try {
|
||||||
|
$conn->query($sql);
|
||||||
|
echo "<p>Table <b>".$table."</b> created successfully</p>";
|
||||||
|
}
|
||||||
|
catch(PDOException $e) {
|
||||||
|
echo $e->getMessage();//Remove or change message in production code
|
||||||
|
}
|
||||||
|
|
||||||
|
// add record from csv files
|
||||||
|
$csvFile = fopen($data_csv_file, "r");
|
||||||
|
while (($getData = fgetcsv($csvFile, 10000, ";")) !== FALSE){
|
||||||
|
// Get row data
|
||||||
|
$firstname = $getData[0];
|
||||||
|
$lastname = $getData[1];
|
||||||
|
$email = $getData[2];
|
||||||
|
|
||||||
|
$sql = "INSERT INTO $table (firstname, lastname, email) VALUES (?,?,?)";
|
||||||
|
try {
|
||||||
|
$stmt= $conn->prepare($sql);
|
||||||
|
$stmt->execute([$firstname, $lastname, $email]);
|
||||||
|
echo "<p>Added '". $firstname. " ". $lastname ."' successfully</p>";
|
||||||
|
}
|
||||||
|
catch (PDOException $e){
|
||||||
|
echo $e->getMessage();;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$conn=null;
|
||||||
|
fclose($csvFile);
|
||||||
|
?>
|
||||||
2050
src/css/bootstrap-grid.css
vendored
Normal file
2050
src/css/bootstrap-grid.css
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1
src/css/bootstrap-grid.css.map
Normal file
1
src/css/bootstrap-grid.css.map
Normal file
File diff suppressed because one or more lines are too long
7
src/css/bootstrap-grid.min.css
vendored
Normal file
7
src/css/bootstrap-grid.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
1
src/css/bootstrap-grid.min.css.map
Normal file
1
src/css/bootstrap-grid.min.css.map
Normal file
File diff suppressed because one or more lines are too long
330
src/css/bootstrap-reboot.css
vendored
Normal file
330
src/css/bootstrap-reboot.css
vendored
Normal file
@ -0,0 +1,330 @@
|
|||||||
|
/*!
|
||||||
|
* Bootstrap Reboot v4.0.0 (https://getbootstrap.com)
|
||||||
|
* Copyright 2011-2018 The Bootstrap Authors
|
||||||
|
* Copyright 2011-2018 Twitter, Inc.
|
||||||
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||||
|
* Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
|
||||||
|
*/
|
||||||
|
*,
|
||||||
|
*::before,
|
||||||
|
*::after {
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
html {
|
||||||
|
font-family: sans-serif;
|
||||||
|
line-height: 1.15;
|
||||||
|
-webkit-text-size-adjust: 100%;
|
||||||
|
-ms-text-size-adjust: 100%;
|
||||||
|
-ms-overflow-style: scrollbar;
|
||||||
|
-webkit-tap-highlight-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
@-ms-viewport {
|
||||||
|
width: device-width;
|
||||||
|
}
|
||||||
|
|
||||||
|
article, aside, dialog, figcaption, figure, footer, header, hgroup, main, nav, section {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
margin: 0;
|
||||||
|
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
|
||||||
|
font-size: 1rem;
|
||||||
|
font-weight: 400;
|
||||||
|
line-height: 1.5;
|
||||||
|
color: #212529;
|
||||||
|
text-align: left;
|
||||||
|
background-color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
[tabindex="-1"]:focus {
|
||||||
|
outline: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
hr {
|
||||||
|
box-sizing: content-box;
|
||||||
|
height: 0;
|
||||||
|
overflow: visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1, h2, h3, h4, h5, h6 {
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
p {
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
abbr[title],
|
||||||
|
abbr[data-original-title] {
|
||||||
|
text-decoration: underline;
|
||||||
|
-webkit-text-decoration: underline dotted;
|
||||||
|
text-decoration: underline dotted;
|
||||||
|
cursor: help;
|
||||||
|
border-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
address {
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
font-style: normal;
|
||||||
|
line-height: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
ol,
|
||||||
|
ul,
|
||||||
|
dl {
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
ol ol,
|
||||||
|
ul ul,
|
||||||
|
ol ul,
|
||||||
|
ul ol {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
dt {
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
|
||||||
|
dd {
|
||||||
|
margin-bottom: .5rem;
|
||||||
|
margin-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
blockquote {
|
||||||
|
margin: 0 0 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
dfn {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
b,
|
||||||
|
strong {
|
||||||
|
font-weight: bolder;
|
||||||
|
}
|
||||||
|
|
||||||
|
small {
|
||||||
|
font-size: 80%;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub,
|
||||||
|
sup {
|
||||||
|
position: relative;
|
||||||
|
font-size: 75%;
|
||||||
|
line-height: 0;
|
||||||
|
vertical-align: baseline;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub {
|
||||||
|
bottom: -.25em;
|
||||||
|
}
|
||||||
|
|
||||||
|
sup {
|
||||||
|
top: -.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: #007bff;
|
||||||
|
text-decoration: none;
|
||||||
|
background-color: transparent;
|
||||||
|
-webkit-text-decoration-skip: objects;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:hover {
|
||||||
|
color: #0056b3;
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:not([href]):not([tabindex]) {
|
||||||
|
color: inherit;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:not([href]):not([tabindex]):hover, a:not([href]):not([tabindex]):focus {
|
||||||
|
color: inherit;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:not([href]):not([tabindex]):focus {
|
||||||
|
outline: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre,
|
||||||
|
code,
|
||||||
|
kbd,
|
||||||
|
samp {
|
||||||
|
font-family: monospace, monospace;
|
||||||
|
font-size: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre {
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
overflow: auto;
|
||||||
|
-ms-overflow-style: scrollbar;
|
||||||
|
}
|
||||||
|
|
||||||
|
figure {
|
||||||
|
margin: 0 0 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
img {
|
||||||
|
vertical-align: middle;
|
||||||
|
border-style: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
svg:not(:root) {
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
table {
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
|
||||||
|
caption {
|
||||||
|
padding-top: 0.75rem;
|
||||||
|
padding-bottom: 0.75rem;
|
||||||
|
color: #6c757d;
|
||||||
|
text-align: left;
|
||||||
|
caption-side: bottom;
|
||||||
|
}
|
||||||
|
|
||||||
|
th {
|
||||||
|
text-align: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
label {
|
||||||
|
display: inline-block;
|
||||||
|
margin-bottom: .5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
button {
|
||||||
|
border-radius: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
button:focus {
|
||||||
|
outline: 1px dotted;
|
||||||
|
outline: 5px auto -webkit-focus-ring-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
input,
|
||||||
|
button,
|
||||||
|
select,
|
||||||
|
optgroup,
|
||||||
|
textarea {
|
||||||
|
margin: 0;
|
||||||
|
font-family: inherit;
|
||||||
|
font-size: inherit;
|
||||||
|
line-height: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
button,
|
||||||
|
input {
|
||||||
|
overflow: visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
button,
|
||||||
|
select {
|
||||||
|
text-transform: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
button,
|
||||||
|
html [type="button"],
|
||||||
|
[type="reset"],
|
||||||
|
[type="submit"] {
|
||||||
|
-webkit-appearance: button;
|
||||||
|
}
|
||||||
|
|
||||||
|
button::-moz-focus-inner,
|
||||||
|
[type="button"]::-moz-focus-inner,
|
||||||
|
[type="reset"]::-moz-focus-inner,
|
||||||
|
[type="submit"]::-moz-focus-inner {
|
||||||
|
padding: 0;
|
||||||
|
border-style: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type="radio"],
|
||||||
|
input[type="checkbox"] {
|
||||||
|
box-sizing: border-box;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type="date"],
|
||||||
|
input[type="time"],
|
||||||
|
input[type="datetime-local"],
|
||||||
|
input[type="month"] {
|
||||||
|
-webkit-appearance: listbox;
|
||||||
|
}
|
||||||
|
|
||||||
|
textarea {
|
||||||
|
overflow: auto;
|
||||||
|
resize: vertical;
|
||||||
|
}
|
||||||
|
|
||||||
|
fieldset {
|
||||||
|
min-width: 0;
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
border: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
legend {
|
||||||
|
display: block;
|
||||||
|
width: 100%;
|
||||||
|
max-width: 100%;
|
||||||
|
padding: 0;
|
||||||
|
margin-bottom: .5rem;
|
||||||
|
font-size: 1.5rem;
|
||||||
|
line-height: inherit;
|
||||||
|
color: inherit;
|
||||||
|
white-space: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
progress {
|
||||||
|
vertical-align: baseline;
|
||||||
|
}
|
||||||
|
|
||||||
|
[type="number"]::-webkit-inner-spin-button,
|
||||||
|
[type="number"]::-webkit-outer-spin-button {
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
[type="search"] {
|
||||||
|
outline-offset: -2px;
|
||||||
|
-webkit-appearance: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
[type="search"]::-webkit-search-cancel-button,
|
||||||
|
[type="search"]::-webkit-search-decoration {
|
||||||
|
-webkit-appearance: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
::-webkit-file-upload-button {
|
||||||
|
font: inherit;
|
||||||
|
-webkit-appearance: button;
|
||||||
|
}
|
||||||
|
|
||||||
|
output {
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
summary {
|
||||||
|
display: list-item;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
template {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
[hidden] {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
/*# sourceMappingURL=bootstrap-reboot.css.map */
|
||||||
1
src/css/bootstrap-reboot.css.map
Normal file
1
src/css/bootstrap-reboot.css.map
Normal file
File diff suppressed because one or more lines are too long
8
src/css/bootstrap-reboot.min.css
vendored
Normal file
8
src/css/bootstrap-reboot.min.css
vendored
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
/*!
|
||||||
|
* Bootstrap Reboot v4.0.0 (https://getbootstrap.com)
|
||||||
|
* Copyright 2011-2018 The Bootstrap Authors
|
||||||
|
* Copyright 2011-2018 Twitter, Inc.
|
||||||
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||||
|
* Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
|
||||||
|
*/*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:transparent}@-ms-viewport{width:device-width}article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg:not(:root){overflow:hidden}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}
|
||||||
|
/*# sourceMappingURL=bootstrap-reboot.min.css.map */
|
||||||
1
src/css/bootstrap-reboot.min.css.map
Normal file
1
src/css/bootstrap-reboot.min.css.map
Normal file
File diff suppressed because one or more lines are too long
8975
src/css/bootstrap.css
vendored
Normal file
8975
src/css/bootstrap.css
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1
src/css/bootstrap.css.map
Normal file
1
src/css/bootstrap.css.map
Normal file
File diff suppressed because one or more lines are too long
7
src/css/bootstrap.min.css
vendored
Normal file
7
src/css/bootstrap.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
1
src/css/bootstrap.min.css.map
Normal file
1
src/css/bootstrap.min.css.map
Normal file
File diff suppressed because one or more lines are too long
27
src/css/gmo.css
Normal file
27
src/css/gmo.css
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
body
|
||||||
|
{
|
||||||
|
// text-align: center;
|
||||||
|
//background-color: #8EA1AD;
|
||||||
|
// font-family:Verdana, Geneva, Arial, Helvetica, sans-serif;
|
||||||
|
// color: #990000;
|
||||||
|
margin-left: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.error {
|
||||||
|
color: red;
|
||||||
|
font-size: 13px;
|
||||||
|
margin-bottom: 23px;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.noerror {
|
||||||
|
color: green;
|
||||||
|
font-size: 13px;
|
||||||
|
margin-bottom: 23px;
|
||||||
|
}
|
||||||
|
|
||||||
|
th, td {
|
||||||
|
padding: 8px;
|
||||||
|
}
|
||||||
|
h6 {
|
||||||
|
font-size: 10px;
|
||||||
|
}
|
||||||
33
src/deleteindex.php
Normal file
33
src/deleteindex.php
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
<?php
|
||||||
|
require_once 'config.php';
|
||||||
|
$client = require 'connect-es.php';
|
||||||
|
|
||||||
|
?>
|
||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
||||||
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<title><?php echo $es_site_title." v".$site_version ?></title>
|
||||||
|
<!-- <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous"> -->
|
||||||
|
<link rel="stylesheet" type="text/css" href="css/bootstrap.min.css">
|
||||||
|
<link rel="stylesheet" type="text/css" href="css/gmo.css">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h2><?php echo $es_site_title ?></h2>
|
||||||
|
<?php echo $site_copyright; echo "<hr>"; ?>
|
||||||
|
<?php
|
||||||
|
|
||||||
|
//if ($index == true) {
|
||||||
|
// check if index exist
|
||||||
|
echo "Check if index <b>".$es_index."</b> exists<br>";
|
||||||
|
$params = [
|
||||||
|
'index' => $es_index,
|
||||||
|
];
|
||||||
|
try {
|
||||||
|
$response = $client->indices()->delete($params);
|
||||||
|
echo "Index <b>".$es_index."</b> exists. it will be deleted<br>";
|
||||||
|
//echo "<b>".$es_index."</b> deleted";
|
||||||
|
}
|
||||||
|
catch (Exception $e) {
|
||||||
|
echo $e;
|
||||||
|
}
|
||||||
30
src/deletetable.php
Normal file
30
src/deletetable.php
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
<?php
|
||||||
|
require_once 'config.php';
|
||||||
|
// conection db
|
||||||
|
$conn = require 'connect.php';
|
||||||
|
?>
|
||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
||||||
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<title><?php echo $db_site_title." v".$site_version ?></title>
|
||||||
|
<!-- <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous"> -->
|
||||||
|
<link rel="stylesheet" type="text/css" href="css/bootstrap.min.css">
|
||||||
|
<link rel="stylesheet" type="text/css" href="css/gmo.css">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h2><?php echo $db_site_title ?></h2>
|
||||||
|
<?php echo $site_copyright; echo "<hr>"; ?>
|
||||||
|
<?php
|
||||||
|
// sql to create table
|
||||||
|
$sql = "DROP TABLE IF EXISTS $table;";
|
||||||
|
|
||||||
|
try {
|
||||||
|
$conn->query($sql);
|
||||||
|
echo "<p>Table <b>".$table."</b> deleted successfully</p>";
|
||||||
|
}
|
||||||
|
catch(PDOException $e) {
|
||||||
|
echo $e->getMessage();//Remove or change message in production code
|
||||||
|
}
|
||||||
|
$conn=null;
|
||||||
|
?>
|
||||||
43
src/esinfo.php
Normal file
43
src/esinfo.php
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
<?php
|
||||||
|
require_once 'config.php';
|
||||||
|
// connect es
|
||||||
|
$client = require 'connect-es.php';
|
||||||
|
?>
|
||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
||||||
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<title><?php echo $es_site_title." ".$es_site_version ?></title>
|
||||||
|
<!-- <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous"> -->
|
||||||
|
<link rel="stylesheet" type="text/css" href="css/bootstrap.min.css">
|
||||||
|
<link rel="stylesheet" type="text/css" href="css/gmo.css">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h2><?php echo $es_site_title ?></h2>
|
||||||
|
<?php echo $site_copyright; echo "<hr>"; ?>
|
||||||
|
<?php
|
||||||
|
|
||||||
|
// get info
|
||||||
|
$response = $client->info();
|
||||||
|
|
||||||
|
// get es status
|
||||||
|
$curl = curl_init();
|
||||||
|
|
||||||
|
// construct url
|
||||||
|
curl_setopt($curl, CURLOPT_URL,"http://".$es_user.":".$es_password."@".$es_host."/_cluster/health");
|
||||||
|
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
|
||||||
|
|
||||||
|
//executing curl
|
||||||
|
$status = curl_exec($curl);
|
||||||
|
// closing curl
|
||||||
|
curl_close($curl);
|
||||||
|
// decode
|
||||||
|
$array = json_decode($status, true);
|
||||||
|
|
||||||
|
// display result
|
||||||
|
echo "<h4>Informations</h4>";
|
||||||
|
echo "<p><b>Name:</b> ".$response['name']."<br>";
|
||||||
|
echo "<b>Cluster name:</b> ".$response['cluster_name']."<br>";
|
||||||
|
echo "<b>Elasticsearch version:</b> ".$response['version']['number']."<br>";
|
||||||
|
echo "<b>Cluster health status:</b> ".$array['status']."</p>";
|
||||||
|
?>
|
||||||
5
src/images/pen.svg
Normal file
5
src/images/pen.svg
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
<svg class="bi bi-pen" width="1em" height="1em" viewBox="0 0 16 16" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path fill-rule="evenodd" d="M5.707 13.707a1 1 0 01-.39.242l-3 1a1 1 0 01-1.266-1.265l1-3a1 1 0 01.242-.391L10.086 2.5a2 2 0 012.828 0l.586.586a2 2 0 010 2.828l-7.793 7.793zM3 11l7.793-7.793a1 1 0 011.414 0l.586.586a1 1 0 010 1.414L5 13l-3 1 1-3z" clip-rule="evenodd"/>
|
||||||
|
<path fill-rule="evenodd" d="M9.854 2.56a.5.5 0 00-.708 0L5.854 5.855a.5.5 0 01-.708-.708L8.44 1.854a1.5 1.5 0 012.122 0l.293.292a.5.5 0 01-.707.708l-.293-.293z" clip-rule="evenodd"/>
|
||||||
|
<path d="M13.293 1.207a1 1 0 011.414 0l.03.03a1 1 0 01.03 1.383L13.5 4 12 2.5l1.293-1.293z"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 684 B |
4
src/images/trash.svg
Normal file
4
src/images/trash.svg
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
<svg class="bi bi-trash" width="1em" height="1em" viewBox="0 0 16 16" fill="currentColor" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path d="M5.5 5.5A.5.5 0 016 6v6a.5.5 0 01-1 0V6a.5.5 0 01.5-.5zm2.5 0a.5.5 0 01.5.5v6a.5.5 0 01-1 0V6a.5.5 0 01.5-.5zm3 .5a.5.5 0 00-1 0v6a.5.5 0 001 0V6z"/>
|
||||||
|
<path fill-rule="evenodd" d="M14.5 3a1 1 0 01-1 1H13v9a2 2 0 01-2 2H5a2 2 0 01-2-2V4h-.5a1 1 0 01-1-1V2a1 1 0 011-1H6a1 1 0 011-1h2a1 1 0 011 1h3.5a1 1 0 011 1v1zM4.118 4L4 4.059V13a1 1 0 001 1h6a1 1 0 001-1V4.059L11.882 4H4.118zM2.5 3V2h11v1h-11z" clip-rule="evenodd"/>
|
||||||
|
</svg>
|
||||||
|
After Width: | Height: | Size: 566 B |
86
src/index.php
Normal file
86
src/index.php
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
<?php
|
||||||
|
require_once 'config.php';
|
||||||
|
|
||||||
|
$date=date("d/m/Y");
|
||||||
|
$time=date("H:i:s");
|
||||||
|
$userAgent=htmlentities($_SERVER['HTTP_USER_AGENT'],ENT_QUOTES,"UTF-8");
|
||||||
|
?>
|
||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
||||||
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<title><?php echo $site_title; ?></title>
|
||||||
|
<!-- <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9M
|
||||||
|
uhOf23Q9Ifjh" crossorigin="anonymous"> -->
|
||||||
|
<link rel="stylesheet" type="text/css" href="css/bootstrap.min.css">
|
||||||
|
<link rel="stylesheet" type="text/css" href="css/gmo.css">
|
||||||
|
|
||||||
|
<?php
|
||||||
|
echo "<h2>".$site_title."</h2>";
|
||||||
|
echo $site_copyright;
|
||||||
|
echo "<hr>";
|
||||||
|
echo "<h3>MariaDB</h3>";
|
||||||
|
?>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td><a href="./createtable.php">Create table </a></td>
|
||||||
|
<td> </td>
|
||||||
|
<td>Create an add records in table <b><?php echo $table; ?></b> </td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><a href="./deletetable.php">Remove table</a></td>
|
||||||
|
<td> </td>
|
||||||
|
<td>Remove table <b><?php echo $table; ?></b></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><a href="./managetable.php" target="_blank">Manage EMails</a></td>
|
||||||
|
<td> </td>
|
||||||
|
<td>Manage EMails (you must create table <b><?php echo $table; ?></b> before manage emails)</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><a href="<?php echo $pmaUrl?>" target="_blank">MariaDB manager</a></td>
|
||||||
|
<td> </td>
|
||||||
|
<td>Manage Database</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><a href="./phpinfo.php">PHP Info</a></td>
|
||||||
|
<td> </td>
|
||||||
|
<td>PHP informations</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<hr>
|
||||||
|
<h3>Elasticsearch</h3>
|
||||||
|
<table>
|
||||||
|
<!-- <tr><td> </td></tr> -->
|
||||||
|
<tr>
|
||||||
|
<td><a href="./createindex.php">Create index </a></td>
|
||||||
|
<td> </td>
|
||||||
|
<td>Create index <b><?php echo $es_index;?></b> and add documents</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><a href="./deleteindex.php">Delete index</a></td>
|
||||||
|
<td> </td>
|
||||||
|
<td>Remove elasticsearch index <b><?php echo $es_index;?></b> </td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><a href="./searchindex.php">Résultats de recherche</a></td>
|
||||||
|
<td> </td>
|
||||||
|
<td>Résultats de divers recherches dans l'index <b><?php echo $es_index;?></b> </td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><a href="<?php echo $kibanaUrl?>" target="_blank">Kibana</a></td>
|
||||||
|
<td> </td>
|
||||||
|
<td>Elasticsearch indexes manager</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td><a href="./esinfo.php">Elasticsearch info</a></td>
|
||||||
|
<td> </td>
|
||||||
|
<td>Elasticsearch informations</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<hr>
|
||||||
|
<h6><?php echo "Browser : $userAgent\n"?><br>
|
||||||
|
<?php echo "Nous sommes le $date, il est $time.\n"?></h6>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
311
src/managetable.php
Normal file
311
src/managetable.php
Normal file
@ -0,0 +1,311 @@
|
|||||||
|
<?php
|
||||||
|
echo "<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n";
|
||||||
|
require_once 'config.php';
|
||||||
|
// conection db
|
||||||
|
$conn=require 'connect.php';
|
||||||
|
|
||||||
|
$defaultAction='add';
|
||||||
|
$defaultModCre=false; // display or not created/modified date
|
||||||
|
$defaultBtnMoreLess='More';
|
||||||
|
|
||||||
|
$firstName='';
|
||||||
|
$lastName='';
|
||||||
|
$email='';
|
||||||
|
$flagAction=$defaultAction;
|
||||||
|
$id='';
|
||||||
|
$modcre=$defaultModCre;
|
||||||
|
$btnMoreLess=$defaultBtnMoreLess;
|
||||||
|
$validEntry=true;
|
||||||
|
$beforeModifiedEmail='';
|
||||||
|
?>
|
||||||
|
|
||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
||||||
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<title><?php echo $db_site_title." v".$site_version ?></title>
|
||||||
|
<!-- <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous"> -->
|
||||||
|
<link rel="stylesheet" type="text/css" href="css/bootstrap.min.css">
|
||||||
|
<link rel="stylesheet" type="text/css" href="css/gmo.css">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h2><?php echo $db_site_title ?></h2>
|
||||||
|
<?php echo $site_copyright; echo "<hr>"; ?>
|
||||||
|
<script>
|
||||||
|
function validate(msg)
|
||||||
|
{
|
||||||
|
conf = confirm("Are you sure you want to delete " + msg + " ?");
|
||||||
|
if (conf)
|
||||||
|
return true;
|
||||||
|
else
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
<br>
|
||||||
|
<h5>Add/Modify </h5>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
|
||||||
|
function emailExistInDB($db, $table, $emailToVerif, $emailBeforeMod)
|
||||||
|
{
|
||||||
|
if ($emailToVerif != $emailBeforeMod) {
|
||||||
|
//echo "I connect to DB to verify<br>";
|
||||||
|
try{
|
||||||
|
/* Create a prepared statement */
|
||||||
|
$stmt = $db -> prepare("SELECT email FROM ". $table .";");
|
||||||
|
|
||||||
|
/* execute the query */
|
||||||
|
$stmt -> execute();
|
||||||
|
|
||||||
|
/* fetch all results */
|
||||||
|
$res = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||||
|
|
||||||
|
foreach($res as $row){
|
||||||
|
extract($row);
|
||||||
|
//echo $email."<br>";
|
||||||
|
if ($emailToVerif == $email) {
|
||||||
|
echo $email." found in DB<br>";
|
||||||
|
$returnCode=true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
//echo $email." pas trouvé<br>";
|
||||||
|
$returnCode=false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch (PDOExecption $e){
|
||||||
|
echo $e->getMessage();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$returnCode=false;
|
||||||
|
}
|
||||||
|
/*echo "Exit from DnsNameExistInDB function<br>";*/
|
||||||
|
return $returnCode; /* false $emailToVerif doesn't exist - true $emailToVerif exist */
|
||||||
|
}
|
||||||
|
|
||||||
|
// ADD/MODIFY RECORD
|
||||||
|
if (isset($_POST['send'])) {
|
||||||
|
/* set var from form */
|
||||||
|
$firstName = isset($_POST['firstName']) ? trim($_POST['firstName']) : "";
|
||||||
|
//$beforeModifieFirst = isset($_POST['firstNameBeforeModified']) ? trim($_POST['firstNameBeforeModified']) : "";
|
||||||
|
$lastName = isset($_POST['lastName']) ? trim($_POST['lastName']) : "";
|
||||||
|
//$beforeModifiedLastName = isset($_POST['lastNameBeforeModified']) ? trim($_POST['lastNameBeforeModified']) : "";
|
||||||
|
$email = isset($_POST['email']) ? trim($_POST['email']) : "";
|
||||||
|
$beforeModifiedEmail = isset($_POST['emailBeforeModified']) ? trim($_POST['emailBeforeModified']) : "";
|
||||||
|
$flagAction = isset($_POST['flagAction']) ? $_POST['flagAction'] : "";
|
||||||
|
$id = isset($_POST['id']) ? $_POST['id'] : "";
|
||||||
|
|
||||||
|
/* define the format of the DNS name and ip address */
|
||||||
|
$validEmail="/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/";
|
||||||
|
|
||||||
|
/* verify correct dnsname and ip address */
|
||||||
|
//echo "Verify email<br>";
|
||||||
|
if ($firstName == '' || $lastName == '' || !(preg_match($validEmail, $email)) || emailExistInDB($conn, $table, $email, $beforeModifiedEmail)) {
|
||||||
|
print"<div class='error'>One (or more) mandatory field(s) has (have) not been correctly filled in.<br>";
|
||||||
|
$validEntry=false;
|
||||||
|
|
||||||
|
if ($firstName == ''){
|
||||||
|
print "Mandatory 'Firstname' field.";
|
||||||
|
$validEntry=false;
|
||||||
|
}
|
||||||
|
|
||||||
|
elseif ($lastName == ''){
|
||||||
|
print "Mandatory 'Lastname' field.";
|
||||||
|
$validEntry=false;
|
||||||
|
}
|
||||||
|
|
||||||
|
elseif ($email == ''){
|
||||||
|
print "Mandatory 'EMail' field.";
|
||||||
|
$validEntry=false;
|
||||||
|
}
|
||||||
|
|
||||||
|
elseif (! preg_match($validEmail, $email)){
|
||||||
|
print "'".$email."' format invalid. ";
|
||||||
|
$validEntry=false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (emailExistInDB($conn, $table, $email, $beforeModifiedEmail)){
|
||||||
|
print "'".$email."' already exist. ";
|
||||||
|
$validEntry=false;
|
||||||
|
}
|
||||||
|
|
||||||
|
print"</div>";
|
||||||
|
|
||||||
|
}
|
||||||
|
/* All is ok we try to add record into DB */
|
||||||
|
if ($validEntry){
|
||||||
|
/*echo "Add/Update record into DB<br>"; */
|
||||||
|
if ($flagAction=="add"){
|
||||||
|
$stmt = $conn -> prepare("INSERT INTO $table (firstname, lastname, email) VALUES (:firstName, :lastName, :email)");
|
||||||
|
$stmt -> bindParam(':firstName', $firstName, PDO::PARAM_STR);
|
||||||
|
$stmt -> bindParam(':lastName', $lastName, PDO::PARAM_STR);
|
||||||
|
$stmt -> bindParam(':email', $email, PDO::PARAM_STR);
|
||||||
|
}
|
||||||
|
if ($flagAction=="modify"){
|
||||||
|
//$timestamp = date("Y-m-d h:i:s");
|
||||||
|
$stmt = $conn->prepare("UPDATE $table SET firstname = :firstName, lastname = :lastName, email = :email WHERE id =:id");
|
||||||
|
$stmt -> bindParam(':id', $id, PDO::PARAM_INT);
|
||||||
|
$stmt -> bindParam(':lastName', $lastName, PDO::PARAM_STR);
|
||||||
|
$stmt -> bindParam(':firstName', $firstName, PDO::PARAM_STR);
|
||||||
|
$stmt -> bindParam(':email', $email, PDO::PARAM_STR);
|
||||||
|
}
|
||||||
|
try{
|
||||||
|
/* execute the query */
|
||||||
|
$stmt -> execute();
|
||||||
|
}
|
||||||
|
catch (PDOExecption $e){
|
||||||
|
//echo $e->getMessage();
|
||||||
|
//print "<div class='error'>". $stmt -> errorInfo()[2]. " - ".$email."</div>";
|
||||||
|
print "<div class='error'> - ".$email."</div>";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$firstName='';
|
||||||
|
$lastName='';
|
||||||
|
$email='';
|
||||||
|
$flagAction=$defaultAction;
|
||||||
|
$id='';
|
||||||
|
}
|
||||||
|
|
||||||
|
// DELETE IP
|
||||||
|
if (isset($_POST['delete'])) {
|
||||||
|
$id = isset($_POST['id']) ? $_POST['id'] : "";
|
||||||
|
|
||||||
|
try {
|
||||||
|
$sql = "DELETE FROM $table WHERE id = :id";
|
||||||
|
$stmt = $conn->prepare($sql);
|
||||||
|
$stmt->bindParam(':id', $_POST['id'], PDO::PARAM_INT);
|
||||||
|
$stmt->execute();
|
||||||
|
|
||||||
|
/* close connection */
|
||||||
|
$db = null;
|
||||||
|
}
|
||||||
|
catch (PDOExecption $e){
|
||||||
|
echo $e->getMessage();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// MODIFIER
|
||||||
|
if (isset($_POST['modify'])) {
|
||||||
|
$firstName = isset($_POST['firstName']) ? $_POST['firstName'] : "";
|
||||||
|
//$beforeModifyfirstName = isset($_POST['firstName']) ? $_POST['firstName'] : "";
|
||||||
|
$lastName = isset($_POST['lastName']) ? $_POST['lastName'] : "";
|
||||||
|
//$beforeModifylastName = isset($_POST['lastName']) ? $_POST['lastName'] : "";
|
||||||
|
$email = isset($_POST['email']) ? $_POST['email'] : "";
|
||||||
|
$beforeModifiedEmail = isset($_POST['email']) ? $_POST['email'] : "";
|
||||||
|
|
||||||
|
// $description = isset($_POST['description']) ? $_POST['description'] : "";
|
||||||
|
$flagAction = isset($_POST['flagAction']) ? $_POST['flagAction'] : "";
|
||||||
|
$id = isset($_POST['id']) ? $_POST['id'] : "";
|
||||||
|
}
|
||||||
|
|
||||||
|
//DISPLAY MORE
|
||||||
|
if (isset($_POST['displaymore'])) {
|
||||||
|
$modcre = isset($_POST['modcre']) ? $_POST['modcre'] : "";
|
||||||
|
if ($modcre){
|
||||||
|
$modcre=false;
|
||||||
|
$btnMoreLess='More';
|
||||||
|
}
|
||||||
|
elseif (! $modcre){
|
||||||
|
$modcre=true;
|
||||||
|
$btnMoreLess='Less';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
||||||
|
<!-- Formulaire pour la saisie et la modifcation -->
|
||||||
|
<form method="post" action="<?php echo($_SERVER['PHP_SELF']); ?>">
|
||||||
|
<table border=0>
|
||||||
|
<tr>
|
||||||
|
<th>Firstname</th>
|
||||||
|
<th>Lastname</th>
|
||||||
|
<th>EMail</th>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<?php
|
||||||
|
print '<td><input type="text" name="firstName" maxlength="30" value="'.$firstName.'" /></td>'.
|
||||||
|
'<td><input type="text" name="lastName" maxlength="30" value="'.$lastName.'" /></td>'.
|
||||||
|
'<td><input type="text" name="email" maxlength="100" value="'.$email.'" /></td>'.
|
||||||
|
'<td><input type="hidden" name="firstNameBeforeModified" maxlength="15" value="'.$firstName.'" /></td>'.
|
||||||
|
'<td><input type="hidden" name="lastNameBeforeModified" maxlength="100" value="'.$lastName.'" /></td>'.
|
||||||
|
'<td><input type="hidden" name="emailBeforeModified" maxlength="100" value="'.$email.'" /></td>'.
|
||||||
|
'<td><input type="hidden" name="flagAction" value="'.$flagAction.'" /></td>'.
|
||||||
|
'<td><input type="hidden" name="id" value="'.$id.'" /></td>'.
|
||||||
|
'<td><input type="hidden" name="modcre" value="'.$modcre.'"></td></tr><tr>';
|
||||||
|
//'<td><input type="submit" name="send" value="Ok" /> <input type="submit" name="nextip" value="Next free IP"> '.
|
||||||
|
//'<input type="reset" value="Cancel" /> <input type="submit" value="Update DNS"</td>';
|
||||||
|
?>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td><input type="submit" name="send" value="Ok" />
|
||||||
|
<input type="reset" value="Cancel" /> <input type="submit" name="displaymore" value="<?php echo $btnMoreLess ?>" >
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</form>
|
||||||
|
<p></p>
|
||||||
|
|
||||||
|
<!-- Affiche la liste des adresses -->
|
||||||
|
<h5>EMails list</h5>
|
||||||
|
<?php
|
||||||
|
try{
|
||||||
|
//include('connexion.php');
|
||||||
|
//$db = new PDO('sqlite:'.$dbName);
|
||||||
|
/* Create a prepared statement - sort by ip address - whoau find on https://stackoverflow.com/questions/23092783/best-way-to-sort-by-ip-addresses-in-sql */
|
||||||
|
$stmt = $conn -> prepare("SELECT * FROM $table ORDER BY firstname");
|
||||||
|
//$stmt = $conn -> prepare("SELECT * FROM $table where firstname like 'T%'");
|
||||||
|
/* execute the query */
|
||||||
|
$stmt -> execute();
|
||||||
|
|
||||||
|
/* fetch all results */
|
||||||
|
$res = $stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||||
|
echo "<table border=1>".
|
||||||
|
"<tr>".
|
||||||
|
"<th>ID</th>".
|
||||||
|
"<th>Firstname</th>".
|
||||||
|
"<th>Lastname</th>".
|
||||||
|
"<th>EMail</th>";
|
||||||
|
if ($modcre){
|
||||||
|
echo "<th>Created</th>".
|
||||||
|
"<th>Modified</th>";
|
||||||
|
}
|
||||||
|
echo "<th>Actions</th>".
|
||||||
|
"</tr>";
|
||||||
|
foreach($res as $row){
|
||||||
|
extract($row);
|
||||||
|
echo "<tr>".
|
||||||
|
"<td>".$id."</td>".
|
||||||
|
"<td>".$firstname."</td>".
|
||||||
|
"<td>".$lastname."</td>".
|
||||||
|
"<td>".$email."</td>";
|
||||||
|
if ($modcre){
|
||||||
|
echo "<td>".$reg_date."</td>".
|
||||||
|
"<td>".$mod_date."</td>";
|
||||||
|
}
|
||||||
|
echo "<td>";
|
||||||
|
?>
|
||||||
|
<form action="<?php echo($_SERVER['PHP_SELF']); ?>" method="post">
|
||||||
|
<?php
|
||||||
|
echo "<input type='hidden' name='firstName' value='".$firstname."'>".
|
||||||
|
"<input type='hidden' name='lastName' value='".$lastname."'>".
|
||||||
|
"<input type='hidden' name='email' value='".$email."'>".
|
||||||
|
"<input type='hidden' name='flagAction' value='modify'>".
|
||||||
|
"<input type='hidden' name='id' value='".$id."'>".
|
||||||
|
"<button type='submit' name='modify' title='Modify'><img src='images/pen.svg' alt='pen' /></button> ".
|
||||||
|
"<button onclick='return validate(\"".$firstname." ".$lastname." (".$email.")\");' type='submit' name='delete' title='Delete'><img src='images/trash.svg' alt='trash' /></button>".
|
||||||
|
"</td></form></tr>";
|
||||||
|
}
|
||||||
|
echo "</table>";
|
||||||
|
/* close connection */
|
||||||
|
//$db = null;
|
||||||
|
}
|
||||||
|
catch (PDOExecption $e){
|
||||||
|
echo $e->getMessage();
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
3
src/phpinfo.php
Normal file
3
src/phpinfo.php
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
<?php
|
||||||
|
phpinfo();
|
||||||
|
?>
|
||||||
42
src/readcsv.php
Normal file
42
src/readcsv.php
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
<?php
|
||||||
|
$CSVvar = fopen("sampleData.csv", "r");
|
||||||
|
if ($CSVvar !== FALSE) {
|
||||||
|
?>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<style>
|
||||||
|
table,th,td {
|
||||||
|
border: 1px solid black;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<div>
|
||||||
|
<table style="border:1px solid black">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th><b>Prénom</b></th>
|
||||||
|
<th><b>Nom</b></th>
|
||||||
|
<th><b>Courriel</b></th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<?php
|
||||||
|
while (! feof($CSVvar)) {
|
||||||
|
$data = fgetcsv($CSVvar, 1000, ";");
|
||||||
|
if (! empty($data)) {
|
||||||
|
?>
|
||||||
|
<tr>
|
||||||
|
<td><?php echo $data[0]; ?></td>
|
||||||
|
<td><div> <?php echo $data[1]?></td>
|
||||||
|
<td><div><?php echo $data[2]; ?></div></td>
|
||||||
|
</tr>
|
||||||
|
<?php }?>
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</html>
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
fclose($CSVvar);
|
||||||
|
?>
|
||||||
98
src/sampleData.csv
Normal file
98
src/sampleData.csv
Normal file
@ -0,0 +1,98 @@
|
|||||||
|
Alex;Kuze;alex@alexkuze.ch;
|
||||||
|
Ali;Gator;ali@aligator.ch;
|
||||||
|
Alphonse;Danltas;alphonse@alphonsedanltas.ch;
|
||||||
|
Amédée;Pan;amedee@amedeepan.ch;
|
||||||
|
Amélie;Oration;amelie@amelieoration.ch;
|
||||||
|
André;Sanfraper;andre@andresanfraper.ch;
|
||||||
|
Anne;Orak;anne@anneorak.ch;
|
||||||
|
Annick;Roche;annick@annickroche.ch;
|
||||||
|
Annie;Versaire;annie@annieversaire.ch;
|
||||||
|
Aretha;Connery;aretha@arethaconnery.ch;
|
||||||
|
Arman;Dibule;arman@armandibule.ch;
|
||||||
|
Arsene;Dunez;arsene@arsenedunez.ch;
|
||||||
|
Aubin;Didon;aubin@aubindidon.ch;
|
||||||
|
Aubin;Marie;aubin@aubinmarie.ch;
|
||||||
|
Aude;Vaisselle;aude@audevaisselle.ch;
|
||||||
|
Axel;Air;axel@axelair.ch;
|
||||||
|
Candy;Raton;candy@candyraton.ch;
|
||||||
|
Carie;Dentaire;carie@cariedentaire.ch;
|
||||||
|
Cathy;Mini;cathy@cathymini.ch;
|
||||||
|
Céline;Aivitable;celine@celineaivitable.ch;
|
||||||
|
Chantal;Opéra;chantal@chantalopera.ch;
|
||||||
|
Charles;Attan;charles@charlesattan.ch;
|
||||||
|
Chris;Lair;chris@chrislair.ch;
|
||||||
|
Christiane;Isme;christiane@christianeisme.ch;
|
||||||
|
Clair;Azil;clair@clairazil.ch;
|
||||||
|
Claire;Obscur;claire@claireobscur.ch;
|
||||||
|
Clément;Tine;clement@clementtine.ch;
|
||||||
|
Emile;Sabord;emile@emilesabord.ch;
|
||||||
|
Emma;Husse;emma@emmahusse.ch;
|
||||||
|
Emma;Taume;emma@emmataume.ch;
|
||||||
|
Emy;Sfere;emy@emysfere.ch;
|
||||||
|
Eva;Anchier;eva@evaanchier.ch;
|
||||||
|
Eve;Angile;eve@eveangile.ch;
|
||||||
|
Eve;Euriendire;eve@eveeuriendire.ch;
|
||||||
|
Frank;Eaudeport;frank@frankeaudeport.ch;
|
||||||
|
Fred;Ujour;fred@fredujour.ch;
|
||||||
|
Gilles;Mouchet;gilles@gillesmouchet.ch;
|
||||||
|
Harry;Vancouran;harry@harryvancouran.ch;
|
||||||
|
Hél√®ne;Aze;hel√®ne@hel√®neaze.ch;
|
||||||
|
Henri;Encore;henri@henriencore.ch;
|
||||||
|
Hercule;Letrax;hercule@herculeletrax.ch;
|
||||||
|
Hillary;Jaune;hillary@hillaryjaune.ch;
|
||||||
|
Homere;Dalor;homere@homeredalor.ch;
|
||||||
|
Kim;Hainerve;kim@kimhainerve.ch;
|
||||||
|
Kurt;Hermal;kurt@kurthermal.ch;
|
||||||
|
Kurt;Paille;kurt@kurtpaille.ch;
|
||||||
|
Larry;Golade;larry@larrygolade.ch;
|
||||||
|
Laurent;Barre;laurent@laurentbarre.ch;
|
||||||
|
Lee;Steric;lee@leesteric.ch;
|
||||||
|
Léo;Parre;leo@leoparre.ch;
|
||||||
|
Lewis;Air;lewis@lewisair.ch;
|
||||||
|
Line;Uzable;line@lineuzable.ch;
|
||||||
|
Lori;Ginal;lori@loriginal.ch;
|
||||||
|
Louis;Dire;louis@louisdire.ch;
|
||||||
|
Luc;Arne;luc@lucarne.ch;
|
||||||
|
Luc;Assion;luc@lucassion.ch;
|
||||||
|
Luc;Ratif;luc@lucratif.ch;
|
||||||
|
Luce;Tancil;luce@lucetancil.ch;
|
||||||
|
Lydie;Oduvillage;lydie@lydieoduvillage.ch;
|
||||||
|
Marc;Delamain;marc@marcdelamain.ch;
|
||||||
|
Maya;Partir;maya@mayapartir.ch;
|
||||||
|
Mel;Odrame;mel@melodrame.ch;
|
||||||
|
Mona;Ster;mona@monaster.ch;
|
||||||
|
Nathan;Riendemoi;nathan@nathanriendemoi.ch;
|
||||||
|
Nick;Otine;nick@nickotine.ch;
|
||||||
|
Nicole;Nicravatte;nicole@nicolenicravatte.ch;
|
||||||
|
Nicole;Pasledoit;nicole@nicolepasledoit.ch;
|
||||||
|
Ondine;Oucesoir;ondine@ondineoucesoir.ch;
|
||||||
|
Patrice;Tounet;patrice@patricetounet.ch;
|
||||||
|
Patty;Bulair;patty@pattybulair.ch;
|
||||||
|
Pierre;Afeu;pierre@pierreafeu.ch;
|
||||||
|
Pierre;Ponce;pierre@pierreponce.ch;
|
||||||
|
Rick;Hochet;rick@rickhochet.ch;
|
||||||
|
Ruddy;Mantère;ruddy@ruddymantère.ch;
|
||||||
|
Sacha;Touille;sacha@sachatouille.ch;
|
||||||
|
Sam;Agasse;sam@samagasse.ch;
|
||||||
|
Sarah;Trap;sarah@sarahtrap.ch;
|
||||||
|
Serge;Ouin;serge@sergeouin.ch;
|
||||||
|
Simon;Tagnar;simon@simontagnar.ch;
|
||||||
|
Sophie;Stiquet;sophie@sophiestiquet.ch;
|
||||||
|
Ted;Laparti;ted@tedlaparti.ch;
|
||||||
|
Teddy;Fissile;teddy@teddyfissile.ch;
|
||||||
|
Terry;Goureux;terry@terrygoureux.ch;
|
||||||
|
Tex;Ajerre;tex@texajerre.ch;
|
||||||
|
Théo;Coint;theo@theocoint.ch;
|
||||||
|
Théo;Courant;theo@theocourant.ch;
|
||||||
|
Thibaut;Monfils;thibaut@thibautmonfils.ch;
|
||||||
|
Thomas;Tefarci;thomas@thomastefarci.ch;
|
||||||
|
Thor;Nade;thor@thornade.ch;
|
||||||
|
Tony;Truand;tony@tonytruand.ch;
|
||||||
|
Vincent;Pourcent;vincent@vincentpourcent.ch;
|
||||||
|
Vincent;Time;vincent@vincenttime.ch;
|
||||||
|
Yann;Akpourlui;yann@yannakpourlui.ch;
|
||||||
|
Yshi;Potte;yshi@yshipotte.ch;
|
||||||
|
Yvan;Descloux;yvan@yvandescloux.ch;
|
||||||
|
Yves;Rogne;yves@yvesrogne.ch;
|
||||||
|
Yves;Vaurien;yves@yvesvaurien.ch;
|
||||||
|
Yvon;Pasbien;yvon@yvonpasbien.ch;
|
||||||
|
3
src/sampleData3Records.csv
Normal file
3
src/sampleData3Records.csv
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
Alex;Kuze;alex@alexkuze.ch;
|
||||||
|
Ali;Gator;ali@aligator.ch;
|
||||||
|
Alphonse;Danltas;alphonse@alphonsedanltas.ch;
|
||||||
|
106
src/searchindex.php
Normal file
106
src/searchindex.php
Normal file
@ -0,0 +1,106 @@
|
|||||||
|
<?php
|
||||||
|
require_once 'config.php';
|
||||||
|
// connect to es
|
||||||
|
$client = require 'connect-es.php';
|
||||||
|
$index_status = require 'checkindex.php';
|
||||||
|
?>
|
||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
||||||
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<title><?php echo $es_site_title." v".$site_version ?></title>
|
||||||
|
<!-- <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous"> -->
|
||||||
|
<link rel="stylesheet" type="text/css" href="css/bootstrap.min.css">
|
||||||
|
<link rel="stylesheet" type="text/css" href="css/gmo.css">
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h2><?php echo $es_site_title ?></h2>
|
||||||
|
<h6><?php echo $site_copyright ?></h6>
|
||||||
|
<br>
|
||||||
|
<?php
|
||||||
|
function displayInfoSearch($response){
|
||||||
|
|
||||||
|
echo "<p>";
|
||||||
|
printf("Total docs: %d\n", $response['hits']['total']['value']);
|
||||||
|
echo "<br>";
|
||||||
|
printf("Max score : %.4f\n", $response['hits']['max_score']);
|
||||||
|
echo "<br>";
|
||||||
|
printf("Took : %d ms\n", $response['took']);
|
||||||
|
echo "</p>";
|
||||||
|
}
|
||||||
|
|
||||||
|
function displayResult($response){
|
||||||
|
$hits=$response['hits']['total']['value'];
|
||||||
|
$result = null;
|
||||||
|
$i = 0;
|
||||||
|
while ($i < $hits) {
|
||||||
|
$result[$i] = $response['hits']['hits'][$i]['_source'];
|
||||||
|
$i++;
|
||||||
|
}
|
||||||
|
$row = 0;
|
||||||
|
foreach ($result as $key => $value) {
|
||||||
|
//while ($row < 15) {
|
||||||
|
echo $value['id'] . " : ";
|
||||||
|
echo $value['firstname'] . " : ";
|
||||||
|
echo $value['lastname'] . " : ";
|
||||||
|
echo $value['email'] . "<br>";
|
||||||
|
//}
|
||||||
|
//$row++;
|
||||||
|
}
|
||||||
|
echo "<br>";
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
if ($index_status == 200) {
|
||||||
|
// search one item
|
||||||
|
$params = [
|
||||||
|
'index' => $es_index,
|
||||||
|
'from' => 0, // <--- Start at #1
|
||||||
|
'size' => 10,
|
||||||
|
'body' => [
|
||||||
|
'query' => [
|
||||||
|
'match' => [
|
||||||
|
'firstname' => 'chantal'
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
];
|
||||||
|
$response = $client->search($params);
|
||||||
|
echo "<b>Result of the research 'match (chantal)'</b>";
|
||||||
|
displayInfoSearch($response);
|
||||||
|
displayResult($response);
|
||||||
|
|
||||||
|
// Search wildcard
|
||||||
|
$params = [
|
||||||
|
'index' => $es_index,
|
||||||
|
'body' => [
|
||||||
|
'query' => [
|
||||||
|
'wildcard' => ["firstname" => "yv*"]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
];
|
||||||
|
$response = $client->search($params);
|
||||||
|
echo "<b>Result of the research 'wildcard (yv*)'</b>";
|
||||||
|
displayInfoSearch($response);
|
||||||
|
displayResult($response);
|
||||||
|
|
||||||
|
// Search all item
|
||||||
|
$params = [
|
||||||
|
'index' => $es_index,
|
||||||
|
'body' => '{
|
||||||
|
"from": 0,
|
||||||
|
"size": 100, //dispay 100 result (default is 10)
|
||||||
|
"query": {
|
||||||
|
"match_all": {}
|
||||||
|
}
|
||||||
|
}',
|
||||||
|
];
|
||||||
|
$response = $client->search($params);
|
||||||
|
echo "<b>Result of the research 'match_all'</b>";
|
||||||
|
displayInfoSearch($response);
|
||||||
|
displayResult($response);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
echo "Problem with index <b>".$es_index."</b> (".$index_status.")";
|
||||||
|
}
|
||||||
|
?>
|
||||||
Loading…
x
Reference in New Issue
Block a user