Skip to content

Commit 5804740

Browse files
committed
Docker: Include integration
Signed-off-by: Dicky Herlambang (花) <[email protected]>
1 parent c62b41f commit 5804740

13 files changed

+623
-0
lines changed

Diff for: .env-db

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
DB_DATABASE=postgres
2+
DB_USERNAME=master
3+
DB_PASSWORD=postgres

Diff for: Dockerfile/Dockerfile.hana-api-services.sit

+98
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,98 @@
1+
# Configure php fpm as base image
2+
FROM php:8.2-fpm
3+
4+
# Configure image maintainer
5+
LABEL maintainer="Nicklas373 <[email protected]>"
6+
LABEL version="1.0"
7+
LABEL description="Docker container for HANA PDF REST API"
8+
9+
# Configure ARG
10+
ARG DB_USERNAME
11+
ARG DB_PASSWORD
12+
ARG JWT_SHOW_BLACKLIST_EXCEPTION
13+
ARG JWT_TTL
14+
15+
# Configure work directory
16+
WORKDIR /var/www/html
17+
18+
# Configure updates packages
19+
RUN apt-get update && apt-get upgrade -y && apt-get upgrade dist -y && apt-get dist-upgrade -y
20+
21+
# Configure initial packages
22+
RUN apt-get update && apt-get install -y \
23+
curl \
24+
unzip \
25+
git \
26+
libmagickwand-dev \
27+
libzip-dev \
28+
libfreetype6-dev \
29+
libjpeg62-turbo-dev \
30+
libpng-dev \
31+
ghostscript
32+
33+
# Install PHP extensions
34+
RUN docker-php-ext-configure gd --with-freetype --with-jpeg && \
35+
docker-php-ext-install -j$(nproc) \
36+
gd \
37+
zip
38+
39+
# Install Imagick extension
40+
RUN pecl install imagick && \
41+
docker-php-ext-enable imagick
42+
43+
# Configure PostgresSQL PHP Driver
44+
RUN apt-get update && apt-get install -y libpq-dev && \
45+
docker-php-ext-install pdo_pgsql
46+
47+
# Clone App Services
48+
RUN git clone -b be/master https://github.com/Nicklas373/Hana-PDF hanaci-api
49+
RUN chown -R www-data:www-data hanaci-api
50+
51+
# Configure Composer
52+
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
53+
RUN cd hanaci-api && composer install --no-interaction --no-scripts --no-progress --prefer-dist
54+
55+
# Configure App Service
56+
RUN mkdir hanaci-api/storage/app/public/batch
57+
RUN mkdir hanaci-api/storage/app/public/download
58+
RUN mkdir hanaci-api/storage/app/public/image
59+
RUN mkdir hanaci-api/storage/app/public/pool
60+
RUN mkdir hanaci-api/storage/app/public/upload
61+
RUN cd hanaci-api && chmod o+w /var/www/html/hanaci-api/storage/ -R
62+
RUN cd hanaci-api && chmod o+w /var/www/html/hanaci-api/vendor/mpdf/mpdf/tmp/ -R
63+
RUN cd hanaci-api && cp .env.example .env
64+
RUN cd hanaci-api && php artisan key:generate
65+
RUN cd hanaci-api && php artisan jwt:secret
66+
RUN cd hanaci-api && php artisan storage:link
67+
RUN cd hanaci-api && php artisan config:cache
68+
RUN cd hanaci-api && php artisan config:clear
69+
70+
# Configure Laravel Env
71+
RUN cd hanaci-api && echo "JWT_SHOW_BLACKLIST_EXCEPTION=$JWT_SHOW_BLACKLIST_EXCEPTION" >> .env
72+
RUN cd hanaci-api && echo "JWT_TTL=$JWT_TTL" >> .env
73+
RUN cd hanaci-api && echo "" >> .env
74+
RUN cd hanaci-api && sed -i 's/APP_NAME=Laravel/APP_NAME="gw.hana-ci"/' .env
75+
RUN cd hanaci-api && sed -i "s#APP_URL=http://localhost#APP_URL=http://sit.gw.hana-ci.com#" .env
76+
RUN cd hanaci-api && sed -i "s/DB_CONNECTION=mysql/DB_CONNECTION=pgsql/" .env
77+
RUN cd hanaci-api && sed -i "s/DB_HOST=127.0.0.1/DB_HOST=hana-db-services/" .env
78+
RUN cd hanaci-api && sed -i "s/DB_PORT=3306/DB_PORT=5432/" .env
79+
RUN cd hanaci-api && sed -i "s/DB_DATABASE=laravel/DB_DATABASE=postgres/" .env
80+
RUN cd hanaci-api && sed -i "s/DB_USERNAME=root/DB_USERNAME=$DB_USERNAME/" .env
81+
RUN cd hanaci-api && sed -i "s/DB_PASSWORD=/DB_PASSWORD=$DB_PASSWORD/" .env
82+
RUN cd hanaci-api && echo "" >> .env
83+
RUN cd hanaci-api && echo "ASPOSE_CLOUD_CLIENT_ID=xxxx" >> .env
84+
RUN cd hanaci-api && echo "ASPOSE_CLOUD_TOKEN=xxxx" >> .env
85+
RUN cd hanaci-api && echo "FTP_USERNAME=xxxx" >> .env
86+
RUN cd hanaci-api && echo "FTP_USERPASS=xxxx" >> .env
87+
RUN cd hanaci-api && echo "FTP_SERVER=xxxx" >> .env
88+
RUN cd hanaci-api && echo "FTP_ROOT=xxxx" >> .env
89+
RUN cd hanaci-api && echo "ILOVEPDF_PUBLIC_KEY=xxxx" >> .env
90+
RUN cd hanaci-api && echo "ILOVEPDF_SECRET_KEY=xxxx" >> .env
91+
RUN cd hanaci-api && echo "PDF_IMG_POOL=image" >> .env
92+
RUN cd hanaci-api && echo "PDF_BATCH=batch" >> .env
93+
RUN cd hanaci-api && echo "PDF_UPLOAD=upload" >> .env
94+
RUN cd hanaci-api && echo "PDF_DOWNLOAD=download" >> .env
95+
RUN cd hanaci-api && echo "PDF_POOL=pool" >> .env
96+
RUN cd hanaci-api && echo "TELEGRAM_BOT_ID=xxxx" >> .env
97+
RUN cd hanaci-api && echo "TELEGRAM_CHAT_ID=xxxx" >> .env
98+
RUN cd hanaci-api && echo "HANA_UNIQUE_KEY=xxxx" >> .env

Diff for: Dockerfile/Dockerfile.hana-app-pdf.sit

+55
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
# Configure php fpm as base image
2+
FROM php:8.2-fpm
3+
4+
# Configure image maintainer
5+
LABEL maintainer="Nicklas373 <[email protected]>"
6+
LABEL version="1.0"
7+
LABEL description="Docker application image for HANA PDF Apps"
8+
9+
# Configure ARG
10+
ARG DB_USERNAME
11+
ARG DB_PASSWORD
12+
13+
# Configure work directory
14+
WORKDIR /var/www/html
15+
16+
# Configure initial updates for instance
17+
RUN apt-get update && apt-get upgrade -y
18+
19+
# Configure initial packages
20+
RUN apt-get update && apt-get install -y \
21+
curl \
22+
unzip \
23+
git \
24+
&& apt-get -y autoremove \
25+
&& apt-get clean \
26+
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
27+
28+
# Clone App Services
29+
RUN git clone -b fe/master https://github.com/Nicklas373/Hana-PDF hanaci-pdf
30+
RUN chown -R www-data:www-data hanaci-pdf
31+
32+
# Configure Composer
33+
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
34+
RUN cd hanaci-pdf && composer install --no-interaction --no-scripts --no-progress --prefer-dist
35+
36+
# Configure App Service
37+
RUN cd hanaci-pdf && chmod o+w /var/www/html/hanaci-pdf/storage/ -R
38+
RUN cd hanaci-pdf && cp .env.example .env
39+
RUN cd hanaci-pdf && php artisan key:generate
40+
RUN cd hanaci-pdf && php artisan config:cache
41+
RUN cd hanaci-pdf && php artisan config:clear
42+
43+
# Configure Laravel Env
44+
RUN cd hanaci-pdf && echo "VITE_ADOBE_CLIENT_ID=xxxx" >> .env
45+
RUN cd hanaci-pdf && echo "" >> .env
46+
RUN cd hanaci-pdf && sed -i 's/APP_NAME=Laravel/APP_NAME="HANA PDF"/' .env
47+
RUN cd hanaci-pdf && sed -i "s#APP_URL=http://localhost#APP_URL=http://sit.pdf.hana-ci.com#" .env
48+
RUN cd hanaci-pdf && sed -i "s/DB_CONNECTION=mysql/DB_CONNECTION=pgsql/" .env
49+
RUN cd hanaci-pdf && sed -i "s/DB_HOST=127.0.0.1/DB_HOST=hana-db-services/" .env
50+
RUN cd hanaci-pdf && sed -i "s/DB_PORT=3306/DB_PORT=5432/" .env
51+
RUN cd hanaci-pdf && sed -i "s/DB_DATABASE=laravel/DB_DATABASE=postgres/" .env
52+
RUN cd hanaci-pdf && sed -i "s/DB_USERNAME=root/DB_USERNAME=$DB_USERNAME/" .env
53+
RUN cd hanaci-pdf && sed -i "s/DB_PASSWORD=/DB_PASSWORD=$DB_PASSWORD/" .env
54+
RUN cd hanaci-pdf && echo "TELEGRAM_BOT_ID=xxxx" >> .env
55+
RUN cd hanaci-pdf && echo "TELEGRAM_CHAT_ID=xxxx" >> .env

