
# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  The ASF licenses this file to You
# under the Apache License, Version 2.0 (the "License"); you may not
# use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.  For additional information regarding
# copyright in this work, please see the NOTICE file in the top level
# directory of this distribution.


# Example Docker Compose setup for running Roller and PostgreSQL locally


version: '3.7'

services:

   postgresql:
      image: "postgres:10.0"
      ports:
         - "5432:5432"
      volumes:
         - type: bind
           source: ./docker/postgresql-data
           target: /var/lib/postgresql/data
      environment:
         - POSTGRES_DB=rollerdb
         - POSTGRES_USER=scott
         - POSTGRES_PASSWORD=tiger

   roller:
      build: .
      ports:
         - "8080:8080"
      volumes:
         - type: bind
           source: ./docker/roller-data
           target: /var/lib/roller/data

