Skip to content

Commit c517060

Browse files
committed
feat: enhance deployment workflow with SSH key setup and improve health check configurations
1 parent 243ad40 commit c517060

File tree

4 files changed

+40
-35
lines changed

4 files changed

+40
-35
lines changed

.github/workflows/deploy.yml

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -144,27 +144,30 @@ jobs:
144144
- name: Checkout code
145145
uses: actions/checkout@v4
146146

147+
# SINGLE SSH KEY SETUP METHOD
148+
- name: Set up SSH key
149+
run: |
150+
mkdir -p ~/.ssh
151+
echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_rsa
152+
chmod 600 ~/.ssh/id_rsa
153+
ssh-keyscan -H ${{ secrets.VM_IP_ADDRESS }} >> ~/.ssh/known_hosts
154+
147155
- name: Deploy to Oracle VM
148156
env:
149-
ORACLE_VM_IP: ${{ secrets.ORACLE_VM_IP }}
150-
SSH_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
157+
ORACLE_VM_IP: ${{ secrets.VM_IP_ADDRESS }}
151158
DOCKER_REGISTRY: ${{ secrets.OCI_REGISTRY }}
152159
OCI_USERNAME: ${{ secrets.OCI_USERNAME }}
153160
OCI_AUTH_TOKEN: ${{ secrets.OCI_AUTH_TOKEN }}
154161
run: |
155-
# Create SSH key file
156-
echo "$SSH_KEY" > ssh_key.pem
157-
chmod 600 ssh_key.pem
158-
159162
# Verify VM connection
160-
ssh -o StrictHostKeyChecking=no -i ssh_key.pem opc@${ORACLE_VM_IP} "echo VM connection verified"
163+
ssh -o StrictHostKeyChecking=no -i ~/.ssh/id_rsa opc@${ORACLE_VM_IP} "echo VM connection verified"
161164
162165
# Create directory and copy docker-compose file
163-
ssh -o StrictHostKeyChecking=no -i ssh_key.pem opc@${ORACLE_VM_IP} "mkdir -p ~/music-analytics/vm-deploy"
164-
scp -o StrictHostKeyChecking=no -i ssh_key.pem cloud-deploy/docker-compose.direct.yml opc@${ORACLE_VM_IP}:~/music-analytics/vm-deploy/docker-compose.yml
166+
ssh -o StrictHostKeyChecking=no -i ~/.ssh/id_rsa opc@${ORACLE_VM_IP} "mkdir -p ~/music-analytics/vm-deploy"
167+
scp -o StrictHostKeyChecking=no -i ~/.ssh/id_rsa cloud-deploy/docker-compose.direct.yml opc@${ORACLE_VM_IP}:~/music-analytics/vm-deploy/docker-compose.yml
165168
166169
# Execute deployment commands directly
167-
ssh -o StrictHostKeyChecking=no -i ssh_key.pem opc@${ORACLE_VM_IP} "cd ~/music-analytics/vm-deploy && \
170+
ssh -o StrictHostKeyChecking=no -i ~/.ssh/id_rsa opc@${ORACLE_VM_IP} "cd ~/music-analytics/vm-deploy && \
168171
docker login ${DOCKER_REGISTRY} -u ${OCI_USERNAME} -p ${OCI_AUTH_TOKEN} && \
169172
export ORACLE_EXTERNAL_HOSTNAME=music-analytics.abenezeranglo.uk && \
170173
export EUREKA_CLIENT_SERVICEURL_DEFAULTZONE=http://eureka-server:8761/eureka/ && \
@@ -174,18 +177,16 @@ jobs:
174177
docker-compose up -d && \
175178
docker-compose ps && \
176179
docker logout ${DOCKER_REGISTRY}"
177-
178-
# Clean up
179-
rm -f ssh_key.pem
180180
181181
- name: Log out from Oracle Container Registry
182182
if: always()
183183
run: docker logout ${{ secrets.OCI_REGISTRY }}
184184

185-
- name: Collect container logs on failure
185+
# CONSOLIDATED DEBUG COMMAND
186+
- name: Debug on failure
186187
if: failure()
187188
run: |
188-
ssh -i ${{ secrets.SSH_PRIVATE_KEY }} ${{ secrets.SSH_USERNAME }}@${{ secrets.VM_IP_ADDRESS }} '
189+
ssh -o StrictHostKeyChecking=no -i ~/.ssh/id_rsa ${{ secrets.SSH_USERNAME }}@${{ secrets.VM_IP_ADDRESS }} '
189190
echo "==== EUREKA SERVER LOGS ====" &&
190191
docker logs vm-deploy-eureka-server-1
191192
'