Diff for: Dockerfile/Dockerfile.hana-instance-services.sit

+87
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
FROM nginx:latest
2+
3+
# Configure image maintainer
4+
LABEL maintainer="Nicklas373 <[email protected]>"
5+
LABEL version="1.0"
6+
LABEL description="Docker container for instance on HANA-CI"
7+
8+
# Configure timezone
9+
ENV DEBIAN_FRONTEND noninteractive
10+
RUN apt-get update && \
11+
apt-get install -yq tzdata && \
12+
ln -fs /usr/share/zoneinfo/Asia/Jakarta /etc/localtime && \
13+
dpkg-reconfigure -f noninteractive tzdata
14+
ENV TZ="Asia/Jakarta"
15+
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
16+
17+
# Configure updates packages
18+
RUN apt-get update && apt-get upgrade -y && apt-get upgrade dist -y && apt-get dist-upgrade -y
19+
20+
# Configure Supervisord and PHP-FPM
21+
RUN apt-get update && apt-get install -y \
22+
supervisor \
23+
php8.2-fpm \
24+
wget
25+
26+
# Configure PHP dependencies
27+
RUN wget http://archive.ubuntu.com/ubuntu/pool/main/i/icu/libicu70_70.1-2ubuntu1_amd64.deb
28+
RUN dpkg -i libicu70_70.1-2ubuntu1_amd64.deb
29+
30+
# Configure initial packages
31+
RUN apt-get update \
32+
&& mkdir -p /etc/apt/keyrings \
33+
&& apt-get install -y gnupg gosu curl ca-certificates zip unzip git sqlite3 libcap2-bin libpng-dev python3 python3-pip dnsutils librsvg2-bin fswatch cron \
34+
&& curl -sS 'https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x14aa40ec0831756756d7f66c4f4ea0aae5267a6c' | gpg --dearmor | tee /etc/apt/keyrings/ppa_ondrej_php.gpg > /dev/null \
35+
&& echo "deb [signed-by=/etc/apt/keyrings/ppa_ondrej_php.gpg] https://ppa.launchpadcontent.net/ondrej/php/ubuntu jammy main" > /etc/apt/sources.list.d/ppa_ondrej_php.list \
36+
&& apt-get update \
37+
&& apt-get install -y php8.2-cli php8.2-dev \
38+
php8.2-pgsql php8.2-sqlite3 php8.2-gd php8.2-imagick \
39+
php8.2-curl \
40+
php8.2-imap php8.2-mbstring \
41+
php8.2-xml php8.2-zip php8.2-bcmath php8.2-soap \
42+
php8.2-intl php8.2-readline \
43+
php8.2-ldap \
44+
php8.2-msgpack php8.2-igbinary php8.2-redis php8.2-swoole \
45+
php8.2-memcached php8.2-pcov php8.2-xdebug \
46+
php8.2-imagick \
47+
ghostscript \
48+
&& curl -sLS https://getcomposer.org/installer | php -- --install-dir=/usr/bin/ --filename=composer \
49+
&& apt-get update \
50+
&& apt-get -y autoremove \
51+
&& apt-get clean \
52+
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
53+
54+
# Configure PHP
55+
RUN setcap "cap_net_bind_service=+ep" /usr/bin/php8.2
56+
RUN sed -i 's/user = www-data/user = nginx/' /etc/php/8.2/fpm/pool.d/www.conf
57+
RUN sed -i 's/group = www-data/group = nginx/' /etc/php/8.2/fpm/pool.d/www.conf
58+
RUN sed -i 's/listen.owner = www-data/listen.owner = nginx/' /etc/php/8.2/fpm/pool.d/www.conf
59+
RUN sed -i 's/listen.group = www-data/listen.group = nginx/' /etc/php/8.2/fpm/pool.d/www.conf
60+
RUN sed -i 's/;listen.mode = 0660/listen.mode = 0660/' /etc/php/8.2/fpm/pool.d/www.conf
61+
RUN sed -i 's/post_max_size = 8M/post_max_size = 125M/' etc/php/8.2/cli/php.ini
62+
RUN sed -i 's/upload_max_filesize = 2M/upload_max_filesize = 125M/' etc/php/8.2/cli/php.ini
63+
RUN sed -i 's/max_execution_time = 30/max_execution_time = 360/' etc/php/8.2/cli/php.ini
64+
RUN sed -i 's/max_input_time = 60/max_input_time = 360/' etc/php/8.2/fpm/php.ini
65+
RUN sed -i 's/post_max_size = 8M/post_max_size = 125M/' etc/php/8.2/fpm/php.ini
66+
RUN sed -i 's/upload_max_filesize = 2M/upload_max_filesize = 125M/' etc/php/8.2/fpm/php.ini
67+
RUN sed -i 's/max_execution_time = 30/max_execution_time = 360/' etc/php/8.2/fpm/php.ini
68+
RUN sed -i 's/max_input_time = 60/max_input_time = 360/' etc/php/8.2/fpm/php.ini
69+
70+
# Configure Python modules
71+
ENV PIP_BREAK_SYSTEM_PACKAGES 1
72+
RUN pip3 install --upgrade pip && pip3 install requests
73+
74+
# Configure nginx instances
75+
RUN mkdir /etc/nginx/sites-enabled/
76+
RUN ln -s /etc/nginx/sites-available/pdf-hanaci.conf /etc/nginx/sites-enabled/
77+
RUN ln -s /etc/nginx/sites-available/api-hanaci.conf /etc/nginx/sites-enabled/
78+
RUN rm /etc/nginx/conf.d/default.conf
79+
80+
# Configure cronjob and init process
81+
COPY module/instance/supervisord.conf /etc/supervisor/
82+
RUN echo "* * * * * cd /var/www/html/hanaci-api && php artisan schedule:run >> /dev/null 2>&1" | crontab -
83+
RUN service cron start
84+
85+
VOLUME [ "/var/www/html" ]
86+
87+
CMD ["/usr/bin/supervisord","-n", "-c", "/etc/supervisor/supervisord.conf"]

