214 lines
4.8 KiB
Markdown
214 lines
4.8 KiB
Markdown
# Static Publishing Platform
|
|
|
|
created at: 2023-02-09.
|
|
if you are reading this file years later,
|
|
it is very probably obsolete.
|
|
|
|
based on:
|
|
- Gitea: https://github.com/superboum/gitea
|
|
- Teabag: https://github.com/denyskon/teabag
|
|
- Static CMS: https://www.staticcms.org/
|
|
- Drone: https://github.com/harness/drone
|
|
- Garage: git.deuxfleurs.fr/Deuxfleurs/garage/
|
|
|
|
## Install Gitea
|
|
|
|
The recommended docker-compose is a good start for this toy example:
|
|
https://docs.gitea.io/en-us/install-with-docker/
|
|
|
|
You need to configure CORS:
|
|
|
|
```ini
|
|
[cors]
|
|
ENABLED=true
|
|
ALLOW_DOMAIN=*
|
|
ALLOW_CREDENTIALS=true
|
|
SCHEME=*
|
|
HEADERS=Content-Type,User-Agent,Authorization
|
|
```
|
|
|
|
The last entry is required but ignored in Gitea version < 1.19,
|
|
you must instead use a patched image to allow the custom header
|
|
`Content-Type`. For example, I am using this one: `superboum/gitea:1.17.4-cors`.
|
|
|
|
Now you are ready to start your gitea instance:
|
|
|
|
```
|
|
docker-compose up -d
|
|
```
|
|
|
|
Now go to `http://localhost:3000` and configure your Gitea instance.
|
|
Create an administrator account by unfolding the last section.
|
|
|
|
## Install Teabag
|
|
|
|
The first step is to create some tokens for Teabag in Gitea.
|
|
Go to this page: http://localhost:3000/user/settings/applications
|
|
And create an Oauth2 application with the following parameters:
|
|
- name: `Teabag`
|
|
- callback: `http://localhost:3001/callback`
|
|
|
|
Now, use the example env file from the official repo as a template.
|
|
Mine look like that:
|
|
|
|
```ini
|
|
HOST=0.0.0.0
|
|
PORT=3001
|
|
SESSION_SECRET=JdNF...
|
|
|
|
GITEA_KEY=968c9...
|
|
GITEA_SECRET=gto_65p
|
|
GITEA_BASE_URL=http://localhost:3000
|
|
GITEA_AUTH_URI=login/oauth/authorize
|
|
GITEA_TOKEN_URI=login/oauth/access_token
|
|
GITEA_USER_URI=api/v1/user
|
|
CALLBACK_URI=http://localhost:3001/callback
|
|
```
|
|
|
|
This file is fetched from `./env/teabag.env` or `/etc/teabag/teabag.env`,
|
|
so pick one of this path.
|
|
|
|
Check that teabag is running:
|
|
|
|
```
|
|
$ curl -I http://localhost:3001
|
|
HTTP/1.1 200 OK
|
|
Date: Thu, 09 Feb 2023 13:32:15 GMT
|
|
Content-Length: 73
|
|
Content-Type: text/html; charset=utf-8
|
|
```
|
|
|
|
## Create a blog with Jekyll
|
|
|
|
I don't really like CDNs so we will locally download the javasript file once and for all.
|
|
For this example, we will create a basic jekyll blog.
|
|
|
|
```
|
|
nix-shell -p bundler
|
|
bundler install jekyll
|
|
bundle exec jekyll new my-blog
|
|
cd my-blog
|
|
bundle install
|
|
bundle exec jekyll serve
|
|
```
|
|
|
|
Now you website should be available at: `http://localhost:4000`.
|
|
|
|
You must now create a repository for your website on our target gitea instance.
|
|
Mine is `quentin/my-blog`.
|
|
|
|
Use the gitea UI and then:
|
|
|
|
```
|
|
git init
|
|
git add .
|
|
git commit
|
|
|
|
git remote add origin http://localhost:3000/quentin/my-blog.git
|
|
git push -u origin main
|
|
```
|
|
|
|
|
|
## Add "Static CMS" to your blog
|
|
|
|
In your blog folder (`my-blog`), create a file at this path `admin/index.html` with this content:
|
|
|
|
```html
|
|
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<meta charset="utf-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
<title>Content Manager</title>
|
|
<!-- Include the identity widget -->
|
|
</head>
|
|
<body>
|
|
<!-- Include the script that builds the page and powers Netlify CMS -->
|
|
<script src="static-cms-app.js"></script>
|
|
<script>CMS.init()</script>
|
|
</body>
|
|
</html>
|
|
```
|
|
|
|
And now, we must get the file `static-cms-app.js`.
|
|
We will pull it from their CDN:
|
|
|
|
```
|
|
wget https://unpkg.com/@staticcms/app@^1.0.0/dist/static-cms-app.js
|
|
```
|
|
|
|
OR
|
|
|
|
you can also build it:
|
|
|
|
```
|
|
git clone git@github.com:StaticJsCMS/static-cms.git
|
|
yarn
|
|
yarn build
|
|
cp packages/app/dist/static-cms-app.js .
|
|
```
|
|
|
|
and finally, we need a configuration file:
|
|
|
|
```yml
|
|
backend:
|
|
name: gitea
|
|
repo: quentin/my-blog
|
|
base_url: http://localhost:3001
|
|
api_root: http://localhost:3000/api/v1
|
|
branch: main
|
|
|
|
media_folder: 'assets/'
|
|
site_url: http://my-blog.web.localhost
|
|
display_url: http://my-blog.web.localhost
|
|
locale: 'en'
|
|
collections:
|
|
- name: 'article'
|
|
label: 'Article'
|
|
folder: '_posts/'
|
|
editor:
|
|
preview: true
|
|
create: true
|
|
slug: '{{year}}-{{month}}-{{day}}-{{slug}}'
|
|
fields:
|
|
- { label: 'Layout', name: 'layout', widget: 'hidden', default: 'post' }
|
|
- { label: 'Title', name: 'title', widget: 'string' }
|
|
- { label: 'Publish Date', name: 'date', widget: 'datetime' }
|
|
- { label: 'Body', name: 'body', widget: 'markdown' }
|
|
```
|
|
|
|
So, your blog folder should look like that (note the admin folder and its 3 files):
|
|
|
|
```
|
|
$ tree
|
|
.
|
|
├── 404.html
|
|
├── about.markdown
|
|
├── admin
|
|
│ ├── config.yml
|
|
│ ├── index.html
|
|
│ └── static-cms-app.js
|
|
...
|
|
```
|
|
|
|
And now you are ready to test your CMS admin interface!
|
|
|
|
```
|
|
bundle exec jekyll serve
|
|
```
|
|
|
|
And then go to: http://localhost:4000/admin/
|
|
|
|
Click on "Login with Gitea".
|
|
|
|
## Install Drone
|
|
|
|
## Configure Drone on your repo
|
|
|
|
## Install Garage
|
|
|
|
## Configure a website on Garage
|
|
|
|
## Configure Drone to deploy your website on Garage
|
|
|
|
## Profit
|