gitea-pages/README.md
djmil b0629205c1 Update README
This commit closes #2

- Add list of similar projects
- Build locally
- Docker builder container
2024-08-22 23:00:06 +02:00

207 lines
7.4 KiB
Markdown

# gitea-pages
Fork of the [caddy-gitea](https://github.com/42wim/caddy-gitea) project: [Gitea](https://gitea.io) plugin for [Caddy v2](https://github.com/caddyserver/caddy). List of [alternatives](https://docs.gitea.com/awesome#web-hosting).
The project aims to have Github Pages in Gitea. For doing so it relies on a wildcard CNAME DNS entry to the gitea host.
For now markdown files (with `.md` extension) will also be automatically generated to HTML.
<!-- TOC -->
- [Getting started](#getting-started)
- [Caddy config](#caddy-config)
- [DNS config](#dns-config)
- [Gitea config](#gitea-config)
- [gitea-pages repo](#gitea-pages-repo)
- [any repo with configurable allowed branch/tag/commits](#any-repo-with-configurable-allowed-branchtagcommits)
- [any repo with all branches/tags/commits exposed](#any-repo-with-all-branchestagscommits-exposed)
- [Building caddy with plugin](#building-caddy)
- [Build locally](#build-with-locally-cloned-plugin-sources)
- [Integration with Gitea](#integration-with-gitea)
<!-- /TOC -->
## Getting started
### Caddy config
The Caddyfile below creates a webserver listening on :3000 which will interact with gitea on <https://yourgitea.yourdomain.com> using `agiteatoken` as the token.
The agiteatoken should be a token from gitea that has the necessary read rights on the repo's that you want to expose.
```Caddyfile
{
order gitea before file_server
}
:3000
gitea {
server https://yourgitea.yourdomain.com
token agiteatoken
domain pages.yourdomain.com #this is optional
}
```
### DNS config
This works with a wildcard domain. So you'll need to make a *.pages.yourdomain.com CNAME to the server you'll be running caddy on.
(this doesn't need to be the same server as gitea).
Depending on the gitea config below you'll be able to access your pages using:
- <http://org.pages.yourdomain.com:3000/repo/file.html> (org is the organization or username)
- <http://org.pages.yourdomain.com:3000/repo/file.html?ref=abranch> (org is the organization or username)
- <http://repo.org.pages.yourdomain.com:3000/file.html>
- <http://branch.repo.org.pages.yourdomain.com:3000/file.html>
- <http://org.pages.yourdomain.com:3000/> (if you have created a gitea-pages repo it'll be served on the root)
### Gitea config
There are multiple options to expose your repo's as a page, that you can use both at the same time.
- creating a gitea-pages repo with a gitea-pages branch and a gitea-pages topic
- adding a gitea-pages branch to any repo of choice and a gitea-pages topic
- adding a gitea-pages-allowall topic to your repo (easiest, but less secure)
#### gitea-pages repo
e.g. we'll use the `yourorg` org.
1. create a `gitea-pages` repo in `yourorg` org
2. Add a `gitea-pages` topic to this `gitea-pages` repo (this is used to opt-in your repo),
3. Create a `gitea-pages` branch in this `gitea-pages` repo.
4. Put your content in this branch. (eg file.html)
Your content will now be available on <http://yourorg.pages.yourdomain.com:3000/file.html>
#### any repo with configurable allowed branch/tag/commits
e.g. we'll use the `yourrepo` repo in the `yourorg` org and there is a `file.html` in the `master` branch and a `otherfile.html` in the `dev` branch. The `master` branch is your default branch.
1. Add a `gitea-pages` topic to the `yourrepo` repo (this is used to opt-in your repo).
2. Create a `gitea-pages` branch in this `yourrepo` repo.
3. Put a `gitea-pages.toml` file in this `gitea-pages` branch of `yourrepo` repo. (more info about the content below)
The `gitea-pages.toml` file will contain the git reference (branch/tag/commit) you allow to be exposed.
To allow everything use the example below:
```toml
allowedrefs=["*"]
```
To only allow main and dev:
```toml
allowedrefs=["main","dev"]
```
- Your `file.html` in the `master` branch will now be available on <http://yourorg.pages.yourdomain.com:3000/yourrepo/file.html>
- Your `file.html` in the `master` branch will now be available on <http://yourrepo.yourorg.pages.yourdomain.com:3000/file.html>
- Your `otherfile.html` in the `dev` branch will now be available on <http://yourorg.pages.yourdomain.com:3000/yourrepo/file.html?ref=dev>
- Your `otherfile.html` in the `dev` branch will now be available on <http://dev.yourrepo.yourorg.pages.yourdomain.com:3000/file.html>
#### any repo with all branches/tags/commits exposed
e.g. we'll use the `yourrepo` repo in the `yourorg` org and there is a `file.html` in the `master` branch and a `otherfile.html` in the `dev` branch. The `master` branch is your default branch.
1. Add a `gitea-pages-allowall` topic to the `yourrepo` repo (this is used to opt-in your repo).
- Your `file.html` in the `master` branch will now be available on <http://yourorg.pages.yourdomain.com:3000/yourrepo/file.html>
- Your `file.html` in the `master` branch will now be available on <http://yourrepo.yourorg.pages.yourdomain.com:3000/file.html>
- Your `otherfile.html` in the `dev` branch will now be available on <http://yourorg.pages.yourdomain.com:3000/yourrepo/file.html?ref=dev>
- Your `otherfile.html` in the `dev` branch will now be available on <http://dev.yourrepo.yourorg.pages.yourdomain.com:3000/file.html>
## Building caddy
As this is a 3rd party plugin you'll need to build caddy (or use the binaries).
To build with this plugin you'll need to have `Golang v1.19` installed. Basic idea:
```bash
# 1 install xcaddy in ~/go/bin
go install github.com/caddyserver/xcaddy/cmd/xcaddy@latest
# 2 build caddy binary with the latest plugin version
xcaddy build \
--with gitea.djmil.dev/djmil/gitea-pages
```
### Build with locally cloned plugin sources
Also Docker builder image can be used to build caddy alongside locally cloned git repo of a plugin:
```Dockerfile
FROM caddy:2.8.4-builder-alpine AS builder
COPY gitea-pages.go go.mod go.sum /module/gitea-pages/
COPY pkg/gitea/* /module/gitea-pages/pkg/gitea/
RUN xcaddy build \
--with gitea.djmil.dev/djmil/gitea-pages \
--replace gitea.djmil.dev/djmil/gitea-pages=/module/gitea-pages \
--replace gitea.djmil.dev/djmil/gitea-pages/pkg/gitea=/module/gitea-pages/pkg/gitea
FROM caddy:2.8.4
COPY --from=builder /usr/bin/caddy /usr/bin/caddy
COPY Caddyfile /etc/caddy/Caddyfile
EXPOSE 3003/tcp
```
## Integration with Gitea
Afther the release is done, `gitea-pages` docker image shall be availvable at the [Docker Hub](https://hub.docker.com/repository/docker/djmil/gitea-pages/general)
```yaml
version: "3"
networks:
gitea:
external: false
services:
gitea:
image: gitea/gitea:1.22.0
restart: always
environment:
- USER_UID=1000
- USER_GID=1000
- GITEA__database__DB_TYPE=mysql
- GITEA__database__HOST=db:3306
- GITEA__database__NAME=gitea
- GITEA__database__USER=gitea
- GITEA__database__PASSWD=gitea
networks:
- gitea
volumes:
- ./gitea:/data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro
ports:
- "3000:3000"
depends_on:
- db
db:
image: mysql:8
restart: always
environment:
- MYSQL_ROOT_PASSWORD=gitea
- MYSQL_USER=gitea
- MYSQL_PASSWORD=gitea
- MYSQL_DATABASE=gitea
networks:
- gitea
volumes:
- ./mysql:/var/lib/mysql
pages:
image: djmil/gitea-pages:0.0.1
restart: always
environment:
- GITEA_HOST=http://gitea:3000
- PAGES_DOMAIN=pages.djmil.dev
networks:
- gitea
ports:
- "3003:3003"
```