Author SHA1 Message Date
ankn a68f854aa2 ci(andreknie.de): add Gitea Actions deploy
Deploy andreknie.de / deploy (push) Canceled after 0s
2026-07-27 16:20:43 +02:00
ankn 18a911cd4e ci(andreknie.de): deploy from default branch 2026-07-27 16:04:29 +02:00
ankn 9c8728bd5b fix(andreknie.de): configure Umami tracking 2026-07-27 16:02:08 +02:00
6 changed files with 95 additions and 6 deletions
+72
View File
@@ -0,0 +1,72 @@
name: Deploy andreknie.de
on:
push:
branches:
- feat/federation-setup
paths:
- ".gitea/workflows/deploy-andreknie.yml"
- "privat/CV/andreknie.de/**"
jobs:
deploy:
runs-on: ubuntu-latest
container:
image: node:20-bookworm
env:
DEPLOY_HOST: "217.160.174.2"
DEPLOY_USER: "root"
DEPLOY_PATH: "/opt/andreknie"
steps:
- name: Check out repository
uses: actions/checkout@v4
- name: Install deploy tools
run: |
apt-get update -qq
apt-get install -y openssh-client rsync
- name: Build frontend
run: |
cd privat/CV/andreknie.de
npm ci
npm run build
- name: Configure SSH
env:
VPS_SSH_KEY: ${{ secrets.VPS_SSH_KEY }}
run: |
install -d -m 700 ~/.ssh
printf '%s\n' "$VPS_SSH_KEY" > ~/.ssh/deploy_key
chmod 600 ~/.ssh/deploy_key
ssh-keyscan -H "$DEPLOY_HOST" > ~/.ssh/known_hosts
chmod 600 ~/.ssh/known_hosts
- name: Write production environment
working-directory: privat/CV/andreknie.de
env:
SMTP_HOST: ${{ secrets.SMTP_HOST }}
SMTP_USER: ${{ secrets.SMTP_USER }}
SMTP_PASS: ${{ secrets.SMTP_PASS }}
run: |
cat > .env <<EOF
PORT=3003
NODE_ENV=production
BASE_URL=https://andreknie.de
SMTP_HOST=$SMTP_HOST
SMTP_PORT=587
SMTP_USER=$SMTP_USER
SMTP_PASS=$SMTP_PASS
STAKEHOLDER_EMAIL=kontakt@d-hive.de
EOF
- name: Deploy to VPS
working-directory: privat/CV/andreknie.de
run: |
SSH_OPTS="-i ~/.ssh/deploy_key -o BatchMode=yes -o IdentitiesOnly=yes -o StrictHostKeyChecking=yes"
ssh $SSH_OPTS "${DEPLOY_USER}@${DEPLOY_HOST}" "install -d -m 755 ${DEPLOY_PATH}/site ${DEPLOY_PATH}/server ${DEPLOY_PATH}/server/data"
rsync -az --delete -e "ssh $SSH_OPTS" dist/ "${DEPLOY_USER}@${DEPLOY_HOST}:${DEPLOY_PATH}/site/"
rsync -az --delete -e "ssh $SSH_OPTS" server/ "${DEPLOY_USER}@${DEPLOY_HOST}:${DEPLOY_PATH}/server/"
rsync -az -e "ssh $SSH_OPTS" package.json package-lock.json Dockerfile docker-compose.yml Caddyfile .env "${DEPLOY_USER}@${DEPLOY_HOST}:${DEPLOY_PATH}/"
ssh $SSH_OPTS "${DEPLOY_USER}@${DEPLOY_HOST}" "cd ${DEPLOY_PATH} && docker compose up -d --build"
ssh $SSH_OPTS "${DEPLOY_USER}@${DEPLOY_HOST}" "if command -v caddy >/dev/null 2>&1; then caddy validate --config /etc/caddy/Caddyfile && systemctl reload caddy; fi"
+2 -2
View File
@@ -5,12 +5,12 @@ Personal knowledge graph and CV/profile generation system (TypeScript/Node)
## Metadata ## Metadata
- **Deployment Target:** local-cli - **Deployment Target:** local-cli
- **Upstream URL:** https://github.com/DoctoDre/CV - **Upstream URL:** https://git.d-hive.de/ankn/Orchestrator.git
- **Status:** active - **Status:** active
## Interconnections ## Interconnections
- (to be documented) - (to be documented)
## Notes ## Notes
- Part of privat context in the Orchestrator monorepo - Part of privat context in the Orchestrator monorepo at `privat/CV`
+2 -2
View File
@@ -28,7 +28,7 @@ build-frontend:
- privat/CV/andreknie.de/dist/ - privat/CV/andreknie.de/dist/
expire_in: 1 day expire_in: 1 day
rules: rules:
- if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "main"' - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
changes: changes:
- "privat/CV/andreknie.de/**/*" - "privat/CV/andreknie.de/**/*"
@@ -39,7 +39,7 @@ deploy-andreknie:
dependencies: dependencies:
- build-frontend - build-frontend
rules: rules:
- if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == "main"' - if: '$CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
changes: changes:
- "privat/CV/andreknie.de/**/*" - "privat/CV/andreknie.de/**/*"
script: script:
+5
View File
@@ -1,3 +1,7 @@
www.andreknie.de {
redir https://andreknie.de{uri} permanent
}
andreknie.de { andreknie.de {
root * /opt/andreknie/site root * /opt/andreknie/site
encode zstd gzip encode zstd gzip
@@ -8,6 +12,7 @@ andreknie.de {
X-Frame-Options "DENY" X-Frame-Options "DENY"
Referrer-Policy "strict-origin-when-cross-origin" Referrer-Policy "strict-origin-when-cross-origin"
Permissions-Policy "camera=(), geolocation=(), microphone=()" Permissions-Policy "camera=(), geolocation=(), microphone=()"
Content-Security-Policy "default-src 'self'; script-src 'self' https://stats.andreknie.de; connect-src 'self' https://stats.andreknie.de; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com data:; img-src 'self' data: https:; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'none'; upgrade-insecure-requests"
} }
handle /api/* { handle /api/* {
+9
View File
@@ -6,6 +6,15 @@
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Dr. André Knie — KI, Transformation & Leadership</title> <title>Dr. André Knie — KI, Transformation & Leadership</title>
<meta name="description" content="Nüchterne KI-Expertise für Mittelstand, Verwaltung und Hochschulen. Souverän, praktisch, evidenzbasiert." /> <meta name="description" content="Nüchterne KI-Expertise für Mittelstand, Verwaltung und Hochschulen. Souverän, praktisch, evidenzbasiert." />
<script
defer
src="https://stats.andreknie.de/script.js"
data-website-id="8a8bc632-eb3d-433c-8724-10f8ebc771bc"
data-domains="andreknie.de,www.andreknie.de"
data-exclude-search="true"
data-exclude-hash="true"
data-do-not-track="true"
></script>
</head> </head>
<body> <body>
<div id="root"></div> <div id="root"></div>
@@ -38,8 +38,11 @@ export default function Datenschutz() {
<p><strong style={{ color: 'var(--text-primary)' }}>9. Ihre Rechte</strong></p> <p><strong style={{ color: 'var(--text-primary)' }}>9. Ihre Rechte</strong></p>
<p>Sie haben das Recht auf Auskunft, Berichtigung, Löschung, Einschränkung der Verarbeitung und Datenübertragbarkeit. Wenden Sie sich an: <a href="mailto:datenschutz@d-hive.de">datenschutz@d-hive.de</a></p> <p>Sie haben das Recht auf Auskunft, Berichtigung, Löschung, Einschränkung der Verarbeitung und Datenübertragbarkeit. Wenden Sie sich an: <a href="mailto:datenschutz@d-hive.de">datenschutz@d-hive.de</a></p>
<p><strong style={{ color: 'var(--text-primary)' }}>10. Cookies</strong></p> <p><strong style={{ color: 'var(--text-primary)' }}>10. Reichweitenmessung mit Umami</strong></p>
<p>Diese Webseite verwendet keine Tracking-Cookies und keine Analyse-Tools von Drittanbietern. Es werden ausschließlich technisch notwendige Funktionen genutzt.</p> <p>Diese Webseite nutzt die selbst gehostete Webanalyse-Software Umami unter stats.andreknie.de. Umami wird ohne Tracking-Cookies eingesetzt. Die Einbindung ist auf andreknie.de und www.andreknie.de beschränkt, Suchparameter und URL-Fragmente werden nicht erfasst und die Do-Not-Track-Einstellung Ihres Browsers wird respektiert. Die Auswertung dient ausschließlich dazu, die Nutzung der Webseite besser zu verstehen und Inhalte technisch sowie redaktionell zu verbessern.</p>
<p><strong style={{ color: 'var(--text-primary)' }}>11. Cookies</strong></p>
<p>Diese Webseite verwendet keine Tracking-Cookies. Es werden ausschließlich technisch notwendige Funktionen genutzt.</p>
</div> </div>
</div> </div>
</main> </main>