|
2 | 2 |
|
3 | 3 | - **Issue:** [#6 — arm64](https://github.com/marcelofmatos/phpnetmap/issues/6) |
4 | 4 | - **Tipo:** Feature |
5 | | -- **Status:** Proposta (contém decisões em aberto — validar antes de implementar) |
| 5 | +- **Status:** Aprovada — decisões resolvidas (ver seção 5); pronta para implementação |
6 | 6 |
|
7 | 7 | ## 1. Requisito |
8 | 8 |
|
@@ -51,36 +51,89 @@ funcione tanto em amd64 quanto em arm64 (o Docker seleciona o manifest da |
51 | 51 | plataforma automaticamente), **mantendo o comportamento funcional atual** |
52 | 52 | (SNMP, SQLite, Apache + rewrite, `set_htpasswd.sh`, volume de dados). |
53 | 53 |
|
54 | | -## 4. Abordagem proposta |
55 | | - |
56 | | -1. **Trocar a base** por uma imagem oficial multi-arch, p.ex. |
57 | | - `php:7.4-apache` ou `php:8.x-apache` (ambas publicam amd64 + arm64). |
58 | | -2. **Reescrever as dependências**: instalar `snmp`, `snmpd`, `sqlite3`, |
59 | | - `apache2-utils` via apt; habilitar extensões PHP (`snmp`, `pdo_sqlite`) |
60 | | - com `docker-php-ext-install` / pacotes da distro. |
61 | | -3. **`COPY . /app`** em vez de `git clone` (build a partir do checkout). |
62 | | -4. **Multi-arch no CI**: adicionar `docker/setup-qemu-action` + |
63 | | - `docker/setup-buildx-action` e definir |
64 | | - `platforms: linux/amd64,linux/arm64` no `build-push-action`. |
65 | | -5. **Documentar** no README o comando de build local multi-arch: |
66 | | - ```bash |
67 | | - docker buildx build --platform linux/amd64,linux/arm64 \ |
68 | | - -t ghcr.io/marcelofmatos/phpnetmap:dev --push . |
| 54 | +## 4. Abordagem aprovada |
| 55 | + |
| 56 | +Reescrita do `Dockerfile` para uma imagem **self-contained equivalente ao |
| 57 | +`tutum/php-apache`**, sem depender da base descontinuada. |
| 58 | + |
| 59 | +### 4.1 Base e dependências |
| 60 | + |
| 61 | +1. **Base:** `php:7.4-apache` (Debian, multi-arch amd64+arm64, Apache + mod_php |
| 62 | + já incluídos). |
| 63 | +2. **apt:** `snmp` (CLI + libsnmp), `snmpd` (daemon local, paridade funcional), |
| 64 | + `sqlite3`, `apache2-utils` (fornece `htpasswd`). `git` sai (usamos `COPY`). |
| 65 | +3. **Extensões PHP:** `snmp` e `pdo_sqlite` via `docker-php-ext-install`, |
| 66 | + usando `libsnmp-dev`/`libsqlite3-dev` como *build-deps* purgadas ao final |
| 67 | + para enxugar a imagem (libs de runtime `libsnmp*`/`libsqlite3-0` |
| 68 | + permanecem via os pacotes `snmp`/base). |
| 69 | +4. **`custom.ini`** em `/usr/local/etc/php/conf.d/custom.ini` reproduzindo o |
| 70 | + comportamento atual: |
| 71 | + ```ini |
| 72 | + error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE |
| 73 | + disable_functions = |
69 | 74 | ``` |
70 | 75 |
|
71 | | -## 5. Decisões em aberto (precisam de validação do usuário) |
72 | | - |
73 | | -1. **Migração de PHP 5 → 7/8**: é a parte de maior risco. A migração da base é |
74 | | - praticamente obrigatória (não existe `tutum/apache-php` arm64 nem `php5-*` |
75 | | - nas distros atuais). É aceitável migrar para PHP 7.4/8.x? Isso pode exigir |
76 | | - ajustes no código legado (Yii 1.x roda em PHP 7.x; em PHP 8 há mais atritos). |
77 | | -2. **Escopo**: entregar **imagem multi-arch publicada** (mexe na base + CI) ou |
78 | | - apenas **instruções de build** documentadas no README (escopo menor)? |
79 | | -3. **Versão do PHP alvo** (7.4 vs 8.1+), considerando compatibilidade do Yii |
80 | | - 1.1.x usado pelo projeto. |
81 | | -4. **Reorganização do CI**: os workflows em `.github/` ainda contêm metadados de |
82 | | - outro projeto ("Fishboard", "Abstrakt Agencia") e não estão versionados. |
83 | | - Faz parte deste escopo limpá-los/versioná-los? |
| 76 | +### 4.2 Apache |
| 77 | + |
| 78 | +5. `a2enmod rewrite`; `DocumentRoot` → `/app`; bloco |
| 79 | + `<Directory /app> AllowOverride All; Require all granted </Directory>`. |
| 80 | + A aplicação **sempre** exige `AllowOverride All` (rewrite + auth do |
| 81 | + `.htaccess`), então isso fica fixo — a env `ALLOW_OVERRIDE` (feature genérica |
| 82 | + do tutum, não usada de fato pela app) é **removida**. |
| 83 | + |
| 84 | +### 4.3 Código, dados e permissões |
| 85 | + |
| 86 | +6. **`COPY . /app`** em vez de `git clone` (respeita o `.dockerignore`). |
| 87 | +7. `chown www-data` em `/app/protected/data`, `/app/protected/runtime` e |
| 88 | + `/app/assets` (SQLite e Yii precisam escrever). |
| 89 | +8. `VOLUME /app/protected/data`; `EXPOSE 80`. |
| 90 | + |
| 91 | +### 4.4 Startup (substitui o `/run.sh` do tutum) |
| 92 | + |
| 93 | +9. Novo `docker-entrypoint.sh`: |
| 94 | + ```bash |
| 95 | + #!/bin/bash |
| 96 | + set -e |
| 97 | + service snmpd start || true |
| 98 | + /app/set_htpasswd.sh |
| 99 | + exec "$@" |
| 100 | + ``` |
| 101 | + `ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"]` + |
| 102 | + `CMD ["apache2-foreground"]`. Mantém o `sed` no `snmpd.conf` para liberar a |
| 103 | + view (`-V systemonly`). |
| 104 | +10. **`set_htpasswd.sh`:** adicionar shebang `#!/bin/bash` (hoje não tem; era |
| 105 | + chamado de dentro do `/run.sh` do tutum). |
| 106 | + |
| 107 | +### 4.5 CI multi-arch |
| 108 | + |
| 109 | +11. **`docker-image.yml`:** converter de `docker build`/`docker push` cru para |
| 110 | + `docker/setup-qemu-action` + `docker/setup-buildx-action` + |
| 111 | + `docker/build-push-action` com `platforms: linux/amd64,linux/arm64`. |
| 112 | +12. **`release-and-build.yml`:** adicionar `setup-qemu-action`; definir |
| 113 | + `platforms: linux/amd64,linux/arm64` no passo de push (o passo de |
| 114 | + "build + test" com `load: true` permanece single-arch amd64, pois `load` |
| 115 | + não aceita multi-arch). De passagem, corrigir os labels herdados de outro |
| 116 | + projeto (`Fishboard`/`Abstrakt Agencia`) e o comando de run inválido |
| 117 | + (`8080:3000` → `80:80`). |
| 118 | + |
| 119 | +### 4.6 README |
| 120 | + |
| 121 | +13. Adicionar seção curta de build local multi-arch: |
| 122 | + ```bash |
| 123 | + docker buildx build --platform linux/amd64,linux/arm64 \ |
| 124 | + -t ghcr.io/marcelofmatos/phpnetmap:dev --push . |
| 125 | + ``` |
| 126 | + |
| 127 | +## 5. Decisões resolvidas |
| 128 | + |
| 129 | +1. **Migração de PHP 5 → 7/8:** ✅ migrar para **PHP 7.4** (`php:7.4-apache`). |
| 130 | + Melhor equilíbrio: extensões `snmp`/`pdo_sqlite` disponíveis, Yii 1.1.x roda |
| 131 | + bem, e habilita arm64. PHP 8 traria mais atrito com o Yii 1.1.16 legado. |
| 132 | +2. **Escopo:** ✅ **completo** — Dockerfile + CI multi-arch + README. |
| 133 | +3. **Versão do PHP alvo:** ✅ **7.4**. |
| 134 | +4. **Reorganização do CI:** ✅ correções pontuais de multi-arch e dos |
| 135 | + metadados/labels claramente errados (de outro projeto). Sem reorganização |
| 136 | + ampla além disso. |
84 | 137 |
|
85 | 138 | ## 6. Critérios de aceite (para a abordagem completa) |
86 | 139 |
|
|
0 commit comments