From b8c91c02f5b8e7f1108dd16b99125c17622e3247 Mon Sep 17 00:00:00 2001 From: Brett Date: Mon, 12 Dec 2022 10:37:08 +0100 Subject: [PATCH] SSL keys and README updates --- .env.template | 6 +-- README.md | 14 +++--- nginx/setup/ckan-local.crt | 52 +++++++++---------- nginx/setup/ckan-local.key | 100 ++++++++++++++++++------------------- 4 files changed, 87 insertions(+), 85 deletions(-) diff --git a/.env.template b/.env.template index e0c8f29..71a85d4 100644 --- a/.env.template +++ b/.env.template @@ -28,7 +28,7 @@ TEST_CKAN_DATASTORE_WRITE_URL=postgresql://ckan:ckan@db/datastore_test TEST_CKAN_DATASTORE_READ_URL=postgresql://datastore_ro:datastore@db/datastore_test # CKAN core -CKAN_VERSION=2.9.5 +CKAN_VERSION=2.9.7 CKAN_SITE_ID=default CKAN_SITE_URL=http://ckan:5000 CKAN_PORT=5000 @@ -55,11 +55,11 @@ CKAN_REDIS_URL=redis://redis:6379/1 TEST_CKAN_REDIS_URL=redis://redis:6379/1 # Datapusher -DATAPUSHER_VERSION=0.0.17 +DATAPUSHER_VERSION=0.0.19 CKAN_DATAPUSHER_URL=http://datapusher:8800 CKAN__DATAPUSHER__CALLBACK_URL_BASE=http://ckan:5000 DATAPUSHER_REWRITE_RESOURCES=True -DATAPUSHER_REWRITE_URL=http://ckan:5000 +DATAPUSHER_REWRITE_URL=http://ckan:5000 # NGINX NGINX_PORT=80 diff --git a/README.md b/README.md index edb38dd..64edaa7 100644 --- a/README.md +++ b/README.md @@ -21,17 +21,17 @@ The CKAN images used are from the official CKAN [ckan-docker](https://github.com The non-CKAN images are as follows: -* DataPusher: modified from the datapusher image build configuration from the [OKFN docker-ckan](https://github.com/okfn/docker-ckan) repo +* DataPusher: CKAN's [pre-configured DataPusher image](https://github.com/ckan/ckan-base/tree/main/datapusher). * PostgreSQL: Official PostgreSQL image. Database files are stored in a named volume. * Solr: CKAN's [pre-configured Solr image](https://github.com/ckan/ckan-solr). Index data is stored in a named volume. * Redis: standard Redis image -* NGINX: latest stable nginx image +* NGINX: latest stable nginx image that includes SSL and Non-SSL endpoints -The site is configured via env vars (the base CKAN image loads [ckanext-envvars](https://github.com/okfn/ckanext-envvars)), that you can set in the `.env` file. +The site is configured using environment variables that you can set in the `.env` file. ## Quick start -Copy the included `.env.example` and rename it to `.env` to modify it depending on your own needs. +Copy the included `.env.example` and rename it to `.env` - modify it depending on your own needs. Using the default values on the `.env.example` file will get you a working CKAN instance. There is a sysadmin user created by default with the values defined in `CKAN_SYSADMIN_NAME` and `CKAN_SYSADMIN_PASSWORD`(`ckan_admin` and `test1234` by default). This should be obviously changed before running this setup as a public CKAN instance. @@ -43,6 +43,8 @@ To start the containers: docker-compose up +At the end of the container start sequence there should be 6 containers running + ## Development mode To develop local extensions use the `docker-compose.dev.yml` file: @@ -153,10 +155,10 @@ command: `python -m pdb /usr/lib/ckan/venv/bin/ckan --config /srv/app/ckan.ini r ## NGINX -* The base Docker Compose configuration uses an NGINX image as the front-end (ie: reverse proxy). It includes HTTPS running on port number 443. A "self-signed" SSL certificate is generated beforehand and the server certificate and key files are included. The NGINX `server_name` directive and the `CN` field in the SSL certificate have been both set to 'localhost'. This should obviously not be used for production. +* The base Docker Compose configuration uses an NGINX image as the front-end (ie: reverse proxy). It includes HTTPS running on port number 8443 and an HTTP port (81). A "self-signed" SSL certificate is generated beforehand and the server certificate and key files are included. The NGINX `server_name` directive and the `CN` field in the SSL certificate have been both set to 'localhost'. This should obviously not be used for production. Creating the SSL cert and key files as follows: -`openssl req -new -newkey rsa:4096 -days 365 -nodes -x509 -subj "/C=DE/ST=Berlin/L=Berlin/O=None/CN=localhostā€ -keyout ckan-local.key -out ckan-local.crt` +`openssl req -new -newkey rsa:4096 -days 365 -nodes -x509 -subj "/C=DE/ST=Berlin/L=Berlin/O=None/CN=localhost" -keyout ckan-local.key -out ckan-local.crt` The `ckan-local.*` files will then need to be moved into the nginx/setup/ directory ## Known Issues diff --git a/nginx/setup/ckan-local.crt b/nginx/setup/ckan-local.crt index 910bfcd..1ec62b3 100644 --- a/nginx/setup/ckan-local.crt +++ b/nginx/setup/ckan-local.crt @@ -1,30 +1,30 @@ -----BEGIN CERTIFICATE----- -MIIFIDCCAwgCCQD1XH0mNLOTdDANBgkqhkiG9w0BAQsFADBSMQswCQYDVQQGEwJE +MIIFIDCCAwgCCQCr5Wob4TILEDANBgkqhkiG9w0BAQsFADBSMQswCQYDVQQGEwJE RTEPMA0GA1UECAwGQmVybGluMQ8wDQYDVQQHDAZCZXJsaW4xDTALBgNVBAoMBE5v -bmUxEjAQBgNVBAMMCWxvY2FsaG9zdDAeFw0yMjA4MTYxMzA4MzhaFw0yMzA4MTYx -MzA4MzhaMFIxCzAJBgNVBAYTAkRFMQ8wDQYDVQQIDAZCZXJsaW4xDzANBgNVBAcM +bmUxEjAQBgNVBAMMCWxvY2FsaG9zdDAeFw0yMjEyMDExMDQ0MDhaFw0yMzEyMDEx +MDQ0MDhaMFIxCzAJBgNVBAYTAkRFMQ8wDQYDVQQIDAZCZXJsaW4xDzANBgNVBAcM BkJlcmxpbjENMAsGA1UECgwETm9uZTESMBAGA1UEAwwJbG9jYWxob3N0MIICIjAN -BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAzH0e9GPsegl86S1W77BgmINEtzuY -zbJ94i2O4DJKAgaegdvrLTX1QUWOxd7R4De9PVybg800Ay6jkp5Oirc0BaWgIIAU -Wg44Wdd3GSvXCkixqmETkK5V/20vIdAWfkswmUttEJw+eCdElQ4ZIXKVbUVotbiJ -+9TcegmQxApnIiNfDcWlyWzCNprhV6YYUQaBQ9pJNZVovMP+LLX0LRL+bIr/zpeo -SHD5shEjHGWU0GwoJ3UI5vcwF/Xd2aE5t9n6FN4ion60pLMLA8B7PiVRJfIuIug1 -2N4ZB+MjdMWnqSu04N3Zc8DSZt1q5jpRJjXux1uaAXBnw/o4nYPfg25RMvoo20Iv -doiOpUYukYF09WnBLbTrrBOthw16PKU5KM8ltP21A4CR8SwUGN57GShFgnC7UtCV -t36KXD0Ia+tNQcGMso3TN2mXzwVPk4Po4TgaheuM3HxzTxfw5f8E9HC5CZYxObfS -Ux0Zg6vV6sbsF/GJyAmkTeqWPQMEc9e6pUG+vP2Ip5iuIrLbyC/YqMIN2JUebyaa -CW/oXoohB6io1mDvWtNcas7ygxMW3YXJd3DtRGIpwu7p4j56+sjFdihTm4P4aius -E5u1QQ0TvxdMI/SNxitnIIA00oCjJg5rA91xWV4UJqDKmk2/rfhfw37tcplsQ0JU -LckU7LYCKuTblWMCAwEAATANBgkqhkiG9w0BAQsFAAOCAgEAV7r+p4Hl9EY0wKGr -RMTi2n586+zk0boAEy1ogacMUXYeLzMfilkvJIYBlyPZLtyTcy0UGIdMx62QMzaU -jmq2H5nOKpA6A8gzGUXNni+q5YCz41TipiJ4oEPkZyu/EauekqhaB7tKTeuyqJLN -NiJikj4/NMMOJ3bU+noMljLOmReBKLrH1uUtt8YCMPvitXU1mEBFIbe9JbKrqOQo -C0cNdJ+UUHaKYYe3rSG+GHG6xDLOK9bGno6/gCVmz8/ueJ/3ZknvjO7zKVGgyWB3 -/yTDqunO2gdVVgByhEz3Jp4kOwNplOLVTLzZDn5+4L9huyFr6HxdLJ9aQ73k/SqX -jE/AudPnU2/dWwQX/xXs2LQ/1p8pmMP9SZYsU+POItoAZFiQ8Sn/4YVD2s+waopl -noEX5oSFu/jgQGj7YDmywzdSy9QUqPatZKdGpnpaPGTfbAYdy9Gl2kI1hzioaosx -1kqWp+lZuG0oKn6Al9LMOtuqPbsPptfxDy81e6QPf3zm8sFkzXVOdP9gFRnOLgao -jAhDAJSG1cIg2JkR8qhb442+utDtOmSjWxEheCxrmm1NgfYZjmvKCgxvzLnw2o0k -SdI5wQ74rtEmy1uCSOIWmz1rPePN3a7aeF4+o1WmPin72qC6ofFSHhXrOVlEip6n -OnhViZcPai3wbJjT1SDY+h8qnq8= +BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAsm4u/vuT5Lb//8dL+2GB3s0XZHc1 +Da0u10ARElv3QP6aKuKUYE5SKKKpKrLYq3IaNUSHz/6N9UKrakml9Hb5vE83ZYC+ +NoHgnZY80Kam4+mw58VaPS0WwSjw+XNNlJwZ3L2I6HUK9IQuH/i5M3qBEbT962Yu +eZb3Ud21Cc4GTOFNNioaaP9thVERBbaH+FJ2zHwAzsW/eo9/MJqH0w3ckTDCy1uW ++OfICNbFL31tk17P/eAC6dfwk5i00HPhODsK6KDUciMuoEVvD9WLGJswMD0jxuVr +7DqqelRgXLvaXECS23YcU5H3zhgN2jMXLXFdp67hjpcoIhb1H8ttvJeBqVrAcAVv +sKV1Z+doqlsUzXP0xfdAcWzt8jyl+QFN4DAJThEfleYfPfEQjJtpqrudh2SJUBwV +eDZwHSoH6n8AyrTWY1Z/pQfPsF7zX8nRdbn9zA2LGYa0hDbQH7gJUfKKQEeVnmPU +264IPmlQo4N8LYPjVnP/Nmj79eu/hXT3kLTEstl2RBAwtMtSnLYfdhgURuDDFwGw +v/e2xjhRQ5MlGOA89VMiog6CikWegcJKfHF4jwPccbHCzgdPnU8bHw/IVNbY2HhU +pwfJUmBqtFSJMTabBU7pxsidZ2n2PG3WZVCxJhibF1ugBbuDAfvRgcoTejowrZsK +VrG+UM+hGwIc6EMCAwEAATANBgkqhkiG9w0BAQsFAAOCAgEAMjJbUzpe8FFg9T8d +/AqbyJOk4QAlu3cNfyvNm6oJvdSLgMWRStD8FVgv6+r822qMqC45uypirnOIiF52 +0ati3l9L+6jxFW6QQMa56juLGkenWaXTrMjMuxxnKK64GkJqsUL7ujcv+i/1u1pB +L64SJ1rpabnMhWR7qYW0Q2KFCNDTRxJrB3bMD7gK86uNsCtUTIace1ciz9rglqZ4 +XNtDlcGLktfvdUSQdk56tYcFtrqZIvAkLS9r2sL3UP83SWMOCjRIJJXA1yuLZkLz +2/ZHhCd0xCVtwnUyDAPenJEvkTdieuOM7SSJ8kpu5MQgNErJa0z9UjRuyTnMRltY +WIhQG3Brkc31MnFIyZj3sWXQNZvJyEML8alzQQ6r6gdx//Vxx5Q9qqPTbk+xzwfS +FIOiNBn5cGu8fSb6r25nXkGDt2M8xWZJxTuke9UG1D1ucZZcoCpKYc0Qb8nSjmx6 +gSN8iQNo6NAToomJ9kcUeiXPPalxjdf3i5BWSb0hKlgjdPXym14FMGWe82QOBHUo +QcX7pQfRZQFdcqFFpeHIQeSLQewEyUUapv7SzRXSKbleY9mJlE9HfnxsznJWRFEF +7/TWO6MXAZ93xbxbhvUxUBvQq8mrvsfNsfVWP/EdsDL5+CjrnqWnBEJ1Vy6AOiQN ++1Chs6ri897nG4sMQBeHT2jyPwo= -----END CERTIFICATE----- diff --git a/nginx/setup/ckan-local.key b/nginx/setup/ckan-local.key index 9bab89c..f6d34e1 100644 --- a/nginx/setup/ckan-local.key +++ b/nginx/setup/ckan-local.key @@ -1,52 +1,52 @@ -----BEGIN PRIVATE KEY----- -MIIJQwIBADANBgkqhkiG9w0BAQEFAASCCS0wggkpAgEAAoICAQDMfR70Y+x6CXzp -LVbvsGCYg0S3O5jNsn3iLY7gMkoCBp6B2+stNfVBRY7F3tHgN709XJuDzTQDLqOS -nk6KtzQFpaAggBRaDjhZ13cZK9cKSLGqYROQrlX/bS8h0BZ+SzCZS20QnD54J0SV -DhkhcpVtRWi1uIn71Nx6CZDECmciI18NxaXJbMI2muFXphhRBoFD2kk1lWi8w/4s -tfQtEv5siv/Ol6hIcPmyESMcZZTQbCgndQjm9zAX9d3ZoTm32foU3iKifrSkswsD -wHs+JVEl8i4i6DXY3hkH4yN0xaepK7Tg3dlzwNJm3WrmOlEmNe7HW5oBcGfD+jid -g9+DblEy+ijbQi92iI6lRi6RgXT1acEttOusE62HDXo8pTkozyW0/bUDgJHxLBQY -3nsZKEWCcLtS0JW3fopcPQhr601BwYyyjdM3aZfPBU+Tg+jhOBqF64zcfHNPF/Dl -/wT0cLkJljE5t9JTHRmDq9XqxuwX8YnICaRN6pY9AwRz17qlQb68/YinmK4istvI -L9iowg3YlR5vJpoJb+heiiEHqKjWYO9a01xqzvKDExbdhcl3cO1EYinC7uniPnr6 -yMV2KFObg/hqK6wTm7VBDRO/F0wj9I3GK2cggDTSgKMmDmsD3XFZXhQmoMqaTb+t -+F/Dfu1ymWxDQlQtyRTstgIq5NuVYwIDAQABAoICAEJirFXyyqajxeV9TqfpvrJE -i15g/q5or+1plOS77sLRm0vVNXgr+D8EceFTARelgM4W7nXPfH87+OZ0dlMaPs1G -g8GJUxIZY7nm9Uc6sEkqaGNDuLJTpp+RtqdngqXlixV5IyMtVipztRQey5HMPS6I -RgIYstMKu7jyugiqx+iRSx6Rd8z4feR0S4vE5EgJsJVynCnFI4eEqVOijm7Dp81d -IsbS/VLnOmjQn3FsmO9A7ZhBqm4w+XAN5cPtT2ucXE/B/cR7FfISHhVNu7TlMH79 -LHUwpaqOD9o7pxsVv+Rvx/zoiNvHUYcLgtTTQd0BzU7zMgAdmdJJvW+FjF6CxeEN -aBs17Hdz1az1d+pUyqfevFnSTuVvcwkcBrWUCKRuJSjJ63/4USzSSXmxQ854r3aH -Fur6bRED8HuHAvVAQA71rFkWW0mp6RhwcIZQh3r3D4XFm2G9PJzn874hxlJuGTyl -bE5Kh1nOWw1P9PAekLoTZuNo3KzwL43sMKLNqO4I/iiCPEhKQZy3MOZXn8uRTChF -QV1CZ2aNAAiFdFnzDZnfBtPCycs82E6s8HrVXD0gKzQkJ+N+OVVYWbuj11C20JyL -tKXiFLQmwDOGLcnGhkyE4LFArniLcJKD5ub5Z264m8MEJ2hrEzpz95z70p4o5RBl -Nglj2ba8ZmDwQ+2sFT5hAoIBAQD+cCU/vMKbVRmeIw6o8A9X53MOPcmdYLN6gTV0 -iI/YflBfpbJCUzQ2mXEydy6/ineUVY1vOG4ufsz8wvrEnsge9lqYwEpPS4rs0uiL -CX4qUCTp4EvUv6nkpeuP+Oh+xb12TdMpLNf/10zTrz3cZxOR+eynx5ZDqnhiYHFZ -P6/pO3AroztB+KJ1lL3MEdIh4RMutMIUItFH1R4b5PGyfW3QMnzKRNOOnDxrbZ9s -muOeu0VWmzyaqAXtEpjqpn69vt5TJNP9rqzM9PXJrewEhqynOwmHuibN2hRnY5s9 -PIeKY6eozlFbORfcWHdxCDfpNv1ktkki5UodQaaTGLUxjNHvAoIBAQDNvnqkQ0dk -L9yrHV6Yixl0g1SJaG/i03xTr1KfvuLnnk82AC6Xm4SOyqVsza1TuRQegocJYid3 -NFTgUc7eU88XjMffpuAkOjzC8xS/bsU1CL6awnjGhjvKUKHn2KRdnqcnPZk0DBay -KRg++fZeEWcVxJ77omk9LMP07rf2U1oCW+mGOjJcROQAeH/FW3i2UVSdsZlj2DBC -LagJAhjbRUp6G8sBRsgF0TRBJ9+lfXrJ9hJN+ZGQ4+rVMm3t3zA7QQBsccTIviH9 -PWcmT9R3HsHplai+0u9HG9y0A+AZQBl3XHyGs9mS0fwHAzBTp+W8qKESjtELtf5P -NgTv+w1CdRfNAoIBACzKbzQ+NYAExiK5hy4kPH88BlwecmybBl1te4yNMc1pxxpf -X/cfEJUABBZfNsKPTKe3O9O1emgC+HESnfSZAx+4PJChYTN+V/GC218Gh8hJHYZy -bscACpduwf4xUjRm+QhngOHBvDCUpTiqo9g16RMMjSWoFALLcq/WzH1qobwMM53q -+VaOv4K1cYgIJxbBuY/CUFwdGPxtPwSoFAhY3kkFakRtQ1TamiRLQwJqbeGWlAlA -ALY1F/35BSRhtPQQMrEuTYdeBZt7D/21+VN+pcw2r2HOWmBooKjmtwBbtHyfOHeW -AmptrY6joDssuDL89DSThmJ3PMnTsdA5TERxxs8CggEBAINEFRE6T5EvLDYMTe87 -SClbJRNqC4CHd9oYkLmU20X1bgpBAXj+4wsLZZHOg9hXy+tPUgJ9mjpmrARWjYqx -o/4dduRNntHeSigDWOhuLuoQQzOQAeh/eiQxX6sBQJTuhSz3Ewju8YgHyg1cA4Cu -z7tGsDxRuZ0rM3bQ25QQR+wbYhmehcTyuxlFyBdNre18ZGUcC4Z1Rwzh/kSJDvzO -756KnvGYjEOR3yn226zFKxMxqSoQoXv0vj35p8NNU4NqjG+kAm4lSKA+jdIWurKp -cASs1HWzNLCEqUI8+ryBdf3+hwCWPKl8ybRbp3ioNV4xpFqnvd4f5jn5eBr4bNRK -yr0CggEBAKdrTvdHVUzcLxWO4bHBS+ZJMpUJ/7z/efTB9PlzXC6aesx0kfGRc9Ss -esONlnZm6vYFi7vQ4LXWbX0Qsamy8/GWwmqASTrbIpQTuLRSSkMKifPkYZorWAhA -pk/ZEz+XwRL6wgSiiCL3Udez4my9Ng80Q5hSLUPVViJLCBLXUml8N+MxVQWvcYjw -AkX+AxxeZo2i1RHXTO4Q/eBzDbrDGKcW5D9RUImiBNzLvkKFxI/CVKNbSUZHT5IT -4YYWCQ6GsEPoVdrucRreqDJ4IQepKtN35VbcRefj1asUvK06DbaQQ+YOXVCG/ja6 -ru4R+r22/g05ks8IUKi+G/j0UeBSot8= +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 +ZgICLAExQ4Rg4x94uY5DIe43vnaWZA== -----END PRIVATE KEY-----