From aa02fd2f5b29dd192b21782f6b1f52ecfb9d3bbb Mon Sep 17 00:00:00 2001 From: tiennm99 Date: Wed, 16 Sep 2026 20:57:04 +0700 Subject: [PATCH] chore: drop the openvpn-as and tastyigniter services Remove both directories and their rows from the services table. --- README.md | 2 - openvpn-as/LICENSE | 201 ---------------------------- openvpn-as/README.md | 25 ---- openvpn-as/docker-compose.yml | 21 --- tastyigniter/.env.example | 26 ---- tastyigniter/Dockerfile | 64 --------- tastyigniter/LICENSE | 201 ---------------------------- tastyigniter/README.md | 50 ------- tastyigniter/docker-compose.yml | 133 ------------------ tastyigniter/docker/entrypoint.sh | 115 ---------------- tastyigniter/docker/nginx/site.conf | 96 ------------- tastyigniter/docker/php/php.ini | 31 ----- tastyigniter/docker/php/www.conf | 21 --- 13 files changed, 986 deletions(-) delete mode 100644 openvpn-as/LICENSE delete mode 100644 openvpn-as/README.md delete mode 100644 openvpn-as/docker-compose.yml delete mode 100644 tastyigniter/.env.example delete mode 100644 tastyigniter/Dockerfile delete mode 100644 tastyigniter/LICENSE delete mode 100644 tastyigniter/README.md delete mode 100644 tastyigniter/docker-compose.yml delete mode 100644 tastyigniter/docker/entrypoint.sh delete mode 100644 tastyigniter/docker/nginx/site.conf delete mode 100644 tastyigniter/docker/php/php.ini delete mode 100644 tastyigniter/docker/php/www.conf diff --git a/README.md b/README.md index 1817bba..4b22e75 100644 --- a/README.md +++ b/README.md @@ -59,9 +59,7 @@ Each links to its own README for variables, ports, and storage. | [gitea-mirror-local](gitea-mirror-local/README.md) | Gitea + PostgreSQL + gitea-mirror, mirroring GitHub repos | | [netdata](netdata/README.md) | Netdata monitoring agent | | [ollama](ollama/README.md) | Ollama LLM server | -| [openvpn-as](openvpn-as/README.md) | OpenVPN Access Server | | [paseo](paseo/README.md) | Paseo coding-agent daemon and web UI | -| [tastyigniter](tastyigniter/README.md) | TastyIgniter restaurant ordering platform | | [traffmonetizer](traffmonetizer/README.md) | TraffMonetizer bandwidth-sharing client | Licensed under Apache 2.0 — see [LICENSE](LICENSE). diff --git a/openvpn-as/LICENSE b/openvpn-as/LICENSE deleted file mode 100644 index 261eeb9..0000000 --- a/openvpn-as/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/openvpn-as/README.md b/openvpn-as/README.md deleted file mode 100644 index 33cc2cd..0000000 --- a/openvpn-as/README.md +++ /dev/null @@ -1,25 +0,0 @@ -# openvpn-as - -[OpenVPN Access Server](https://openvpn.net/access-server/). - -Uses `docker-compose.yml`, publishes ports, and sets `restart: unless-stopped` -and `container_name: openvpn-as` — unlike the platform-managed services -described in the [root README](../README.md). - -Needs `/dev/net/tun` plus the `MKNOD` and `NET_ADMIN` capabilities to create -the VPN interface. - -## Networking - -| Port | Purpose | -| --- | --- | -| `943` | Admin and client web UI | -| `443` | OpenVPN over TCP | -| `1194/udp` | OpenVPN over UDP | - -Admin UI at `https://:943/admin`. The initial credentials are printed to -the container logs on first start. - -## Storage - -`openvpn-as-data` at `/openvpn` — config, certificates, user database. diff --git a/openvpn-as/docker-compose.yml b/openvpn-as/docker-compose.yml deleted file mode 100644 index 4abf979..0000000 --- a/openvpn-as/docker-compose.yml +++ /dev/null @@ -1,21 +0,0 @@ -version: '3' - -services: - openvpn-as: - image: openvpn/openvpn-as - container_name: openvpn-as - devices: - - /dev/net/tun - cap_add: - - MKNOD - - NET_ADMIN - ports: - - 943:943 - - 443:443 - - 1194:1194/udp - volumes: - - openvpn-as-data:/openvpn - restart: unless-stopped - -volumes: - openvpn-as-data: diff --git a/tastyigniter/.env.example b/tastyigniter/.env.example deleted file mode 100644 index f750300..0000000 --- a/tastyigniter/.env.example +++ /dev/null @@ -1,26 +0,0 @@ -# Application -APP_NAME=TastyIgniter -APP_ENV=production -APP_KEY= -APP_DEBUG=false -APP_URL=https://your-domain.com - -# TastyIgniter specific -IGNITER_LOCATION_MODE=multiple -IGNITER_CARTE_KEY= - -# Database -DB_DATABASE=tastyigniter -DB_USERNAME=tastyigniter -DB_PASSWORD=your_secure_password -DB_PREFIX=ti_ -MYSQL_ROOT_PASSWORD=your_secure_root_password - -# Mail -MAIL_MAILER=log -MAIL_FROM_ADDRESS=noreply@your-domain.com -MAIL_FROM_NAME=TastyIgniter - -# Deployment -PORT=80 -STACK_NAME=tastyigniter \ No newline at end of file diff --git a/tastyigniter/Dockerfile b/tastyigniter/Dockerfile deleted file mode 100644 index 5f98fa9..0000000 --- a/tastyigniter/Dockerfile +++ /dev/null @@ -1,64 +0,0 @@ -FROM php:8.3-fpm - -# Install system dependencies -RUN apt-get update && apt-get install -y \ - git \ - curl \ - libpng-dev \ - libonig-dev \ - libxml2-dev \ - libzip-dev \ - libicu-dev \ - zip \ - unzip \ - default-mysql-client \ - libfreetype6-dev \ - libjpeg62-turbo-dev \ - libpng-dev \ - libwebp-dev \ - && apt-get clean \ - && rm -rf /var/lib/apt/lists/* - -# Install PHP extensions -RUN docker-php-ext-configure gd --with-freetype --with-jpeg --with-webp \ - && docker-php-ext-install \ - pdo_mysql \ - mbstring \ - exif \ - pcntl \ - bcmath \ - gd \ - zip \ - xml \ - intl \ - ctype \ - tokenizer \ - opcache - -# Install Composer -COPY --from=composer:latest /usr/bin/composer /usr/bin/composer - -# Set working directory -WORKDIR /var/www/html - -# Instead of running composer create-project during build, we'll do it in the entrypoint -# This allows us to pass the --ignore-platform-req flag if needed - -# Copy custom entrypoint -COPY docker/entrypoint.sh /usr/local/bin/entrypoint.sh -RUN chmod +x /usr/local/bin/entrypoint.sh - -# Set file permissions for the eventual app directory -RUN mkdir -p /var/www/html/storage && \ - chown -R www-data:www-data /var/www/html && \ - chmod -R 755 /var/www/html - -# Configure PHP -COPY docker/php/php.ini /usr/local/etc/php/conf.d/custom.ini -COPY docker/php/www.conf /usr/local/etc/php-fpm.d/www.conf - -# Entrypoint script -ENTRYPOINT ["entrypoint.sh"] - -# Start PHP-FPM server -CMD ["php-fpm"] diff --git a/tastyigniter/LICENSE b/tastyigniter/LICENSE deleted file mode 100644 index 261eeb9..0000000 --- a/tastyigniter/LICENSE +++ /dev/null @@ -1,201 +0,0 @@ - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. diff --git a/tastyigniter/README.md b/tastyigniter/README.md deleted file mode 100644 index e05d404..0000000 --- a/tastyigniter/README.md +++ /dev/null @@ -1,50 +0,0 @@ -# tastyigniter - -[TastyIgniter](https://tastyigniter.com) restaurant ordering platform, built -from the local `Dockerfile` (PHP 8.3 FPM) and served by nginx. - -Uses `docker-compose.yml`, publishes `${PORT:-80}`, and sets `restart:` and -`container_name:` on every service — unlike the platform-managed services -described in the [root README](../README.md). - -## Services - -| Service | Image | Role | -| --- | --- | --- | -| `app` | local `Dockerfile` | PHP-FPM application | -| `nginx` | `nginx:alpine` | Web server, published on `${PORT:-80}` | -| `db` | `mysql:8` | Database | -| `queue` | local `Dockerfile` | `artisan queue:work` for background jobs | -| `cron` | local `Dockerfile` | `artisan schedule:run` every 60s | - -All five have health checks; `app`, `queue` and `cron` wait on `db`. - -## Environment - -| Variable | Purpose | -| --- | --- | -| `APP_KEY` | Laravel application key, 32 random characters. Required. | -| `APP_URL` | Public URL. Required. | -| `APP_NAME` / `APP_ENV` / `APP_DEBUG` | Defaults `TastyIgniter` / `production` / `false`. | -| `IGNITER_CARTE_KEY` | TastyIgniter Carte key, if used. | -| `IGNITER_LOCATION_MODE` | `single` or `multiple`. Defaults to `multiple`. | -| `DB_DATABASE` / `DB_USERNAME` / `DB_PASSWORD` | Database credentials. Defaults `tastyigniter` / `tastyigniter` / unset. | -| `DB_PREFIX` | Table prefix. Defaults to `ti_`. | -| `MYSQL_ROOT_PASSWORD` | MySQL root password. Required. | -| `MAIL_MAILER` / `MAIL_FROM_ADDRESS` / `MAIL_FROM_NAME` | Mail delivery. Defaults to the `log` driver. | -| `PORT` | Host port for nginx. Defaults to `80`. | -| `STACK_NAME` | Prefix for volume and network names. Defaults to `tastyigniter`. | - -## Storage - -| Volume | Holds | -| --- | --- | -| `${STACK_NAME}_dbdata` | MySQL data | -| `${STACK_NAME}_app` | Application files | -| `${STACK_NAME}_storage` | Uploads, cache, logs | - -Back up the database with: - -```sh -docker compose exec db mysqldump -u root -p tastyigniter > backup.sql -``` diff --git a/tastyigniter/docker-compose.yml b/tastyigniter/docker-compose.yml deleted file mode 100644 index 1d8a7c1..0000000 --- a/tastyigniter/docker-compose.yml +++ /dev/null @@ -1,133 +0,0 @@ -version: '3' - -services: - app: - build: - context: . - dockerfile: Dockerfile - container_name: tastyigniter-app - restart: unless-stopped - environment: - - APP_NAME=${APP_NAME:-TastyIgniter} - - APP_ENV=${APP_ENV:-production} - - APP_KEY=${APP_KEY} - - APP_DEBUG=${APP_DEBUG:-false} - - APP_URL=${APP_URL} - - IGNITER_LOCATION_MODE=${IGNITER_LOCATION_MODE:-multiple} - - IGNITER_CARTE_KEY=${IGNITER_CARTE_KEY} - - # Database configuration - - DB_CONNECTION=mysql - - DB_HOST=db - - DB_PORT=3306 - - DB_DATABASE=${DB_DATABASE:-tastyigniter} - - DB_USERNAME=${DB_USERNAME:-tastyigniter} - - DB_PASSWORD=${DB_PASSWORD} - - DB_PREFIX=${DB_PREFIX:-ti_} - - # Cache and Session - - BROADCAST_DRIVER=log - - CACHE_DRIVER=file - - QUEUE_CONNECTION=database - - SESSION_DRIVER=file - - SESSION_LIFETIME=120 - - # Mail Configuration - - MAIL_MAILER=${MAIL_MAILER:-log} - - MAIL_FROM_ADDRESS=${MAIL_FROM_ADDRESS:-noreply@tastyigniter.tld} - - MAIL_FROM_NAME=${MAIL_FROM_NAME:-TastyIgniter} - volumes: - - tastyigniter:/var/www/html - - tastyigniter-storage:/var/www/html/storage - depends_on: - db: - condition: service_healthy - networks: - - tastyigniter-network - healthcheck: - test: ["CMD", "php", "artisan", "--version"] - interval: 30s - timeout: 10s - retries: 3 - - nginx: - image: nginx:alpine - container_name: tastyigniter-nginx - restart: unless-stopped - ports: - - "${PORT:-80}:80" - volumes: - - tastyigniter:/var/www/html - - ./docker/nginx:/etc/nginx/conf.d - depends_on: - app: - condition: service_healthy - networks: - - tastyigniter-network - healthcheck: - test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:80"] - interval: 30s - timeout: 10s - retries: 3 - - db: - image: mysql:8 - container_name: tastyigniter-db - restart: unless-stopped - environment: - - MYSQL_DATABASE=${DB_DATABASE:-tastyigniter} - - MYSQL_USER=${DB_USERNAME:-tastyigniter} - - MYSQL_PASSWORD=${DB_PASSWORD} - - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} - volumes: - - dbdata:/var/lib/mysql - networks: - - tastyigniter-network - healthcheck: - test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-p${MYSQL_ROOT_PASSWORD}"] - interval: 30s - timeout: 10s - retries: 3 - - cron: - build: - context: . - dockerfile: Dockerfile - container_name: tastyigniter-cron - restart: unless-stopped - command: bash -c "while true; do php /var/www/html/artisan schedule:run --verbose --no-interaction; sleep 60; done" - volumes: - - tastyigniter:/var/www/html - depends_on: - app: - condition: service_healthy - networks: - - tastyigniter-network - - queue: - build: - context: . - dockerfile: Dockerfile - container_name: tastyigniter-queue - restart: unless-stopped - command: php /var/www/html/artisan queue:work - volumes: - - tastyigniter:/var/www/html - depends_on: - app: - condition: service_healthy - networks: - - tastyigniter-network - -volumes: - dbdata: - name: ${STACK_NAME:-tastyigniter}_dbdata - tastyigniter: - name: ${STACK_NAME:-tastyigniter}_app - tastyigniter-storage: - name: ${STACK_NAME:-tastyigniter}_storage - -networks: - tastyigniter-network: - name: ${STACK_NAME:-tastyigniter}_network - driver: bridge diff --git a/tastyigniter/docker/entrypoint.sh b/tastyigniter/docker/entrypoint.sh deleted file mode 100644 index be50996..0000000 --- a/tastyigniter/docker/entrypoint.sh +++ /dev/null @@ -1,115 +0,0 @@ -#!/bin/bash -set -e - -# Function to log messages -log() { - echo "[$(date +'%Y-%m-%d %H:%M:%S')] $1" -} - -# Function to check if a command exists -command_exists() { - command -v "$1" >/dev/null 2>&1 -} - -# Function to validate environment variables -validate_env() { - local required_vars=("DB_HOST" "DB_DATABASE" "DB_USERNAME" "DB_PASSWORD") - local missing_vars=() - - for var in "${required_vars[@]}"; do - if [ -z "${!var}" ]; then - missing_vars+=("$var") - fi - done - - if [ ${#missing_vars[@]} -ne 0 ]; then - log "ERROR: Missing required environment variables: ${missing_vars[*]}" - exit 1 - fi -} - -# Create log directory if it doesn't exist -mkdir -p /var/log/php -chown -R www-data:www-data /var/log/php - -# Validate environment variables -validate_env - -# Check if TastyIgniter is already installed -if [ ! -f /var/www/html/composer.json ] || [ ! -d /var/www/html/vendor ]; then - log "Installing TastyIgniter..." - # Create new TastyIgniter project - composer create-project tastyigniter/tastyigniter:^v4.0 /tmp/tastyigniter --prefer-dist --no-interaction --no-progress - - # Move files to web root - cp -a /tmp/tastyigniter/. /var/www/html/ - rm -rf /tmp/tastyigniter - - log "TastyIgniter files installed" -fi - -# Set proper permissions -log "Setting proper permissions..." -chown -R www-data:www-data /var/www/html -chmod -R 755 /var/www/html -chmod -R 775 /var/www/html/storage -chmod -R 775 /var/www/html/bootstrap/cache - -# Generate app key if not set -if [ -z "$APP_KEY" ]; then - log "Generating application key..." - php artisan key:generate -fi - -# Wait for database to be ready -log "Waiting for database to be ready..." -max_tries=30 -counter=1 -while ! mysql -h "$DB_HOST" -u "$DB_USERNAME" -p"$DB_PASSWORD" -e "SELECT 1" >/dev/null 2>&1; do - if [ $counter -ge $max_tries ]; then - log "ERROR: Database connection failed after $max_tries attempts" - exit 1 - fi - log "Database connection attempt $counter/$max_tries failed, retrying in 2 seconds..." - sleep 2 - counter=$((counter + 1)) -done -log "Database connection established" - -# Run TastyIgniter installer in non-interactive mode if not installed -if [ ! -f .env ] || ! grep -q "IGNITER_INSTALLED=true" .env; then - log "Running TastyIgniter installer..." - php artisan igniter:install --no-interaction - - # Mark as installed in .env - echo "IGNITER_INSTALLED=true" >> .env - - log "TastyIgniter installed successfully" -else - log "TastyIgniter already installed" -fi - -# Run database migrations if needed -log "Running database migrations..." -php artisan migrate --force - -# Clear and cache configuration -log "Clearing and caching configuration..." -php artisan config:clear -php artisan config:cache -php artisan route:clear -php artisan route:cache -php artisan view:clear -php artisan view:cache - -# Set proper permissions again after all operations -log "Setting final permissions..." -chown -R www-data:www-data /var/www/html -chmod -R 755 /var/www/html -chmod -R 775 /var/www/html/storage -chmod -R 775 /var/www/html/bootstrap/cache - -log "Entrypoint script completed successfully" - -# Execute the main command -exec "$@" diff --git a/tastyigniter/docker/nginx/site.conf b/tastyigniter/docker/nginx/site.conf deleted file mode 100644 index 9c19a9e..0000000 --- a/tastyigniter/docker/nginx/site.conf +++ /dev/null @@ -1,96 +0,0 @@ -server { - listen 80; - server_name ${APP_URL:-localhost}; - root /var/www/html/public; - index index.php; - - # Security headers - add_header X-Frame-Options "SAMEORIGIN" always; - add_header X-XSS-Protection "1; mode=block" always; - add_header X-Content-Type-Options "nosniff" always; - add_header Referrer-Policy "no-referrer-when-downgrade" always; - add_header Content-Security-Policy "default-src 'self' http: https: data: blob: 'unsafe-inline'" always; - add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; - - # Gzip compression - gzip on; - gzip_vary on; - gzip_proxied any; - gzip_comp_level 6; - gzip_types text/plain text/css text/xml application/json application/javascript application/xml+rss application/atom+xml image/svg+xml; - - charset utf-8; - client_max_body_size 100M; - fastcgi_read_timeout 1800; - - # Logs - access_log /var/log/nginx/access.log combined buffer=512k flush=1m; - error_log /var/log/nginx/error.log warn; - - location / { - try_files $uri $uri/ /index.php?$query_string; - } - - location ~ \.php$ { - try_files $uri =404; - fastcgi_split_path_info ^(.+\.php)(/.+)$; - fastcgi_pass app:9000; - fastcgi_index index.php; - include fastcgi_params; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - fastcgi_param PATH_INFO $fastcgi_path_info; - fastcgi_buffers 16 16k; - fastcgi_buffer_size 32k; - fastcgi_read_timeout 1800; - fastcgi_send_timeout 1800; - fastcgi_connect_timeout 1800; - } - - # Deny access to . files - location ~ /\. { - deny all; - access_log off; - log_not_found off; - } - - # Allow fpm ping and status - location ~ ^/(fpm-status|fpm-ping)$ { - access_log off; - allow 127.0.0.1; - deny all; - fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; - include fastcgi_params; - fastcgi_pass app:9000; - } - - # Deny access to sensitive files - location ~* \.(env|log|git|key|md|yml|yaml|conf|ini|lock|json|sql)$ { - deny all; - } - - # Assets caching - location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ { - expires max; - log_not_found off; - access_log off; - add_header Cache-Control "public, no-transform"; - try_files $uri =404; - } - - # Deny access to hidden files - location ~ /\. { - deny all; - access_log off; - log_not_found off; - } - - # Deny access to composer files - location ~ composer\.(json|lock)$ { - deny all; - } - - # Deny access to storage files - location ~ /storage/.*\.(php|php5|sh|pl|py|jsp|asp|htm|html|shtml|js)$ { - deny all; - } -} diff --git a/tastyigniter/docker/php/php.ini b/tastyigniter/docker/php/php.ini deleted file mode 100644 index 98a8078..0000000 --- a/tastyigniter/docker/php/php.ini +++ /dev/null @@ -1,31 +0,0 @@ -[PHP] -; Production settings -display_errors = Off -display_startup_errors = Off -error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT & ~E_USER_NOTICE & ~E_USER_DEPRECATED -log_errors = On -error_log = /var/log/php/error.log -memory_limit = 256M -max_execution_time = 60 -max_input_time = 60 -post_max_size = 100M -upload_max_filesize = 100M -max_input_vars = 3000 - -; Session settings -session.gc_maxlifetime = 1440 -session.gc_probability = 1 -session.gc_divisor = 100 - -; OpCache settings -opcache.enable = 1 -opcache.enable_cli = 0 -opcache.memory_consumption = 128 -opcache.interned_strings_buffer = 8 -opcache.max_accelerated_files = 4000 -opcache.revalidate_freq = 60 -opcache.fast_shutdown = 1 -opcache.enable_file_override = 0 - -; Date settings -date.timezone = UTC \ No newline at end of file diff --git a/tastyigniter/docker/php/www.conf b/tastyigniter/docker/php/www.conf deleted file mode 100644 index be443d9..0000000 --- a/tastyigniter/docker/php/www.conf +++ /dev/null @@ -1,21 +0,0 @@ -[www] -user = www-data -group = www-data -listen = 9000 -listen.owner = www-data -listen.group = www-data -listen.mode = 0660 -pm = dynamic -pm.max_children = 50 -pm.start_servers = 5 -pm.min_spare_servers = 5 -pm.max_spare_servers = 35 -pm.max_requests = 500 -php_admin_value[error_log] = /var/log/php/error.log -php_admin_flag[log_errors] = on -php_admin_value[memory_limit] = 256M -php_admin_value[max_execution_time] = 60 -php_admin_value[max_input_time] = 60 -php_admin_value[post_max_size] = 100M -php_admin_value[upload_max_filesize] = 100M -php_admin_value[max_input_vars] = 3000 \ No newline at end of file