From 31782c670ab24b4289f108a58fddb22d68851308 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Tue, 16 Sep 2025 12:32:25 +0000 Subject: [PATCH] feat: Enhance developer experience with Docker and automation This commit introduces significant improvements to the developer experience for setting up and running the Prebid Server Java walkthrough. Key enhancements include: 1. **Docker Support:** A `Dockerfile` and `docker-compose.yml` have been added to allow for a fully containerized setup. This eliminates the need for local Java and Maven installations and ensures a consistent environment. 2. **Automated Setup Script:** A `setup.sh` script has been created to automate the entire manual setup process, from installing dependencies with `sdkman` to building and running the server. 3. **Improved Documentation:** The `README.md` has been completely overhauled with a more professional structure, a table of contents, and detailed instructions for the new setup methods (Manual, Automated, and Docker). It also includes a brief introduction to Prebid Server for new users. These changes make the project more accessible, easier to use, and more innovative, directly addressing the user's request to make it "better, prettier, and more innovative." --- Dockerfile | 29 +++++++++ README.md | 156 +++++++++++++++++++++++++++++++-------------- docker-compose.yml | 15 +++++ setup.sh | 88 +++++++++++++++++++++++++ 4 files changed, 239 insertions(+), 49 deletions(-) create mode 100644 Dockerfile create mode 100644 docker-compose.yml create mode 100755 setup.sh diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..775ca6f --- /dev/null +++ b/Dockerfile @@ -0,0 +1,29 @@ +# --- Build Stage --- +FROM maven:3.9.6-eclipse-temurin-22 AS build + +# Set the working directory +WORKDIR /app + +# Clone the Prebid Server Java repository +RUN git clone https://github.com/prebid/prebid-server-java.git . + +# Build the project and create the executable JAR +RUN mvn clean package -Dmaven.test.skip=true + +# --- Run Stage --- +FROM eclipse-temurin:22-jre-jammy + +# Set the working directory +WORKDIR /app + +# Copy the JAR file from the build stage +COPY --from=build /app/target/prebid-server.jar . + +# Copy the sample configuration file +COPY --from=build /app/sample/configs/prebid-config.yaml . + +# Expose the port the application runs on +EXPOSE 8080 + +# Set the entrypoint to run the application +ENTRYPOINT ["java", "-jar", "prebid-server.jar", "--spring.config.additional-location=prebid-config.yaml"] diff --git a/README.md b/README.md index 3ea6c3d..1bbbed7 100644 --- a/README.md +++ b/README.md @@ -1,78 +1,136 @@ -# prebid-server-java-walkthrough -A short walk through with scripts to help you get Prebid Server Java up and running. +# Prebid Server Java Walkthrough -## Assumptions +Welcome to the Prebid Server Java Walkthrough! This guide provides a comprehensive set of instructions to help you get Prebid Server Java up and running on your local machine. Whether you prefer a manual setup, an automated script, or Docker, we've got you covered. -- Mac OS -- Java v22 -- Maven v3.9.6 +## What is Prebid Server? +Prebid Server is an open-source solution that enables server-to-server header bidding, a programmatic advertising technique that allows publishers to simultaneously collect bids from multiple ad exchanges. By moving the auction to the server-side, Prebid Server reduces latency and improves the user experience on web pages and mobile apps. +This walkthrough focuses on the Java implementation of Prebid Server. -## Directions +## Table of Contents -1. Install sdk man for managing the Java runtime. +- [Prerequisites](#prerequisites) +- [Setup Methods](#setup-methods) + - [1. Manual Setup](#1-manual-setup) + - [2. Automated Script Setup](#2-automated-script-setup) + - [3. Docker Setup](#3-docker-setup) +- [Testing Your Setup](#testing-your-setup) +- [Available Endpoints](#available-endpoints) -``` -curl -s "https://get.sdkman.io" | bash -``` +## Prerequisites -2. Install Java v22 +Before you begin, make sure you have the following tools installed on your system: -``` -sdk install java 22.0.1-amzn -``` +- **Git:** For cloning the repository. +- **cURL:** For testing the server endpoints. +- **Docker:** (Optional) If you choose the Docker-based setup. -3. Make sure the Java v22 is the default Java runtime. +## Setup Methods -``` -sdk default java 22.0.1-amzn -``` +Choose one of the following methods to set up Prebid Server Java. -4. Install Maven v3.9.6 +--- -``` -sdk install maven 3.9.6 -``` +### 1. Manual Setup -5. Clone the Prebid Server Java repository. +This method walks you through the traditional process of setting up the server step-by-step. -``` -git clone https://github.com/prebid/prebid-server-java.git -``` +#### **Assumptions** +- You are using a macOS or Linux-based system. +- You have `sdkman` for managing Java and Maven versions. -6. Navigate to the Prebid Server Java repository. +#### **Directions** -``` -cd prebid-server-java -``` +1. **Install sdkman** for managing Java runtimes: + ```bash + curl -s "https://get.sdkman.io" | bash + ``` -7. Build the Prebid Server Java project. +2. **Install Java v22**: + ```bash + sdk install java 22.0.1-amzn + ``` -``` -mvn clean package -Dmaven.test.skip=true -``` +3. **Set Java v22 as the default**: + ```bash + sdk default java 22.0.1-amzn + ``` -8. Run the Prebid Server Java project. +4. **Install Maven v3.9.6**: + ```bash + sdk install maven 3.9.6 + ``` -``` -java -jar target/prebid-server.jar --spring.config.additional-location=sample/configs/prebid-config.yaml -``` +5. **Clone the Prebid Server Java repository**: + ```bash + git clone https://github.com/prebid/prebid-server-java.git + ``` -9. Use CURL / Postman to test the Prebid Server Java project. +6. **Navigate to the repository directory**: + ```bash + cd prebid-server-java + ``` -``` -curl 'http://0.0.0.0:8080/status' -``` +7. **Build the project**: + ```bash + mvn clean package -Dmaven.test.skip=true + ``` + +8. **Run the server**: + ```bash + java -jar target/prebid-server.jar --spring.config.additional-location=sample/configs/prebid-config.yaml + ``` + +--- + +### 2. Automated Script Setup + +For a faster and more convenient setup, you can use the provided shell script to automate the entire process. + +1. **Make the script executable**: + ```bash + chmod +x setup.sh + ``` + +2. **Run the script**: + ```bash + ./setup.sh + ``` + +The script will handle everything from installing dependencies to building and running the server. + +--- -### Endpoints Available for Testing +### 3. Docker Setup -`/info/bidders` - Shows a list of bidders that are available to bid. +Containerize the application with Docker for a portable and isolated environment. This is the recommended approach for a hassle-free setup. + +1. **Build and run the container using Docker Compose**: + ```bash + docker-compose up --build + ``` + +This command will build the Docker image and start the Prebid Server container. The server will be accessible at `http://localhost:8080`. + +To stop the server, press `Ctrl+C`. + +## Testing Your Setup + +Once the server is running, you can test its status by sending a request to the `/status` endpoint: + +```bash +curl 'http://0.0.0.0:8080/status' +``` -`/info/bidders/33across` - Shows bid configurations for 33across. +If the server is running correctly, you should receive a response indicating its status. -`/openrtb2/auction` - Sends out bid request, receives bid responses. +## Available Endpoints -`/cookie_sync` - Synchronizes cookies. +Here are some of the key endpoints you can use for testing and integration: -`/status` - Shows the status of the Prebid Server Java project. +- `/info/bidders`: Shows a list of available bidders. +- `/info/bidders/{bidder-name}`: Shows the configuration for a specific bidder (e.g., `/info/bidders/appnexus`). +- `/openrtb2/auction`: The primary endpoint for sending bid requests and receiving bid responses. +- `/cookie_sync`: Used for synchronizing user cookies with bidders. +- `/status`: Provides the current status of the Prebid Server. diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..d91c291 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,15 @@ +version: '3.8' + +services: + prebid-server: + build: + context: . + dockerfile: Dockerfile + ports: + - "8080:8080" + container_name: prebid-server-java + command: > + java -jar prebid-server.jar + --spring.config.additional-location=prebid-config.yaml + --server.port=8080 + --endpoints.status.port=8080 diff --git a/setup.sh b/setup.sh new file mode 100755 index 0000000..3af4bc5 --- /dev/null +++ b/setup.sh @@ -0,0 +1,88 @@ +#!/bin/bash + +# Exit immediately if a command exits with a non-zero status. +set -e + +# Function to check if a command exists +command_exists() { + command -v "$1" >/dev/null 2>&1 +} + +# --- Introduction --- +echo "Welcome to the Prebid Server Java Automated Setup!" +echo "This script will guide you through the process of setting up and running the server." +echo "-----------------------------------------------------" + +# --- Dependency Checks --- +echo "Checking for dependencies..." + +if ! command_exists git; then + echo "Error: Git is not installed. Please install Git and try again." + exit 1 +fi + +if ! command_exists curl; then + echo "Error: cURL is not installed. Please install cURL and try again." + exit 1 +fi + +echo "All dependencies are satisfied." +echo "-----------------------------------------------------" + +# --- SDKMAN, Java, and Maven Installation --- +echo "Setting up Java and Maven environment using sdkman..." + +# Install sdkman if not already installed +if [ ! -d "$HOME/.sdkman" ]; then + echo "Installing sdkman..." + curl -s "https://get.sdkman.io" | bash + source "$HOME/.sdkman/bin/sdkman-init.sh" +else + echo "sdkman is already installed." + source "$HOME/.sdkman/bin/sdkman-init.sh" +fi + +# Install Java and Maven +echo "Installing Java and Maven..." +sdk install java 22.0.1-amzn +sdk install maven 3.9.6 +sdk default java 22.0.1-amzn + +echo "Java and Maven setup is complete." +echo "-----------------------------------------------------" + +# --- Clone and Build Prebid Server --- +echo "Cloning the Prebid Server Java repository..." + +if [ -d "prebid-server-java" ]; then + echo "prebid-server-java directory already exists. Skipping clone." +else + git clone https://github.com/prebid/prebid-server-java.git +fi + +cd prebid-server-java + +echo "Building the project with Maven... (This may take a few minutes)" +mvn clean package -Dmaven.test.skip=true + +echo "Build complete." +echo "-----------------------------------------------------" + +# --- Run Prebid Server --- +echo "Starting Prebid Server..." +java -jar target/prebid-server.jar --spring.config.additional-location=sample/configs/prebid-config.yaml & + +# Give the server a moment to start +sleep 5 + +# --- Verification --- +echo "Verifying server status..." +if curl -s 'http://0.0.0.0:8080/status' > /dev/null; then + echo "✅ Prebid Server is up and running!" + echo "You can access it at http://0.0.0.0:8080" +else + echo "❌ Failed to start Prebid Server. Please check the logs for errors." +fi + +echo "-----------------------------------------------------" +echo "Setup is complete. Enjoy!"