Diff for: docker-compose.yml

+94
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
version: '3.8'
2+
services:
3+
hana-app-pdf:
4+
image: nicklas373/hana-app-pdf-sit:1.0
5+
container_name: 'hana-app-pdf'
6+
cpus: 1.0
7+
mem_limit: 256m
8+
mem_reservation: 128M
9+
restart: unless-stopped
10+
working_dir: /var/www/html/hanaci-pdf
11+
environment:
12+
- APP_NAME=pdf.hana-ci.com
13+
volumes:
14+
- hana-app-pdf:/var/www/html/hanaci-pdf
15+
networks:
16+
- hana-network
17+
depends_on:
18+
- hana-api-services
19+
- hana-instance-services
20+
hana-api-services:
21+
image: nicklas373/hana-api-services-sit:1.0
22+
container_name: 'hana-api-services'
23+
cpus: 2.0
24+
mem_limit: 1024M
25+
mem_reservation: 512M
26+
restart: always
27+
working_dir: /var/www/html/hanaci-api
28+
environment:
29+
- APP_NAME=gw.hana-ci.com
30+
volumes:
31+
- hana-api-services:/var/www/html/hanaci-api
32+
networks:
33+
- hana-network
34+
depends_on:
35+
- hana-db-services
36+
- hana-instance-services
37+
hana-db-services:
38+
image: postgres:16.1
39+
container_name: 'hana-db-services'
40+
restart: unless-stopped
41+
cpus: 1.0
42+
mem_limit: 256M
43+
mem_reservation: 128M
44+
ports:
45+
- '${DB_PORT:-5432}:5432'
46+
env_file:
47+
- .env
48+
environment:
49+
PGPASSWORD: '${DB_PASSWORD}'
50+
POSTGRES_DB: '${DB_DATABASE}'
51+
POSTGRES_USER: '${DB_USERNAME}'
52+
POSTGRES_PASSWORD: '${DB_PASSWORD}'
53+
PGDATA: /var/lib/postgresql/data/pgdata
54+
volumes:
55+
- 'hana-db-services:/var/lib/postgresql/data'
56+
- './module/instance/init-user-db.sh:/docker-entrypoint-initdb.d/init-user-db.sh'
57+
networks:
58+
- hana-network
59+
depends_on:
60+
- hana-instance-services
61+
hana-instance-services:
62+
image: nicklas373/hana-instance-services-sit:1.0
63+
container_name: 'hana-instance-services'
64+
cpus: 2.0
65+
mem_limit: 1024M
66+
mem_reservation: 512M
67+
restart: always
68+
ports:
69+
- "80:80"
70+
- "81:81"
71+
volumes:
72+
- ./module/imagick/policy.xml:/etc/ImageMagick-6/policy.xml
73+
- ./module/nginx/nginx.conf:/etc/nginx/nginx.conf
74+
- ./module/nginx/sites-available/api-hanaci.conf:/etc/nginx/sites-available/api-hanaci.conf
75+
- ./module/nginx/sites-available/pdf-hanaci.conf:/etc/nginx/sites-available/pdf-hanaci.conf
76+
- ./module/php/php.ini:/etc/php/8.2/cli/conf.d/99-hana.ini
77+
- ./module/php/php.ini:/etc/php/8.2/fpm/conf.d/99-hana.ini
78+
- hana-app-pdf:/var/www/html/hanaci-pdf
79+
- hana-api-services:/var/www/html/hanaci-api
80+
- hana-instance-services:/var/log/supervisor
81+
networks:
82+
- hana-network
83+
networks:
84+
hana-network:
85+
driver: bridge
86+
volumes:
87+
hana-db-services:
88+
driver: local
89+
hana-app-pdf:
90+
driver: local
91+
hana-api-services:
92+
driver: local
93+
hana-instance-services:
94+
driver: local

