diff --git a/Dockerfile b/Dockerfile index 1e0cbd9..7501ac4 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,10 @@ # syntax=docker/dockerfile:1 +# Add the following lines to tag the image (replace 'your_username' and 'shortener-app' with your Docker Hub username and repository name) +ARG VERSION=latest +ARG IMAGE_NAME=bigwiz/shortener +ARG TAG=$VERSION + # Stage 1: Build the application FROM maven:3.9.6-eclipse-temurin-21 AS builder @@ -19,8 +24,9 @@ ENV CATALINA_BASE /usr/local/tomcat ENV CATALINA_HOME /usr/local/tomcat ENV PATH $CATALINA_HOME/bin:$PATH + # Copy the WAR file from the builder stage -COPY target/shortener.war $CATALINA_BASE/webapps/ +COPY --from=builder /URLShortener/target/shortener.war $CATALINA_BASE/webapps/ # Add configuration for document base path @@ -44,4 +50,3 @@ RUN chmod +x /usr/local/tomcat/shortener.sh # Start Tomcat and MariaDB using the startup script CMD ["sh", "/usr/local/tomcat/shortener.sh"] - diff --git a/README.md b/README.md index 6bfeba5..a682ea2 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,11 @@ -## Enterprise-Grade URL Shortener and Bio Page Application +## ![](https://33333.cdn.cke-cs.com/kSW7V9NHUXugvhoQeFaf/images/849f04bc0b71c7572b553b2b283f7590067b036c87a71ba9.webp)**TUSC - The URL Shortener Company** [![Build Status](https://travis-ci.org/yourusername/your-repo.svg?branch=main)](https://travis-ci.org/aamitn/URLShortener)[![License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE.md)[![GitHub last commit](https://img.shields.io/github/last-commit/aamitn/URLShortener.svg)](https://github.com/aamitn/URLShortener/commits/main)[![GitHub issues](https://img.shields.io/github/issues/aamitn/URLShortener.svg)](https://github.com/aamitn/URLShortener/issues)[![GitHub pull requests](https://img.shields.io/github/issues-pr/aamitn/URLShortener.svg)](https://github.com/aamitn/URLShortener/pulls)[![GitHub contributors](https://img.shields.io/github/contributors/aamitn/URLShortener.svg)](https://github.com/aamitn/URLShortener/graphs/contributors) [![Twitter](https://img.shields.io/twitter/url/https/github.com/yourusername/your-repo.svg?style=social)](https://twitter.com/intent/tweet?url=https%3A%2F%2Fgithub.com%2Faamitn%2FURLShortener&text=Check%20out%20this%20awesome%20URL%20Shortener%20and%20Bio%20Page%20Application&via=yourtwitterhandle) -A powerful and scalable URL shortener with integrated bio pages built using Spring Boot. +An enterprise-grade, powerful and scalable URL shortener with integrated bio pages built using Spring Boot. + +
Maven PackageFree Collaborative Markdown Editor - onlinemarkdowneditor.dev
Docker ImageFree Collaborative Markdown Editor - onlinemarkdowneditor.dev
## Table of Contents @@ -23,14 +25,14 @@ This project is an enterprise-grade URL shortener and bio page application devel ## Features -* Shorten URLs and create custom short URLs -* Integrated bio pages for users -* Analytics tracking for each shortened URL -* User management with registration, login, and profile updates -* Subscription plans for premium features -* Rate limiting to prevent abuse -* Forgot password and username recovery functionality -* ... +* Shorten URLs and create custom short URLs. +* Integrated bio pages for users. +* Analytics tracking for each shortened URL. +* User management with registration, login, and profile updates. +* Subscription plans for premium features. +* Rate limiting to prevent abuse. +* Forgot password and username recovery functionality. +* OPEN API 3.0 Complaint REST API set, with extensive docs. ## Getting Started @@ -43,94 +45,142 @@ Before you begin, ensure you have the following installed: * MySQL * Your favorite IDE (IntelliJ, Eclipse, etc.) + ### Local Setup 1. Clone the repository: - + ```plaintext git clone https://github.com/aamitn/URLShortener.git ``` - + 2. **Apply the Database Schema:** - + Execute the provided **db\_schema.sql** file to set up the necessary tables and schema for the application. This script will also create the required database. - + ```plaintext mysql -u your_username -p < path/to/db_schema.sql ``` - + 3. Update the application.properties file: - -  Update the application.properties file in the src/main/resources directory with your database configuration. - + + Update the application.properties file in the src/main/resources directory with your database configuration. + 4. Build and run the application: - + ```plaintext cd URLShortener mvn spring-boot:run ``` - + 5. Access the application at http://localhost:8080 + ### Deployment 1. **Build a deployable WAR:** - + ```plaintext mvn clean install ``` - + 2. **Deploy the WAR:** * **Option 1: Manual Deployment** - + Deploy the generated WAR file to your Tomcat server. Copy the WAR file to the `webapps` directory of your Tomcat installation. - + ```plaintext cp target/shorten.war /path/to/tomcat/webapps/ ``` - + * **Option 2: Web Interface Upload** - + Alternatively, if your Tomcat server provides a web interface for WAR file deployment, follow these steps: - + * Access the Tomcat Manager web interface at `http://localhost:8080/manager/html` (replace with your Tomcat server address). * Log in with your Tomcat manager credentials. * Navigate to the "WAR file to deploy" section. * Choose the `shorten.war` file using the file upload button. * Click the "Deploy" button. 3. **Configure environment variables:** - + Set environment variables for cloud-specific settings. - + 4. **Adjust Tomcat Configuration (Important):** - + To ensure proper functionality, it's important to run the application on the root of the servlet container. If you're using Tomcat, add the following line to your `server.xml` configuration file within the `` section: - + ```xml ``` - + This ensures that the application runs on the root context path. Adjust the `docBase` attribute according to your deployment directory. - + 5. **Start Tomcat:** - + Start your Tomcat server. - + ```plaintext /path/to/tomcat/bin/startup.sh # for Linux /path/to/tomcat/bin/startup.bat # for Windows ``` - + Access the application at `http://localhost:8080/`. - + 6. **Adjust Configuration (Optional):** If you need to customize the application configuration after deployment, you can find the **application.properties** file within the deployed WAR file. THe file can be accesses as : - + ```plaintext vi /path/to/tomcat/webapps/your-app/WEB-INF/classes/application.properties ``` - -### Usage + +### Cloud Native Deployment + +To deploy the URL Shortener application on your cloud environment, follow the steps below: + +**Prerequisites** + +* [Docker](https://www.docker.com/get-started) +* [Docker Compose](https://docs.docker.com/compose/install/) + +1. **Clone the Repository:** + + ```plaintext + git clone https://github.com/your-username/URLShortener.git + cd URLShortener + ``` + +2. **Build and Run Your Own Image:** + + ```plaintext + docker build -t shortener:latest . + docker run -p 8080:8080 -p 3306:3306 shortener:latest + ``` + +3. **Use Our Pre-built Image with Docker Compose:** + + ```plaintext + docker compose build + docker compose up + ``` + +4. **Customizing Docker Compose Configuration:** + +In the **docker-compose.yml** file, you can customize the build source for the Shortener service: + +```plaintext + #Build from docker hub image .Comment/Uncomment Below + image: nmpl/shortener:latest + + #Build from local Dockerfile.Comment/Uncomment Below + # build: + # context: . + # dockerfile: Dockerfilekerfile +``` + +Comment or uncomment the relevant lines based on whether you want to use the pre-built image from Docker Hub or build from the local Dockerfile. + +### Usage Cases 1. Shorten URLs by visiting the URL Shortener page. 2. Access analytics for each shortened URL. @@ -142,4 +192,4 @@ Contributions are welcome! Please follow the contribution guidelines. ### License -This project is licensed under the MIT License - see the LICENSE.md file for details. +This project is licensed under the MIT License - see the LICENSE.md file for details. \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index cb37471..53caa15 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -2,9 +2,36 @@ version: '3.8' services: shortener-app: - build: - context: . - dockerfile: Dockerfile + labels: + - "TUSC The URL Shortener Company" + + #Build from docker hub image .Comment/Uncomment Below + image: nmpl/shortener:latest + + #Build from local Dockerfile.Comment/Uncomment Below + # build: + # context: . + # dockerfile: Dockerfile + ports: - "8080:8080" - - "3306:3306" \ No newline at end of file + - "3306:3306" + + volumes: + - shortener-db-data:/var/lib/mysql + - type: volume + source: shortener-db-data + target: /var/lib/mysql + + healthcheck: + test: [ "CMD", "curl", "-f", "http://localhost:8080/monitoring" ] + interval: 30s + timeout: 10s + retries: 3 + start_period: 60s + restart: unless-stopped + + +volumes: + shortener-db-data: + name: shortener-db-data \ No newline at end of file diff --git a/pom.xml b/pom.xml index 1fa6a67..d079b14 100644 --- a/pom.xml +++ b/pom.xml @@ -178,7 +178,7 @@ ${project.packaging} - ${artifactId} + ${project.artifactId} diff --git a/src/main/resources/logo.svg b/src/main/resources/logo.svg new file mode 100644 index 0000000..e52fb0b --- /dev/null +++ b/src/main/resources/logo.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + T + + + + + U + + + + + S + + + + + C + + \ No newline at end of file