Как я веду свой блог

Привет, %username%! Я уже довольно давно веду свой блог в сети интернет. А относительно недавно я пришел к идеальному (для себя) процессу работы со своим блогом и написанию статей.

Исторический экскурс

Я довольно долго жил на Wordpress в качестве CMS, а хостингом у меня был (и остается) хостинг Fozzy и в целом меня все устраивало до определенного момента.

Как я веду блог сейчас

Для начала я в 2019 году переехал на статический генератор сайтов Hugo, о чем я написал. А относительно недавно я описал магию, которой я смог окружить свой блог для упрощения собственной жизни.

Blog workflow
Blog workflow
Blog workflow
#!/usr/bin/env bash

set -e

BLOG_PATH="/Users/jtprog/workplace/blog"
POST_NAME=$1

cd "${BLOG_PATH}"

hugo new "${POST_NAME}/index.md"

open -a "iA Writer" ${BLOG_PATH}/content/${POST_NAME}/index.md

exit 0
❯ tree -L 1
.
├── Dockerfile
├── LICENSE.md
├── README.md
├── archetypes
├── config.yml
├── content
├── data
├── draft
├── layouts
├── public
├── resources
├── rundev.sh
├── static
└── themes

9 directories, 5 files
---
title: "{{ replace .Name "-" " " | title }}"
date: {{ .Date }}
# weight: 1
# aliases: ["/first"]
categories: 'Work'
tags: ["first"]
type: 'post'
author: "JTProg"
description: ""
showToc: false
TocOpen: false
draft: true
hidemeta: false
disableShare: false
# cover:
# image: "<image path/url>"
# alt: "<alt text>"
# caption: "<text>"
# relative: false
comments: false
---

Привет, `%username%`!
hugo server --config ./config.yml -w --bind 127.0.0.1 -b 'http://127.0.0.1:1313'
❯ ll content | head -25
total 208
drwxr-xr-x 111 jtprog staff 3.5K Dec 29 22:58 ./
drwxr-xr-x 22 jtprog staff 704B Dec 30 00:00 ../
-rw-r--r-- 1 jtprog staff 106B Jan 14 2020 .htaccess
-rw-r--r-- 1 jtprog staff 2.8K Sep 18 2019 about-me.md
drwxr-xr-x 3 jtprog staff 96B Nov 4 15:20 add-disk-lvm/
drwxr-xr-x 3 jtprog staff 96B Nov 4 15:00 amarok-on-mysql/
drwxr-xr-x 3 jtprog staff 96B Nov 4 14:47 android-and-ubuntu/
drwxr-xr-x 5 jtprog staff 160B Nov 4 17:47 android-to-windows-7/
drwxr-xr-x 3 jtprog staff 96B Dec 29 00:34 ansible-basic/
drwxr-xr-x 3 jtprog staff 96B Nov 4 14:54 asus-zenfone-2/
drwxr-xr-x 3 jtprog staff 96B Nov 4 15:27 bad-isp-twbot/
drwxr-xr-x 3 jtprog staff 96B Nov 4 14:44 bad-story/
drwxr-xr-x 3 jtprog staff 96B Nov 4 01:07 be-or-not-to-be/
drwxr-xr-x 3 jtprog staff 96B Nov 4 15:23 btrfs-dev/
drwxr-xr-x 3 jtprog staff 96B Nov 4 15:22 btrfs-man/
drwxr-xr-x 3 jtprog staff 96B Nov 4 15:22 centos-after-convert/
drwxr-xr-x 3 jtprog staff 96B Nov 4 15:25 centos-nfs/
drwxr-xr-x 3 jtprog staff 96B Nov 4 14:42 change-linux/
-rw-rw-rw-@ 1 jtprog staff 4.5K Nov 5 21:11 chat-rules.md
drwxr-xr-x 3 jtprog staff 96B Nov 4 15:31 cli-gen-pass/
drwxr-xr-x 3 jtprog staff 96B Nov 4 14:49 delay-ubuntu-iredmail/
drwxr-xr-x 3 jtprog staff 96B Nov 4 15:13 disable-safari-pdf-view/
drwxr-xr-x 3 jtprog staff 96B Nov 4 15:35 docker-base/
---
stages:
- deploy
- notify

variables:
CI_DEBUG_TRACE: "false"
GIT_SUBMODULE_STRATEGY: recursive

auto deploy:
stage: deploy
script:
- echo "${SSH_PRIVATE_KEY}"
- echo "${SSH_USER}"
- echo "${SSH_HOST}"
- echo "${REMOTE_PATH}"
- mkdir -p ~/.ssh
- echo "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config
- chmod 700 ~/.ssh
- ssh-keyscan -p 22 ${SSH_HOST} > ~/.ssh/known_hosts
- echo "Генерирование страниц началось"
- hugo
- echo "${SSH_PRIVATE_KEY}" | tr -d ' ' | base64 --decode > ~/.ssh/id_rsa
- chmod 600 ~/.ssh/id_rsa
- cp ./content/.htaccess ./public/.htaccess
- cp ./content/robots.txt ./public/robots.txt
- echo "Запуск rsync"
- rsync -avz -e "ssh -i ~/.ssh/id_rsa" --progress --delete public/ ${SSH_USER}@${SSH_HOST}:${REMOTE_PATH}
- echo "Завершён деплой"
- sh .cicd/notify-tg.sh ✅
only:
- master
tags:
- raspberry
- ansible
- raspberrypi
- shell
- ops

notify_error:
stage: notify
script:
- sh .cicd/notify-tg.sh ❌
when: on_failure
only:
- master
tags:
- raspberry
- ansible
- raspberrypi
- shell
- ops
#!/bin/bash

set -e

TIME="10"
URL="https://api.telegram.org/bot$TELEGRAM_BOT_TOKEN/sendMessage"
TEXT="Deploy status: $1%0A%0AProject:+$CI_PROJECT_NAME%0AURL:+$CI_PROJECT_URL/pipelines/$CI_PIPELINE_ID/%0ABranch:+$CI_COMMIT_REF_SLUG"

curl -s --max-time $TIME -d "chat_id=$TELEGRAM_USER_ID&disable_web_page_preview=1&text=$TEXT" $URL

echo "The notification is sent"

exit 0
SysOps Alerter
SysOps Alerter
SysOps Alerter

Итого

Теперь процесс написания статьи мне доставляет именно удовольствие, а не головную боль как с Wordpress. Мелкие улучшения я описываю в своем канале — SysOps, а если у тебя, %username%, есть замечания/вопросы/предложения по моей организации работы с блогом, то приходи в чат ЧАТ: SysOps. На этом всё! Profit!

#sre #devops #linux #gitops #jtprog #jtprogru

#sre #devops #linux #gitops #jtprog #jtprogru