diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 876083889e4c04999741c27f96d13cd897aab10a..33dd5b7ce8e2d68da4154720560718138c797c18 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -91,17 +91,20 @@ deploy:
   image: docker.io/dokku/ci-docker-image:0.9.3
   rules: !reference [.upstream-deploy-production-rules, rules]
   variables:
+    APP_NAME: spring-petclinic-rest
     GIT_DEPTH: "0"
-    GIT_REMOTE_URL: "ssh://dokku@dokku-ppl.cs.ui.ac.id:22/spring-petclinic-rest"
+    SSH_REMOTE: "ssh://dokku@dokku-ppl.cs.ui.ac.id:22"
+    GIT_REMOTE_URL: "$SSH_REMOTE/$APP_NAME"
     SSH_PRIVATE_KEY: $PRODUCTION_SSH_PRIVATE_KEY
     BRANCH: $CI_DEFAULT_BRANCH
   script:
     - dokku-deploy
+    - sh .gitlab/dokku-ci-post-deploy.sh
   after_script:
     - dokku-unlock
   environment:
     name: production
-    url: https://spring-petclinic-rest.dokku-ppl.cs.ui.ac.id
+    url: "https://$APP_NAME.dokku-ppl.cs.ui.ac.id"
   needs:
     - test
   dependencies: []
@@ -135,5 +138,3 @@ sonarqube-check:
     key: "${CI_JOB_NAME}"
     paths:
       - .sonar/cache
-
-# TODO: Add manual CI job to re-deploy or re-create the deployed app on Dokku PPL
diff --git a/.gitlab/dokku-ci-post-deploy.sh b/.gitlab/dokku-ci-post-deploy.sh
new file mode 100755
index 0000000000000000000000000000000000000000..2b776b01996b06a08f573b586d46428decab8973
--- /dev/null
+++ b/.gitlab/dokku-ci-post-deploy.sh
@@ -0,0 +1,11 @@
+#!/bin/sh -l
+export CERT_PATH="/home/dokku/.local/share/certs/cert.pem"
+export PRIVKEY_PATH="/home/dokku/.local/share/certs/privkey.pem"
+
+echo "⚙ Assigning certs at $CERT_PATH and $PRIVKEY_PATH to $APP_NAME ..."
+ssh "$SSH_REMOTE" -- certs:add "$APP_NAME" "$CERT_PATH" "$PRIVKEY_PATH" || echo "Failed to assign certs"
+
+echo "⚙ Mapping $APP_NAME container port 9966 to HTTPS ..."
+ssh "$SSH_REMOTE" -- ports:add "$APP_NAME" https:443:9966 || echo "Failed to map container port to HTTPS"
+
+echo "✅ Post-deploy configuration completed"