diff --git a/solidtime/.env-example b/solidtime/.env-example new file mode 100644 index 0000000..3d8cc1b --- /dev/null +++ b/solidtime/.env-example @@ -0,0 +1,5 @@ +SOLIDTIME_VERSION=latest +SOLIDTIME_DOMAIN=solidtime.example.com +SOLIDTIME_POSTGRES_DATABASE=solidtime +SOLIDTIME_POSTGRES_USERNAME=solidtime +SOLIDTIME_POSTGRES_PASSWORD=randompassword \ No newline at end of file diff --git a/solidtime/docker-compose.yml b/solidtime/docker-compose.yml new file mode 100644 index 0000000..35a3eae --- /dev/null +++ b/solidtime/docker-compose.yml @@ -0,0 +1,109 @@ +services: + app: + image: "solidtime/solidtime:${SOLIDTIME_VERSION:-latest}" + container_name: solidtime + restart: always + labels: + - "traefik.enable=true" + - "traefik.docker.network=traefik" + - "traefik.http.routers.solidtime.entrypoints=http" + - "traefik.http.routers.solidtime.rule=Host(`${SOLIDTIME_DOMAIN:?error}`)" + - "traefik.http.middlewares.solidtime-https-redirect.redirectscheme.scheme=https" + - "traefik.http.routers.solidtime.middlewares=solidtime-https-redirect" + - "traefik.http.routers.solidtime-secure.entrypoints=https" + - "traefik.http.routers.solidtime-secure.rule=Host(`${SOLIDTIME_DOMAIN:?error}`)" + - "traefik.http.routers.solidtime-secure.tls=true" + - "traefik.http.routers.solidtime-secure.service=solidtime" + - "traefik.http.services.solidtime.loadbalancer.server.port=8000" + networks: + - traefik + - solidtime + volumes: + - "app-storage:/var/www/html/storage" + - "./data/logs:/var/www/html/storage/logs" + - "./data/app-storage:/var/www/html/storage/app" + environment: + CONTAINER_MODE: http + healthcheck: + test: [ "CMD-SHELL", "curl --fail http://localhost:8000/health-check/up || exit 1" ] + env_file: + - laravel.env + depends_on: + - database + + scheduler: + image: "solidtime/solidtime:${SOLIDTIME_VERSION:-latest}" + restart: always + networks: + - solidtime + volumes: + - "app-storage:/var/www/html/storage" + - "./data/logs:/var/www/html/storage/logs" + - "./data/app-storage:/var/www/html/storage/app" + environment: + CONTAINER_MODE: scheduler + healthcheck: + test: [ "CMD-SHELL", "supervisorctl status scheduler:scheduler_00" ] + env_file: + - laravel.env + depends_on: + - database + + queue: + restart: always + image: "solidtime/solidtime:${SOLIDTIME_VERSION:-latest}" + networks: + - solidtime + volumes: + - "app-storage:/var/www/html/storage" + - "./data/logs:/var/www/html/storage/logs" + - "./data/app-storage:/var/www/html/storage/app" + environment: + CONTAINER_MODE: worker + WORKER_COMMAND: "php /var/www/html/artisan queue:work" + healthcheck: + test: [ "CMD-SHELL", "supervisorctl status worker:worker_00" ] + env_file: + - laravel.env + depends_on: + - database + + database: + restart: always + image: 'postgres:${SOLIDTIME_POSTGRES_VERSION:-16}' + environment: + PGPASSWORD: '${SOLIDTIME_POSGRES_PASSWORD:?error}' + POSTGRES_DB: '${SOLIDTIME_POSTGRES_DATABASE:?error}' + POSTGRES_USER: '${SOLIDTIME_POSTGRES_USERNAME:?error}' + POSTGRES_PASSWORD: '${SOLIDTIME_POSTGRES_PASSWORD:?error}' + volumes: + - 'database-storage:/var/lib/postgresql/data' + networks: + - solidtime + healthcheck: + test: + - CMD + - pg_isready + - '-q' + - '-d' + - '${SOLIDTIME_POSTGRES_DATABASE}' + - '-U' + - '${SOLIDTIME_POSTGRES_USERNAME}' + retries: 3 + timeout: 5s + + gotenberg: + image: gotenberg/gotenberg:8 + networks: + - solidtime + healthcheck: + test: [ "CMD", "curl", "--silent", "--fail", "http://localhost:3000/health" ] + +networks: + traefik: + external: true + internal: + +volumes: + database-storage: + app-storage: \ No newline at end of file diff --git a/solidtime/laravel.env.example b/solidtime/laravel.env.example new file mode 100644 index 0000000..c133b6b --- /dev/null +++ b/solidtime/laravel.env.example @@ -0,0 +1,44 @@ +APP_ENV="production" +APP_DEBUG="false" +APP_URL="https://solidtime.example.com" +APP_FORCE_HTTPS="true" +TRUSTED_PROXIES="0.0.0.0/0,2000:0:0:0:0:0:0:0/3" + +# Authentication +APP_KEY="" +PASSPORT_PRIVATE_KEY="" +PASSPORT_PUBLIC_KEY="" +SUPER_ADMINS="" + +# Logging +LOG_CHANNEL="stderr_daily" +LOG_LEVEL="debug" + +# Database +DB_CONNECTION="pgsql" +DB_HOST="database" +DB_PORT="5432" +DB_SSLMODE="require" +DB_DATABASE="solidtime" +DB_USERNAME="solidtime" +DB_PASSWORD="randompassword" + +# Mail +MAIL_MAILER="smtp" +MAIL_HOST="" +MAIL_PORT="" +MAIL_ENCRYPTION="tls" +MAIL_FROM_ADDRESS="no-reply@solidtime.example.com" +MAIL_FROM_NAME="solidtime" +MAIL_USERNAME="" +MAIL_PASSWORD="" + +# Queue +QUEUE_CONNECTION="database" + +# File storage +FILESYSTEM_DISK="local" +PUBLIC_FILESYSTEM_DISK="public" + +# Services +GOTENBERG_URL="http://gotenberg:3000" \ No newline at end of file