Compare commits
3
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a68f854aa2 | ||
|
|
18a911cd4e | ||
|
|
9c8728bd5b |
@@ -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"
|
||||||
@@ -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`
|
||||||
|
|
||||||
|
|||||||
@@ -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:
|
||||||
|
|||||||
@@ -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/* {
|
||||||
|
|||||||
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user