blog/content/posts/docker-ftw.md

87 lines
1.9 KiB
Markdown

---
title: "Using Gitlab CI For VPS and Neocites Deployment"
date: 2021-02-08
draft: false
category: article
description: Removing pain points from updating the Neocities page
---
# Using Gitlab CI For VPS and Neocites Deployment
_I'll make this one short_: Deploying to a VPS is pretty easy when its already configured with Nginx to serve static content, but Neocities is a slight worse pain. Several scripts later I've figured out how to 100% automate pushing to both.
## Docker
A few notes about this docker file:
* Could be made way smaller if using Alpine
* Setting up Pandoc on alpine is way more effort on Alpine because you have to compile it yourself as its not in the official Alpine repos
* gensite is a script I wrote for building markdown based sites with Pandoc with 0 deps
```
FROM debian:sid-slim
RUN apt-get update && apt-get install -y git pandoc
# For more easily logging into ionos
RUN apt-get install -y sshpass
RUN apt-get install -y curl
RUN git clone https://gitlab.com/shockrah/site-generator /tmp/gensite
RUN cd /tmp/gensite && ./install.sh g
RUN rm -rf /tmp/gensite
```
## Gitlab's CI Script
It should be noted there are more environment variables set in Gitlab's WebUI to make this script work but basically everything is there.
```
image: shockrah/website:1.3
stages:
- build
- deploy
variables:
SHOPTS: "-o StrictHostKeyChecking=no"
before_script:
- eval $(ssh-agent -s)
- echo "${SSH_PRIVATE_KEY}" | ssh-add - > /dev/null
- mkdir -p ~/.ssh/
- chmod 700 ~/.ssh/
build-site:
stage: build
script:
bash ./build.sh
artifacts:
expire_in: 10 mins
paths: ["./.mirror"]
deploy-vps:
stage: deploy
script:
- ssh $SHOPTS root@shockrah.xyz "rm -rf /var/www/website"
- scp $SHOPTS -r .mirror root@shockrah.xyz:/var/www/website/
deploy-neocities:
stage: deploy
script:
# First the html
- bash upload.sh -h
# then we do the media files
- bash upload.sh -M
```