diff --git a/Dockerfile b/dev.Dockerfile similarity index 100% rename from Dockerfile rename to dev.Dockerfile diff --git a/docker-compose.yml.example b/docker-compose.yml.example index 63de3410abfeed1960a310359171eb7cfd7c995d..14363962a9f9de3c27d4320dd3be700f034a2e0f 100644 --- a/docker-compose.yml.example +++ b/docker-compose.yml.example @@ -75,7 +75,7 @@ services: api: build: context: . - dockerfile: Dockerfile + dockerfile: dev.Dockerfile container_name: api volumes: - ./src:/var/www diff --git a/docker-compose.yml.prod.yml b/docker-compose.yml.prod.yml new file mode 100644 index 0000000000000000000000000000000000000000..0b590b252d7274693bac6d3e715a242e5d7ab7dc --- /dev/null +++ b/docker-compose.yml.prod.yml @@ -0,0 +1,96 @@ +version: '3.7' + +networks: + doorcode: + driver: bridge + +secrets: + webserver_cert: + file: ./secrets/certs/webserver.cert + webserver_key: + file: ./secrets/certs/webserver.key + root_cert: + file: ./secrets/certs/root.cert + postgres_password: + file: ./secrets/passwords/postgres + +volumes: + db-data: + +services: + webserver: + image: nginx:1-alpine + container_name: webserver + restart: always + tty: true + secrets: + - webserver_cert + - webserver_key + - root_cert + ports: + - "443:443" + volumes: + - ./src:/var/www + - ./nginx/conf.d/:/etc/nginx/conf.d + - ./nginx/dhparam/:/run/dhparam + # Saml config + - ./simplesamlphp-1.18.5:/var/simplesamlphp + - ./simple-saml/cert:/var/simplesamlphp/cert + - ./simple-saml/config:/var/simplesamlphp/config + - ./simple-saml/metadata:/var/simplesamlphp/metadata + - ./simplesamlphp-1.18.5:/var/simplesamlphp-idp + - ./simple-saml-idp/cert:/var/simplesamlphp-idp/cert + - ./simple-saml-idp/config:/var/simplesamlphp-idp/config + - ./simple-saml-idp/metadata:/var/simplesamlphp-idp/metadata + networks: + - doorcode + postgres: + image: postgres:11-alpine + container_name: postgres + restart: always + tty: true + ports: + - "5432:5432" + volumes: + - db-data:/var/lib/postgresql/data + environment: + POSTGRES_USER: web + POSTGRES_PASSWORD_FILE: /run/secrets/postgres_password + POSTGRES_DB: doorcode + networks: + - doorcode + dbadmin: + image: dockage/phppgadmin:latest + container_name: dbadmin + restart: always + tty: true + ports: + - "127.0.0.1:80:80" + depends_on: + - postgres + environment: + PHP_PG_ADMIN_SERVER_HOST: postgres + PHP_PG_ADMIN_SERVER_DEFAULT_DB: doorcode + PHP_PG_ADMIN_SERVER_PORT: 5432 + networks: + - doorcode + api: + build: + context: . + dockerfile: prod.Dockerfile + container_name: api + restart: always + volumes: + - ./src:/var/www + - ./php/prod.ini:/usr/local/etc/php/conf.d/local.ini + # Map saml files to the php-fpm server so it has access to them as well + - ./simplesamlphp-1.18.5:/var/simplesamlphp + - ./simple-saml/cert:/var/simplesamlphp/cert + - ./simple-saml/config:/var/simplesamlphp/config + - ./simple-saml/metadata:/var/simplesamlphp/metadata + - ./simplesamlphp-1.18.5:/var/simplesamlphp-idp + - ./simple-saml-idp/cert:/var/simplesamlphp-idp/cert + - ./simple-saml-idp/config:/var/simplesamlphp-idp/config + - ./simple-saml-idp/metadata:/var/simplesamlphp-idp/metadata + networks: + - doorcode diff --git a/php/dev.ini b/php/dev.ini index 36e81c24db9d2ae882b8a0adaba0e5a272245cea..66192d154a4db333ad7187e8f2934d1598912552 100644 --- a/php/dev.ini +++ b/php/dev.ini @@ -10,3 +10,5 @@ xdebug.remote_autostart=1 xdebug.remote.host=host.docker.internal xdebug.remote.mode=req xdebug.remote.handler=dbgp + +date.timezone = "America/Los_Angeles" diff --git a/php/prod.ini b/php/prod.ini new file mode 100644 index 0000000000000000000000000000000000000000..52e86d2a8d26b15155522cac92da87fdc8805e65 --- /dev/null +++ b/php/prod.ini @@ -0,0 +1 @@ +date.timezone = "America/Los_Angeles" diff --git a/prod.Dockerfile b/prod.Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..0004c46bf22d16b77f3b257ef032a8841bd806f6 --- /dev/null +++ b/prod.Dockerfile @@ -0,0 +1,42 @@ +FROM php:7.4-fpm-alpine + +ENV PROJECT_DIR /var/www + +# Set working directory +WORKDIR ${PROJECT_DIR} + +# Install dependencies +RUN apk update && apk add --no-cache \ + alpine-sdk \ + postgresql-dev \ + zlib-dev \ + libpng-dev \ + shadow \ + bash \ + bash-completion \ + vim + +# Install PHP Extensions +RUN docker-php-ext-install pdo \ + pdo_pgsql \ + bcmath \ + fileinfo \ + gd + +# Install composer +RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer + +# Add user for application and create source directories +RUN groupadd -g 1000 www && \ + useradd -u 1000 -ms /bin/bash -g www www + +# Copy existing application directory permissions +COPY --chown=root:www src/ ${WORKDIR} +COPY php/prod.ini /usr/local/etc/php/conf.d/local.ini + +# Change current user to www +USER www + +# Expose port 9000 and start php-fpm server +EXPOSE 9000 +CMD ["php-fpm"] diff --git a/secrets/passwords/.gitignore b/secrets/passwords/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..c96a04f008ee21e260b28f7701595ed59e2839e3 --- /dev/null +++ b/secrets/passwords/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore \ No newline at end of file