Add more complete containerization
This commit is contained in:
		
							parent
							
								
									db6dee5d69
								
							
						
					
					
						commit
						4041c3256d
					
				
							
								
								
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@ -127,4 +127,7 @@ dmypy.json
 | 
			
		||||
 | 
			
		||||
# Pyre type checker
 | 
			
		||||
.pyre/
 | 
			
		||||
 | 
			
		||||
# Secrets & env
 | 
			
		||||
secrets.yml
 | 
			
		||||
.vscode
 | 
			
		||||
@ -2,6 +2,11 @@ FROM python:3
 | 
			
		||||
 | 
			
		||||
WORKDIR /usr/src/shynet
 | 
			
		||||
 | 
			
		||||
# URL from https://github.com/shlinkio/shlink/issues/596 :)
 | 
			
		||||
RUN curl "https://download.maxmind.com/app/geoip_download?edition_id=GeoLite2-ASN&license_key=G4Lm0C60yJsnkdPi&suffix=tar.gz" | tar -xvz -C /tmp
 | 
			
		||||
RUN curl "https://download.maxmind.com/app/geoip_download?edition_id=GeoLite2-City&license_key=G4Lm0C60yJsnkdPi&suffix=tar.gz" | tar -xvz -C /tmp
 | 
			
		||||
RUN mv /tmp/GeoLite2*/*.mmdb /etc
 | 
			
		||||
 | 
			
		||||
RUN pip install pipenv
 | 
			
		||||
COPY Pipfile.lock ./
 | 
			
		||||
COPY Pipfile ./
 | 
			
		||||
 | 
			
		||||
@ -1,2 +1,4 @@
 | 
			
		||||
# shynet
 | 
			
		||||
Minimalist, privacy-oriented, and self-hosted web analytics
 | 
			
		||||
# Shynet
 | 
			
		||||
Shynet is a minimalist, privacy-focused web analytics tool.
 | 
			
		||||
 | 
			
		||||
I'll write real documentation soon (by May 2020). In the meantime, I'm making the repository public so that anyone can easily pull the docker images and deploy.
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										86
									
								
								kubernetes/deployments.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										86
									
								
								kubernetes/deployments.yml
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,86 @@
 | 
			
		||||
apiVersion: "apps/v1"
 | 
			
		||||
kind: "Deployment"
 | 
			
		||||
metadata:
 | 
			
		||||
  name: "shynet-webserver"
 | 
			
		||||
  namespace: "default"
 | 
			
		||||
  labels:
 | 
			
		||||
    app: "shynet-webserver"
 | 
			
		||||
spec:
 | 
			
		||||
  replicas: 3
 | 
			
		||||
  selector:
 | 
			
		||||
    matchLabels:
 | 
			
		||||
      app: "shynet-webserver"
 | 
			
		||||
  template:
 | 
			
		||||
    metadata:
 | 
			
		||||
      labels:
 | 
			
		||||
        app: "shynet-webserver"
 | 
			
		||||
    spec:
 | 
			
		||||
      containers:
 | 
			
		||||
        - name: "covideo-webserver"
 | 
			
		||||
          image: "docker.pkg.github.com/milesmcc/shynet/shynet:latest"
 | 
			
		||||
          command: ["./webserver.sh"]
 | 
			
		||||
          imagePullPolicy: Always
 | 
			
		||||
          envFrom:
 | 
			
		||||
            - secretRef:
 | 
			
		||||
                name: django-settings
 | 
			
		||||
---
 | 
			
		||||
apiVersion: "apps/v1"
 | 
			
		||||
kind: "Deployment"
 | 
			
		||||
metadata:
 | 
			
		||||
  name: "shynet-celeryworker"
 | 
			
		||||
  namespace: "default"
 | 
			
		||||
  labels:
 | 
			
		||||
  app: "shynet-celeryworker"
 | 
			
		||||
spec:
 | 
			
		||||
  replicas: 3
 | 
			
		||||
  selector:
 | 
			
		||||
  matchLabels:
 | 
			
		||||
    app: "shynet-celeryworker"
 | 
			
		||||
  template:
 | 
			
		||||
  metadata:
 | 
			
		||||
    labels:
 | 
			
		||||
    app: "shynet-celeryworker"
 | 
			
		||||
  spec:
 | 
			
		||||
    containers:
 | 
			
		||||
      - name: "covideo-celeryworker"
 | 
			
		||||
        image: "docker.pkg.github.com/milesmcc/shynet/shynet:latest"
 | 
			
		||||
        command: ["./celeryworker.sh"]
 | 
			
		||||
        imagePullPolicy: Always
 | 
			
		||||
        envFrom:
 | 
			
		||||
          - secretRef:
 | 
			
		||||
              name: django-settings
 | 
			
		||||
---
 | 
			
		||||
apiVersion: v1
 | 
			
		||||
kind: Service
 | 
			
		||||
metadata:
 | 
			
		||||
  name: redis
 | 
			
		||||
spec:
 | 
			
		||||
  ports:
 | 
			
		||||
    - port: 6379
 | 
			
		||||
      name: redis
 | 
			
		||||
  clusterIP: None
 | 
			
		||||
  selector:
 | 
			
		||||
    app: redis
 | 
			
		||||
---
 | 
			
		||||
apiVersion: apps/v1beta2
 | 
			
		||||
kind: StatefulSet
 | 
			
		||||
metadata:
 | 
			
		||||
  name: redis
 | 
			
		||||
spec:
 | 
			
		||||
  selector:
 | 
			
		||||
    matchLabels:
 | 
			
		||||
      app: redis
 | 
			
		||||
  serviceName: redis
 | 
			
		||||
  replicas: 1
 | 
			
		||||
  template:
 | 
			
		||||
    metadata:
 | 
			
		||||
      labels:
 | 
			
		||||
        app: redis
 | 
			
		||||
    spec:
 | 
			
		||||
      containers:
 | 
			
		||||
        - name: redis
 | 
			
		||||
          image: redis:latest
 | 
			
		||||
          imagePullPolicy: Always
 | 
			
		||||
          ports:
 | 
			
		||||
            - containerPort: 6379
 | 
			
		||||
              name: redis
 | 
			
		||||
							
								
								
									
										26
									
								
								kubernetes/secrets_template.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								kubernetes/secrets_template.yml
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,26 @@
 | 
			
		||||
apiVersion: v1
 | 
			
		||||
kind: Secret
 | 
			
		||||
metadata:
 | 
			
		||||
    name: django-settings
 | 
			
		||||
type: Opaque
 | 
			
		||||
stringData:
 | 
			
		||||
    # Django settings
 | 
			
		||||
    DEBUG: "False"
 | 
			
		||||
    ALLOWED_HOSTS: "*" # For better security, set this to your deployment's domain. Comma separated.
 | 
			
		||||
    DJANGO_SECRET_KEY: ""
 | 
			
		||||
 | 
			
		||||
    # Redis configuration (if you use the default Kubernetes config, this will work)
 | 
			
		||||
    REDIS_CACHE_LOCATION: "redis://redis.default.svc.cluster.local/0"
 | 
			
		||||
    CELERY_BROKER_URL: "redis://redis.default.svc.cluster.local/1"
 | 
			
		||||
 | 
			
		||||
    # PostgreSQL settings
 | 
			
		||||
    DB_NAME: ""
 | 
			
		||||
    DB_USER: ""
 | 
			
		||||
    DB_PASSWORD: ""
 | 
			
		||||
    DB_HOST: ""
 | 
			
		||||
 | 
			
		||||
    # Email settings
 | 
			
		||||
    EMAIL_HOST_USER: ""
 | 
			
		||||
    EMAIL_HOST_PASSWORD: ""
 | 
			
		||||
    EMAIL_HOST: ""
 | 
			
		||||
    SERVER_EMAIL: "Shynet <noreply@shynet.example.com>"
 | 
			
		||||
@ -161,8 +161,8 @@ CELERY_REDIS_SOCKET_TIMEOUT = 15
 | 
			
		||||
 | 
			
		||||
# GeoIP
 | 
			
		||||
 | 
			
		||||
MAXMIND_CITY_DB = os.getenv("MAXMIND_CITY_DB")
 | 
			
		||||
MAXMIND_ASN_DB = os.getenv("MAXMIND_ASN_DB")
 | 
			
		||||
MAXMIND_CITY_DB = os.getenv("MAXMIND_CITY_DB", "/etc/GeoLite2-City.mmdb")
 | 
			
		||||
MAXMIND_ASN_DB = os.getenv("MAXMIND_ASN_DB", "/etc/GeoLite2-ASN.mmdb")
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
MESSAGE_TAGS = {
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user