Compare commits

..

No commits in common. '46c85b3cc17035153f649cf11e46d26a988549dc' and 'a1bba57f20fb9425bcd1792aff895852dfbf8db0' have entirely different histories.

  1. 3
      .gitignore
  2. 26
      Dockerfile
  3. 65
      README.md
  4. 35
      docker-compose-desarrollo.yml
  5. 1
      docker-compose-produccion.yml
  6. 2
      docker/000-default.conf
  7. 18
      phpdoc.xml
  8. 56
      src/docker-compose.yml
  9. 3
      src/phpunit.xml

3
.gitignore vendored

@ -5,6 +5,3 @@ auth.json
/.fleet /.fleet
/.idea /.idea
/.vscode /.vscode
.env
cache/
docs/

26
Dockerfile

@ -1,4 +1,5 @@
FROM php:8.2-apache FROM php:8.2-apache
LABEL maintainer='Jaivic'
RUN a2enmod rewrite RUN a2enmod rewrite
@ -8,32 +9,23 @@ RUN apt-get update && apt-get install -y \
libzip-dev \ libzip-dev \
libxml2-dev \ libxml2-dev \
libpq-dev \ libpq-dev \
libpng-dev libpng-dev \
RUN docker-php-ext-install \ nano \
pdo \ && docker-php-ext-install pdo pdo_pgsql pgsql zip bcmath gd intl soap opcache \
pdo_pgsql \ && docker-php-ext-configure pgsql -with-pgsql=/usr/local/pgsql
pgsql \
zip \
bcmath \
gd \
intl \
soap \
opcache
RUN docker-php-ext-configure pgsql -with-pgsql=/usr/local/pgsql
COPY --from=composer /usr/bin/composer /usr/bin/composer COPY --from=composer /usr/bin/composer /usr/bin/composer
ENV COMPOSER_ALLOW_SUPERUSER 1 ENV COMPOSER_ALLOW_SUPERUSER 1
COPY ./src/ /var/www/html COPY ./src/ /var/www/ddjj
COPY ./docker/000-default.conf /etc/apache2/sites-enabled/000-default.conf COPY ./docker/000-default.conf /etc/apache2/sites-enabled/000-default.conf
WORKDIR /var/www/html WORKDIR /var/www/ddjj
RUN chown -R www-data:www-data /var/www/html \ RUN chown -R www-data:www-data /var/www/ddjj \
&& composer install && composer install
RUN cd /var/www/html/storage/ \ RUN cd /var/www/ddjj/storage/ \
&& mkdir -p framework/sessions framework/views framework/cache/data \ && mkdir -p framework/sessions framework/views framework/cache/data \
&& chmod -R 775 framework \ && chmod -R 775 framework \
&& chown -R www-data:www-data framework \ && chown -R www-data:www-data framework \

65
README.md

