Refactored the application's dockerization and added new services
This commit involves significant changes to the application's infrastructure. It refactors the application into two separate services: 'nibiru-auth-api' and 'nibiru-webhook-receiver'. Each service has its corresponding Dockerfile, Nginx & PHP-FPM configuration. It also provides a separate Nginx configuration for handling requests for each service. New environment files, start and stop scripts are introduced to facilitate local and production deployments.
This commit is contained in:
16
.env
16
.env
@@ -1,6 +1,16 @@
|
|||||||
COMPOSE_PROJECT_NAME=nibiru-framework-api
|
COMPOSE_PROJECT_NAME=nibiru-framework-api
|
||||||
VIRTUAL_HOST=agent.api.nibiru-framework.com
|
APPLICATION_ENV=production
|
||||||
LETSENCRYPT_HOST=agent.api.nibiru-framework.com
|
TZ=Europe/Berlin
|
||||||
VIRTUAL_PORT=80
|
NGINX_PROXY_VIRTUAL_PORT=80
|
||||||
|
FPM_VIRTUAL_PORT=9000
|
||||||
|
|
||||||
|
NIBIRU_WEBHOOK_HOST=nibiru-webhook-receiver
|
||||||
|
NIBIRU_WEHOOK_RECEIVER_VIRTUAL_HOST=api.agent.receiver.nibiru-framework.com
|
||||||
|
NIBIRU_WEHOOK_RECEIVER_LETSENCRYPT_HOST=api.agent.receiver.nibiru-framework.com
|
||||||
|
|
||||||
|
NIBIRU_AUTH_HOST=nibiru-auth-api
|
||||||
|
NIBIRU_AUTH_VIRTUAL_HOST=api.agent.auth.nibiru-framework.com
|
||||||
|
NIBIRU_AUTH_LETSENCRYPT_HOST=api.agent.auth.nibiru-framework.com
|
||||||
|
|
||||||
PROXY_NETWORK=nginx-proxy
|
PROXY_NETWORK=nginx-proxy
|
||||||
GITHUB_TOKEN=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
|
GITHUB_TOKEN=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
|
||||||
14
.env-local
Normal file
14
.env-local
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
COMPOSE_PROJECT_NAME=nibiru-framework-api
|
||||||
|
APPLICATION_ENV=development
|
||||||
|
TZ=Europe/Berlin
|
||||||
|
NGINX_PROXY_VIRTUAL_PORT=80
|
||||||
|
FPM_VIRTUAL_PORT=9000
|
||||||
|
|
||||||
|
NIBIRU_WEBHOOK_HOST=nibiru-webhook-receiver
|
||||||
|
NIBIRU_WEHOOK_RECEIVER_VIRTUAL_HOST=local.receiver.nibiru-framework.com
|
||||||
|
|
||||||
|
NIBIRU_AUTH_HOST=nibiru-auth-api
|
||||||
|
NIBIRU_AUTH_VIRTUAL_HOST=local.auth.nibiru-framework.com
|
||||||
|
|
||||||
|
PROXY_NETWORK=nginx-proxy
|
||||||
|
GITHUB_TOKEN=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
|
||||||
50
docker-compose.local.yml
Normal file
50
docker-compose.local.yml
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
version: '3.3'
|
||||||
|
|
||||||
|
services:
|
||||||
|
nibiru-auth-api:
|
||||||
|
env_file:
|
||||||
|
- .env-local
|
||||||
|
environment:
|
||||||
|
- APPLICATION_ENV=${APPLICATION_ENV}
|
||||||
|
- VIRTUAL_HOST=${NIBIRU_AUTH_VIRTUAL_HOST}
|
||||||
|
- VIRTUAL_PORT=${FPM_VIRTUAL_PORT}
|
||||||
|
- NIBIRU_AUTH_VIRTUAL_HOST=${NIBIRU_AUTH_VIRTUAL_HOST}
|
||||||
|
- NIBIRU_AUTH_HOST=${NIBIRU_AUTH_HOST}
|
||||||
|
- TZ=${TZ}
|
||||||
|
|
||||||
|
nibiru-auth-api-nginx:
|
||||||
|
env_file:
|
||||||
|
- .env-local
|
||||||
|
environment:
|
||||||
|
- APPLICATION_ENV=${APPLICATION_ENV}
|
||||||
|
- VIRTUAL_HOST=${NIBIRU_AUTH_VIRTUAL_HOST}
|
||||||
|
- VIRTUAL_PORT=${NGINX_PROXY_VIRTUAL_PORT}
|
||||||
|
- NIBIRU_AUTH_VIRTUAL_HOST=${NIBIRU_AUTH_VIRTUAL_HOST}
|
||||||
|
- NIBIRU_AUTH_HOST=${NIBIRU_AUTH_HOST}
|
||||||
|
- TZ=${TZ}
|
||||||
|
|
||||||
|
nibiru-webhook-receiver:
|
||||||
|
env_file:
|
||||||
|
- .env-local
|
||||||
|
environment:
|
||||||
|
- APPLICATION_ENV=${APPLICATION_ENV}
|
||||||
|
- VIRTUAL_HOST=${NIBIRU_WEHOOK_RECEIVER_VIRTUAL_HOST}
|
||||||
|
- VIRTUAL_PORT=${FPM_VIRTUAL_PORT}
|
||||||
|
- NIBIRU_WEHOOK_RECEIVER_VIRTUAL_HOST=${NIBIRU_WEHOOK_RECEIVER_VIRTUAL_HOST}
|
||||||
|
- NIBIRU_WEBHOOK_HOST=${NIBIRU_WEBHOOK_HOST}
|
||||||
|
- TZ=${TZ}
|
||||||
|
|
||||||
|
nibiru-webhook-receiver-nginx:
|
||||||
|
env_file:
|
||||||
|
- .env-local
|
||||||
|
environment:
|
||||||
|
- APPLICATION_ENV=${APPLICATION_ENV}
|
||||||
|
- VIRTUAL_HOST=${NIBIRU_WEHOOK_RECEIVER_VIRTUAL_HOST}
|
||||||
|
- VIRTUAL_PORT=${NGINX_PROXY_VIRTUAL_PORT}
|
||||||
|
- TZ=${TZ}
|
||||||
|
|
||||||
|
networks:
|
||||||
|
nginx-proxy:
|
||||||
|
external: true
|
||||||
|
api_internal:
|
||||||
|
driver: bridge
|
||||||
@@ -1,30 +1,92 @@
|
|||||||
version: '3.3'
|
version: '3.3'
|
||||||
|
|
||||||
services:
|
services:
|
||||||
php-fpm:
|
nibiru-auth-api:
|
||||||
build:
|
build:
|
||||||
context: ./php-fpm
|
context: ./nibiru-auth-api/fpm
|
||||||
|
env_file:
|
||||||
|
- .env
|
||||||
|
environment:
|
||||||
|
- APPLICATION_ENV=${APPLICATION_ENV}
|
||||||
|
- VIRTUAL_HOST=${NIBIRU_AUTH_VIRTUAL_HOST}
|
||||||
|
- VIRTUAL_PORT=${FPM_VIRTUAL_PORT}
|
||||||
|
- NIBIRU_AUTH_VIRTUAL_HOST=${NIBIRU_AUTH_VIRTUAL_HOST}
|
||||||
|
- NIBIRU_AUTH_HOST=${NIBIRU_AUTH_HOST}
|
||||||
|
- TZ=${TZ}
|
||||||
volumes:
|
volumes:
|
||||||
- ./src:/var/www/html
|
- ./src:/var/www/html
|
||||||
networks:
|
networks:
|
||||||
- nginx-proxy
|
api_internal:
|
||||||
restart: always
|
restart: always
|
||||||
|
|
||||||
nginx:
|
nibiru-auth-api-nginx:
|
||||||
image: nginx:latest
|
build:
|
||||||
|
context: ./nibiru-auth-api/nginx
|
||||||
|
links:
|
||||||
|
- nibiru-auth-api
|
||||||
|
env_file:
|
||||||
|
- .env
|
||||||
environment:
|
environment:
|
||||||
- VIRTUAL_HOST=${VIRTUAL_HOST}
|
- APPLICATION_ENV=${APPLICATION_ENV}
|
||||||
- LETSENCRYPT_HOST=${LETSENCRYPT_HOST}
|
- VIRTUAL_HOST=${NIBIRU_AUTH_VIRTUAL_HOST}
|
||||||
- VIRTUAL_PORT=${VIRTUAL_PORT}
|
- VIRTUAL_PORT=${NGINX_PROXY_VIRTUAL_PORT}
|
||||||
|
- FPM_VIRTUAL_PORT=${FPM_VIRTUAL_PORT}
|
||||||
|
- NIBIRU_AUTH_VIRTUAL_HOST=${NIBIRU_AUTH_VIRTUAL_HOST}
|
||||||
|
- NIBIRU_AUTH_HOST=${NIBIRU_AUTH_HOST}
|
||||||
|
- LETSENCRYPT_HOST=${NIBIRU_AUTH_LETSENCRYPT_HOST}
|
||||||
|
- TZ=${TZ}
|
||||||
|
volumes:
|
||||||
|
- ./src:/usr/share/nginx/html
|
||||||
|
networks:
|
||||||
|
nginx-proxy:
|
||||||
|
api_internal:
|
||||||
|
depends_on:
|
||||||
|
- nibiru-auth-api
|
||||||
|
restart: always
|
||||||
|
|
||||||
|
nibiru-webhook-receiver:
|
||||||
|
build:
|
||||||
|
context: ./nibiru-webhook-receiver/fpm
|
||||||
|
env_file:
|
||||||
|
- .env
|
||||||
|
environment:
|
||||||
|
- APPLICATION_ENV=${APPLICATION_ENV}
|
||||||
|
- VIRTUAL_HOST=${NIBIRU_WEHOOK_RECEIVER_VIRTUAL_HOST}
|
||||||
|
- VIRTUAL_PORT=${FPM_VIRTUAL_PORT}
|
||||||
|
- NIBIRU_WEHOOK_RECEIVER_VIRTUAL_HOST=${NIBIRU_WEHOOK_RECEIVER_VIRTUAL_HOST}
|
||||||
|
- NIBIRU_WEBHOOK_HOST=${NIBIRU_WEBHOOK_HOST}
|
||||||
|
- TZ=${TZ}
|
||||||
volumes:
|
volumes:
|
||||||
- ./src:/var/www/html
|
- ./src:/var/www/html
|
||||||
- ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf
|
|
||||||
depends_on:
|
|
||||||
- php-fpm
|
|
||||||
networks:
|
networks:
|
||||||
- nginx-proxy
|
api_internal:
|
||||||
|
restart: always
|
||||||
|
|
||||||
|
nibiru-webhook-receiver-nginx:
|
||||||
|
build:
|
||||||
|
context: ./nibiru-webhook-receiver/nginx
|
||||||
|
links:
|
||||||
|
- nibiru-webhook-receiver
|
||||||
|
env_file:
|
||||||
|
- .env
|
||||||
|
environment:
|
||||||
|
- APPLICATION_ENV=${APPLICATION_ENV}
|
||||||
|
- VIRTUAL_HOST=${NIBIRU_WEHOOK_RECEIVER_VIRTUAL_HOST}
|
||||||
|
- VIRTUAL_PORT=${NGINX_PROXY_VIRTUAL_PORT}
|
||||||
|
- FPM_VIRTUAL_PORT=${FPM_VIRTUAL_PORT}
|
||||||
|
- LETSENCRYPT_HOST=${NIBIRU_WEHOOK_RECEIVER_LETSENCRYPT_HOST}
|
||||||
|
- TZ=${TZ}
|
||||||
|
volumes:
|
||||||
|
- ./src:/usr/share/nginx/html
|
||||||
|
networks:
|
||||||
|
nginx-proxy:
|
||||||
|
api_internal:
|
||||||
|
depends_on:
|
||||||
|
- nibiru-auth-api
|
||||||
restart: always
|
restart: always
|
||||||
|
|
||||||
networks:
|
networks:
|
||||||
nginx-proxy:
|
nginx-proxy:
|
||||||
external: true
|
external: true
|
||||||
|
api_internal:
|
||||||
|
external: true
|
||||||
@@ -1,36 +0,0 @@
|
|||||||
server {
|
|
||||||
listen 80;
|
|
||||||
server_name ${VIRTUAL_HOST};
|
|
||||||
|
|
||||||
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss;
|
|
||||||
|
|
||||||
location / {
|
|
||||||
proxy_read_timeout 7200;
|
|
||||||
proxy_connect_timeout 7200;
|
|
||||||
if (!-e $request_filename){
|
|
||||||
rewrite ^(.*)$ / break;
|
|
||||||
}
|
|
||||||
root /usr/share/nginx/html;
|
|
||||||
index index.php;
|
|
||||||
}
|
|
||||||
|
|
||||||
location ~ \.php$ {
|
|
||||||
root /var/www/html;
|
|
||||||
fastcgi_pass php-fpm:9000;
|
|
||||||
fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;
|
|
||||||
include fastcgi_params;
|
|
||||||
fastcgi_buffers 16 32k;
|
|
||||||
fastcgi_buffer_size 64k;
|
|
||||||
fastcgi_busy_buffers_size 64k;
|
|
||||||
fastcgi_read_timeout 900;
|
|
||||||
}
|
|
||||||
|
|
||||||
error_page 500 502 503 504 /50x.html;
|
|
||||||
location = /50x.html {
|
|
||||||
root /usr/share/nginx/html;
|
|
||||||
}
|
|
||||||
|
|
||||||
location ~ /\.ht {
|
|
||||||
deny all;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
38
nibiru-auth-api/fpm/Dockerfile
Normal file
38
nibiru-auth-api/fpm/Dockerfile
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
# Use the official PHP-FPM image for PHP 8.3
|
||||||
|
FROM php:8.3-fpm
|
||||||
|
|
||||||
|
# Import the timezone and virtual port arguments
|
||||||
|
ARG TZ
|
||||||
|
ARG FPM_VIRTUAL_PORT
|
||||||
|
|
||||||
|
# Set the working directory
|
||||||
|
WORKDIR /var/www/html
|
||||||
|
|
||||||
|
# Install Composer
|
||||||
|
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
|
||||||
|
|
||||||
|
# Install system dependencies
|
||||||
|
RUN apt-get update && apt-get install -y \
|
||||||
|
zip \
|
||||||
|
unzip \
|
||||||
|
git \
|
||||||
|
gettext-base \
|
||||||
|
&& apt-get clean
|
||||||
|
|
||||||
|
# Set the timezone
|
||||||
|
ENV TZ=$TZ
|
||||||
|
RUN echo "date.timezone=${TZ}" > /usr/local/etc/php/conf.d/timezone.ini
|
||||||
|
|
||||||
|
|
||||||
|
# Copy entrypoint script and PHP-FPM configuration template
|
||||||
|
COPY entrypoint.sh /usr/local/bin/entrypoint.sh
|
||||||
|
COPY conf/zz-docker.conf.template /usr/local/etc/php-fpm.d/zz-docker.conf.template
|
||||||
|
|
||||||
|
# Make entrypoint script executable
|
||||||
|
RUN chmod +x /usr/local/bin/entrypoint.sh
|
||||||
|
|
||||||
|
# Expose port 9000 for PHP-FPM
|
||||||
|
EXPOSE $FPM_VIRTUAL_PORT
|
||||||
|
|
||||||
|
# Set entrypoint
|
||||||
|
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
|
||||||
5
nibiru-auth-api/fpm/conf/zz-docker.conf.template
Normal file
5
nibiru-auth-api/fpm/conf/zz-docker.conf.template
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
[global]
|
||||||
|
daemonize = no
|
||||||
|
|
||||||
|
[www]
|
||||||
|
listen = 0.0.0.0:$FPM_VIRTUAL_PORT
|
||||||
10
nibiru-auth-api/fpm/entrypoint.sh
Executable file
10
nibiru-auth-api/fpm/entrypoint.sh
Executable file
@@ -0,0 +1,10 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# Set the PHP-FPM listen port from the environment variable or default to 9000
|
||||||
|
export FPM_VIRTUAL_PORT=${FPM_VIRTUAL_PORT:-9000}
|
||||||
|
|
||||||
|
# Substitute environment variables in the PHP-FPM configuration template
|
||||||
|
envsubst '$FPM_VIRTUAL_PORT' < /usr/local/etc/php-fpm.d/zz-docker.conf.template > /usr/local/etc/php-fpm.d/zz-docker.conf
|
||||||
|
|
||||||
|
# Start PHP-FPM
|
||||||
|
php-fpm
|
||||||
16
nibiru-auth-api/nginx/Dockerfile
Normal file
16
nibiru-auth-api/nginx/Dockerfile
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
FROM nginx:latest
|
||||||
|
|
||||||
|
# Set the timezone
|
||||||
|
ENV TZ=Europe/Berlin
|
||||||
|
|
||||||
|
# Install tzdata for timezone data and gettext for envsubst
|
||||||
|
RUN apt-get update && apt-get install -y tzdata gettext && \
|
||||||
|
ln -fs /usr/share/zoneinfo/$TZ /etc/localtime && \
|
||||||
|
dpkg-reconfigure -f noninteractive tzdata
|
||||||
|
|
||||||
|
COPY conf.d /etc/nginx/conf.d
|
||||||
|
COPY entrypoint.sh /entrypoint.sh
|
||||||
|
RUN chmod +x /entrypoint.sh
|
||||||
|
|
||||||
|
ENTRYPOINT ["/entrypoint.sh"]
|
||||||
|
CMD ["nginx", "-g", "daemon off;"]
|
||||||
40
nibiru-auth-api/nginx/conf.d/default.conf
Normal file
40
nibiru-auth-api/nginx/conf.d/default.conf
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
server_name ${NIBIRU_AUTH_VIRTUAL_HOST};
|
||||||
|
|
||||||
|
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss;
|
||||||
|
|
||||||
|
location / {
|
||||||
|
proxy_read_timeout 7200;
|
||||||
|
proxy_connect_timeout 7200;
|
||||||
|
if (!-e $request_filename){
|
||||||
|
rewrite ^(.*)$ / break;
|
||||||
|
}
|
||||||
|
root /usr/share/nginx/html;
|
||||||
|
index index.php;
|
||||||
|
}
|
||||||
|
|
||||||
|
location ~ \.php$ {
|
||||||
|
root /var/www/html;
|
||||||
|
fastcgi_pass ${NIBIRU_AUTH_HOST}:${FPM_VIRTUAL_PORT};
|
||||||
|
fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
proxy_set_header X-Forwarded-Proto $scheme;
|
||||||
|
include fastcgi_params;
|
||||||
|
fastcgi_buffers 16 32k;
|
||||||
|
fastcgi_buffer_size 64k;
|
||||||
|
fastcgi_busy_buffers_size 64k;
|
||||||
|
fastcgi_read_timeout 900;
|
||||||
|
}
|
||||||
|
|
||||||
|
error_page 500 502 503 504 /50x.html;
|
||||||
|
location = /50x.html {
|
||||||
|
root /usr/share/nginx/html;
|
||||||
|
}
|
||||||
|
|
||||||
|
location ~ /\.ht {
|
||||||
|
deny all;
|
||||||
|
}
|
||||||
|
}
|
||||||
40
nibiru-auth-api/nginx/conf.d/default.conf.template
Normal file
40
nibiru-auth-api/nginx/conf.d/default.conf.template
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
server_name ${NIBIRU_AUTH_VIRTUAL_HOST};
|
||||||
|
|
||||||
|
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss;
|
||||||
|
|
||||||
|
location / {
|
||||||
|
proxy_read_timeout 7200;
|
||||||
|
proxy_connect_timeout 7200;
|
||||||
|
if (!-e $request_filename){
|
||||||
|
rewrite ^(.*)$ / break;
|
||||||
|
}
|
||||||
|
root /usr/share/nginx/html;
|
||||||
|
index index.php;
|
||||||
|
}
|
||||||
|
|
||||||
|
location ~ \.php$ {
|
||||||
|
root /var/www/html;
|
||||||
|
fastcgi_pass ${NIBIRU_AUTH_HOST}:${FPM_VIRTUAL_PORT};
|
||||||
|
fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
proxy_set_header X-Forwarded-Proto $scheme;
|
||||||
|
include fastcgi_params;
|
||||||
|
fastcgi_buffers 16 32k;
|
||||||
|
fastcgi_buffer_size 64k;
|
||||||
|
fastcgi_busy_buffers_size 64k;
|
||||||
|
fastcgi_read_timeout 900;
|
||||||
|
}
|
||||||
|
|
||||||
|
error_page 500 502 503 504 /50x.html;
|
||||||
|
location = /50x.html {
|
||||||
|
root /usr/share/nginx/html;
|
||||||
|
}
|
||||||
|
|
||||||
|
location ~ /\.ht {
|
||||||
|
deny all;
|
||||||
|
}
|
||||||
|
}
|
||||||
7
nibiru-auth-api/nginx/entrypoint.sh
Executable file
7
nibiru-auth-api/nginx/entrypoint.sh
Executable file
@@ -0,0 +1,7 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# Substitute environment variables in the configuration templates
|
||||||
|
envsubst '$NIBIRU_AUTH_HOST $NIBIRU_AUTH_VIRTUAL_HOST $FPM_VIRTUAL_PORT' < /etc/nginx/conf.d/default.conf.template > /etc/nginx/conf.d/default.conf
|
||||||
|
|
||||||
|
# Start Nginx
|
||||||
|
exec "$@"
|
||||||
38
nibiru-webhook-receiver/fpm/Dockerfile
Normal file
38
nibiru-webhook-receiver/fpm/Dockerfile
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
# Use the official PHP-FPM image for PHP 8.3
|
||||||
|
FROM php:8.3-fpm
|
||||||
|
|
||||||
|
# Import the timezone and virtual port arguments
|
||||||
|
ARG TZ
|
||||||
|
ARG FPM_VIRTUAL_PORT
|
||||||
|
|
||||||
|
# Set the working directory
|
||||||
|
WORKDIR /var/www/html
|
||||||
|
|
||||||
|
# Install Composer
|
||||||
|
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
|
||||||
|
|
||||||
|
# Install system dependencies
|
||||||
|
RUN apt-get update && apt-get install -y \
|
||||||
|
zip \
|
||||||
|
unzip \
|
||||||
|
git \
|
||||||
|
gettext-base \
|
||||||
|
&& apt-get clean
|
||||||
|
|
||||||
|
# Set the timezone
|
||||||
|
ENV TZ=$TZ
|
||||||
|
RUN echo "date.timezone=${TZ}" > /usr/local/etc/php/conf.d/timezone.ini
|
||||||
|
|
||||||
|
|
||||||
|
# Copy entrypoint script and PHP-FPM configuration template
|
||||||
|
COPY entrypoint.sh /usr/local/bin/entrypoint.sh
|
||||||
|
COPY conf/zz-docker.conf.template /usr/local/etc/php-fpm.d/zz-docker.conf.template
|
||||||
|
|
||||||
|
# Make entrypoint script executable
|
||||||
|
RUN chmod +x /usr/local/bin/entrypoint.sh
|
||||||
|
|
||||||
|
# Expose port 9000 for PHP-FPM
|
||||||
|
EXPOSE $FPM_VIRTUAL_PORT
|
||||||
|
|
||||||
|
# Set entrypoint
|
||||||
|
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
|
||||||
5
nibiru-webhook-receiver/fpm/conf/zz-docker.conf.template
Normal file
5
nibiru-webhook-receiver/fpm/conf/zz-docker.conf.template
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
[global]
|
||||||
|
daemonize = no
|
||||||
|
|
||||||
|
[www]
|
||||||
|
listen = 0.0.0.0:$FPM_VIRTUAL_PORT
|
||||||
10
nibiru-webhook-receiver/fpm/entrypoint.sh
Executable file
10
nibiru-webhook-receiver/fpm/entrypoint.sh
Executable file
@@ -0,0 +1,10 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# Set the PHP-FPM listen port from the environment variable or default to 9000
|
||||||
|
export FPM_VIRTUAL_PORT=${FPM_VIRTUAL_PORT:-9000}
|
||||||
|
|
||||||
|
# Substitute environment variables in the PHP-FPM configuration template
|
||||||
|
envsubst '$FPM_VIRTUAL_PORT' < /usr/local/etc/php-fpm.d/zz-docker.conf.template > /usr/local/etc/php-fpm.d/zz-docker.conf
|
||||||
|
|
||||||
|
# Start PHP-FPM
|
||||||
|
php-fpm
|
||||||
16
nibiru-webhook-receiver/nginx/Dockerfile
Normal file
16
nibiru-webhook-receiver/nginx/Dockerfile
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
FROM nginx:latest
|
||||||
|
|
||||||
|
# Set the timezone
|
||||||
|
ENV TZ=Europe/Berlin
|
||||||
|
|
||||||
|
# Install tzdata for timezone data and gettext for envsubst
|
||||||
|
RUN apt-get update && apt-get install -y tzdata gettext && \
|
||||||
|
ln -fs /usr/share/zoneinfo/$TZ /etc/localtime && \
|
||||||
|
dpkg-reconfigure -f noninteractive tzdata
|
||||||
|
|
||||||
|
COPY conf.d /etc/nginx/conf.d
|
||||||
|
COPY entrypoint.sh /entrypoint.sh
|
||||||
|
RUN chmod +x /entrypoint.sh
|
||||||
|
|
||||||
|
ENTRYPOINT ["/entrypoint.sh"]
|
||||||
|
CMD ["nginx", "-g", "daemon off;"]
|
||||||
40
nibiru-webhook-receiver/nginx/conf.d/default.conf
Normal file
40
nibiru-webhook-receiver/nginx/conf.d/default.conf
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
server_name ${NIBIRU_WEHOOK_RECEIVER_VIRTUAL_HOST};
|
||||||
|
|
||||||
|
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss;
|
||||||
|
|
||||||
|
location / {
|
||||||
|
proxy_read_timeout 7200;
|
||||||
|
proxy_connect_timeout 7200;
|
||||||
|
if (!-e $request_filename){
|
||||||
|
rewrite ^(.*)$ / break;
|
||||||
|
}
|
||||||
|
root /usr/share/nginx/html;
|
||||||
|
index index.php;
|
||||||
|
}
|
||||||
|
|
||||||
|
location ~ \.php$ {
|
||||||
|
root /var/www/html;
|
||||||
|
fastcgi_pass ${NIBIRU_WEBHOOK_HOST}:${FPM_VIRTUAL_PORT};
|
||||||
|
fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
proxy_set_header X-Forwarded-Proto $scheme;
|
||||||
|
include fastcgi_params;
|
||||||
|
fastcgi_buffers 16 32k;
|
||||||
|
fastcgi_buffer_size 64k;
|
||||||
|
fastcgi_busy_buffers_size 64k;
|
||||||
|
fastcgi_read_timeout 900;
|
||||||
|
}
|
||||||
|
|
||||||
|
error_page 500 502 503 504 /50x.html;
|
||||||
|
location = /50x.html {
|
||||||
|
root /usr/share/nginx/html;
|
||||||
|
}
|
||||||
|
|
||||||
|
location ~ /\.ht {
|
||||||
|
deny all;
|
||||||
|
}
|
||||||
|
}
|
||||||
40
nibiru-webhook-receiver/nginx/conf.d/default.conf.template
Normal file
40
nibiru-webhook-receiver/nginx/conf.d/default.conf.template
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
server_name ${NIBIRU_WEHOOK_RECEIVER_VIRTUAL_HOST};
|
||||||
|
|
||||||
|
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss;
|
||||||
|
|
||||||
|
location / {
|
||||||
|
proxy_read_timeout 7200;
|
||||||
|
proxy_connect_timeout 7200;
|
||||||
|
if (!-e $request_filename){
|
||||||
|
rewrite ^(.*)$ / break;
|
||||||
|
}
|
||||||
|
root /usr/share/nginx/html;
|
||||||
|
index index.php;
|
||||||
|
}
|
||||||
|
|
||||||
|
location ~ \.php$ {
|
||||||
|
root /var/www/html;
|
||||||
|
fastcgi_pass ${NIBIRU_WEBHOOK_HOST}:${FPM_VIRTUAL_PORT};
|
||||||
|
fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
proxy_set_header X-Forwarded-Proto $scheme;
|
||||||
|
include fastcgi_params;
|
||||||
|
fastcgi_buffers 16 32k;
|
||||||
|
fastcgi_buffer_size 64k;
|
||||||
|
fastcgi_busy_buffers_size 64k;
|
||||||
|
fastcgi_read_timeout 900;
|
||||||
|
}
|
||||||
|
|
||||||
|
error_page 500 502 503 504 /50x.html;
|
||||||
|
location = /50x.html {
|
||||||
|
root /usr/share/nginx/html;
|
||||||
|
}
|
||||||
|
|
||||||
|
location ~ /\.ht {
|
||||||
|
deny all;
|
||||||
|
}
|
||||||
|
}
|
||||||
7
nibiru-webhook-receiver/nginx/entrypoint.sh
Executable file
7
nibiru-webhook-receiver/nginx/entrypoint.sh
Executable file
@@ -0,0 +1,7 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
# Substitute environment variables in the configuration templates
|
||||||
|
envsubst '$NIBIRU_WEBHOOK_HOST $NIBIRU_WEHOOK_RECEIVER_VIRTUAL_HOST $FPM_VIRTUAL_PORT' < /etc/nginx/conf.d/default.conf.template > /etc/nginx/conf.d/default.conf
|
||||||
|
|
||||||
|
# Start Nginx
|
||||||
|
exec "$@"
|
||||||
@@ -1,21 +0,0 @@
|
|||||||
# Use the official PHP-FPM image for PHP 8.3
|
|
||||||
FROM php:8.3-fpm
|
|
||||||
|
|
||||||
# Set the working directory
|
|
||||||
WORKDIR /var/www/html
|
|
||||||
|
|
||||||
# Install Composer
|
|
||||||
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
|
|
||||||
|
|
||||||
# Install system dependencies
|
|
||||||
RUN apt-get update && apt-get install -y \
|
|
||||||
zip \
|
|
||||||
unzip \
|
|
||||||
git \
|
|
||||||
&& apt-get clean
|
|
||||||
|
|
||||||
# Expose port 9000 for PHP-FPM
|
|
||||||
EXPOSE 9000
|
|
||||||
|
|
||||||
# Start PHP-FPM
|
|
||||||
CMD ["php-fpm"]
|
|
||||||
23
src/AuthController.php
Normal file
23
src/AuthController.php
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
class AuthController {
|
||||||
|
public function login() {
|
||||||
|
// Handle login logic, validate user credentials, generate token
|
||||||
|
$username = $_POST['username'];
|
||||||
|
$password = $_POST['password'];
|
||||||
|
|
||||||
|
// Validate credentials (this is just an example, use proper validation)
|
||||||
|
if ($username === 'user' && $password === 'password') {
|
||||||
|
$token = bin2hex(random_bytes(16)); // Generate a random token
|
||||||
|
echo json_encode(['token' => $token]);
|
||||||
|
} else {
|
||||||
|
http_response_code(401);
|
||||||
|
echo json_encode(['error' => 'Invalid credentials']);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function validateToken($token) {
|
||||||
|
// Validate the token (this is a simple example, implement proper token validation)
|
||||||
|
return strlen($token) === 32;
|
||||||
|
}
|
||||||
|
}
|
||||||
0
src/GitHubClient.php
Normal file → Executable file
0
src/GitHubClient.php
Normal file → Executable file
9
src/ValidateToken.php
Normal file
9
src/ValidateToken.php
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
require_once 'AuthController.php';
|
||||||
|
|
||||||
|
$authController = new AuthController();
|
||||||
|
$token = $_POST['token'] ?? '';
|
||||||
|
|
||||||
|
$isValid = $authController->validateToken($token);
|
||||||
|
echo json_encode(['valid' => $isValid]);
|
||||||
34
src/WebhookController.php
Normal file
34
src/WebhookController.php
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
<?php
|
||||||
|
|
||||||
|
class WebhookController {
|
||||||
|
public function __construct() {
|
||||||
|
$this->authServiceUrl = 'http://nibiru-auth-api:9000/validateToken.php';
|
||||||
|
}
|
||||||
|
|
||||||
|
private function validateToken($token) {
|
||||||
|
// Make a request to the auth service to validate the token
|
||||||
|
$ch = curl_init();
|
||||||
|
curl_setopt($ch, CURLOPT_URL, $this->authServiceUrl);
|
||||||
|
curl_setopt($ch, CURLOPT_POST, 1);
|
||||||
|
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query(['token' => $token]));
|
||||||
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
||||||
|
$response = curl_exec($ch);
|
||||||
|
curl_close($ch);
|
||||||
|
|
||||||
|
$result = json_decode($response, true);
|
||||||
|
return $result && isset($result['valid']) && $result['valid'];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function handleWebhook() {
|
||||||
|
$headers = getallheaders();
|
||||||
|
$token = $headers['Authorization'] ?? '';
|
||||||
|
|
||||||
|
if (!$this->validateToken($token)) {
|
||||||
|
http_response_code(401);
|
||||||
|
echo json_encode(['error' => 'Unauthorized']);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Handle the webhook logic here
|
||||||
|
}
|
||||||
|
}
|
||||||
0
src/composer.json
Normal file → Executable file
0
src/composer.json
Normal file → Executable file
2
src/index.php
Executable file
2
src/index.php
Executable file
@@ -0,0 +1,2 @@
|
|||||||
|
<?php
|
||||||
|
phpinfo();
|
||||||
0
src/webhookReceiver.php
Normal file → Executable file
0
src/webhookReceiver.php
Normal file → Executable file
26
start.sh
Executable file
26
start.sh
Executable file
@@ -0,0 +1,26 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Check for the environment parameter
|
||||||
|
if [ "$1" = "local" ]; then
|
||||||
|
# Use the .env-local file for local development
|
||||||
|
ENV_FILE=".env-local"
|
||||||
|
|
||||||
|
# Export the variables from the specified environment file
|
||||||
|
export $(grep -v '^#' $ENV_FILE | xargs)
|
||||||
|
|
||||||
|
# Use the specified environment file with docker-compose
|
||||||
|
COMPOSE_FILES="-f docker-compose.yml -f docker-compose.local.yml"
|
||||||
|
else
|
||||||
|
# Use the .env file for production
|
||||||
|
ENV_FILE=".env"
|
||||||
|
|
||||||
|
# Export the variables from the specified environment file
|
||||||
|
export $(grep -v '^#' $ENV_FILE | xargs)
|
||||||
|
|
||||||
|
# Use the specified environment file with docker-compose
|
||||||
|
COMPOSE_FILES="-f docker-compose.yml"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Start Docker Compose with the specified configuration files
|
||||||
|
docker-compose $COMPOSE_FILES build --no-cache
|
||||||
|
docker-compose $COMPOSE_FILES up -d --build
|
||||||
11
stop.sh
Executable file
11
stop.sh
Executable file
@@ -0,0 +1,11 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Check for the environment parameter
|
||||||
|
if [ "$1" = "local" ]; then
|
||||||
|
COMPOSE_FILES="-f docker-compose.yml -f docker-compose.local.yml"
|
||||||
|
else
|
||||||
|
COMPOSE_FILES="-f docker-compose.yml"
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Stop and remove the Docker Compose services
|
||||||
|
docker-compose $COMPOSE_FILES down
|
||||||
Reference in New Issue
Block a user