Diff for: module/bash/docker-build-info.sh

+36
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
#!/bin/bash
2+
3+
TG_TOKEN=$1
4+
TG_CHAT_ID=$2
5+
CONTAINER_NAME=$3
6+
WORKFLOW_URL=$4
7+
IMAGE_NAME=$5
8+
STATUS=$6
9+
curdate=$(TZ=Indonesia/Jakarta date)
10+
11+
function bot_template() {
12+
curl -s -X POST https://api.telegram.org/bot$TG_TOKEN/sendMessage -d chat_id=$TG_CHAT_ID -d "parse_mode=HTML" -d text="$(
13+
for POST in "${@}";
14+
do
15+
echo "${POST}"
16+
done
17+
)"
18+
}
19+
20+
# Telegram Bot Service || Compiling Message
21+
function bot_message() {
22+
bot_template "<b>|| HANA-CI Build Bot ||</b>" \
23+
"" \
24+
"<b> Github Workflow Start ! </b>" \
25+
"" \
26+
"============= Job Information ================" \
27+
"<b>Workflow :</b><code> $CONTAINER_NAME </code>" \
28+
"<b>Workflow Detail :</b><code> <a href='$WORKFLOW_URL'>$WORKFLOW_URL</a> </code>" \
29+
"<b>Workflow Environment :</b><code> Production </code>" \
30+
"<b>Workflow Status :</b><code> $STATUS </code>" \
31+
"<b>Workflow Step :</b><code> $IMAGE_NAME </code>" \
32+
"<b>Workflow Start At :</b><code> ${curdate} </code>" \
33+
""
34+
}
35+
36+
bot_message

0 commit comments

Comments
 (0)