Commit 5574d3fb authored by AreejMh57's avatar AreejMh57

Initial commit

parent 362bdc13
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>
\ No newline at end of file
...@@ -11,7 +11,12 @@ ...@@ -11,7 +11,12 @@
<component name="ChangeListManager"> <component name="ChangeListManager">
<list default="true" id="ad904d3c-917a-41ec-8997-0c459fd2925c" name="Changes" comment="restructure and add docker compose file"> <list default="true" id="ad904d3c-917a-41ec-8997-0c459fd2925c" name="Changes" comment="restructure and add docker compose file">
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" /> <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/docker-compose.yml" beforeDir="false" afterPath="$PROJECT_DIR$/docker-compose.yml" afterDir="false" /> <change beforePath="$PROJECT_DIR$/WebApp/dockerfile" beforeDir="false" afterPath="$PROJECT_DIR$/WebApp/dockerfile" afterDir="false" />
<change beforePath="$PROJECT_DIR$/WebApp/pom.xml" beforeDir="false" afterPath="$PROJECT_DIR$/WebApp/pom.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/haproxy/dockerfile" beforeDir="false" afterPath="$PROJECT_DIR$/haproxy/dockerfile" afterDir="false" />
<change beforePath="$PROJECT_DIR$/haproxy/haproxy.cfg" beforeDir="false" afterPath="$PROJECT_DIR$/haproxy/haproxy.cfg" afterDir="false" />
<change beforePath="$PROJECT_DIR$/haproxy/haproxy_routing.cfg" beforeDir="false" afterPath="$PROJECT_DIR$/haproxy/haproxy_routing.cfg" afterDir="false" />
<change beforePath="$PROJECT_DIR$/haproxy/haproxy_tcp_mode.cfg" beforeDir="false" afterPath="$PROJECT_DIR$/haproxy/haproxy_tcp_mode.cfg" afterDir="false" />
</list> </list>
<option name="SHOW_DIALOG" value="false" /> <option name="SHOW_DIALOG" value="false" />
<option name="HIGHLIGHT_CONFLICTS" value="true" /> <option name="HIGHLIGHT_CONFLICTS" value="true" />
...@@ -39,6 +44,11 @@ ...@@ -39,6 +44,11 @@
</component> </component>
<component name="PropertiesComponent">{ <component name="PropertiesComponent">{
&quot;keyToString&quot;: { &quot;keyToString&quot;: {
&quot;Docker.docker-compose.yml.app1: Compose Deployment.executor&quot;: &quot;Run&quot;,
&quot;Docker.docker-compose.yml.app2: Compose Deployment.executor&quot;: &quot;Run&quot;,
&quot;Docker.docker-compose.yml.app3: Compose Deployment.executor&quot;: &quot;Run&quot;,
&quot;Docker.docker-compose.yml.haproxy: Compose Deployment.executor&quot;: &quot;Run&quot;,
&quot;Docker.docker-compose.yml: Compose Deployment.executor&quot;: &quot;Run&quot;,
&quot;RunOnceActivity.ShowReadmeOnStart&quot;: &quot;true&quot;, &quot;RunOnceActivity.ShowReadmeOnStart&quot;: &quot;true&quot;,
&quot;SHARE_PROJECT_CONFIGURATION_FILES&quot;: &quot;true&quot;, &quot;SHARE_PROJECT_CONFIGURATION_FILES&quot;: &quot;true&quot;,
&quot;git-widget-placeholder&quot;: &quot;master&quot;, &quot;git-widget-placeholder&quot;: &quot;master&quot;,
...@@ -46,7 +56,8 @@ ...@@ -46,7 +56,8 @@
&quot;last_opened_file_path&quot;: &quot;D:/HIAST Library/Teaching/ADS/2025/HAProxy/New folder/simple-web-app/src/haproxy&quot;, &quot;last_opened_file_path&quot;: &quot;D:/HIAST Library/Teaching/ADS/2025/HAProxy/New folder/simple-web-app/src/haproxy&quot;,
&quot;project.structure.last.edited&quot;: &quot;Artifacts&quot;, &quot;project.structure.last.edited&quot;: &quot;Artifacts&quot;,
&quot;project.structure.proportion&quot;: &quot;0.15&quot;, &quot;project.structure.proportion&quot;: &quot;0.15&quot;,
&quot;project.structure.side.proportion&quot;: &quot;0.2850575&quot; &quot;project.structure.side.proportion&quot;: &quot;0.2850575&quot;,
&quot;settings.editor.selected.configurable&quot;: &quot;Docker&quot;
} }
}</component> }</component>
<component name="RecentsManager"> <component name="RecentsManager">
...@@ -54,6 +65,83 @@ ...@@ -54,6 +65,83 @@
<recent name="D:\HIAST Library\Teaching\ADS\2025\HAProxy\New folder\simple-web-app\src\haproxy" /> <recent name="D:\HIAST Library\Teaching\ADS\2025\HAProxy\New folder\simple-web-app\src\haproxy" />
</key> </key>
</component> </component>
<component name="RunManager" selected="Docker.docker-compose.yml.app1: Compose Deployment">
<configuration default="true" type="docker-deploy" factoryName="docker-compose.yml" temporary="true">
<deployment type="docker-compose.yml">
<settings />
</deployment>
<method v="2" />
</configuration>
<configuration name="docker-compose.yml: Compose Deployment" type="docker-deploy" factoryName="docker-compose.yml" temporary="true" server-name="Docker">
<deployment type="docker-compose.yml">
<settings>
<option name="sourceFilePath" value="docker-compose.yml" />
</settings>
</deployment>
<method v="2" />
</configuration>
<configuration name="docker-compose.yml.app1: Compose Deployment" type="docker-deploy" factoryName="docker-compose.yml" temporary="true" server-name="Docker">
<deployment type="docker-compose.yml">
<settings>
<option name="services">
<list>
<option value="app1" />
</list>
</option>
<option name="sourceFilePath" value="docker-compose.yml" />
</settings>
</deployment>
<method v="2" />
</configuration>
<configuration name="docker-compose.yml.app2: Compose Deployment" type="docker-deploy" factoryName="docker-compose.yml" temporary="true" server-name="Docker">
<deployment type="docker-compose.yml">
<settings>
<option name="services">
<list>
<option value="app2" />
</list>
</option>
<option name="sourceFilePath" value="docker-compose.yml" />
</settings>
</deployment>
<method v="2" />
</configuration>
<configuration name="docker-compose.yml.app3: Compose Deployment" type="docker-deploy" factoryName="docker-compose.yml" temporary="true" server-name="Docker">
<deployment type="docker-compose.yml">
<settings>
<option name="services">
<list>
<option value="app3" />
</list>
</option>
<option name="sourceFilePath" value="docker-compose.yml" />
</settings>
</deployment>
<method v="2" />
</configuration>
<configuration name="docker-compose.yml.haproxy: Compose Deployment" type="docker-deploy" factoryName="docker-compose.yml" temporary="true" server-name="Docker">
<deployment type="docker-compose.yml">
<settings>
<option name="services">
<list>
<option value="haproxy" />
</list>
</option>
<option name="sourceFilePath" value="docker-compose.yml" />
</settings>
</deployment>
<method v="2" />
</configuration>
<recent_temporary>
<list>
<item itemvalue="Docker.docker-compose.yml.app1: Compose Deployment" />
<item itemvalue="Docker.docker-compose.yml.haproxy: Compose Deployment" />
<item itemvalue="Docker.docker-compose.yml.app3: Compose Deployment" />
<item itemvalue="Docker.docker-compose.yml.app2: Compose Deployment" />
<item itemvalue="Docker.docker-compose.yml: Compose Deployment" />
</list>
</recent_temporary>
</component>
<component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" /> <component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" />
<component name="TaskManager"> <component name="TaskManager">
<task active="true" id="Default" summary="Default task"> <task active="true" id="Default" summary="Default task">
......
FROM maven:3.6.1-jdk-11 AS MAVEN_TOOL_CHAIN_CONTAINER # 1. تغيير الإصدار من 11 إلى 17 في مرحلة البناء
RUN mkdir src FROM maven:3.8.5-openjdk-17 AS build_stage
COPY src /tmp/src WORKDIR /app
COPY ./pom.xml /tmp/
WORKDIR /tmp/ # نسخ ملف pom.xml أولاً (للاستفادة من الـ Cache)
RUN mvn package COPY pom.xml .
RUN ls -la /tmp RUN mvn dependency:go-offline
FROM openjdk:11 # نسخ الكود المصدري وبناء المشروع
COPY --from=MAVEN_TOOL_CHAIN_CONTAINER /tmp/target/webapp-1.0-SNAPSHOT-jar-with-dependencies.jar /tmp/ COPY src ./src
WORKDIR /tmp/ RUN mvn clean package -DskipTests
ENTRYPOINT ["java","-jar", "webapp-1.0-SNAPSHOT-jar-with-dependencies.jar"]
CMD ["80", "Server Name"] # 2. تغيير الإصدار من 11 إلى 17 في مرحلة التشغيل
\ No newline at end of file FROM eclipse-temurin:17-jre
WORKDIR /tmp
# نسخ ملف الـ JAR الناتج (استخدام النجمة * يضمن العثور على الملف مهما كان اسمه)
COPY --from=build_stage /app/target/*.jar /tmp/app.jar
ENTRYPOINT ["java", "-jar", "app.jar"]
\ No newline at end of file
...@@ -15,12 +15,35 @@ ...@@ -15,12 +15,35 @@
</properties> </properties>
<dependencies> <dependencies>
<!-- https://mvnrepository.com/artifact/org.jsoup/jsoup -->
<dependency> <dependency>
<groupId>org.jsoup</groupId> <groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId> <artifactId>jsoup</artifactId>
<version>1.12.1</version> <version>1.12.1</version>
</dependency> </dependency>
</dependencies> </dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.4</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>org.ds.Main</mainClass>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project> </project>
\ No newline at end of file
FROM haproxy:1.7
COPY haproxy.cfg /usr/local/etc/haproxy/haproxy.cfg FROM haproxy:2.8
ENTRYPOINT ["haproxy", "-f", "/usr/local/etc/haproxy/haproxy.cfg"]
COPY haproxy_tcp_mode.cfg /usr/local/etc/haproxy/haproxy.cfg
CMD ["haproxy", "-f", "/usr/local/etc/haproxy/haproxy.cfg"]
\ No newline at end of file
...@@ -17,7 +17,7 @@ backend application_nodes ...@@ -17,7 +17,7 @@ backend application_nodes
http-check expect string "Server is alive" http-check expect string "Server is alive"
server server01 app1:9001 check inter 1s server server01 app1:9001 check inter 1s
server server02 app2:9002 check inter 2s server server02 app2:9002 check inter 2s
server server03 app3:9003 check inter 2s server server03 app3:9003 weight 2 check inter 2s
listen stats listen stats
bind *:83 bind *:83
......
global global
maxconn 500
defaults defaults
mode http mode http
timeout connect 5000 timeout connect 5s
timeout client 50000 timeout client 50s
timeout server 50000 timeout server 50s
frontend http-in frontend http-in
bind *:80 bind *:80
acl even_cluster path_end -i /even acl even_cluster path_end -i /even
acl odd_cluster path_end -i /odd acl odd_cluster path_end -i /odd
use_backend even_servers if even_cluster use_backend even_servers if even_cluster
use_backend odd_servers if odd_cluster use_backend odd_servers if odd_cluster
default_backend all_servers
# even
backend even_servers backend even_servers
balance roundrobin
server server02 127.0.0.1:9001/time check
server server02 app2:9002 check
# odd server
backend odd_servers backend odd_servers
balance roundrobin balance roundrobin
server server01 127.0.0.1:9000/time check server server01 app1:9001 check
server server03 127.0.0.1:9002/time check server server03 app3:9003 check
backend all_servers
balance roundrobin
server server01 app1:9001 check
server server02 app2:9002 check
server server03 app3:9003 weight 2 check
#
global global
maxconn 500
defaults defaults
mode tcp mode tcp
timeout connect 5000 timeout connect 5s
timeout client 50000 timeout client 50s
timeout server 50000 timeout server 50s
frontend http-in frontend http-in
bind *:80 bind *:80
...@@ -12,6 +13,11 @@ frontend http-in ...@@ -12,6 +13,11 @@ frontend http-in
backend application_nodes backend application_nodes
balance roundrobin balance roundrobin
server server01 127.0.0.1:9000 check
server server02 127.0.0.1:9001 check server server01 app1:9001 check
server server03 127.0.0.1:9002 check server server02 app2:9002 check
server server03 app3:9003 check
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment