No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.

5.9KB

+++ title = “Self hosted Netlify using docker-compose, gitea, and drone-ci” date = 2019-11-16T15:30:03+05:30 draft = true tags = [“golang”, “docker”, “self hosted”] categories = [“tutorials”] type = “post” url = “blog/2019/11/16/selfhosted-netlify” author = “Rohan Verma” +++

I had been using netlify to deploy a few of my static sites. The process for deployment is seamless and all you need to do is push to master. Pushing to the develop branch or creating a pull request on github creates a mirror with a unique URL which can be used to preview the site.

It worked well, but I often feel that I will eventually be tied down or stuck to the service. One day the pricing will change or the service will disappear. Also, for my small static sites, the features it offers are too much.

I also wanted to setup CI/CD for my other projects, and setting up my own CI/CD pipeline and migrating static sites would be a good easy step to start.

This article is derived from Self-hosting with Docker by Joel Hans. I might skip a few details, which are covered there.

version: '2'

services:

  proxy:
    image: jwilder/nginx-proxy
    container_name: proxy
    restart: unless-stopped
    labels:
      com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy: "true"
    volumes:
      - /var/run/docker.sock:/tmp/docker.sock:ro
      - certs:/etc/nginx/certs:rw
      - vhost.d:/etc/nginx/vhost.d
      - html:/usr/share/nginx/html
      - ./uploadsize.conf:/etc/nginx/conf.d/uploadsize.conf:ro
    ports:
      - "80:80"
      - "443:443"
    networks:
      - "default"
      - "proxy-tier"

  proxy-letsencrypt:
    image: jrcs/letsencrypt-nginx-proxy-companion
    container_name: letsencrypt
    restart: unless-stopped
    environment:
      - NGINX_PROXY_CONTAINER=proxy
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
    volumes_from:
      - "proxy"
    depends_on:
      - "proxy"
    networks:
      - "default"
      - "proxy-tier"

  portainer:
    image: portainer/portainer
    container_name: portainer
    restart: always
    environment:
      - VIRTUAL_HOST=docker.rohanverma.net
      - LETSENCRYPT_HOST=docker.rohanverma.net
      - [email protected]
    volumes:
      - ./portainer/:/data
      - /var/run/docker.sock:/var/run/docker.sock
    privileged: true
    ports:
      - "9000:9000"

  gitea:
    image: gitea/gitea:latest
    container_name: gitea
    restart: unless-stopped
    environment:
      - VIRTUAL_HOST=gitea.rohanverma.net
      - LETSENCRYPT_HOST=gitea.rohanverma.net
      - [email protected]
      - VIRTUAL_PORT=3000
      - ROOT_URL=https://gitea.rohanverma.net
      - DOMAIN=gitea.rohanverma.net
      - PROTOCOL=http
      - USER_UID=1000
      - USER_GID=1000
    volumes:
      - ./gitea:/data
    ports:
      - "5000:3000"
      - "222:22"
    networks:
      - proxy-tier
      - default

  drone:
    container_name: drone
    image: drone/drone:latest
    restart: always
    environment:
      - DRONE_GITEA_SERVER=https://gitea.rohanverma.net
      - DRONE_GIT_ALWAYS_AUTH=false
      - DRONE_RUNNER_CAPACITY=3
      - DRONE_SERVER_HOST=drone.rohanverma.net
      - DRONE_SERVER_PROTO=https
      - DRONE_TLS_AUTOCERT=false
      - DRONE_RPC_SECRET=xxxxxxxx
      - DRONE_GITEA_CLIENT_ID=xxxxxxxxxxxxxxxxx
      - DRONE_GITEA_CLIENT_SECRET=xxxxxxxxxxxxxxxxxx
      - VIRTUAL_HOST=drone.rohanverma.net
      - VIRTUAL_PORT=80
      - DRONE_USER_CREATE=username:rhnvrm,admin:true
      - DRONE_DEBUG=true
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./drone:/data
    privileged: true
    ports:
      - "5151:80"
    networks:
      - default

  drone-agent:
    container_name: drone-agent
    image: drone/agent:latest
    command: agent
    restart: always
    depends_on:
      - drone
    privileged: true
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    environment:
      - DRONE_RPC_SERVER=https://drone.rohanverma.net
      - DRONE_RPC_SECRET=xxxxxxxx
      - DRONE_RUNNER_CAPACITY=3
      - DRONE_RUNNER_NAME="local"
    networks:
      - default

  rohanvermanet:
    container_name: rohanvermanet
    build:
      dockerfile: Dockerfile
      context: ../apps/rohanverma.net
    ports:
      - "8080:80"
    environment:
      - VIRTUAL_HOST=rohanverma.net
      - LETSENCRYPT_HOST=rohanverma.net
      - [email protected]

 nextrohanvermanet:
    container_name: nextrohanvermanet
    build:
      dockerfile: Dockerfile
      context: ../apps/next.rohanverma.net
    ports:
      - "8079:80"
    environment:
      - VIRTUAL_HOST=next.rohanverma.net
      - LETSENCRYPT_HOST=next.rohanverma.net
      - [email protected]

volumes:
  certs:
  vhost.d:
  html:

networks:
  proxy-tier:

The drone.yml file

---
kind: pipeline
type: docker
name: default

steps:
    - name: ssh commands for rohanverma.net
    image: appleboy/drone-ssh
    when:
        branch:
        - master
    settings:
        host: 159.89.175.2
        username: deploy
        port: 22
        key:
        from_secret: ssh_key
        script_stop: true
        script:
        - cd /home/rhnvrm/apps/rohanverma.net
        - git fetch origin
        - git checkout origin/master
        - cd /home/rhnvrm/proxy
        - docker-compose build rohanvermanet
        - docker-compose up -d rohanvermanet

    - name: ssh commands for next.rohanverma.net
    image: appleboy/drone-ssh
    when:
        branch:
        - develop
    settings:
        host: 159.89.175.2
        username: deploy
        port: 22
        key:
        from_secret: ssh_key
        script_stop: true
        script:
        - cd /home/rhnvrm/apps/next.rohanverma.net
        - git fetch origin
        - git checkout origin/develop
        - cd /home/rhnvrm/proxy
        - docker-compose build nextrohanvermanet
        - docker-compose up -d nextrohanvermanet