feat/docker-compose-update (#18)

Co-authored-by: jon brookes <marshyon@gmail.com>
Reviewed-on: https://codeberg.org/headshed/share-lt/pulls/18
This commit is contained in:
Jon Brookes 2026-02-08 18:04:18 +01:00
parent fd43495e2d
commit 1a22fd156d
70 changed files with 1068 additions and 745 deletions

View file

@ -0,0 +1,17 @@
The ENTRYPOINT script (/usr/local/bin/docker-entrypoint.sh) is executed first.
The CMD (/usr/bin/supervisord -n -c /etc/supervisord.conf) is passed as arguments to the ENTRYPOINT script.
The ENTRYPOINT script can choose to execute the CMD or perform other tasks before running the CMD.
for now, supervisord is used in its current form, that of a python based application
this is ok for now but other options could be considered, such as replacing it with a [go binary port of supervisord](https://github.com/ochinchina/supervisord), using [s6-overlay](https://github.com/just-containers/s6-overlay), [dumb-init](https://github.com/Yelp/dumb-init) or similar process management tools designed for containers.
In the dockerfile, a user directive is used to lower from default root to that of a user that is created - 'www' and which is, for now, given a shell by which it is possible to log into this container for debugging and maintenance.
further on, this can be removed somehow - likely a case for k8s as there are patterns for this that are perhaps not so much for docker alone.

View file

@ -0,0 +1,103 @@
services:
nats:
image: nats:2.9.19-alpine
restart: unless-stopped
#ports:
# - 4222:4222
# - 8222:8222
volumes:
- ./nats/nats-server.conf:/nats-server.conf
- nats-data:/opt/storage
command: ["-c", "/nats-server.conf"]
networks:
- app-network
- nats
# nats-cli:
# image: natsio/nats-box
# container_name: nats-cli
# depends_on:
# - nats
# command: sleep infinity # Keeps container running
# networks:
# - app-network
# - nats
app:
image: quay.io/marshyon/share-lt:v0.0.5
restart: unless-stopped
tty: false
working_dir: /var/www
networks:
- app-network
- nats
ports:
- 8889:8889
volumes:
- storage-data:/var/www/storage
- database-data:/var/www/database
- ./nginx/conf.d/app.conf:/etc/nginx/http.d/app.conf
- ./docker/php/php.ini:/usr/local/etc/php/php.ini
environment:
- "LIVEWIRE_TEMPORARY_FILE_UPLOAD_MAX_FILE_UPLOAD_TIME=5"
- "ADMIN_EMAIL=${ADMIN_EMAIL}"
- "APP_NAME=${APP_NAME}"
- "APP_ENV=production"
- "APP_KEY=${APP_KEY}"
- "APP_DEBUG=false"
- "APP_URL=${APP_URL}"
- "APP_LOCALE=en"
- "APP_FALLBACK_LOCALE=en"
- "APP_MAINTENANCE_DRIVER=file"
- "PHP_CLI_SERVER_WORKERS=4"
- "BCRYPT_ROUNDS=12"
- "LOG_CHANNEL=stack"
- "LOG_STACK=single"
- "LOG_DEPRECATIONS_CHANNEL=null"
- "LOG_LEVEL=${LOG_LEVEL}"
- "DB_CONNECTION=sqlite"
- "SESSION_DRIVER=database"
- "SESSION_LIFETIME=120"
- "SESSION_ENCRYPT=false"
- "SESSION_PATH=/"
- "SESSION_DOMAIN=null"
- "BROADCAST_CONNECTION=log"
- "FILESYSTEM_DISK=s3"
- "QUEUE_CONNECTION=database"
- "CACHE_STORE=database"
- "CACHE_PREFIX=laravel_"
- "MAIL_MAILER=smtp"
- "MAIL_SCHEME=smtp"
- "MAIL_HOST=${MAIL_HOST}"
- "MAIL_PORT=${MAIL_PORT}"
- "MAIL_USERNAME=${MAIL_USERNAME}"
- "MAIL_PASSWORD=${MAIL_PASSWORD}"
- "MAIL_FROM_ADDRESS=${MAIL_FROM_ADDRESS}"
- "MAIL_FROM_NAME=${APP_NAME}"
- "AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}"
- "AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}"
- "AWS_DEFAULT_REGION=${AWS_DEFAULT_REGION}"
- "AWS_BUCKET=${AWS_BUCKET}"
- "AWS_USE_PATH_STYLE_ENDPOINT=${AWS_USE_PATH_STYLE_ENDPOINT}"
- "AWS_DIRECTORY=${AWS_DIRECTORY}"
- "MEDIA_DISK=${MEDIA_DISK}"
- "VITE_APP_NAME=${APP_NAME}"
- "NATS_URL=${NATS_URL}"
- "NATS_USERNAME=${NATS_USERNAME}"
- "NATS_PASSWORD=${NATS_PASSWORD}"
- "NATS_STREAM=${NATS_STREAM}"
- "NATS_SUBJECT=${NATS_SUBJECT}"
volumes:
storage-data:
database-data:
nats-data:
networks:
app-network:
nats:
external: true

View file

@ -0,0 +1,18 @@
services:
#PHP Service
app:
image: quay.io/marshyon/share-lt:0.0.1
ports:
- "8000:8000"
command: sh -c "php artisan optimize:clear && php artisan serve --host=0.0.0.0 --port=8000"
volumes:
- ./.env:/var/www/.env
- ./database/database.sqlite:/var/www/database/database.sqlite
- ./storage:/var/www/storage
restart: unless-stopped
tty: true
working_dir: /var/www

View file

@ -0,0 +1,84 @@
services:
app:
image: quay.io/marshyon/share-lt:v0.0.5
restart: unless-stopped
tty: false
working_dir: /var/www
networks:
- app-network
- traefik-net9
volumes:
- storage-data:/var/www/storage
- database-data:/var/www/database
- ./nginx/conf.d/app.conf:/etc/nginx/http.d/app.conf
- ./docker/php/php.ini:/usr/local/etc/php/php.ini
environment:
- "LIVEWIRE_TEMPORARY_FILE_UPLOAD_MAX_FILE_UPLOAD_TIME=5"
- "ADMIN_EMAIL=${ADMIN_EMAIL}"
- "APP_NAME=${APP_NAME}"
- "APP_ENV=production"
- "APP_KEY=${APP_KEY}"
- "APP_DEBUG=false"
- "APP_URL=${APP_URL}"
- "APP_LOCALE=en"
- "APP_FALLBACK_LOCALE=en"
- "APP_MAINTENANCE_DRIVER=file"
- "PHP_CLI_SERVER_WORKERS=4"
- "BCRYPT_ROUNDS=12"
- "LOG_CHANNEL=stack"
- "LOG_STACK=single"
- "LOG_DEPRECATIONS_CHANNEL=null"
- "LOG_LEVEL=${LOG_LEVEL}"
- "DB_CONNECTION=sqlite"
- "SESSION_DRIVER=database"
- "SESSION_LIFETIME=120"
- "SESSION_ENCRYPT=false"
- "SESSION_PATH=/"
- "SESSION_DOMAIN=null"
- "BROADCAST_CONNECTION=log"
- "FILESYSTEM_DISK=s3"
- "QUEUE_CONNECTION=database"
- "CACHE_STORE=database"
- "CACHE_PREFIX=laravel_"
- "MAIL_MAILER=smtp"
- "MAIL_SCHEME=smtp"
- "MAIL_HOST=${MAIL_HOST}"
- "MAIL_PORT=${MAIL_PORT}"
- "MAIL_USERNAME=${MAIL_USERNAME}"
- "MAIL_PASSWORD=${MAIL_PASSWORD}"
- "MAIL_FROM_ADDRESS=${MAIL_FROM_ADDRESS}"
- "MAIL_FROM_NAME=${APP_NAME}"
- "AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}"
- "AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}"
- "AWS_DEFAULT_REGION=${AWS_DEFAULT_REGION}"
- "AWS_BUCKET=${AWS_BUCKET}"
- "AWS_USE_PATH_STYLE_ENDPOINT=${AWS_USE_PATH_STYLE_ENDPOINT}"
- "AWS_DIRECTORY=${AWS_DIRECTORY}"
- "MEDIA_DISK=${MEDIA_DISK}"
- "VITE_APP_NAME=${APP_NAME}"
labels:
- "traefik.enable=true"
- "traefik.docker.network=traefik-net9"
- "traefik.http.services.${APP_SERVICE_NAME}.loadbalancer.server.port=${APP_PORT}"
- "traefik.http.services.${APP_SERVICE_NAME}.loadbalancer.server.scheme=http"
- "traefik.http.routers.${APP_SERVICE_NAME}.service=${APP_SERVICE_NAME}"
- "traefik.http.routers.${APP_SERVICE_NAME}.tls.certresolver=le"
- "traefik.http.routers.${APP_SERVICE_NAME}.rule=Host(`${APP_DOMAIN}`)"
- "traefik.http.routers.${APP_SERVICE_NAME}.entrypoints=websecure"
- "traefik.http.routers.${APP_SERVICE_NAME}.tls=true"
volumes:
storage-data:
database-data:
networks:
app-network:
traefik-net9:
external: true