mirror of
https://github.com/symfony/recipes-contrib.git
synced 2026-09-17 18:16:46 +03:00
Compare commits
13
Commits
34b440b9b5
..
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
db5338a83e | ||
|
|
d844543ffa | ||
|
|
d48bb7db3c | ||
|
|
af0e3536ae | ||
|
|
6f41880b6f | ||
|
|
eef2ae1572 | ||
|
|
cd9f5783d0 | ||
|
|
e2e8f5cd11 | ||
|
|
e5e55bbe4f | ||
|
|
545f6e495a | ||
|
|
2833906142 | ||
|
|
07f7809541 | ||
|
|
42c7572f9a |
@@ -0,0 +1,14 @@
|
||||
sentinelle:
|
||||
# Dry-run: Sentinelle detects, logs and alerts, but blocks NOTHING.
|
||||
# Nobody wires automatic blocking into a production site without knowing
|
||||
# what it will shut out. Watch the dashboard for a few days, ask yourself
|
||||
# "would I have wanted to block that one?", then switch it off.
|
||||
dry_run: true
|
||||
alert:
|
||||
recipient: '%env(SENTINELLE_ALERT_EMAIL)%'
|
||||
access:
|
||||
role: ROLE_ADMIN
|
||||
never_block:
|
||||
# At minimum your own outbound address. Private ranges are protected
|
||||
# by default, but yours is not: one wrong move locks you out.
|
||||
ips: '%env(default::SENTINELLE_ALLOWLIST)%'
|
||||
@@ -0,0 +1,3 @@
|
||||
sentinelle:
|
||||
resource: '@SentinelleBundle/config/routes.php'
|
||||
type: php
|
||||
@@ -0,0 +1,40 @@
|
||||
{
|
||||
"bundles": {
|
||||
"Acencyril\\SentinelleBundle\\SentinelleBundle": [
|
||||
"all"
|
||||
]
|
||||
},
|
||||
"copy-from-recipe": {
|
||||
"config/": "%CONFIG_DIR%/"
|
||||
},
|
||||
"env": {
|
||||
"#1": "Where security alerts are sent.",
|
||||
"SENTINELLE_ALERT_EMAIL": "admin@example.com",
|
||||
"#2": "IPs or CIDRs, comma separated, that must never be blocked.",
|
||||
"#3": "PUT YOUR OWN OUTBOUND ADDRESS HERE before going live:",
|
||||
"#4": "without it, an automatic block can lock you out of your own site.",
|
||||
"SENTINELLE_ALLOWLIST": ""
|
||||
},
|
||||
"post-install-output": [
|
||||
" <bg=blue;fg=white>Sentinelle is installed.</> Three things before going live:",
|
||||
"",
|
||||
" * Set <comment>SENTINELLE_ALLOWLIST</comment> in your <comment>.env</comment> — at minimum your own",
|
||||
" outbound address. Without it, an automatic block can lock you out of",
|
||||
" your own site.",
|
||||
"",
|
||||
" * Create the schema:",
|
||||
" <comment>php bin/console doctrine:migrations:diff</comment>",
|
||||
" <comment>php bin/console doctrine:migrations:migrate</comment>",
|
||||
"",
|
||||
" * Check it can do its job:",
|
||||
" <comment>php bin/console sentinelle:check</comment>",
|
||||
"",
|
||||
" Sentinelle starts in <comment>dry-run</comment>: it detects, logs and alerts, but blocks",
|
||||
" nothing. Watch <comment>/admin/activity</comment> for a few days, then set",
|
||||
" <comment>sentinelle.dry_run</comment> to <comment>false</comment>.",
|
||||
"",
|
||||
" And schedule the purge, without which strike counters never reset:",
|
||||
" <comment>0 4 * * * php bin/console sentinelle:purge</comment>",
|
||||
""
|
||||
]
|
||||
}
|
||||
Vendored
+5
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"bundles": {
|
||||
"Cache\\CacheBundle\\CacheBundle": ["all"]
|
||||
}
|
||||
}
|
||||
+2
@@ -0,0 +1,2 @@
|
||||
* Configure the CacheBundle integrations that your app uses:
|
||||
<href=https://github.com/php-cache/cache-bundle#configuration>https://github.com/php-cache/cache-bundle#configuration</>
|
||||
+16
@@ -0,0 +1,16 @@
|
||||
codein_recaptcha_enterprise:
|
||||
project_id: '%env(CODEIN_RECAPTCHA_ENTERPRISE_PROJECT_ID)%'
|
||||
site_key: '%env(CODEIN_RECAPTCHA_ENTERPRISE_SITE_KEY)%'
|
||||
api_key: '%env(CODEIN_RECAPTCHA_ENTERPRISE_API_KEY)%'
|
||||
#challenge: checkbox # score (default) or checkbox, each needs its own kind of site key
|
||||
#min_score: 0 # 0 disables the score check, which is what the checkbox challenge wants
|
||||
#on_error: allow # deny (default) refuses the token when Google cannot be reached
|
||||
|
||||
# A test run has no browser to solve the challenge, so every submission would be refused.
|
||||
when@test:
|
||||
codein_recaptcha_enterprise:
|
||||
enabled: false
|
||||
|
||||
#when@dev:
|
||||
# codein_recaptcha_enterprise:
|
||||
# enabled: false
|
||||
@@ -0,0 +1,16 @@
|
||||
{
|
||||
"bundles": {
|
||||
"Codein\\RecaptchaEnterpriseBundle\\CodeinRecaptchaEnterpriseBundle": ["all"]
|
||||
},
|
||||
"copy-from-recipe": {
|
||||
"config/": "%CONFIG_DIR%/"
|
||||
},
|
||||
"env": {
|
||||
"#1": "Create the key and read the project id in the reCAPTCHA Enterprise console:",
|
||||
"#2": "https://console.cloud.google.com/security/recaptcha",
|
||||
"#3": "The score and checkbox challenges each need their own kind of site key.",
|
||||
"CODEIN_RECAPTCHA_ENTERPRISE_PROJECT_ID": "",
|
||||
"CODEIN_RECAPTCHA_ENTERPRISE_SITE_KEY": "",
|
||||
"CODEIN_RECAPTCHA_ENTERPRISE_API_KEY": ""
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
* <fg=blue>Set</> the <comment>CODEIN_RECAPTCHA_ENTERPRISE_*</> variables in <comment>.env.local</>
|
||||
|
||||
* <fg=blue>Add</> <comment>two script tags</> to your layout — the bundle adds neither. Without them every
|
||||
submission is refused as <comment>MISSING</>:
|
||||
<comment>{{ asset('bundles/codeinrecaptchaenterprise/recaptcha-enterprise.js') }}</>, and Google's
|
||||
<comment>enterprise.js</>, the latter only <comment>after the visitor has consented</>:
|
||||
<comment>https://github.com/Codein-Labs/recaptcha-enterprise-bundle#adding-the-scripts-to-your-layout</>
|
||||
|
||||
* <fg=blue>Read</> <comment>Choosing the challenge</> before creating the site key: the score and checkbox
|
||||
challenges need different key types
|
||||
|
||||
* Assessments are <comment>disabled in the test environment</>, where no browser can solve the challenge
|
||||
@@ -0,0 +1,4 @@
|
||||
llm_carbon:
|
||||
default_zone: 'France'
|
||||
calculator: complete
|
||||
models: []
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"bundles": {
|
||||
"LlmCarbon\\Bundle\\LlmCarbonBundle": ["all"]
|
||||
},
|
||||
"copy-from-recipe": {
|
||||
"config/": "%CONFIG_DIR%/"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
The default configuration was written to <fg=green>config/packages/llm_carbon.yaml</>.
|
||||
|
||||
* Review and adjust <fg=yellow>default_zone</> to match your deployment region
|
||||
(must be one of the zones exposed by LlmCarbon\EmissionFactor::all()).
|
||||
* Add your model catalog under the <fg=yellow>models</> key if needed.
|
||||
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"copy-from-package": {
|
||||
"overlay/": ""
|
||||
},
|
||||
"bundles": {
|
||||
"Fyrst\\ShopwareCd\\FyrstShopwareCdBundle": [
|
||||
"all"
|
||||
]
|
||||
},
|
||||
"env": {
|
||||
"SHOPWARE_SHOP_ID": "",
|
||||
"SHOPWARE_DEPLOY_ENV": "live",
|
||||
"SHOPWARE_DATA_BASE": "/var/lib/shopware/data"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,124 @@
|
||||
* <fg=blue>fyrst/shopware-cd</>
|
||||
Flex copied CD files from the package
|
||||
<comment>overlay/</comment> into the shop root: CI,
|
||||
<comment>deploy/</comment> (including CD Compose), <comment>.dockerignore</comment>,
|
||||
and <comment>.env.example</comment>
|
||||
(same idea as <comment>shopware/docker</comment> copying <comment>docker/Dockerfile</comment>).
|
||||
|
||||
<comment>compose.yaml</comment>, <comment>.gitignore</comment>, and
|
||||
<comment>.shopware-project.yml</comment> (create’s default;
|
||||
<comment>.shopware-project.yaml</comment> is also accepted — do not rename)
|
||||
are owned by
|
||||
<comment>shopware-cli project create</comment> / the CLI — not this recipe.
|
||||
|
||||
Local: <comment>shopware-cli project dev</comment> and the CLI-managed
|
||||
shop-root <comment>compose.yaml</comment>.
|
||||
VPS/CD: files under <comment>deploy/</comment>
|
||||
(<comment>deploy/compose.yaml</comment>, <comment>deploy/compose.prod.yaml</comment>,
|
||||
<comment>deploy/compose.vps.yaml</comment>).
|
||||
Runtime DB/bind-mount copy between VPS hosts:
|
||||
<comment>fyrst-cli shopware sync pull</comment>
|
||||
(see <comment>deploy/sync-runtime.md</comment>).
|
||||
DB snapshots use <comment>shopware-cli project dump</comment>
|
||||
(fyrst-cli never dumps; restore is
|
||||
<comment>fyrst-cli shopware db import</comment>).
|
||||
Live backups (not sync):
|
||||
<comment>fyrst-cli shopware backup create</comment>
|
||||
(see <comment>deploy/backup-runtime.md</comment>).
|
||||
Rollback:
|
||||
<comment>IMAGE_TAG=$(cat .previous-tag) fyrst-cli shopware deploy rollback</comment>.
|
||||
Each VPS needs <comment>fyrst-cli</comment> 0.1.0+
|
||||
(<comment>https://github.com/fyrst-dev/cli</comment>).
|
||||
CI runs <comment>fyrst-cli shopware deploy release</comment>
|
||||
with <comment>IMAGE</comment> / <comment>IMAGE_TAG</comment> /
|
||||
<comment>COMPOSE_DIR</comment>.
|
||||
TLS edge: <comment>deploy/edge/Caddyfile</comment>.
|
||||
Live → local project dev rsync (no DB):
|
||||
<comment>fyrst-cli shopware sync local</comment>
|
||||
(reads <comment>SHOPWARE_SHOP_ID</comment> from local <comment>.env</comment>;
|
||||
remote root <comment>/var/lib/shopware/data/${SHOPWARE_SHOP_ID}/live</comment>;
|
||||
<comment>--data all</comment> is refused).
|
||||
|
||||
Flex may append a <comment>###> fyrst/shopware-cd ###</comment>
|
||||
block to shop-root <comment>.env</comment> (empty
|
||||
<comment>SHOPWARE_SHOP_ID</comment>, <comment>SHOPWARE_DEPLOY_ENV=live</comment>,
|
||||
<comment>SHOPWARE_DATA_BASE=/var/lib/shopware/data</comment>).
|
||||
It does not overwrite create’s whole <comment>.env</comment>
|
||||
and does not put secrets in that block. Then run
|
||||
<comment>fyrst-cli shopware env init --shop-id …</comment>
|
||||
(see <comment>deploy/README</comment>).
|
||||
VPS <comment>.env</comment> source of truth (required):
|
||||
<comment>SHOPWARE_SHOP_ID</comment> (same slug on live + staging + laptop),
|
||||
<comment>SHOPWARE_DEPLOY_ENV</comment> (live|staging|playground|dev).
|
||||
Compose derives project name
|
||||
(<comment>${SHOPWARE_SHOP_ID}-${SHOPWARE_DEPLOY_ENV}</comment>)
|
||||
and bind-mount paths from those two plus optional
|
||||
<comment>SHOPWARE_DATA_BASE</comment> (default
|
||||
<comment>/var/lib/shopware/data</comment>) — three separate interpolations,
|
||||
no nested defaults. It does not require
|
||||
<comment>COMPOSE_PROJECT_NAME</comment> or <comment>SHOPWARE_DATA_ROOT</comment>
|
||||
(optional for scripts/docs; fyrst-cli derives when unset and prefers them
|
||||
when set — do not assign them empty).
|
||||
WARNING: <comment>shopware-cli project create</comment> writes
|
||||
<comment>COMPOSE_PROJECT_NAME=sw-shop-…</comment> into shop-root
|
||||
<comment>.env</comment> for local <comment>project dev</comment>. That env var
|
||||
overrides Compose <comment>name:</comment>
|
||||
(<comment>${SHOPWARE_SHOP_ID}-${SHOPWARE_DEPLOY_ENV}</comment>).
|
||||
On the VPS, comment out that line
|
||||
(<comment>fyrst-cli shopware env init --vps</comment> or by hand).
|
||||
Flex does not delete it on <comment>composer require</comment>
|
||||
(create owns the local flow).
|
||||
Bootstrap:
|
||||
<comment>DATA="${SHOPWARE_DATA_BASE:-/var/lib/shopware/data}/${SHOPWARE_SHOP_ID}/${SHOPWARE_DEPLOY_ENV}"</comment>
|
||||
then <comment>mkdir -p "${DATA}"/{files,media,thumbnail,theme,sitemap}</comment>
|
||||
then <comment>chown -R 82:82 "${DATA}"</comment>.
|
||||
Live profiles: uncomment
|
||||
<comment>COMPOSE_PROFILES=redis,worker,scheduler</comment>
|
||||
in <comment>.env</comment> (worker + scheduler; redis if used). Staging leaves
|
||||
this unset unless you need async tasks.
|
||||
<comment>fyrst-cli shopware deploy release</comment> warns on live when it is empty; it does
|
||||
not auto-enable.
|
||||
Same-host tag-and-load / air-gap: <comment>PULL_POLICY=never</comment>
|
||||
and <comment>SKIP_PULL=1</comment> (or
|
||||
<comment>fyrst-cli shopware deploy release --skip-pull</comment>). Default
|
||||
<comment>pull_policy</comment> is <comment>always</comment> for CI/VPS.
|
||||
Several shops or live+staging on one VPS share the host; shop id + env
|
||||
keep stacks isolated.
|
||||
|
||||
You MUST require <comment>shopware/docker</comment> in the same Composer command as
|
||||
this package. That recipe copies <comment>docker/Dockerfile</comment>, which CI and
|
||||
CD Compose require (default <comment>DOCKERFILE=docker/Dockerfile</comment>). This recipe
|
||||
does not ship a root Dockerfile. A missing <comment>docker/Dockerfile</comment>
|
||||
means <comment>shopware/docker</comment> was skipped.
|
||||
|
||||
Flex may append SoT keys to <comment>.env</comment>; it does not
|
||||
overwrite create’s whole <comment>.env</comment>. Then run
|
||||
<comment>fyrst-cli shopware env init --shop-id …</comment>
|
||||
(VPS: add <comment>--vps</comment>; see <comment>deploy/README</comment>).
|
||||
If <comment>.env</comment> is missing, that command copies
|
||||
<comment>.env.example</comment> first. Commit the copied files;
|
||||
<comment>vendor/</comment> is gitignored.
|
||||
|
||||
shopware-cli project create writes <comment>.shopware-project.yml</comment>
|
||||
(that extension is fine). shopware-cli accepts both
|
||||
<comment>.yml</comment> and <comment>.yaml</comment>; do not rename.
|
||||
GitHub Actions picks up
|
||||
<comment>.github/workflows/cd.yaml</comment>. GitLab still defaults to
|
||||
<comment>.gitlab-ci.yml</comment>: set Settings → CI/CD → CI/CD configuration file
|
||||
to <comment>.gitlab-ci.yaml</comment> (or copy/symlink that name).
|
||||
|
||||
Flex registers
|
||||
<comment>Fyrst\ShopwareCd\FyrstShopwareCdBundle</comment>
|
||||
in <comment>config/bundles.php</comment>.
|
||||
Post-restore sales-channel URL rewrite uses
|
||||
<comment>APP_URL</comment> in shop-root <comment>.env</comment>;
|
||||
sync calls
|
||||
<comment>bin/console fyrst:sales-channel:rewrite-urls</comment>.
|
||||
Laptop SSH (<comment>SHOPWARE_SSH_*</comment>) belongs in
|
||||
<comment>.env.local</comment>.
|
||||
Shops need <comment>composer update fyrst/shopware-cd</comment>
|
||||
so the command and bundle exist, then
|
||||
<comment>composer recipes:update fyrst/shopware-cd</comment>.
|
||||
|
||||
Refresh later with <comment>composer recipes:update fyrst/shopware-cd</comment>.
|
||||
See https://github.com/fyrst-dev/shopware-cd
|
||||
@@ -0,0 +1,3 @@
|
||||
indexnowkit:
|
||||
key: '%env(INDEXNOW_KEY)%'
|
||||
base_url: '%env(INDEXNOW_BASE_URL)%'
|
||||
@@ -0,0 +1,2 @@
|
||||
indexnowkit:
|
||||
resource: '@IndexNowKitBundle/config/routes.php'
|
||||
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"bundles": {
|
||||
"IndexNowKit\\SymfonyBundle\\IndexNowKitBundle": ["all"]
|
||||
},
|
||||
"copy-from-recipe": {
|
||||
"config/": "%CONFIG_DIR%/"
|
||||
},
|
||||
"env": {
|
||||
"#1": "The IndexNow key, served at /<key>.txt. Generate one into .env.local: bin/console indexnow:key:generate --write-env",
|
||||
"#2": "Empty outside production = dry run (nothing is sent); empty in production = a configuration error indexnow:check explains",
|
||||
"INDEXNOW_KEY": "",
|
||||
"#3": "The public URL of the site (console commands and Messenger workers have no request to read it from)",
|
||||
"INDEXNOW_BASE_URL": "https://www.example.com"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
<fg=blue;options=bold>IndexNow</> is installed: search engines (Yandex, Bing, Naver, Seznam, ...) get told which pages changed.
|
||||
|
||||
<options=bold>Next steps:</>
|
||||
1. Run <comment>bin/console indexnow:key:generate --write-env</> — writes <comment>INDEXNOW_KEY</> to <comment>.env.local</>
|
||||
2. Set <comment>INDEXNOW_BASE_URL</> to the public URL of the site
|
||||
3. Add <comment>#[IndexNow(route: '...')]</> to the entities that have a public page (needs <comment>indexnowkit/doctrine</>)
|
||||
4. Run <comment>bin/console indexnow:check</> — it verifies the key file, the transport and the configuration
|
||||
|
||||
Documentation: https://github.com/indexnowkit/php/tree/main/packages/symfony-bundle
|
||||
@@ -0,0 +1,2 @@
|
||||
imports:
|
||||
- { resource: "@JpmMartinSyliusNmiPlugin/config/config.yaml" }
|
||||
@@ -0,0 +1,18 @@
|
||||
jpm_martin_sylius_nmi_shop:
|
||||
resource: "@JpmMartinSyliusNmiPlugin/config/routes/shop.yaml"
|
||||
|
||||
jpm_martin_sylius_nmi_admin:
|
||||
resource: "@JpmMartinSyliusNmiPlugin/config/routes/admin.yaml"
|
||||
prefix: /%sylius_admin.path_name%
|
||||
|
||||
# Required if you want NMI to tell your store what it did. Without it there is no endpoint and
|
||||
# nothing arrives. No prefix: not the locale, not the admin path. See the README's "Webhooks".
|
||||
jpm_martin_sylius_nmi_webhook:
|
||||
resource: "@JpmMartinSyliusNmiPlugin/config/routes/webhook.yaml"
|
||||
|
||||
# Required if you turn saved cards on, and harmless if you do not. See the README's "Saved cards".
|
||||
jpm_martin_sylius_nmi_shop_account:
|
||||
resource: "@JpmMartinSyliusNmiPlugin/config/routes/shop_account.yaml"
|
||||
prefix: /{_locale}/account
|
||||
requirements:
|
||||
_locale: ^[A-Za-z]{2,4}(_([A-Za-z]{4}|[0-9]{3}))?(_([A-Za-z]{2}|[0-9]{3}))?$
|
||||
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"bundles": {
|
||||
"JpmMartin\\SyliusNmiPlugin\\JpmMartinSyliusNmiPlugin": ["all"]
|
||||
},
|
||||
"copy-from-recipe": {
|
||||
"config/": "%CONFIG_DIR%/"
|
||||
},
|
||||
"add-lines": [
|
||||
{
|
||||
"file": "assets/shop/entrypoint.js",
|
||||
"content": "import '@vendor/jpmmartin/sylius-nmi-plugin/assets/shop/entrypoint';",
|
||||
"position": "bottom",
|
||||
"warn_if_missing": true
|
||||
}
|
||||
],
|
||||
"gitignore": [
|
||||
"/config/encryption/*.key",
|
||||
"!/config/encryption/test.key"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
* <fg=blue>Four things no recipe can do, in this order:</>
|
||||
|
||||
<comment>yarn add @nmipayments/nmi-pay && yarn build</comment> the browser component and the shop build
|
||||
<comment>bin/console doctrine:migrations:migrate</comment> the plugin's four tables
|
||||
|
||||
* <fg=blue>A key of your own, before the first payment method is saved.</> The skeleton's test.key is
|
||||
published; point the store at a new path <comment>first</comment>, then generate — the generator writes
|
||||
wherever the store points at that moment:
|
||||
|
||||
<comment>.env.local:</comment> SYLIUS_PAYMENT_ENCRYPTION_KEY_PATH=%kernel.project_dir%/config/encryption/payment.key
|
||||
<comment>bin/console sylius:payment:generate-key</comment>
|
||||
|
||||
* <fg=blue>Then</> Configuration → Payment methods → Create → NMI, and read <comment>Testing against the sandbox</comment>
|
||||
before the first payment: https://github.com/jpmmartin/SyliusNmiPlugin#readme
|
||||
@@ -0,0 +1,26 @@
|
||||
{
|
||||
"docker-compose": {
|
||||
"docker-compose.override.yml": {
|
||||
"services": [
|
||||
"mailtrap-local:",
|
||||
" image: mailtrap/mailtrap-local",
|
||||
" # The Symfony CLI detects a mail catcher by container-internal port, and it",
|
||||
" # recognizes only 1025 for SMTP together with 1080 or 8025 for the web UI.",
|
||||
" # Mailtrap Local defaults to 3535 and 3550 and binds loopback only, so the",
|
||||
" # listeners move here and the non-loopback bind is allowed explicitly.",
|
||||
" command:",
|
||||
" - --unsafe-non-loopback",
|
||||
" - --smtp-listen=0.0.0.0:1025",
|
||||
" - --http-listen=0.0.0.0:8025",
|
||||
" - --db=/var/lib/mailtrap-local/db.sqlite3",
|
||||
" ports:",
|
||||
" - \"1025\"",
|
||||
" - \"8025\"",
|
||||
" labels:",
|
||||
" # The service is not called \"mailer\", so the prefix is set explicitly to",
|
||||
" # keep the MAILER_* variables Symfony Mailer expects.",
|
||||
" com.symfony.server.service-prefix: 'mailer'"
|
||||
]
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
* A <comment>mailtrap-local</> service was added to your Docker Compose configuration.
|
||||
Start it with <info>docker compose up -d</>.
|
||||
|
||||
* With the Symfony CLI there is nothing else to do. <comment>MAILER_DSN</> is exposed for
|
||||
you, and <info>symfony open:local:webmail</> opens the web UI.
|
||||
|
||||
* Without the Symfony CLI, ask Docker for the published ports. Docker assigns them
|
||||
at random, in the same way as the <comment>symfony/mailer</> catcher service:
|
||||
|
||||
<info>docker compose port mailtrap-local 1025</> # SMTP, for MAILER_DSN
|
||||
<info>docker compose port mailtrap-local 8025</> # web UI
|
||||
|
||||
To pin them instead, replace the two entries under <comment>ports:</> with
|
||||
<comment>"3535:1025"</> and <comment>"3550:8025"</>. Those are Mailtrap Local's own defaults.
|
||||
|
||||
* The <comment>symfony/mailer</> recipe adds its own catcher service, called <comment>mailer</>.
|
||||
When both services run, both claim the <comment>MAILER_</> prefix: one becomes
|
||||
<comment>MAILER_DSN</> and the other becomes <comment>MAILER_1_DSN</>. This is decided when the
|
||||
containers are created. Keep the one catcher you want, so that <comment>MAILER_DSN</>
|
||||
always points where you expect.
|
||||
|
||||
* <fg=blue>Read</> the documentation at <comment>https://github.com/mailtrap/mailtrap-local</>
|
||||
@@ -0,0 +1,2 @@
|
||||
imports:
|
||||
- { resource: "@OdiseoSyliusRbacPlugin/config/config.yaml" }
|
||||
@@ -0,0 +1,3 @@
|
||||
odiseo_sylius_rbac_admin:
|
||||
resource: "@OdiseoSyliusRbacPlugin/config/routes/admin.yaml"
|
||||
prefix: '/%sylius_admin.path_name%'
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"bundles": {
|
||||
"Odiseo\\SyliusRbacPlugin\\OdiseoSyliusRbacPlugin": ["all"]
|
||||
},
|
||||
"copy-from-recipe": {
|
||||
"config/": "%CONFIG_DIR%/"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
<bg=blue;fg=white> </>
|
||||
<bg=blue;fg=white> What's next? </>
|
||||
<bg=blue;fg=white> </>
|
||||
|
||||
* <fg=blue>Read</> the full installation guide at
|
||||
<comment>https://github.com/odiseoteam/SyliusRbacPlugin/blob/master/doc/installation.md</>
|
||||
|
||||
* <fg=blue>Grant</> yourself access. A fresh install denies every administrator
|
||||
everything, including the screen that assigns roles:
|
||||
<comment>bin/console odiseo:rbac:grant <username-or-email> super_admin --create</>
|
||||
@@ -0,0 +1,12 @@
|
||||
# Default configuration for the tailsfadmin admin theme (Flex recipe).
|
||||
# Adjust the menu to your application; `label` values are translation keys (i18n)
|
||||
# or raw labels. See the bundle README.
|
||||
tailsfadmin:
|
||||
default_locale: fr
|
||||
locales: ['fr', 'en', 'ar', 'es', 'de']
|
||||
rtl_locales: ['ar']
|
||||
menu:
|
||||
-
|
||||
group: menu.groups.menu
|
||||
items:
|
||||
- { label: menu.dashboard, path: /, icon: dashboard }
|
||||
@@ -0,0 +1,12 @@
|
||||
# AssetMapper path for the bundle's Stimulus controllers (Flex recipe).
|
||||
#
|
||||
# The bundle's prepend() does not survive the Flex config merge, so the controllers
|
||||
# path (and the FullCalendar vendor-src shim) is declared here, on the host side.
|
||||
# Kept in a SEPARATE file on purpose: Symfony merges framework.asset_mapper.paths
|
||||
# from every config/packages/ file, so this adds to your asset_mapper.yaml
|
||||
# without overwriting it.
|
||||
framework:
|
||||
asset_mapper:
|
||||
paths:
|
||||
'vendor/tailsfadmin/tailsfadmin-bundle/assets/controllers': 'bundles/tailsfadmin'
|
||||
'vendor/tailsfadmin/tailsfadmin-bundle/assets/vendor-src': 'bundles/tailsfadmin-vendor'
|
||||
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"bundles": {
|
||||
"Tailsfadmin\\TailsfadminBundle": ["all"]
|
||||
},
|
||||
"copy-from-recipe": {
|
||||
"config/": "%CONFIG_DIR%/"
|
||||
},
|
||||
"post-install-output": [
|
||||
"<bg=blue;fg=white> tailsfadmin </> admin theme installed.",
|
||||
"",
|
||||
" The bundle ships no CDN dependency — two steps for the assets:",
|
||||
"",
|
||||
" 1. Vendor the components' third-party JS libs (ApexCharts, flatpickr, Dropzone, …):",
|
||||
" <comment>php bin/console tailsfadmin:assets:install</comment>",
|
||||
"",
|
||||
" 2. Import the theme into your Tailwind entrypoint (assets/styles/app.css):",
|
||||
" <comment>@import \"tailwindcss\";</comment>",
|
||||
" <comment>@import \"../../vendor/tailsfadmin/tailsfadmin-bundle/assets/styles/theme.css\";</comment>",
|
||||
"",
|
||||
" Then compile: <comment>php bin/console tailwind:build && php bin/console asset-map:compile</comment>",
|
||||
"",
|
||||
" The controllers' AssetMapper path is already set (config/packages/tailsfadmin_assets.yaml).",
|
||||
" Documentation: <comment>https://github.com/thibmonier/tailsfadmin#readme</comment>"
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,4 @@
|
||||
# a2a:
|
||||
# executor: App\Agent\MyExecutor
|
||||
# card_file: '%kernel.project_dir%/config/agent-card.json'
|
||||
# public_url: '%env(A2A_PUBLIC_URL)%'
|
||||
@@ -0,0 +1,3 @@
|
||||
a2a:
|
||||
resource: .
|
||||
type: a2a
|
||||
@@ -0,0 +1,8 @@
|
||||
{
|
||||
"bundles": {
|
||||
"A2A\\Bundle\\A2ABundle": ["all"]
|
||||
},
|
||||
"copy-from-recipe": {
|
||||
"config/": "%CONFIG_DIR%/"
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
wlindabla_mailing:
|
||||
from_addresses:
|
||||
system:
|
||||
address: '%env(APP_MAIL_FROM_SYSTEM)%'
|
||||
name: '%env(APP_MAIL_FROM_SYSTEM_NAME)%'
|
||||
support:
|
||||
address: '%env(APP_MAIL_FROM_SUPPORT)%'
|
||||
name: '%env(APP_MAIL_FROM_SUPPORT_NAME)%'
|
||||
dkim:
|
||||
private_key: '%env(resolve:default::MAILER_DKIM)%'
|
||||
domain: '%env(APP_DKIM_DOMAIN)%'
|
||||
selector: 'default'
|
||||
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"bundles": {
|
||||
"Wlindabla\\MailingBundle\\WlindablaMailingBundle": ["all"]
|
||||
},
|
||||
"copy-from-recipe": {
|
||||
"config/": "%CONFIG_DIR%/"
|
||||
},
|
||||
"env": {
|
||||
"APP_MAIL_FROM_SYSTEM": "no-reply-system@myexample.com",
|
||||
"APP_MAIL_FROM_SYSTEM_NAME": "System",
|
||||
"APP_MAIL_FROM_SUPPORT": "support-@myexample.com",
|
||||
"APP_MAIL_FROM_SUPPORT_NAME": "Support",
|
||||
"APP_DKIM_DOMAIN": "myexample.com"
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user