fix(traefik): update local dev ports and gitea SSH IP

- Change Traefik local HTTP port from 8080 to 8081 (conflict with cadvisor)
- Change Traefik dashboard port to 8093 (conflicts with cadvisor, Hyperion)
- Update Gitea SSH service IP from 172.23.0.2 to 172.23.0.3
- Note: Gitea SSH works directly via Docker port mapping in local dev
- Traefik TCP routing only needed for production (host network mode)
This commit is contained in:
2025-11-05 14:51:37 +01:00
parent 95147ff23e
commit cf903f2582
9 changed files with 5 additions and 5 deletions

View File

@@ -0,0 +1,116 @@
<?php
declare(strict_types=1);
namespace App\Framework\Reflection\Collections;
use App\Framework\Reflection\WrappedReflectionAttribute;
use ArrayIterator;
use Countable;
use IteratorAggregate;
/**
* @implements IteratorAggregate<int, WrappedReflectionAttribute>
*/
final readonly class AttributeCollection implements IteratorAggregate, Countable
{
/** @var WrappedReflectionAttribute[] */
private array $attributes;
public function __construct(WrappedReflectionAttribute ...$attributes)
{
$this->attributes = $attributes;
}
/**
* @return ArrayIterator<int, WrappedReflectionAttribute>
*/
public function getIterator(): ArrayIterator
{
return new ArrayIterator(array_values($this->attributes));
}
public function count(): int
{
return count($this->attributes);
}
public function isEmpty(): bool
{
return empty($this->attributes);
}
/**
* @return array<WrappedReflectionAttribute>
*/
public function toArray(): array
{
return $this->attributes;
}
/**
* @return array<object|null>
*/
public function getInstances(): array
{
return array_map(fn (WrappedReflectionAttribute $attr) => $attr->newInstance(), $this->attributes);
}
public function getFirstInstance(): ?object
{
$instances = $this->getInstances();
return $instances[0] ?? null;
}
public function getByType(string $attributeClass): self
{
$filtered = [];
foreach ($this->attributes as $attribute) {
if ($attribute->getName() === $attributeClass) {
$filtered[] = $attribute;
}
}
return new self(...$filtered);
}
public function hasType(string $attributeClass): bool
{
return ! $this->getByType($attributeClass)->isEmpty();
}
public function getFirstByType(string $attributeClass): ?WrappedReflectionAttribute
{
foreach ($this->attributes as $attribute) {
if ($attribute->getName() === $attributeClass) {
return $attribute;
}
}
return null;
}
public function getFirstInstanceByType(string $attributeClass): ?object
{
$attribute = $this->getFirstByType($attributeClass);
return $attribute?->newInstance();
}
/**
* @return array<string>
*/
public function getNames(): array
{
return array_map(fn (WrappedReflectionAttribute $attr) => $attr->getName(), $this->attributes);
}
/**
* @return array<string>
*/
public function getUniqueNames(): array
{
return array_unique($this->getNames());
}
}