feat(service): add Opnform template (#5875)
This commit is contained in:
commit
be83c7ae08
2 changed files with 229 additions and 0 deletions
1
public/svgs/opnform.svg
Normal file
1
public/svgs/opnform.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg fill="none" height="120" viewBox="0 0 120 120" width="120" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><linearGradient id="a" gradientUnits="userSpaceOnUse" x1="60" x2="60" y1="2" y2="118.352"><stop offset="0" stop-color="#2563eb"/><stop offset="1" stop-color="#60a5fa"/></linearGradient><path clip-rule="evenodd" d="m80.6502 118.352c22.9638-8.418 39.3498-30.4712 39.3498-56.352 0-33.1371-26.8629-60-60-60s-60 26.8629-60 60c0 25.8808 16.3862 47.934 39.3498 56.352l16.631-38.9411c-7.4746-1.9924-12.9808-8.8086-12.9808-16.9109 0-9.665 7.835-17.5 17.5-17.5s17.5 7.835 17.5 17.5c0 8.4269-5.9563 15.4627-13.8885 17.1269z" fill="url(#a)" fill-rule="evenodd"/></svg>
|
||||
|
After Width: | Height: | Size: 698 B |
228
templates/compose/opnform.yaml
Normal file
228
templates/compose/opnform.yaml
Normal file
|
|
@ -0,0 +1,228 @@
|
|||
# documentation: https://docs.opnform.com/introduction
|
||||
# slogan: OpnForm is an open-source form builder that lets you create beautiful forms and share them anywhere. It's super fast, you don't need to know how to code
|
||||
# tags: opnform, form, survey, cloud, open-source, self-hosted, docker, no-code, embeddable
|
||||
# logo: svg/opnform.svg
|
||||
# port: 80
|
||||
|
||||
x-shared-env: &shared-api-env
|
||||
APP_NAME: "OpnForm"
|
||||
APP_ENV: production
|
||||
APP_KEY: ${SERVICE_BASE64_APIKEY}
|
||||
APP_DEBUG: ${APP_DEBUG:-false}
|
||||
APP_URL: ${SERVICE_URL_NGINX}
|
||||
LOG_CHANNEL: errorlog
|
||||
LOG_LEVEL: ${LOG_LEVEL:-debug}
|
||||
FILESYSTEM_DRIVER: ${FILESYSTEM_DRIVER:-local}
|
||||
LOCAL_FILESYSTEM_VISIBILITY: public
|
||||
CACHE_DRIVER: redis
|
||||
QUEUE_CONNECTION: redis
|
||||
SESSION_DRIVER: redis
|
||||
SESSION_LIFETIME: 120
|
||||
MAIL_MAILER: ${MAIL_MAILER:-log}
|
||||
MAIL_HOST: ${MAIL_HOST}
|
||||
MAIL_PORT: ${MAIL_PORT}
|
||||
MAIL_USERNAME: ${MAIL_USERNAME:-your@email.com}
|
||||
MAIL_PASSWORD: ${MAIL_PASSWORD}
|
||||
MAIL_ENCRYPTION: ${MAIL_ENCRYPTION}
|
||||
MAIL_FROM_ADDRESS: ${MAIL_FROM_ADDRESS:-your@email.com}
|
||||
MAIL_FROM_NAME: ${MAIL_FROM_NAME:-OpnForm}
|
||||
AWS_ACCESS_KEY_ID: ${AWS_ACCESS_KEY_ID}
|
||||
AWS_SECRET_ACCESS_KEY: ${AWS_SECRET_ACCESS_KEY}
|
||||
AWS_DEFAULT_REGION: ${AWS_DEFAULT_REGION:-us-east-1}
|
||||
AWS_BUCKET: ${AWS_BUCKET}
|
||||
OPEN_AI_API_KEY: ${OPEN_AI_API_KEY}
|
||||
TELEGRAM_BOT_ID: ${TELEGRAM_BOT_ID}
|
||||
TELEGRAM_BOT_TOKEN: ${TELEGRAM_BOT_TOKEN}
|
||||
REDIS_HOST: redis
|
||||
REDIS_PASSWORD: ${SERVICE_PASSWORD_64_REDIS}
|
||||
# Database settings
|
||||
DB_HOST: postgresql
|
||||
DB_DATABASE: ${POSTGRESQL_DATABASE:-opnform}
|
||||
DB_USERNAME: ${SERVICE_USER_POSTGRESQL}
|
||||
DB_PASSWORD: ${SERVICE_PASSWORD_POSTGRESQL}
|
||||
DB_CONNECTION: pgsql
|
||||
# PHP Configuration
|
||||
PHP_MEMORY_LIMIT: "1G"
|
||||
PHP_MAX_EXECUTION_TIME: "600"
|
||||
PHP_UPLOAD_MAX_FILESIZE: "64M"
|
||||
PHP_POST_MAX_SIZE: "64M"
|
||||
|
||||
services:
|
||||
opnform-api:
|
||||
image: jhumanj/opnform-api:1.12.1
|
||||
volumes:
|
||||
- api-storage:/usr/share/nginx/html/storage
|
||||
environment:
|
||||
# Use the shared environment variables.
|
||||
<<: *shared-api-env
|
||||
JWT_TTL: ${JWT_TTL:-1440}
|
||||
JWT_SECRET: ${SERVICE_PASSWORD_JWTSECRET}
|
||||
JWT_SKIP_IP_UA_VALIDATION: ${JWT_SKIP_IP_UA_VALIDATION:-true}
|
||||
H_CAPTCHA_SITE_KEY: ${H_CAPTCHA_SITE_KEY}
|
||||
H_CAPTCHA_SECRET_KEY: ${H_CAPTCHA_SECRET_KEY}
|
||||
RE_CAPTCHA_SITE_KEY: ${RE_CAPTCHA_SITE_KEY}
|
||||
RE_CAPTCHA_SECRET_KEY: ${RE_CAPTCHA_SECRET_KEY}
|
||||
SHOW_OFFICIAL_TEMPLATES: ${SHOW_OFFICIAL_TEMPLATES:-true}
|
||||
depends_on:
|
||||
postgresql:
|
||||
condition: service_healthy
|
||||
redis:
|
||||
condition: service_healthy
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "php /usr/share/nginx/html/artisan about || exit 1"]
|
||||
interval: 30s
|
||||
timeout: 15s
|
||||
retries: 3
|
||||
start_period: 60s
|
||||
|
||||
api-worker:
|
||||
image: jhumanj/opnform-api:1.12.1
|
||||
volumes:
|
||||
- api-storage:/usr/share/nginx/html/storage
|
||||
environment:
|
||||
# Use the shared environment variables.
|
||||
<<: *shared-api-env
|
||||
command: ["php", "artisan", "queue:work"]
|
||||
depends_on:
|
||||
postgresql:
|
||||
condition: service_healthy
|
||||
redis:
|
||||
condition: service_healthy
|
||||
healthcheck:
|
||||
test:
|
||||
["CMD-SHELL", "pgrep -f 'php artisan queue:work' > /dev/null || exit 1"]
|
||||
interval: 60s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 30s
|
||||
|
||||
api-scheduler:
|
||||
image: jhumanj/opnform-api:1.12.1
|
||||
volumes:
|
||||
- api-storage:/usr/share/nginx/html/storage
|
||||
environment:
|
||||
# Use the shared environment variables.
|
||||
<<: *shared-api-env
|
||||
command: ["php", "artisan", "schedule:work"]
|
||||
depends_on:
|
||||
postgresql:
|
||||
condition: service_healthy
|
||||
redis:
|
||||
condition: service_healthy
|
||||
healthcheck:
|
||||
test:
|
||||
[
|
||||
"CMD-SHELL",
|
||||
"php /usr/share/nginx/html/artisan app:scheduler-status --mode=check --max-minutes=3 || exit 1",
|
||||
]
|
||||
interval: 60s
|
||||
timeout: 30s
|
||||
retries: 3
|
||||
start_period: 70s # Allow time for first scheduled run and cache write
|
||||
|
||||
opnform-ui:
|
||||
image: jhumanj/opnform-client:1.12.1
|
||||
environment:
|
||||
- NUXT_PUBLIC_APP_URL=/
|
||||
- NUXT_PUBLIC_API_BASE=/api
|
||||
- NUXT_PRIVATE_API_BASE=http://nginx/api
|
||||
- NUXT_PUBLIC_ENV=production
|
||||
- NUXT_PUBLIC_H_CAPTCHA_SITE_KEY=${H_CAPTCHA_SITE_KEY}
|
||||
- NUXT_PUBLIC_RE_CAPTCHA_SITE_KEY=${RE_CAPTCHA_SITE_KEY}
|
||||
healthcheck:
|
||||
test:
|
||||
["CMD-SHELL", "wget --spider -q http://opnform-ui:3000/login || exit 1"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 45s
|
||||
depends_on:
|
||||
opnform-api:
|
||||
condition: service_healthy
|
||||
|
||||
postgresql:
|
||||
image: postgres:16
|
||||
volumes:
|
||||
- opnform-postgresql-data:/var/lib/postgresql/data
|
||||
environment:
|
||||
- POSTGRES_USER=${SERVICE_USER_POSTGRESQL}
|
||||
- POSTGRES_PASSWORD=${SERVICE_PASSWORD_POSTGRESQL}
|
||||
- POSTGRES_DB=${POSTGRESQL_DATABASE:-opnform}
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB}"]
|
||||
interval: 5s
|
||||
timeout: 20s
|
||||
retries: 10
|
||||
|
||||
redis:
|
||||
image: redis:7
|
||||
environment:
|
||||
- REDIS_PASSWORD=${SERVICE_PASSWORD_64_REDIS}
|
||||
volumes:
|
||||
- redis-data:/data
|
||||
command: ["redis-server", "--requirepass", "${SERVICE_PASSWORD_64_REDIS}"]
|
||||
healthcheck:
|
||||
test: ["CMD", "redis-cli", "-a", "${SERVICE_PASSWORD_64_REDIS}", "PING"]
|
||||
interval: 10s
|
||||
timeout: 30s
|
||||
retries: 3
|
||||
|
||||
# The nginx reverse proxy.
|
||||
# used for reverse proxying the API service and Web service.
|
||||
nginx:
|
||||
image: nginx:1.29.2
|
||||
environment:
|
||||
- SERVICE_URL_NGINX
|
||||
volumes:
|
||||
- type: bind
|
||||
source: ./nginx/nginx.conf
|
||||
target: /etc/nginx/conf.d/default.conf
|
||||
read_only: true
|
||||
content: |
|
||||
map $original_uri $api_uri {
|
||||
~^/api(/.*$) $1;
|
||||
default $original_uri;
|
||||
}
|
||||
|
||||
server {
|
||||
listen 80 default_server;
|
||||
root /usr/share/nginx/html/public;
|
||||
|
||||
access_log /dev/stdout;
|
||||
error_log /dev/stderr error;
|
||||
|
||||
index index.html index.htm index.php;
|
||||
|
||||
location / {
|
||||
proxy_http_version 1.1;
|
||||
proxy_pass http://opnform-ui:3000;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-Host $host;
|
||||
proxy_set_header X-Forwarded-Port $server_port;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "Upgrade";
|
||||
}
|
||||
|
||||
location ~/(api|open|local\/temp|forms\/assets)/ {
|
||||
set $original_uri $uri;
|
||||
try_files $uri $uri/ /index.php$is_args$args;
|
||||
}
|
||||
|
||||
location ~ \.php$ {
|
||||
fastcgi_split_path_info ^(.+\.php)(/.+)$;
|
||||
fastcgi_pass opnform-api:9000;
|
||||
fastcgi_index index.php;
|
||||
include fastcgi_params;
|
||||
fastcgi_param SCRIPT_FILENAME /usr/share/nginx/html/public/index.php;
|
||||
fastcgi_param REQUEST_URI $api_uri;
|
||||
}
|
||||
}
|
||||
depends_on:
|
||||
- opnform-api
|
||||
- opnform-ui
|
||||
healthcheck:
|
||||
test: ["CMD", "nginx", "-t"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 40s
|
||||
Loading…
Reference in a new issue