@ -2,54 +2,69 @@
[Documentación de las rutas de la API](https://documenter.getpostman.com/view/28160221/2sA3JDh5PC#c1acf864-e310-4856-a2f8-17ba05a5b88a) [Documentación de las rutas de la API](https://documenter.getpostman.com/view/28160221/2sA3JDh5PC#c1acf864-e310-4856-a2f8-17ba05a5b88a)
Existe documentacón del codigo generada con PHP Documentor comprimida y subida a este repositorio.
## Intrucciones puesta en funcionamiento: ## Intrucciones puesta en funcionamiento:
Existen 2 archivos docker-compose, desarrollo (dentro de src/ ) y producción ( en la raíz del proyecto). ### Configuración inicial
Existen 2 archivos docker-compose, desarrollo y producción, la principal diferencia estre ambos es que produccion no tiene un contenedor de base de datos, ya que debe conectarse a la de el sistema en producción de Declaraciones Juradas; además no tiene puertos para acceder tanto a la base de datos como a la API.
Principalmente debe crearse y configurarse un archivo .env en src/. En el archivo docker-compose-{xxxxx}.yml pueden modificarse varias cosas según la version:
Es recomendable que para facilitar la configuración del .env realice una copia del archivo src/.env.example y complete con las credenciales que correspondan según como lo indica cada variable (es importante comprender que ingresar en cada variable para que el sistema funcione como se espera). #### Desarrollo:
- Los puertos hacia afuera de la base de datos (para testing puede usarse un backup) y la API.
- Las credenciales de la base de datos (repetir luego en .env del contenedor de la api).
### Desarrollo (src/docker-compose.yml): #### Producción:
Utiliza Laravel Sail y tiene un contenedor para la base de datos. Es recomendable que para facilitar la configuración del .env del contenedor de la API que realice una copia del archivo src/.env.example y complete con las credenciales que correspondan según como lo indica cada variable (es importante comprender que ingresar en cada variable para que el sistema funcione como se espera).
#### Intrucciones: Asegurese también de que las credenciales de la base de datos que ingresa en este archivo sean las misma que definio en el archivo docker-compose-{xxxxx}.yml
### Intrucciones:
```bash ```bash
$ git clone <url_de_este_repositorio> $ https://github.com/fcyt-sistemas/api_ddjj
$ cd api_ddjj/src/ $ cd api_ddjj
$ cp .env.example .env # configuraraciones de laravel $ docker-compose -f {nombre_archivo_docker_compose} up -d
$ composer install # o composer install --ignore-platform-req=ext-iconv de ser necesario
$ ./vendor/bin/sail up -d
``` ```
### Producción (docker-compose-produccion.yml): Si usa la opción de desarrollo puede ocurrir que los volumenes de su repositorio clonado tengan permisos incompatibles con el usuario de apache.
Si sale el siguiente error:
```bash
The stream or file "/var/www/ddjj/storage/logs/laravel.log" could not be opened in append mode: failed to open stream
```
Ejecute:
Usa una imagen generada por Dockerfile a medida, debe configurar crear y configurar un archivo .env en la raiz del proyecto a partir del .env.example (tambien en la raiz del proyecto) si desea usar el contenedor de la base de datos generado por el docker compose de produccion. ```bash
$ chown -R www-data:www-data /var/www/ddjj/storage &&
$ chmod -R 775 /var/www/ddjj/storage
Si va a usar una pase de datos externa elimine el contenedor pgsql del docker compose (modifique su archivo en local, no modifique el repositorio). ```
En caso de ser necesario ### Configuraciones dentro del contenedor:
#### Intrucciones: Para ingresar al contenedor:
```bash ```bash
$ git clone <url_de_este_repositorio> $ docker exec -it -u root api_ddjj-ddjj-1
$ cd api_ddjj
$ cp .env.example .env # configurar datos del contenedor pgsql
$ cd src
$ cp .env.example .env # configuraraciones de laravel
$ docker compose -f docker-compose-produccion up -d
``` ```
### Configuración final: Coloque las credenciales indicadas modificando el archivo .env o copiando el contenido del archivo que creo previamente copiando el .env.example:
#### Base de Datos:
Se espera que se la API a la base de datos de Declaraciones Juradas en producción, debe ingresar las credenciales en el .env.
#### Configuración final:
Dentro del contenedor ejecute lo siguiente para que el sistema funcione correctamente Dentro del contenedor ejecute lo siguiente para que el sistema funcione correctamente
```bash ```bash
$ cd /var/www/ddjj
$ php artisan optimize
$ php artisan key:generate $ php artisan key:generate
$ php artisan optimize $ php artisan optimize
``` ```

35
docker-compose-desarrollo.yml

@ -0,0 +1,35 @@
services:
ddjj:
build:
context: .
dockerfile: Dockerfile
volumes:
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
- ./src/app/:/var/www/ddjj/app:rw
- ./src/config/:/var/www/ddjj/config:rw
- ./src/database/:/var/www/ddjj/database:rw
- ./src/public/:/var/www/ddjj/public:rw
- ./src/resources/:/var/www/ddjj/resources:rw
- ./src/routes/:/var/www/ddjj/routes:rw
- ./src/tests/:/var/www/ddjj/tests:rw
- ./src/composer.json/:/var/www/ddjj/composer.json
- ./src/composer.lock/:/var/www/ddjj/composer.lock
- ./src/.env:/var/www/ddjj/.env
depends_on:
- pgsql
ports:
- 5556:80
- 5557:443
restart: always
pgsql:
image: postgres:11.6
ports:
- 5555:5432
environment:
TZ: America/Argentina/Buenos_Aires
POSTGRES_PASSWORD: postgres
POSTGRES_DB: ddjj
PGDATA: /var/lib/postgresql/data/pgdata
restart: always

1
docker-compose-produccion.yml

@ -8,7 +8,6 @@ services:
volumes: volumes:
- /etc/localtime:/etc/localtime:ro - /etc/localtime:/etc/localtime:ro
depends_on: depends_on:
- pgsql
expose: # Usar ports en vez de expose en caso de necesitar acceder desde el host expose: # Usar ports en vez de expose en caso de necesitar acceder desde el host
- 80 - 80
- 443 - 443

2
docker/000-default.conf

@ -10,7 +10,7 @@
#ServerName www.example.com #ServerName www.example.com
ServerAdmin webmaster@localhost ServerAdmin webmaster@localhost
DocumentRoot /var/www/html/public/ DocumentRoot /var/www/ddjj/public/
# Available loglevels: trace8, ..., trace1, debug, info, notice, warn, # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg. # error, crit, alert, emerg.

18
phpdoc.xml

@ -1,18 +0,0 @@
<?xml version="1.0" encoding="UTF-8" ?>
<phpdocumentor configVersion="3"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="https://www.phpdoc.org"
xsi:noNamespaceSchemaLocation="https://raw.githubusercontent.com/phpDocumentor/phpDocumentor/master/data/xsd/phpdoc.xsd">
<paths>
<output>docs</output>
<cache>cache</cache>
</paths>
<version number="1.0.0">
<api>
<source dsn=".">
<path>src</path>
</source>
</api>
</version>
</phpdocumentor>

56
src/docker-compose.yml

@ -1,56 +0,0 @@
services:
laravel.test:
build:
context: ./vendor/laravel/sail/runtimes/8.4
dockerfile: Dockerfile
args:
WWWGROUP: '${WWWGROUP}'
image: sail-8.4/app
extra_hosts:
- 'host.docker.internal:host-gateway'
ports:
- '${APP_PORT:-80}:80'
- '${VITE_PORT:-5173}:${VITE_PORT:-5173}'
environment:
WWWUSER: '${WWWUSER}'
LARAVEL_SAIL: 1
XDEBUG_MODE: '${SAIL_XDEBUG_MODE:-off}'
XDEBUG_CONFIG: '${SAIL_XDEBUG_CONFIG:-client_host=host.docker.internal}'
IGNITION_LOCAL_SITES_PATH: '${PWD}'
volumes:
- '.:/var/www/html'
networks:
- sail
depends_on:
- pgsql
pgsql:
image: 'postgres:17'
ports:
- '${FORWARD_DB_PORT:-5432}:5432'
environment:
PGPASSWORD: '${DB_PASSWORD:-secret}'
POSTGRES_DB: '${DB_DATABASE}'
POSTGRES_USER: '${DB_USERNAME}'
POSTGRES_PASSWORD: '${DB_PASSWORD:-secret}'
volumes:
- 'sail-pgsql:/var/lib/postgresql/data'
- './vendor/laravel/sail/database/pgsql/create-testing-database.sql:/docker-entrypoint-initdb.d/10-create-testing-database.sql'
networks:
- sail
healthcheck:
test:
- CMD
- pg_isready
- '-q'
- '-d'
- '${DB_DATABASE}'
- '-U'
- '${DB_USERNAME}'
retries: 3
timeout: 5s
networks:
sail:
driver: bridge
volumes:
sail-pgsql:
driver: local

3
src/phpunit.xml

@ -21,7 +21,8 @@
<env name="APP_ENV" value="testing"/> <env name="APP_ENV" value="testing"/>
<env name="BCRYPT_ROUNDS" value="4"/> <env name="BCRYPT_ROUNDS" value="4"/>
<env name="CACHE_DRIVER" value="array"/> <env name="CACHE_DRIVER" value="array"/>
<env name="DB_DATABASE" value="testing"/> <!-- <env name="DB_CONNECTION" value="sqlite"/> -->
<!-- <env name="DB_DATABASE" value=":memory:"/> -->
<env name="MAIL_MAILER" value="array"/> <env name="MAIL_MAILER" value="array"/>
<env name="QUEUE_CONNECTION" value="sync"/> <env name="QUEUE_CONNECTION" value="sync"/>
<env name="SESSION_DRIVER" value="array"/> <env name="SESSION_DRIVER" value="array"/>

Loading…
Cancel
Save