
#+TITLE: Project hosting setup
#+DATE: 2018-11-24 17:22:41 UTC
#+DESCRIPTION: Simple static site hosting.
#+FILETAGS: draft
#+LATEX_CLASS: article
#+CATEGORY: cato
#+SLUG: project-hosting-setup


Quick and simple code hosting and CI on a local rasobery pi or in the cloud I use a cheap digitalocen droplet, if you decide to sign up and do the same please use this link and help me out. https://m.do.co/c/f05b87f9fec9


First create a =docker-compose.yml= file, you will need to specify some config in a separate env file.
This compose file brings up caddy as a http server and postgres as the database to persist your data.

It then uses drone ci linked with gitea for code hosting and continuous integration.
#+BEGIN_SRC yaml
version: '2'

volumes:
  sockets:
    driver: local
  postgres_data:
    driver: local
  postgres_backup:
    driver: local

services:
  caddy:
    image: caddy
    volumes:
      - /var/www:/var/www
      - /var/www/project-hosting-setup/data/caddy/:/data
      - /var/www/project-hosting-setup/Caddyfile:/etc/caddy/Caddyfile
      - sockets:/data/sockets
    ports:
      - "80:80"
      - "443:443"

  postgres:
    image: postgres:9.6
    mem_limit: 256m
    volumes:
      - postgres_data:/var/lib/postgresql/data
      - postgres_backup:/backups
    env_file: .env

  gitea:
    image: gitea/gitea:1.18.3
    depends_on:
      - postgres
    ports:
      - "10022:22"
    volumes:
      - ./data/gitea:/data
    restart: always

  drone-server:
    image: drone/drone:2.16
    volumes:
      - /root/.docker/config.json:/root/.docker/config.json
      - /var/run/docker.sock:/var/run/docker.sock
      - ./data/dronenew:/var/lib/drone/
    depends_on:
      - gitea
    env_file: .env
#+END_SRC

Create a =Caddyfile= which will reverse proxy through to your git and ci containers.

#+BEGIN_SRC text
ci.mydomain.com:443 {
  reverse_proxy * drone-server:80
}

git.mydomain.com:443 {
  reverse_proxy * gitea:3000
}
#+END_SRC

https://caddy.community/t/serving-tens-of-thousands-of-domains-over-https-with-caddy/11179

Finally create a =.env= file to store your configuration
