added readme file to install JCR with Helm with external DBs

This commit is contained in:
Vinay Aggarwal
2019-11-26 01:12:50 -03:00
parent 5d2fb7a659
commit d00fa3f2f7
41 changed files with 173 additions and 0 deletions

View File

@@ -0,0 +1,301 @@
AWSTemplateFormatVersion: "2010-09-09"
Description: "Deploys Artifactory into an existing Kubernetes cluster"
Parameters:
KubeManifestLambdaArn:
Type: String
HelmLambdaArn:
Type: String
KubeConfigPath:
Type: String
KubeConfigKmsContext:
Type: String
KubeGetLambdaArn:
Type: String
NumberOfSecondary:
Type: Number
AccessCIDR:
Type: String
ArtifactoryLicense1:
Type: String
ArtifactoryLicense2:
Type: String
ArtifactoryLicense3:
Type: String
ArtifactoryLicense4:
Type: String
ArtifactoryIAMAcessKey:
Type: String
NoEcho: 'true'
SecretAccessKey:
Type: String
NoEcho: 'true'
ArtifactoryS3Bucket:
Type: String
CertificateKey:
Type: String
NoEcho: 'true'
Certificate:
Type: String
CertificateDomain:
Type: String
PrivateRepoUsername:
NoEcho: 'true'
Type: String
PrivateRepoApiKey:
NoEcho: 'true'
Type: String
ArtifactoryDBEndpointAddress:
Type: String
DatabaseName:
Type: String
NoEcho: 'true'
DatabaseUser:
Type: String
DatabasePassword:
Type: String
NoEcho: 'true'
MasterKey:
Type: String
NoEcho: 'true'
ArtifactoryVersion:
Type: String
ArtifactoryDeploymentSize:
Type: String
Mappings:
DeploymentSize:
Large:
requestsMem: "6Gi"
requestsCpu: "4"
limitsMem: "10Gi"
limitsCpu: "8"
javaOptsXms: "6g"
javaOptsXmx: "8g"
Medium:
requestsMem: "4Gi"
requestsCpu: "2"
limitsMem: "8Gi"
limitsCpu: "6"
javaOptsXms: "4g"
javaOptsXmx: "6g"
Small:
requestsMem: "4Gi"
requestsCpu: "2"
limitsMem: "6Gi"
limitsCpu: "4"
javaOptsXms: "4g"
javaOptsXmx: "4g"
Resources:
NameSpace:
Type: "Custom::KubeManifest"
Version: '1.0'
Properties:
ServiceToken: !Ref KubeManifestLambdaArn
KubeConfigPath: !Ref KubeConfigPath
KubeConfigKmsContext: !Ref KubeConfigKmsContext
Manifest:
kind: Namespace
apiVersion: v1
metadata:
name: jfrog-artifactory
labels:
app: artifactory
CertificateStore:
DependsOn: NameSpace
Type: "Custom::KubeManifest"
Version: '1.0'
Properties:
ServiceToken: !Ref KubeManifestLambdaArn
KubeConfigPath: !Ref KubeConfigPath
KubeConfigKmsContext: !Ref KubeConfigKmsContext
Manifest:
kind: Secret
apiVersion: v1
metadata:
name: artifactory-nginx-tls
namespace: jfrog-artifactory
labels:
app: artifactory
chart: artifactory
type: kubernetes.io/tls
data:
tls.crt:
Fn::Base64:
!Sub "${Certificate}"
tls.key:
Fn::Base64:
!Sub "${CertificateKey}"
LicenseStore:
DependsOn: NameSpace
Type: "Custom::KubeManifest"
Version: '1.0'
Properties:
ServiceToken: !Ref KubeManifestLambdaArn
KubeConfigPath: !Ref KubeConfigPath
KubeConfigKmsContext: !Ref KubeConfigKmsContext
Manifest:
kind: Secret
apiVersion: v1
metadata:
name: artifactory-cluster-license
namespace: jfrog-artifactory
labels:
app: artifactory
chart: artifactory
type: Opaque
stringData:
art.lic: !Sub
>-
${ArtifactoryLicense1}
${ArtifactoryLicense2}
${ArtifactoryLicense3}
${ArtifactoryLicense4}
ArtifactoryDeployment:
Type: "Custom::Helm"
DependsOn:
- LicenseStore
- CertificateStore
Version: '1.0'
Properties:
ServiceToken: !Ref HelmLambdaArn
KubeConfigPath: !Ref KubeConfigPath
KubeConfigKmsContext: !Ref KubeConfigKmsContext
Namespace: jfrog-artifactory
Name: quickstart-artifactory-ha
Chart: jfrog/artifactory-ha
RepoUrl: https://charts.jfrog.io
ValueYaml: !Sub
- |
artifactory:
name: artifactory-ha
image:
repository: docker.bintray.io/jfrog/artifactory-jcr
version: ${ArtifactoryVersion}
pullPolicy: Always
deleteDBPropertiesOnStartup: true
license:
secret: artifactory-cluster-license
dataKey: art.lic
masterKey: ${MasterKey}
preStartCommand: "wget -O /opt/jfrog/artifactory/tomcat/lib/mysql-connector-java-5.1.41.jar https://jcenter.bintray.com/mysql/mysql-connector-java/5.1.41/mysql-connector-java-5.1.41.jar"
persistence:
enabled: false
type: aws-s3
awsS3:
endpoint: s3.${AWS::Region}.amazonaws.com
region: ${AWS::Region}
identity: ${ArtifactoryIAMAcessKey}
credential: ${SecretAccessKey}
bucketName: ${ArtifactoryS3Bucket}
primary:
resources:
requests:
memory: "${requests_memory}"
cpu: "${requests_cpu}"
limits:
memory: "${limits_memory}"
cpu: "${limits_cpu}"
javaOpts:
xms: "${java_xms}"
xmx: "${java_xmx}"
nodeSelector:
partition: artifactory-primary
node:
replicaCount: ${NumberOfSecondary}
resources:
requests:
memory: "${requests_memory}"
cpu: "${requests_cpu}"
limits:
memory: "${limits_memory}"
cpu: "${limits_cpu}"
javaOpts:
xms: "${java_xms}"
xmx: "${java_xmx}"
nodeSelector:
partition: artifactory-secondary
## Only used if "affinity" is empty
podAntiAffinity:
## Valid values are "soft" or "hard"; any other value indicates no anti-affinity
type: "soft"
topologyKey: "kubernetes.io/hostname"
postgresql:
enabled: false
database:
type: mysql
url: jdbc:mysql://${ArtifactoryDBEndpointAddress}:3306/${DatabaseName}?characterEncoding=UTF-8&elideSetAutoCommits=true #&verifyServerCertificate=true&useSSL=true&requireSSL=true
user: ${DatabaseUser}
password: ${DatabasePassword}
nginx:
image:
repository: docker.bintray.io/jfrog/nginx-artifactory-pro
version: ${ArtifactoryVersion}
tlsSecretName: artifactory-nginx-tls
nodeSelector:
partition: artifactory-primary
service:
loadBalancerSourceRanges: [ "${AccessCIDR}" ]
artifactoryConf: |
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
ssl_certificate {{ .Values.nginx.persistence.mountPath }}/ssl/tls.crt;
ssl_certificate_key {{ .Values.nginx.persistence.mountPath }}/ssl/tls.key;
ssl_session_cache shared:SSL:1m;
ssl_prefer_server_ciphers on;
## server configuration
server {
listen {{ .Values.nginx.internalPortHttps }} ssl;
listen {{ .Values.nginx.internalPortHttp }} ;
server_name ~(?<repo>.+).${CertificateDomain} ~(?<repo>.+).jfrog.team
{{- range .Values.ingress.hosts -}}
{{- if contains "." . -}}
{{ "" | indent 0 }} ~(?<repo>.+)\.{{ . }}
{{- end -}}
{{- end -}};
if ($http_x_forwarded_proto = '') {
set $http_x_forwarded_proto $scheme;
}
## Application specific logs
## access_log /var/log/nginx/artifactory-access.log timing;
## error_log /var/log/nginx/artifactory-error.log;
rewrite ^/$ /artifactory/webapp/ redirect;
rewrite ^/artifactory/?(/webapp)?$ /artifactory/webapp/ redirect;
rewrite ^/(v2)/(.*) /artifactory/$1/$2;
chunked_transfer_encoding on;
client_max_body_size 0;
location /artifactory/ {
proxy_read_timeout 2400;
proxy_pass_header Server;
proxy_cookie_path ~*^/.* /;
proxy_pass http://{{ include "artifactory-ha.fullname" . }}:{{ .Values.artifactory.externalPort }}/artifactory/;
proxy_set_header X-Artifactory-Override-Base-Url $http_x_forwarded_proto://$host:$server_port/artifactory;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto;
proxy_set_header Host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
- { requests_memory: !FindInMap [DeploymentSize, !Ref ArtifactoryDeploymentSize, requestsMem],
requests_cpu: !FindInMap [DeploymentSize, !Ref ArtifactoryDeploymentSize, requestsCpu],
limits_memory: !FindInMap [DeploymentSize, !Ref ArtifactoryDeploymentSize, limitsMem ],
limits_cpu: !FindInMap [DeploymentSize, !Ref ArtifactoryDeploymentSize, limitsCpu ],
java_xms: !FindInMap [DeploymentSize, !Ref ArtifactoryDeploymentSize, javaOptsXms ],
java_xmx: !FindInMap [DeploymentSize, !Ref ArtifactoryDeploymentSize, javaOptsXmx ] }
IngressHostName:
DependsOn: ArtifactoryDeployment
Type: "Custom::KubeGet"
Version: '1.0'
Properties:
ServiceToken: !Ref KubeGetLambdaArn
KubeConfigPath: !Ref KubeConfigPath
KubeConfigKmsContext: !Ref KubeConfigKmsContext
Namespace: jfrog-artifactory
Name: svc/quickstart-artifactory-ha-nginx
JsonPath: '{.status.loadBalancer.ingress[0].hostname}'
Outputs:
ArtifactoryUrl:
Value: !Sub https://${IngressHostName}