### Full Docker Compose Example for Stimulsoft Server with HTTPS Source: https://github.com/stimulsoft/stimulsoft.server.manual/blob/main/Introduction/Docker/Https.md A complete example of a docker-compose.yml file for running Stimulsoft Server with both HTTP and HTTPS enabled, including database configuration. ```yaml services: server: image: stimulsoft/server:dev ports: - 8080:8080 - 8081:8081 volumes: - ./stimulsoft-server:/var/lib/stimulsoft-server environment: ASPNETCORE_HTTP_PORTS: 8080 ASPNETCORE_HTTPS_PORTS: 8081 Urls: "https://*:8081;http://*:8080" ASPNETCORE_Kestrel__Certificates__Default__Path: "/var/lib/stimulsoft-server/aspnetapp.pfx" ASPNETCORE_Kestrel__Certificates__Default__Password: 123456 Storage__DatabaseType: "MySql" Storage__MySqlConnectionString: "Server=mysql; port=3306; Database=server; UserId=root; Pwd=root;" mysql: image: mysql:8.0 ports: - 3306:3306 volumes: - './mysql:/var/lib/mysql' environment: MYSQL_ROOT_PASSWORD: "root" MYSQL_DATABASE: "server" ``` -------------------------------- ### Share Configuration Example Source: https://context7.com/stimulsoft/stimulsoft.server.manual/llms.txt Example configuration for sharing a report with public access, including optional expiration and result type. ```plaintext # Item: /Reports/PublicSalesReport.mrt # Access Level: Public Access # End Date: 2024-12-31 23:59 # Optional expiration # Result Type: PDF ``` -------------------------------- ### Start Docker Compose Services Source: https://github.com/stimulsoft/stimulsoft.server.manual/blob/main/Introduction/Docker/index.md This command initiates the services defined in the docker-compose.yml file. It pulls the necessary Docker images and starts the containers for Stimulsoft Server and its associated database, making them accessible. ```bash docker compose up ``` -------------------------------- ### Basic Docker Deployment with MySQL Source: https://context7.com/stimulsoft/stimulsoft.server.manual/llms.txt This snippet shows a basic docker-compose configuration for deploying Stimulsoft Server with a MySQL database. It defines the server image, ports, environment variables for database connection and ASP.NET Core settings, and volume mounts for persistent storage. It also includes commands to start the server and access it via HTTP. ```yaml # docker-compose.yml - Basic deployment with MySQL services: server: image: stimulsoft/server:latest ports: - 8080:8080 environment: ASPNETCORE_HTTP_PORTS: 8080 ASPNETCORE_ENVIRONMENT: "Development" Storage__DatabaseType: "MySql" Storage__MySqlConnectionString: "Server=mysql; port=3306; Database=server; UserId=root; Pwd=root;" volumes: - ./stimulsoft-server:/var/lib/stimulsoft-server mysql: image: mysql:8.0 ports: - 3306:3306 volumes: - './mysql:/var/lib/mysql' environment: MYSQL_ROOT_PASSWORD: "root" MYSQL_DATABASE: "server" # Start the server: # docker compose up # Access at: http://localhost:8080 ``` -------------------------------- ### Create Hourly Report Scheduler Source: https://context7.com/stimulsoft/stimulsoft.server.manual/llms.txt This example demonstrates how to create an hourly scheduler for automated report generation and delivery. It specifies the report to run, destination, output format, and optional email actions. The scheduler runs at a defined minute of every hour. ```yaml # Scheduler Configuration Example - Hourly PDF Report # # Type: Hourly # Settings: # Name: "Hourly Sales Report" # Run at Minute: 0 # Runs at the top of every hour # Time Zone: "(GMT-05:00) Eastern Time" # Status After Creation: Started # Exclude Weekend Days: true # Run Every: 1 # Every scheduled occurrence # # Actions: # 1. Run Report: # - Report: /Reports/SalesReport.mrt # - Destination: /Generated/Reports/ OR ContactList # - Result Type: PDF # - Overwrite If Exists: true # - Result Name Template: "SalesReport_{Date:yyyy-MM-dd_HH-mm}" # # 2. Send Email (optional): # - To: manager@company.com, team@company.com # - Subject: "Hourly Sales Report - {Date}" # - Message: "Please find attached the latest sales report." # - Attachments: [Report result] # - Attachment Delivery: As Attachment ``` -------------------------------- ### Configure Server Ports and Database Connection in docker-compose.yml Source: https://github.com/stimulsoft/stimulsoft.server.manual/blob/main/Introduction/Docker/Options.md This snippet demonstrates how to configure essential server settings within a docker-compose.yml file using environment variables. It specifies HTTP ports, database type, and connection strings for MySQL. Ensure the database connection string is correctly formatted for your specific MySQL setup. ```yaml ... Environment: ASPNETCORE_HTTP_PORTS: 8080 Urls: "http://*:8080" Storage__DatabaseType: "MySql" Storage__MySqlConnectionString: "Server=mysql; port=3306; Database=server; UserId=root; Pwd=root;" ... ``` -------------------------------- ### Generated URLs for Shared Reports Source: https://context7.com/stimulsoft/stimulsoft.server.manual/llms.txt Examples of direct and parameterized URLs for accessing shared reports. These URLs can be used for direct access or to pass specific parameters to the report. ```plaintext # Direct Link: http://localhost:8080/s/5fc3c # With Parameters: http://localhost:8080/s/5fc3c?Name=Coffee&CategoryID=3&UnitPrice=15 ``` -------------------------------- ### Pagefind Search Integration (JavaScript) Source: https://github.com/stimulsoft/stimulsoft.server.manual/blob/main/_layouts/default.html Implements a client-side search functionality using the Pagefind library. It initializes Pagefind, handles user input for search queries, displays results, and manages the search UI visibility. Dependencies include the Pagefind library and specific HTML elements for input, results, and the search container. ```javascript var searchInput = document.getElementById('search-input'); var searchResults = document.getElementById('search-results'); var pagefindInstance = null; async function initPagefind() { if (pagefindInstance) return; try { const pf = await import('{{ site.baseurl }}/pagefind/pagefind.js'); await pf.init(); pagefindInstance = pf; } catch(e) {} } searchInput.addEventListener('focus', initPagefind); searchInput.addEventListener('input', async function() { var q = this.value.trim(); if (!q) { searchResults.innerHTML = ''; searchResults.classList.remove('visible'); return; } await initPagefind(); if (!pagefindInstance) return; var results = await pagefindInstance.search(q); if (!results.results.length) { searchResults.innerHTML = '