Add docker deployment
Some checks failed
build docker image / docker-build (push) Has been cancelled

This commit is contained in:
Illya Marchenko 2024-11-04 16:45:27 +02:00
parent 7aaa365cc9
commit 77364f8e25
Signed by: stuzer05
GPG Key ID: A6ABAAA9268F9F4F
7 changed files with 192 additions and 46 deletions

@ -0,0 +1,34 @@
name: build docker image
on:
- push
jobs:
docker-build:
runs-on: ubuntu-latest
container:
image: catthehacker/ubuntu:act-latest
steps:
- uses: actions/checkout@v3
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to GitHub Container Registry
uses: docker/login-action@v3
with:
registry: gitea.stuzer.link
username: ${{ gitea.repository_owner }}
password: ${{ secrets.DOCKER_REGISTRY_TOKEN }}
- name: Build and push
uses: docker/build-push-action@v6
with:
platforms: linux/amd64
push: true
tags: gitea.stuzer.link/stuzer05/random-web-tools:latest
cache-from: type=registry,ref=gitea.stuzer.link/stuzer05/random-web-tools:latest
cache-to: type=inline

@ -1,29 +1,95 @@
FROM debian:bullseye-slim FROM php:8.3-fpm
ENV DEBIAN_FRONTEND="noninteractive" # build arguments
ARG APP_URL http://localhost
RUN apt-get update && apt-get -y upgrade \ # Update to Debian Trixie
&& apt-get -y install \ RUN cat <<EOF >> /etc/apt/sources.list
curl nodejs npm \ deb http://deb.debian.org/debian trixie main contrib non-free
&& npm install -g vue vite n \ deb http://deb.debian.org/debian trixie-updates main contrib non-free
&& n stable \ deb http://security.debian.org/debian-security trixie-security main contrib non-free
&& mkdir /app \ EOF
&& rm -rf /var/lib/apt/lists/* /usr/share/man/* /usr/share/doc/*
WORKDIR /app # Install system dependencies
RUN apt-get update && \
apt-get upgrade -y
COPY ./public public # Install apps
COPY ./src src RUN apt-get install -y --no-install-recommends \
COPY ./config.prod.js ./config.js nginx \
COPY ./index.html . rsyslog \
COPY ./package.json . supervisor \
COPY ./package-lock.json . curl \
COPY ./postcss.config.js . wget \
COPY ./tailwind.config.js . npm \
COPY ./vite.config.js . nano \
cmake \
gettext \
unzip
RUN npm install && npm run build # Install PHP dependencies
RUN apt-get install -y --no-install-recommends \
libzip-dev \
libfreetype6=2.12.1+dfsg-5+deb12u3 \
libfreetype-dev=2.12.1+dfsg-5+deb12u3 \
libpng-dev \
libjpeg62-turbo-dev \
libwebp-dev \
libmcrypt-dev \
libbz2-dev \
libcurl4-openssl-dev \
libtidy-dev \
libxslt-dev \
libonig-dev \
libc-client-dev \
libpq-dev \
libkrb5-dev \
libsqlite3-dev \
freetds-dev \
freetds-bin
FROM nginx # Cleanup APT
COPY --from=0 /app/dist /usr/share/nginx/html RUN rm -rf \
COPY ./nginx/conf /etc/nginx/conf.d/ /var/lib/apt/lists/* \
/usr/share/man/* \
/usr/share/doc/* \
/etc/nginx/sites-enabled
# Install PHP extensions
RUN docker-php-ext-install \
mbstring \
xml \
dom \
zip \
intl \
gd \
curl \
calendar \
pdo_sqlite \
bcmath
# Install Node.js
RUN npm install -g n && n 18
# Apply configs
COPY ./docker/conf/* /
# Configure project
WORKDIR /tmp
# Install project
COPY . .
RUN npm install \
&& npm run build \
&& mv /tmp/dist/* /tmp/api /var/www/html
WORKDIR /var/www/html
RUN cp config.js.ci config.js \
&& sed -i "s/{APP_URL}/$APP_URL/g" config.js \
&& chown www-data:www-data . -R
COPY ./entrypoint.sh /
CMD ["/bin/bash", "/entrypoint.sh"]

5
config.js.ci Normal file

@ -0,0 +1,5 @@
const config = {
APP_URL: '{APP_URL}',
};
export { config };

@ -0,0 +1,30 @@
server {
listen 80;
server_name default;
root /var/www/html;
index index.php;
client_max_body_size 5m;
client_body_timeout 60;
location / {
try_files $uri $uri/ @rewrite;
}
location @rewrite {
rewrite ^/(.*)$ /index.php;
}
location ~ \.php$ {
include fastcgi_params;
fastcgi_pass unix:/run/php/php-fpm.sock;
fastcgi_param SCRIPT_FILENAME $request_filename;
}
location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
try_files $uri /index.php;
expires max;
log_not_found off;
}
}

@ -0,0 +1,29 @@
[supervisord]
logfile=/var/log/supervisord.log
logfile_maxbytes=50MB
childlogdir=/var/log
pidfile=/var/run/supervisord.pid
nodaemon=true
user=root
[supervisorctl]
[program:misc-rsyslog]
command=/usr/sbin/rsyslogd -n
autostart=true
autorestart=true
stdout_logfile=/var/log/supervisor/%(program_name)s.log
stderr_logfile=/var/log/supervisor/%(program_name)s.log
[group:webserver]
programs=webserver-nginx,webserver-phpfpm
[program:webserver-nginx]
command=/usr/sbin/nginx -g 'daemon off;'
autostart=true
autorestart=true
[program:webserver-phpfpm]
command=/usr/local/sbin/php-fpm --nodaemonize --fpm-config /usr/local/etc/php-fpm.d/www.conf
autostart=true
autorestart=true

5
entrypoint.sh Normal file

@ -0,0 +1,5 @@
#!/bin/bash
mkdir -p /run/php
/usr/bin/supervisord -c /etc/supervisor/supervisord.conf

@ -1,23 +0,0 @@
server {
listen 80;
listen [::]:80;
server_name localhost;
#access_log /var/log/nginx/host.access.log main;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
location ~ /map/\d+$ {
try_files $uri $uri/ /index.html;
}
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}