cloud-deploy/docker-compose.direct.yml

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,21 @@
1+
version: '3.8'
2+
13
services:
24
# Place Eureka server first with healthcheck
35
eureka-server:
4-
build:
5-
context: ./eureka-server
6+
image: ${DOCKER_REGISTRY}/music-analytics/eureka-server:latest
67
ports:
78
- "8761:8761"
89
environment:
9-
- SPRING_PROFILES_ACTIVE=production
10+
- SPRING_PROFILES_ACTIVE=docker
1011
- SERVER_PORT=8761
11-
- EUREKA_CLIENT_SERVICEURL_DEFAULTZONE=http://localhost:8761/eureka/
12-
- ORACLE_EXTERNAL_HOSTNAME=${ORACLE_EXTERNAL_HOSTNAME}
13-
- RENDER_EXTERNAL_HOSTNAME=disabled
14-
- SPRING_CLOUD_SERVICE-REGISTRY_AUTO-REGISTRATION_ENABLED=false
1512
restart: unless-stopped
1613
healthcheck:
17-
test: ["CMD-SHELL", "curl -f http://localhost:8761/actuator/health || exit 1"]
14+
test: ["CMD", "wget", "-q", "--spider", "http://localhost:8761/actuator/health"]
1815
interval: 30s
1916
timeout: 10s
2017
retries: 5
21-
start_period: 60s
18+
start_period: 120s
2219

2320
# API Gateway depends on healthy Eureka server
2421
api-gateway:

eureka-server/Dockerfile

Lines changed: 16 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,10 @@
11
# Build stage
22
FROM amazoncorretto:17-alpine as builder
3-
# Install binutils for jlink
4-
RUN apk add --no-cache binutils
53
WORKDIR /app
6-
COPY target/eureka-server-1.0-SNAPSHOT.jar app.jar
7-
RUN jlink \
8-
--add-modules java.base,java.logging,java.xml,java.sql,java.naming,java.desktop,java.security.jgss,java.instrument,jdk.unsupported,java.management,java.management.rmi \
4+
COPY eureka-server.jar app.jar
5+
RUN apk add --no-cache binutils \
6+
&& jlink \
7+
--add-modules java.base,java.logging,java.xml,java.sql,java.naming,java.desktop,java.security.jgss,java.instrument,jdk.unsupported \
98
--strip-debug \
109
--no-man-pages \
1110
--no-header-files \
@@ -19,16 +18,22 @@ ENV PATH="${JAVA_HOME}/bin:${PATH}"
1918
COPY --from=builder /javaruntime $JAVA_HOME
2019
COPY --from=builder /app/app.jar /app.jar
2120

22-
# Install wget for healthcheck - moved before user creation
21+
# Install wget and curl for health check
2322
RUN apk add --no-cache wget curl
2423

2524
# Create non-root user
2625
RUN addgroup -S spring && adduser -S spring -G spring
27-
USER spring:spring
26+
RUN chown -R spring:spring /app.jar
2827

29-
# Configure health check - using a more reliable approach
30-
HEALTHCHECK --interval=30s --timeout=10s --start-period=60s --retries=5 \
31-
CMD wget -q --spider http://localhost:8761/actuator/health || exit 0
28+
# Set proper permissions
29+
USER spring:spring
3230

31+
# Expose port
3332
EXPOSE 8761
34-
ENTRYPOINT ["java", "-XX:+UseContainerSupport", "-XX:MaxRAMPercentage=75.0", "-jar", "/app.jar"]
33+
34+
# Configure health check - with longer start time and using 0.0.0.0 instead of localhost
35+
HEALTHCHECK --interval=30s --timeout=10s --start-period=120s --retries=5 \
36+
CMD wget -q --spider http://127.0.0.1:8761/actuator/health || exit 1
37+
38+
# Use more memory and enable debug options
39+
ENTRYPOINT ["java", "-Xms256m", "-Xmx512m", "-XX:+UseContainerSupport", "-XX:MaxRAMPercentage=75.0", "-Dspring.profiles.active=docker", "-jar", "/app.jar"]

eureka-server/src/main/resources/application.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ eureka:
1111
client:
1212
registerWithEureka: false
1313
fetchRegistry: false
14+
serviceUrl:
15+
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
1416
server:
1517
wait-time-in-ms-when-sync-empty: 0
1618

0 commit comments

Comments
 (0)