Compare commits
1 commit
main
...
asciicinem
Author | SHA1 | Date | |
---|---|---|---|
a1db8fc197 |
9 changed files with 88 additions and 171 deletions
12
asciicinema/.env-example
Normal file
12
asciicinema/.env-example
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
# Asciinema
|
||||||
|
ASCIICINEMA_VERSION=latest
|
||||||
|
ASCIICINEMA_SECRET= # tr -dc A-Za-z0-9 </dev/urandom | head -c 64; echo
|
||||||
|
ASCIICINEMA_DOMAIN=asciicinema.example.com
|
||||||
|
|
||||||
|
# SMTP
|
||||||
|
ASCIICINEMA_SMTP_HOST=localhost
|
||||||
|
ASCIICINEMA_SMTP_USER=none
|
||||||
|
ASCIICINEMA_SMTP_PASSWORD=none
|
||||||
|
|
||||||
|
# PostgreSQL
|
||||||
|
ASCIICINEMA_POSTGRESQL_VERSION=16
|
3
asciicinema/README.md
Normal file
3
asciicinema/README.md
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
After installastion you must install the asciicinema-client and point it to your location:
|
||||||
|
|
||||||
|
export ASCIINEMA_API_URL=https://asciinema.example.com
|
57
asciicinema/docker-compose.yml
Normal file
57
asciicinema/docker-compose.yml
Normal file
|
@ -0,0 +1,57 @@
|
||||||
|
---
|
||||||
|
services:
|
||||||
|
asciinema:
|
||||||
|
image: ghcr.io/asciinema/asciinema-server:${ASCIICINEMA_VERSION:-latest}
|
||||||
|
container_name: asciicinema
|
||||||
|
networks:
|
||||||
|
- traefik
|
||||||
|
- asciicinema
|
||||||
|
environment:
|
||||||
|
- SECRET_KEY_BASE=${ASCIICINEMA_SECRET:?error}
|
||||||
|
- URL_HOST=${ASCIICINEMA_DOMAIN:?error}
|
||||||
|
- URL_SCHEME=https
|
||||||
|
- SMTP_HOST=${ASCIICINEMA_SMTP_HOST:-localhost}
|
||||||
|
- SMTP_USERNAME=${ASCIICINEMA_SMTP_USER:-none}
|
||||||
|
- SMTP_PASSWORD=${ASCIICINEMA_SMTP_PASSWORD:-none}
|
||||||
|
volumes:
|
||||||
|
- data:/var/opt/asciinema
|
||||||
|
labels:
|
||||||
|
- "traefik.enable=true"
|
||||||
|
- "traefik.docker.network=traefik"
|
||||||
|
- "traefik.http.routers.aciicinema.entrypoints=http"
|
||||||
|
- "traefik.http.routers.aciicinema.rule=Host(`${ASCIICINEMA_DOMAIN:?error}`)"
|
||||||
|
- "traefik.http.middlewares.aciicinema-https-redirect.redirectscheme.scheme=https"
|
||||||
|
- "traefik.http.routers.aciicinema.middlewares=aciicinema-https-redirect"
|
||||||
|
- "traefik.http.routers.aciicinema-secure.entrypoints=https"
|
||||||
|
- "traefik.http.routers.aciicinema-secure.rule=Host(`${ASCIICINEMA_DOMAIN:?error}`)"
|
||||||
|
- "traefik.http.routers.aciicinema-secure.tls=true"
|
||||||
|
- "traefik.http.routers.aciicinema-secure.service=aciicinema"
|
||||||
|
- "traefik.http.services.aciicinema.loadbalancer.server.port=4000"
|
||||||
|
depends_on:
|
||||||
|
postgres:
|
||||||
|
condition: service_healthy
|
||||||
|
|
||||||
|
postgres:
|
||||||
|
image: docker.io/library/postgres:${ASCIICINEMA_POSTGRESQL_VERSION:-16}
|
||||||
|
container_name: asciicinema-db
|
||||||
|
networks:
|
||||||
|
- asciicinema
|
||||||
|
environment:
|
||||||
|
- POSTGRES_HOST_AUTH_METHOD=trust
|
||||||
|
volumes:
|
||||||
|
- db:/var/lib/postgresql/data
|
||||||
|
healthcheck:
|
||||||
|
test: ['CMD-SHELL', 'pg_isready -U postgres']
|
||||||
|
interval: 2s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 10
|
||||||
|
|
||||||
|
networks:
|
||||||
|
traefik:
|
||||||
|
external: true
|
||||||
|
asciicinema:
|
||||||
|
driver: bridge
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
data:
|
||||||
|
db:
|
|
@ -2,7 +2,6 @@
|
||||||
services:
|
services:
|
||||||
postgres:
|
postgres:
|
||||||
image: postgres:${NETBOX_POSTGRESQL_VERISION:-16}
|
image: postgres:${NETBOX_POSTGRESQL_VERISION:-16}
|
||||||
container_name: netbox-db
|
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
environment:
|
environment:
|
||||||
POSTGRES_DB: ${POSTGRES_DB:?error}
|
POSTGRES_DB: ${POSTGRES_DB:?error}
|
||||||
|
@ -23,7 +22,6 @@ services:
|
||||||
|
|
||||||
netbox:
|
netbox:
|
||||||
image: netboxcommunity/netbox:${NETBOX_VERSION:-v4.2.6}
|
image: netboxcommunity/netbox:${NETBOX_VERSION:-v4.2.6}
|
||||||
container_name: netbox
|
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
depends_on:
|
depends_on:
|
||||||
- postgres
|
- postgres
|
||||||
|
|
|
@ -1,28 +0,0 @@
|
||||||
1. Generate the application keys after solditime starts
|
|
||||||
You need to generate the application keys for your solidtime installation. You can do this by running the following command:
|
|
||||||
|
|
||||||
´´´
|
|
||||||
docker compose run scheduler php artisan self-host:generate-keys
|
|
||||||
´´´
|
|
||||||
|
|
||||||
This command will output random values for the APP_KEY, PASSPORT_PRIVATE_KEY, and PASSPORT_PUBLIC_KEY environment variables. You can copy these values and add them to the laravel.env file.
|
|
||||||
|
|
||||||
2. Create a user
|
|
||||||
Depending on your configuration of the APP_ENABLE_REGISTRATION environment variable, you can either create a user via the registration form or you need to create a user via the CLI. Per default the registration is disabled.
|
|
||||||
|
|
||||||
You can create a user via the CLI with the following command:
|
|
||||||
´´´
|
|
||||||
docker compose exec scheduler php artisan admin:user:create "Firstname Lastname" "firstname.lastname@some-email-provider.test" --verify-email
|
|
||||||
´´´
|
|
||||||
|
|
||||||
More information about the CLI commands can be found in the CLI commands documentation.
|
|
||||||
|
|
||||||
If you want this first user to be a super admin, you can add the email address to the SUPER_ADMINS environment variable in the laravel.env file.
|
|
||||||
´´´
|
|
||||||
SUPER_ADMINS="firstname.lastname@some-email-provider.test"
|
|
||||||
´´´
|
|
||||||
The command output a random password for the user. Afterwards you need to restart the containers:
|
|
||||||
´´´
|
|
||||||
docker compose down && docker compose up -d
|
|
||||||
´´´
|
|
||||||
Then you should be able log in with the user you created. If the user is a super admin, you can access the super admin panel via /admin.
|
|
|
@ -5,41 +5,41 @@ services:
|
||||||
restart: always
|
restart: always
|
||||||
labels:
|
labels:
|
||||||
- "traefik.enable=true"
|
- "traefik.enable=true"
|
||||||
|
- "traefik.docker.network=traefik"
|
||||||
- "traefik.http.routers.solidtime.entrypoints=http"
|
- "traefik.http.routers.solidtime.entrypoints=http"
|
||||||
- "traefik.http.routers.solidtime.rule=Host(`${SOLIDTIME_DOMAIN}`)"
|
- "traefik.http.routers.solidtime.rule=Host(`${SOLIDTIME_DOMAIN:?error}`)"
|
||||||
- "traefik.http.middlewares.solidtime-https-redirect.redirectscheme.scheme=https"
|
- "traefik.http.middlewares.solidtime-https-redirect.redirectscheme.scheme=https"
|
||||||
- "traefik.http.routers.solidtime.middlewares=solidtime-https-redirect"
|
- "traefik.http.routers.solidtime.middlewares=solidtime-https-redirect"
|
||||||
- "traefik.http.routers.solidtime-secure.entrypoints=https"
|
- "traefik.http.routers.solidtime-secure.entrypoints=https"
|
||||||
- "traefik.http.routers.solidtime-secure.rule=Host(`${SOLIDTIME_DOMAIN}`)"
|
- "traefik.http.routers.solidtime-secure.rule=Host(`${SOLIDTIME_DOMAIN:?error}`)"
|
||||||
- "traefik.http.routers.solidtime-secure.tls=true"
|
- "traefik.http.routers.solidtime-secure.tls=true"
|
||||||
|
- "traefik.http.routers.solidtime-secure.service=solidtime"
|
||||||
- "traefik.http.services.solidtime.loadbalancer.server.port=8000"
|
- "traefik.http.services.solidtime.loadbalancer.server.port=8000"
|
||||||
- "traefik.docker.network=internal"
|
|
||||||
networks:
|
networks:
|
||||||
- internal
|
- traefik
|
||||||
- solidtime
|
- solidtime
|
||||||
volumes:
|
volumes:
|
||||||
- "app-storage:/var/www/html/storage"
|
- "app-storage:/var/www/html/storage"
|
||||||
- "logs:/var/www/html/storage/logs"
|
- "./data/logs:/var/www/html/storage/logs"
|
||||||
|
- "./data/app-storage:/var/www/html/storage/app"
|
||||||
environment:
|
environment:
|
||||||
CONTAINER_MODE: http
|
CONTAINER_MODE: http
|
||||||
AUTO_DB_MIGRATE: true
|
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: [ "CMD-SHELL", "curl --fail http://localhost:8000/health-check/up || exit 1" ]
|
test: [ "CMD-SHELL", "curl --fail http://localhost:8000/health-check/up || exit 1" ]
|
||||||
env_file:
|
env_file:
|
||||||
- laravel.env
|
- laravel.env
|
||||||
- .env
|
|
||||||
depends_on:
|
depends_on:
|
||||||
- database
|
- database
|
||||||
|
|
||||||
scheduler:
|
scheduler:
|
||||||
image: "solidtime/solidtime:${SOLIDTIME_VERSION:-latest}"
|
image: "solidtime/solidtime:${SOLIDTIME_VERSION:-latest}"
|
||||||
container_name: solidtime-scheduler
|
|
||||||
restart: always
|
restart: always
|
||||||
networks:
|
networks:
|
||||||
- solidtime
|
- solidtime
|
||||||
volumes:
|
volumes:
|
||||||
- "app-storage:/var/www/html/storage"
|
- "app-storage:/var/www/html/storage"
|
||||||
- "logs:/var/www/html/storage/logs"
|
- "./data/logs:/var/www/html/storage/logs"
|
||||||
|
- "./data/app-storage:/var/www/html/storage/app"
|
||||||
environment:
|
environment:
|
||||||
CONTAINER_MODE: scheduler
|
CONTAINER_MODE: scheduler
|
||||||
healthcheck:
|
healthcheck:
|
||||||
|
@ -52,12 +52,12 @@ services:
|
||||||
queue:
|
queue:
|
||||||
restart: always
|
restart: always
|
||||||
image: "solidtime/solidtime:${SOLIDTIME_VERSION:-latest}"
|
image: "solidtime/solidtime:${SOLIDTIME_VERSION:-latest}"
|
||||||
container_name: solidtime-queue
|
|
||||||
networks:
|
networks:
|
||||||
- solidtime
|
- solidtime
|
||||||
volumes:
|
volumes:
|
||||||
- "app-storage:/var/www/html/storage"
|
- "app-storage:/var/www/html/storage"
|
||||||
- "logs:/var/www/html/storage/logs"
|
- "./data/logs:/var/www/html/storage/logs"
|
||||||
|
- "./data/app-storage:/var/www/html/storage/app"
|
||||||
environment:
|
environment:
|
||||||
CONTAINER_MODE: worker
|
CONTAINER_MODE: worker
|
||||||
WORKER_COMMAND: "php /var/www/html/artisan queue:work"
|
WORKER_COMMAND: "php /var/www/html/artisan queue:work"
|
||||||
|
@ -71,9 +71,8 @@ services:
|
||||||
database:
|
database:
|
||||||
restart: always
|
restart: always
|
||||||
image: 'postgres:${SOLIDTIME_POSTGRES_VERSION:-16}'
|
image: 'postgres:${SOLIDTIME_POSTGRES_VERSION:-16}'
|
||||||
container_name: solidtime-db
|
|
||||||
environment:
|
environment:
|
||||||
PGPASSWORD: '${SOLIDTIME_POSTGRES_PASSWORD:?error}'
|
PGPASSWORD: '${SOLIDTIME_POSGRES_PASSWORD:?error}'
|
||||||
POSTGRES_DB: '${SOLIDTIME_POSTGRES_DATABASE:?error}'
|
POSTGRES_DB: '${SOLIDTIME_POSTGRES_DATABASE:?error}'
|
||||||
POSTGRES_USER: '${SOLIDTIME_POSTGRES_USERNAME:?error}'
|
POSTGRES_USER: '${SOLIDTIME_POSTGRES_USERNAME:?error}'
|
||||||
POSTGRES_PASSWORD: '${SOLIDTIME_POSTGRES_PASSWORD:?error}'
|
POSTGRES_PASSWORD: '${SOLIDTIME_POSTGRES_PASSWORD:?error}'
|
||||||
|
@ -95,19 +94,16 @@ services:
|
||||||
|
|
||||||
gotenberg:
|
gotenberg:
|
||||||
image: gotenberg/gotenberg:8
|
image: gotenberg/gotenberg:8
|
||||||
container_name: solidtime-gotenberg
|
|
||||||
networks:
|
networks:
|
||||||
- solidtime
|
- solidtime
|
||||||
healthcheck:
|
healthcheck:
|
||||||
test: [ "CMD", "curl", "--silent", "--fail", "http://localhost:3000/health" ]
|
test: [ "CMD", "curl", "--silent", "--fail", "http://localhost:3000/health" ]
|
||||||
|
|
||||||
networks:
|
networks:
|
||||||
internal:
|
traefik:
|
||||||
external: true
|
external: true
|
||||||
solidtime:
|
internal:
|
||||||
driver: bridge
|
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
database-storage:
|
database-storage:
|
||||||
app-storage:
|
app-storage:
|
||||||
logs:
|
|
|
@ -29,7 +29,7 @@ providers:
|
||||||
exposedByDefault: false
|
exposedByDefault: false
|
||||||
watch: true
|
watch: true
|
||||||
file:
|
file:
|
||||||
directory: "/etc/traefik/config.d/"
|
directory: "/config.d/"
|
||||||
watch: true
|
watch: true
|
||||||
|
|
||||||
certificatesResolvers:
|
certificatesResolvers:
|
||||||
|
|
|
@ -1,83 +0,0 @@
|
||||||
## Traefik and Docker Options
|
|
||||||
WISHLIST_URL=wishlist.example.com
|
|
||||||
WISHLIST_VERSION=latest
|
|
||||||
|
|
||||||
## Core Settings
|
|
||||||
# Where to store databases, can be a CouchDB compatible server or directory.
|
|
||||||
DB_PREFIX=dbs/
|
|
||||||
# Location of DB log file (if needed for debugging).
|
|
||||||
DB_LOG_FILE=/dev/null
|
|
||||||
# Where to send someone if they need to log in
|
|
||||||
DEFAULT_FAILURE_REDIRECT=/login
|
|
||||||
# Port to listen on
|
|
||||||
PORT=80
|
|
||||||
# Expose the internal PouchDB with CouchDB API and Fauxton browser. Mostly used for debugging. Leave empty to disable.
|
|
||||||
DB_EXPOSE_PORT=
|
|
||||||
# Proxy to send item data requests to. Leave empty to disable.
|
|
||||||
PROXY_SERVER=
|
|
||||||
# Secret string to store session cookies with. Automatically generated if not provided.
|
|
||||||
SECRET=
|
|
||||||
# How long a user is logged in (milliseconds). Defaults to one week.
|
|
||||||
SESSION_MAX_AGE=604800000
|
|
||||||
# The name of the site in the <title> and navigation bar
|
|
||||||
SITE_TITLE=Christmas Community
|
|
||||||
# Used when shared to home screen
|
|
||||||
SHORT_TITLE=Christmas
|
|
||||||
# The root URL for forms, CSS, and a small amount of JS. Useful when proxying or using SSO.
|
|
||||||
# If not using SSO, this can be a relative path.
|
|
||||||
ROOT_URL=/
|
|
||||||
# Where to trust the X-Forwarded-For header from. Defaults to "loopback". Useful for proxying to docker.
|
|
||||||
TRUST_PROXY=loopback
|
|
||||||
# Any theme from https://jenil.github.io/bulmaswatch
|
|
||||||
BULMASWATCH=default
|
|
||||||
# Set to false to disable update notices
|
|
||||||
UPDATE_CHECK=true
|
|
||||||
# Set to false to disable the profile pictures feature
|
|
||||||
PFP=true
|
|
||||||
# Language of the interface, options listed in `languages` directory
|
|
||||||
LANGUAGE=en-US
|
|
||||||
# Password to enter guest mode,
|
|
||||||
# e.g. https://wishes.example.com?pw=ReplaceWithYourGuestPassword
|
|
||||||
# GUEST_PASSWORD=ReplaceWithYourGuestPassword
|
|
||||||
|
|
||||||
## Wishlist Settings
|
|
||||||
# Set to true to not allow users to have their own lists. You may want this for a birthday or wedding.
|
|
||||||
SINGLE_LIST=false
|
|
||||||
# Set to false to allow viewing wishlists without logging in
|
|
||||||
LISTS_PUBLIC=false
|
|
||||||
# Defaults to true. Set to false for legacy cards view.
|
|
||||||
TABLE=true
|
|
||||||
# Allow Markdown in item notes. Does not work with TABLE=false. Defaults to false.
|
|
||||||
MARKDOWN=false
|
|
||||||
|
|
||||||
## Custom HTML Snippets
|
|
||||||
# These are inserted into specific locations in the relevant page
|
|
||||||
# HTML is not escaped. Don't put untrusted data here.
|
|
||||||
# CUSTOM_HTML_LOGIN=<p style="margin-top: 1em;">Some custom text for the Login page</p>
|
|
||||||
# CUSTOM_HTML_WISHLISTS=
|
|
||||||
|
|
||||||
# Custom CSS stylesheet
|
|
||||||
# If you wish to include a custom stylesheet you can add the filename in the variable here.
|
|
||||||
# Remember to add the stylesheet to the filesystem at `static/css/custom.css`. In docker, mount `/usr/src/app/src/static/css/custom.css`.
|
|
||||||
# CUSTOM_CSS=custom.css
|
|
||||||
|
|
||||||
## Google Client Details
|
|
||||||
# You can configure single sign-on to your Christmas Community instance using Google accounts. Read this guide for details of what to configure on the Google side: https://developers.google.com/identity/openid-connect/openid-connect
|
|
||||||
# Once you've created a client ID and secret in your Google project use the below environment variables to enable SSO
|
|
||||||
|
|
||||||
# GOOGLE_CLIENT_ID=
|
|
||||||
# GOOGLE_CLIENT_SECRET=
|
|
||||||
|
|
||||||
## OIDC Provider Details
|
|
||||||
# You can configure single sign-on to your Christmas Community instance using any OIDC provider.
|
|
||||||
# Once you've created a client ID and secret in your authentication provider use the below environment variables to enable single sign on.
|
|
||||||
# OIDC_CLIENT_ID=
|
|
||||||
# OIDC_CLIENT_SECRET=
|
|
||||||
# OIDC_AUTHORIZATION_URL=https://accounts.google.com/o/oauth2/auth
|
|
||||||
# OIDC_TOKEN_URL=https://oauth2.googleapis.com/token
|
|
||||||
# OIDC_ISSUER=https://accounts.google.com
|
|
||||||
# OIDC_PROVIDER_NAME=Google
|
|
||||||
|
|
||||||
|
|
||||||
# Profile picture upload max size in MB
|
|
||||||
UPLOAD_PFP_MAX_SIZE=5
|
|
|
@ -1,38 +0,0 @@
|
||||||
---
|
|
||||||
services:
|
|
||||||
christmas-community:
|
|
||||||
image: wingysam/christmas-community:latest
|
|
||||||
container_name: wishlist
|
|
||||||
restart: always
|
|
||||||
volumes:
|
|
||||||
- ./data:/data
|
|
||||||
networks:
|
|
||||||
- traefik
|
|
||||||
environment:
|
|
||||||
SMILE: 'true'
|
|
||||||
# Table mode, set to 'false' to revert to box mode
|
|
||||||
TABLE: 'true'
|
|
||||||
# Single list mode
|
|
||||||
# (for weddings, birthdays, etc. only the admin account's list is accessible)
|
|
||||||
# Set to 'true' to enable
|
|
||||||
SINGLE_LIST: 'false'
|
|
||||||
# Some websites (like walmart) send headers that are larger than 8MB in
|
|
||||||
# length. If issues are encountered, set the node.js limit to a higher
|
|
||||||
# number than 8192
|
|
||||||
#NODE_OPTIONS: "--max-http-header-size=32768"
|
|
||||||
labels:
|
|
||||||
- "traefik.enable=true"
|
|
||||||
- "traefik.http.routers.wishlist.entrypoints=http"
|
|
||||||
- "traefik.http.routers.wishlist.rule=Host(`${WISHLIST_URL}`)"
|
|
||||||
- "traefik.http.middlewares.wishlist-https-redirect.redirectscheme.scheme=https"
|
|
||||||
- "traefik.http.routers.wishlist.middlewares=wishlist-https-redirect"
|
|
||||||
- "traefik.http.routers.wishlist-secure.entrypoints=https"
|
|
||||||
- "traefik.http.routers.wishlist-secure.rule=Host(`${WISHLIST_URL}`)"
|
|
||||||
- "traefik.http.routers.wishlist-secure.tls=true"
|
|
||||||
- "traefik.http.routers.wishlist-secure.service=wishlist"
|
|
||||||
- "traefik.http.services.wishlist.loadbalancer.server.port=80"
|
|
||||||
- "traefik.docker.network=traefik"
|
|
||||||
|
|
||||||
networks:
|
|
||||||
traefik:
|
|
||||||
external: true
|
|
Loading…
Add table
Reference in a new issue