Compare commits

..

5 Commits

  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,3 +5,6 @@ auth.json
/.fleet /.fleet
/.idea /.idea
/.vscode /.vscode
.env
cache/
docs/

26
Dockerfile

@ -1,5 +1,4 @@
FROM php:8.2-apache FROM php:8.2-apache
LABEL maintainer='Jaivic'
RUN a2enmod rewrite RUN a2enmod rewrite
@ -9,23 +8,32 @@ RUN apt-get update && apt-get install -y \
libzip-dev \ libzip-dev \
libxml2-dev \ libxml2-dev \
libpq-dev \ libpq-dev \
libpng-dev \ libpng-dev
nano \ RUN docker-php-ext-install \
&& docker-php-ext-install pdo pdo_pgsql pgsql zip bcmath gd intl soap opcache \ pdo \
&& docker-php-ext-configure pgsql -with-pgsql=/usr/local/pgsql pdo_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/ddjj COPY ./src/ /var/www/html
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/ddjj WORKDIR /var/www/html
RUN chown -R www-data:www-data /var/www/ddjj \ RUN chown -R www-data:www-data /var/www/html \
&& composer install && composer install
RUN cd /var/www/ddjj/storage/ \ RUN cd /var/www/html/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,69 +2,54 @@
[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)
## Intrucciones puesta en funcionamiento: Existe documentacón del codigo generada con PHP Documentor comprimida y subida a este repositorio.
### 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. ## Intrucciones puesta en funcionamiento:
En el archivo docker-compose-{xxxxx}.yml pueden modificarse varias cosas según la version: Existen 2 archivos docker-compose, desarrollo (dentro de src/ ) y producción ( en la raíz del proyecto).
#### Desarrollo: Principalmente debe crearse y configurarse un archivo .env en src/.
- 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).
#### Producción: 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).
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). ### Desarrollo (src/docker-compose.yml):
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 Utiliza Laravel Sail y tiene un contenedor para la base de datos.
### Intrucciones: #### Intrucciones:
```bash ```bash
$ https://github.com/fcyt-sistemas/api_ddjj $ git clone <url_de_este_repositorio>
$ cd api_ddjj $ cd api_ddjj/src/
$ docker-compose -f {nombre_archivo_docker_compose} up -d $ cp .env.example .env # configuraraciones de laravel
$ composer install # o composer install --ignore-platform-req=ext-iconv de ser necesario
$ ./vendor/bin/sail up -d
``` ```
Si usa la opción de desarrollo puede ocurrir que los volumenes de su repositorio clonado tengan permisos incompatibles con el usuario de apache. ### Producción (docker-compose-produccion.yml):
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:
```bash 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.
$ 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).
### Configuraciones dentro del contenedor: En caso de ser necesario
Para ingresar al contenedor: #### Intrucciones:
```bash ```bash
$ docker exec -it -u root api_ddjj-ddjj-1 $ git clone <url_de_este_repositorio>
$ 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
``` ```
Coloque las credenciales indicadas modificando el archivo .env o copiando el contenido del archivo que creo previamente copiando el .env.example: ### Configuración final:
#### 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

@ -1,35 +0,0 @@
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,6 +8,7 @@ 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/ddjj/public/ DocumentRoot /var/www/html/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

@ -0,0 +1,18 @@
<?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

@ -0,0 +1,56 @@
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,8 +21,7 @@
<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_CONNECTION" value="sqlite"/> --> <env name="DB_DATABASE" value="testing"/>
<!-- <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