wip
This commit is contained in:
parent
b7bebc8524
commit
ac313436b6
4 changed files with 245 additions and 2 deletions
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
gitea
|
197
README.md
197
README.md
|
@ -1,12 +1,205 @@
|
||||||
# Static Publishing Platform
|
# Static Publishing Platform
|
||||||
|
|
||||||
based on Gitea, Teabag, Static CMS, Drone, and Garage
|
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
|
## 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
|
## Install Teabag
|
||||||
|
|
||||||
## Add Static CMS to your blog
|
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
|
## Install Drone
|
||||||
|
|
||||||
|
|
38
docker-compose.yml
Normal file
38
docker-compose.yml
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
version: "3"
|
||||||
|
|
||||||
|
networks:
|
||||||
|
gitea:
|
||||||
|
external: false
|
||||||
|
|
||||||
|
services:
|
||||||
|
server:
|
||||||
|
# Patched image required for Gitea version < 1.19
|
||||||
|
image: superboum/gitea:1.17.4-cors
|
||||||
|
container_name: gitea
|
||||||
|
environment:
|
||||||
|
- USER_UID=1000
|
||||||
|
- USER_GID=1000
|
||||||
|
- GITEA__cors__ENABLED =true
|
||||||
|
- GITEA__cors__ALLOW_DOMAIN =*
|
||||||
|
- GITEA__cors__ALLOW_CREDENTIALS =true
|
||||||
|
- GITEA__cors__SCHEME =*
|
||||||
|
# Ignored in Gitea version < 1.19, see image comment above
|
||||||
|
- GITEA__cors__HEADERS =Content-Type,User-Agent,Authorization
|
||||||
|
restart: always
|
||||||
|
networks:
|
||||||
|
- gitea
|
||||||
|
volumes:
|
||||||
|
- ./gitea:/data
|
||||||
|
- /etc/timezone:/etc/timezone:ro
|
||||||
|
- /etc/localtime:/etc/localtime:ro
|
||||||
|
ports:
|
||||||
|
- "3000:3000"
|
||||||
|
- "2222:22"
|
||||||
|
teabag:
|
||||||
|
image: ghcr.io/denyskon/teabag:latest
|
||||||
|
container_name: teabag
|
||||||
|
restart: always
|
||||||
|
volumes:
|
||||||
|
- ./teabag.env:/etc/teabag/teabag.env
|
||||||
|
ports:
|
||||||
|
- "3001:3001"
|
11
teabag.env
Normal file
11
teabag.env
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
HOST=0.0.0.0
|
||||||
|
PORT=3001
|
||||||
|
SESSION_SECRET=uLCe67uvUpaI/U3c0yBzzFxJliY80BQHU/l9FZrkN38=
|
||||||
|
|
||||||
|
GITEA_KEY=968c9d5a-8b4e-4091-b48d-cc5d0888680d
|
||||||
|
GITEA_SECRET=gto_65p4gglq5au4mtvtpq7xcnlyonfyvphlwixhhkni6aql5yd3ovcq
|
||||||
|
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
|
Loading…
Reference in a new issue