create github pages with mkdocs¶
overview¶
- use mkdocs-material for github repo page
 - use webStackLaravel for github user pages
 
prerequisite¶
tools to install (windows)¶
| software | download link | comments | 
|---|---|---|
| docker | https://hub.docker.com/editions/community/docker-ce-desktop-windows/ | |
| git | https://git-scm.com/download/win | (gui) https://desktop.github.com/ | 
| vscode | https://code.visualstudio.com/ | editing config/scripts/bash | 
| typora | https://typora.io/ | writing in markdown | 
| powershell | come with windows | 'docker run' with volume mounting | 
setup github¶
create a folder on pc for the repo¶
mkdir <gitfolder>
create an account on github and a repo¶
https://help.github.com/en/github/getting-started-with-github/create-a-repo
create ssh key to login with user/passwd¶
ssh-keygen
(can change default key name from id_rsa to eg. id_rsa_<account>)
- if not using id_rsa as key name, add to ~/.ssh/config to use the certain key
 
Host github.com-<account>
  Hostname github.com
  User <account>
  IdentityFile ~/.ssh/id_rsa_<account>
add ~/.ssh/id_rsa_sl.pub to github¶
init the repo and link to github¶
cd <gitfolder>
git init
git add .
git commit -m "init"
git remote add origin git@github.com-<account>:<account>/<repo>.git
git push -u origin master
git push --set-upstream origin master (optional; tochk)
create/publish static webpage¶
https://squidfunk.github.io/mkdocs-material/getting-started/
create customized docker image (optional)¶
create working folder¶
cd /<docker folder>/mcdocs
create Dockerfile¶
FROM python:3.8.1-alpine3.11
# Set build directory
WORKDIR /tmp
# Copy files necessary for build
COPY material material
COPY MANIFEST.in MANIFEST.in
COPY package.json package.json
COPY README.md README.md
COPY requirements.txt requirements.txt
COPY setup.py setup.py
COPY docker-entrypoint.sh /bin/docker-entrypoint.sh
# Perform build and cleanup artifacts
RUN \
  apk add --no-cache \
    git \
    git-fast-import \
    openssh \
  && pip install --no-cache-dir . \
  && pip install --no-cache-dir \
    'mkdocs-minify-plugin>=0.2' \
    'mkdocs-git-revision-date-localized-plugin>=0.4' \
    'mkdocs-awesome-pages-plugin>=2.2.1' \
  && rm -rf /tmp/* \
  # added by vt
  && mkdir /root/.ssh \
  && chmod +x /bin/docker-entrypoint.sh
# Set working directory
WORKDIR /docs
# Expose MkDocs development server port
EXPOSE 8000
# Start development server by default
ENTRYPOINT ["/bin/docker-entrypoint.sh"]
CMD ["serve", "--dev-addr=0.0.0.0:8000"]
create docker-entrypoint.sh¶
#!/bin/sh
set -e
cp -R /tmp/.ssh/* /root/.ssh
chmod 700 /root/.ssh
cd /root/.ssh
chmod 644 `ls | grep pub`
chmod 600 `ls | grep id | grep -v pub`
cd /docs
exec mkdocs "$@"
git pull original mkdocs-material repo to another folder, eg. //others/¶ 
 cd /<gitfolder>/others
git clone https://github.com/squidfunk/mkdocs-material.git
cp required folders to /¶ 
 cd /<gitfolder>/others/mkdocs-material
cp -r material /<docker folder>/mkdocs/
cp MANIFEST.in /<docker folder>/mkdocs/
cp package.json /<docker folder>/mkdocs/
cp README.md /<docker folder>/mkdocs/
cp requirements.txt /<docker folder>/mkdocs/
cp setup.py /<docker folder>/mkdocs/
build image¶
cd /<docker folder>/mkdocs
docker image rm mkdocs:v1 (optional, to remove old tag if exists)
docker build . -t mkdocs:v1
submit image to dockerhub (optional)¶
docker tag mkdocs:v1 <dockerhub account name>/mkdocs-material:v1
docker push <dockerhub account name>/mkdocs-material:v1
create mkdocs.yml and "docs" folder¶
change to the repo folder¶
cd <gitfolder>
edit mkdocs.yml¶
original from mkdoc-material
# Project information
site_name: <xxx>
site_url: https://<account>.github.io/<repo>/
site_author: <name>
site_description: >-
  Writing is the best way of learning
# Repository
repo_name: <account>/<repo>
repo_url: https://github.com/<account>/<learn>
edit_uri: ""
# Copyright
copyright: Copyright © 2018 - 2020 <name> 
# Configuration
theme:
  name: material
  # 404 page
  static_templates:
    - 404.html
  # Don't include MkDocs' JavaScript
  include_search_page: false
  search_index_only: true
  # Default values, taken from mkdocs_theme.yml
  language: en
  features:
    - tabs
    #- instant
  palette:
    primary: indigo
    accent: indigo
  font:
    text: Roboto
    code: Roboto Mono
  icon:
    logo: logo
  favicon: assets/favicon.png
# Plugins
plugins:
  - search
  - minify:
      minify_html: true
  - awesome-pages
# Customization
extra:
  social:
    - icon: fontawesome/brands/github
      link: https://github.com/<account>
    - icon: fontawesome/brands/gitter
      link: https://gitter.im/<account>
    - icon: fontawesome/brands/docker
      link: https://hub.docker.com/r/<account>
    - icon: fontawesome/brands/twitter
      link: https://twitter.com/<account>
    - icon: fontawesome/brands/linkedin
      link: https://linkedin.com/in/<account>
    - icon: fontawesome/brands/instagram
      link: https://instagram.com/<account>
# Extensions
markdown_extensions:
  - markdown.extensions.admonition
  - markdown.extensions.attr_list
  - markdown.extensions.codehilite:
      guess_lang: false
  - markdown.extensions.def_list
  #- markdown.extensions.footlearn
  - markdown.extensions.meta
  - markdown.extensions.toc:
      permalink: true
  - pymdownx.arithmatex
  - pymdownx.betterem:
      smart_enable: all
  - pymdownx.caret
  - pymdownx.critic
  - pymdownx.details
  - pymdownx.emoji:
      emoji_index: !!python/name:pymdownx.emoji.twemoji
      emoji_generator: !!python/name:pymdownx.emoji.to_svg
  # - pymdownx.highlight:
  #     linenums_style: pymdownx-inline
  - pymdownx.inlinehilite
  - pymdownx.keys
  - pymdownx.magiclink:
      repo_url_shorthand: true
      user: squidfunk
      repo: mkdocs-material
  - pymdownx.mark
  - pymdownx.smartsymbols
  - pymdownx.snippets:
      check_paths: true
  - pymdownx.superfences
  - pymdownx.tabbed
  - pymdownx.tasklist:
      custom_checkbox: true
  - pymdownx.tilde
# Google Analytics
google_analytics:
  - !!python/object/apply:os.getenv ["GOOGLE_ANALYTICS_KEY"]
  - auto
create docs folder (the actual files written are inside this folder)¶
mkdir docs
cd docs
echo "first doc" > readme.md
modify mkdocs.yml (optional)¶
- change colo
 - choose font: https://fonts.google.com
 
host the webpage locally¶
start up container with docker run¶
it seemed using sh script to wrap "docker run" doesn't work with volume mapping (;C being added to foldername)
https://forums.docker.com/t/weird-error-under-git-bash-msys-solved/9210
docker run -d --name mkdocs --restart always -p 8000:8000 -v <gitfolder>/docs:/docs -v ~/.ssh:/tmp/.ssh mkdocs:v1
docker run -d --name mkdocs-v2 --restart always -p 8082:8000 -v <gitfolder>/docs:/docs -v ~/.ssh:/tmp/.ssh mkdocs-material:v2
browser to the webpage¶
http://localhost:8000
publish to github manually¶
login container¶
docker exec -it mkdocs sh
build and public¶
mkdocs gh-deploy
browser to github page¶
https://<account>.github.io/<repo>
auto publish via travis.io¶
prerequisite¶
create account and link to github and enable sync the repo¶
create github token¶
configure¶
add github token as env variable to travis repo setting¶
add .travis.yml to the repo folder, eg. /d/github/stocklifelearn/learn¶
language: python # Set the build language to Python
python: 3.6 # Set the version of Python to use
branches: master # Set the branch to build from
install: # Install the required dependencies; optional: mkdocs-material-extensions
  - pip install mkdocs mkdocs-material pymdown-extensions pygments mkdocs-git-revision-date-localized-plugin mkdocs-minify-plugin mkdocs-awesome-pages-plugin
script: true # Skip script (Don't use this if one already exists)
before_deploy:
  - mkdocs build --verbose --clean --strict # Build a local version of the docs
deploy: # Deploy documentation to Github in the gh_pages branch
  provider: pages
  skip_cleanup: true
  github_token: $github_token
  local_dir: site
  on:
    branch: master
start writing some files in "docs" folder and push to github¶
git add .
git commit -m "some commit notes"
git push
debug¶
check on the process on travis.io¶
https://travis-ci.org/dashboard