diff --git a/Dockerfile b/Dockerfile
index c90a311..bb63a22 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,6 +1,6 @@
#################################
# Build the support container
-FROM ruby:2.6.5-slim-stretch as base
+FROM ruby:2.6.5-slim-stretch AS base
LABEL edu.northwestern.library.app=Arch \
edu.northwestern.library.stage=build \
edu.northwestern.library.role=support
@@ -21,31 +21,30 @@ RUN sed -i '/stretch-updates/d' /etc/apt/sources.list && \
RUN apt-get update -qq && \
apt-get install -y $BUILD_DEPS --no-install-recommends
-
-RUN \
- # Set locale
- dpkg-reconfigure -f noninteractive tzdata && \
+
+# Set locale
+RUN dpkg-reconfigure -f noninteractive tzdata && \
sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen && \
echo 'LANG="en_US.UTF-8"'>/etc/default/locale && \
dpkg-reconfigure --frontend=noninteractive locales && \
update-locale LANG=en_US.UTF-8 && \
\
- mkdir -p /tmp/stage/bin && \
- \
- # Install FFMPEG
- mkdir -p /tmp/ffmpeg && \
+ mkdir -p /tmp/stage/bin
+
+# Install FFMPEG
+RUN mkdir -p /tmp/ffmpeg && \
cd /tmp/ffmpeg && \
curl https://s3.amazonaws.com/nul-repo-deploy/ffmpeg-release-64bit-static.tar.xz | tar xJ && \
- cp `find . -type f -executable` /tmp/stage/bin/ && \
- \
- # Install FITS
- cd /tmp && \
+ cp `find . -type f -executable` /tmp/stage/bin/
+
+# Install FITS
+RUN cd /tmp && \
curl -O https://s3.amazonaws.com/nul-repo-deploy/fits-${FITS_VERSION}.zip && \
cd /tmp/stage && \
- unzip -o /tmp/fits-${FITS_VERSION}.zip && \
- \
- # Update bundler
- gem install rubygems-update --version 3.3.24 && \
+ unzip -o /tmp/fits-${FITS_VERSION}.zip
+
+# Update bundler
+RUN gem install rubygems-update --version 3.3.24 && \
update_rubygems && \
gem install bundler --version 2.3.8
@@ -64,7 +63,7 @@ RUN chown -R app:app /home/app && \
#################################
# Build the Application container
-FROM ruby:2.6.5-slim-stretch as app
+FROM ruby:2.6.5-slim-stretch AS app
LABEL edu.northwestern.library.app=Arch \
edu.northwestern.library.stage=run \
edu.northwestern.library.role=app
@@ -86,35 +85,42 @@ RUN sed -i '/stretch-updates/d' /etc/apt/sources.list && \
RUN mkdir -p /usr/share/man/man1 /usr/share/man/man7 && \
apt-get update -qq && \
- apt-get install -y curl gnupg2 --no-install-recommends && \
- # Install NodeJS and Yarn package repos
- curl -sL https://deb.nodesource.com/setup_12.x | bash - && \
+ apt-get install -y ca-certificates curl gnupg2 --no-install-recommends
+
+# Install NodeJS and Yarn package repos
+RUN curl -sL https://deb.nodesource.com/setup_12.x | sed '/deprecation_warning$/ s/^/#/' | bash - && \
curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - && \
- echo "deb http://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list && \
- # Install runtime dependencies
- apt-get update -qq && \
- apt-get install -y $RUNTIME_DEPS --no-install-recommends && \
- # Install webpack
- alias nodejs=node && \
- yarn add webpack && \
- # Set locale
- dpkg-reconfigure -f noninteractive tzdata && \
+ echo "deb http://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list
+
+# Install runtime dependencies
+RUN apt-get update -qq && \
+ apt-get install -y $RUNTIME_DEPS --no-install-recommends
+
+# Install webpack
+RUN alias nodejs=node && \
+ yarn add webpack
+
+# Set locale
+RUN dpkg-reconfigure -f noninteractive tzdata && \
sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen && \
echo 'LANG="en_US.UTF-8"'>/etc/default/locale && \
dpkg-reconfigure --frontend=noninteractive locales && \
- update-locale LANG=en_US.UTF-8 && \
- # Install VIPS
- cd /tmp && \
+ update-locale LANG=en_US.UTF-8
+
+# Install VIPS
+RUN cd /tmp && \
curl -sO https://s3.amazonaws.com/nul-repo-deploy/packages/libvips-tools_8.7.4-1_amd64.deb && \
curl -sO https://s3.amazonaws.com/nul-repo-deploy/packages/libvips-dev_8.7.4-1_amd64.deb && \
curl -sO https://s3.amazonaws.com/nul-repo-deploy/packages/libvips42_8.7.4-1_amd64.deb && \
curl -sO https://s3.amazonaws.com/nul-repo-deploy/packages/gir1.2-vips-8.0_8.7.4-1_amd64.deb && \
- apt-get install -y $(find . -name '*.deb') && \
- # Clean up package cruft
- apt-get clean -y && \
- rm -rf /var/lib/apt/lists/* /tmp/*.deb && \
- # Update Bundler
- gem install rubygems-update --version 3.3.24 && \
+ apt-get install -y $(find . -name '*.deb')
+
+# Clean up package cruft
+RUN apt-get clean -y && \
+ rm -rf /var/lib/apt/lists/* /tmp/*.deb
+
+# Update Bundler
+RUN gem install rubygems-update --version 3.3.24 && \
update_rubygems && \
gem install bundler --version 2.3.8
diff --git a/app/views/cookie_consent/_content.html.erb b/app/views/cookie_consent/_content.html.erb
new file mode 100644
index 0000000..225bcde
--- /dev/null
+++ b/app/views/cookie_consent/_content.html.erb
@@ -0,0 +1 @@
+Cookie Settings
\ No newline at end of file
diff --git a/app/views/cookie_consent/_head.html.erb b/app/views/cookie_consent/_head.html.erb
new file mode 100644
index 0000000..ecf243f
--- /dev/null
+++ b/app/views/cookie_consent/_head.html.erb
@@ -0,0 +1,2 @@
+
+
diff --git a/app/views/layouts/hyrax.html.erb b/app/views/layouts/hyrax.html.erb
index 4808495..c44b35a 100644
--- a/app/views/layouts/hyrax.html.erb
+++ b/app/views/layouts/hyrax.html.erb
@@ -1,6 +1,7 @@
" prefix="og:http://ogp.me/ns#">
+ <%= render '/cookie_consent/head' %>
<%= render partial: 'layouts/head_tag_content' %>
<%= content_for(:head) %>
diff --git a/app/views/shared/_footer.html.erb b/app/views/shared/_footer.html.erb
index 7cc01c3..8ebe62b 100644
--- a/app/views/shared/_footer.html.erb
+++ b/app/views/shared/_footer.html.erb
@@ -44,5 +44,6 @@
Provide Feedback
+ <%= render '/cookie_consent/content' %>
diff --git a/terraform/.terraform.lock.hcl b/terraform/.terraform.lock.hcl
index e09711d..f797ea0 100644
--- a/terraform/.terraform.lock.hcl
+++ b/terraform/.terraform.lock.hcl
@@ -2,73 +2,80 @@
# Manual edits may be lost in future updates.
provider "registry.terraform.io/hashicorp/archive" {
- version = "2.2.0"
+ version = "2.7.0"
hashes = [
- "h1:2K5LQkuWRS2YN1/YoNaHn9MAzjuTX8Gaqy6i8Mbfv8Y=",
- "zh:06bd875932288f235c16e2237142b493c2c2b6aba0e82e8c85068332a8d2a29e",
- "zh:0c681b481372afcaefddacc7ccdf1d3bb3a0c0d4678a526bc8b02d0c331479bc",
- "zh:100fc5b3fc01ea463533d7bbfb01cb7113947a969a4ec12e27f5b2be49884d6c",
- "zh:55c0d7ddddbd0a46d57c51fcfa9b91f14eed081a45101dbfc7fd9d2278aa1403",
- "zh:73a5dd68379119167934c48afa1101b09abad2deb436cd5c446733e705869d6b",
- "zh:841fc4ac6dc3479981330974d44ad2341deada8a5ff9e3b1b4510702dfbdbed9",
- "zh:91be62c9b41edb137f7f835491183628d484e9d6efa82fcb75cfa538c92791c5",
- "zh:acd5f442bd88d67eb948b18dc2ed421c6c3faee62d3a12200e442bfff0aa7d8b",
- "zh:ad5720da5524641ad718a565694821be5f61f68f1c3c5d2cfa24426b8e774bef",
- "zh:e63f12ea938520b3f83634fc29da28d92eed5cfbc5cc8ca08281a6a9c36cca65",
- "zh:f6542918faa115df46474a36aabb4c3899650bea036b5f8a5e296be6f8f25767",
+ "h1:YkXq4JfcoAW0L4B9ghskZUxYbYAXIPlfSqqVFrAS06U=",
+ "zh:04e23bebca7f665a19a032343aeecd230028a3822e546e6f618f24c47ff87f67",
+ "zh:5bb38114238e25c45bf85f5c9f627a2d0c4b98fe44a0837e37d48574385f8dad",
+ "zh:64584bc1db4c390abd81c76de438d93acf967c8a33e9b923d68da6ed749d55bd",
+ "zh:697695ab9cce351adf91a1823bdd72ce6f0d219138f5124ef7645cedf8f59a1f",
+ "zh:78d5eefdd9e494defcb3c68d282b8f96630502cac21d1ea161f53cfe9bb483b3",
+ "zh:7edefb1d1e2fead8fd155f7b50a2cb49f2f3fed154ac3ef5f991ccaff93d6120",
+ "zh:807fb15b75910bf14795f2ad1a2d41b069f9ef52c242131b2964c8527312e235",
+ "zh:821d9148d261df1d1a8e5a4812df2a6a3ffaf0d2070dad3c785382e489069239",
+ "zh:a7d92251118fb723048c482154a6ac6368aad583d28d15fffc6f5dafd9507463",
+ "zh:b627d4cef192b3c12ddaf9cb2c4f98c10d0129883c8c2a9c0049983f9de7030d",
+ "zh:dfb70306fcc0ad1d512ab7c24765703783cc286062d4849de4fbe23526f5dc8e",
+ "zh:f21de276f857b7e51fa2593d8fef05a7faafb0a7b62db14ac58a03ce1be7d881",
]
}
provider "registry.terraform.io/hashicorp/aws" {
- version = "3.56.0"
+ version = "5.96.0"
hashes = [
- "h1:XuiEcFvwm+GkRpt4MqfwJpfdU2BssSjpyqMkqrI3Pjs=",
- "zh:001373be6fbc5738bf8c3aa8688b248ba5f99b04174310c0efcbbf23e6c4dc29",
- "zh:0d4af59266668089790f5a7bdeb25642ba750fb5dc7934fe28d1cc36310ba495",
- "zh:1413ff4d445678c096d46e8957e27320df94561354955d7bc5d8054b6df7b299",
- "zh:19d614259f7ce16b50ec07868404b58749702baaf86bcd14fbaea2756e1c9f25",
- "zh:2d148ff632da25852622b06b5be9f5a0b6d509621a002a47338f96509021945b",
- "zh:3959a1d989c99f3e7cdd5de07eb3e7df7a85e19677488278c77ab753dd7127e6",
- "zh:5d8d65b458a8934dc67d22904da368b5bc3a77fb9c900ac89c54e736a221b76f",
- "zh:94d5660e56118fcaa40fccaff960a9bf4166b7b0e7fedeb21b2402c8fc7b4cb1",
- "zh:a6002ecc23ebc468ccac6f36c0ed7cc95de3223ef6b100e6c81762d22cc14077",
- "zh:b0880c82bc2ad395ef3dbf5a592a23e65bf943df8995d5d4238740f96a02f529",
- "zh:ee65f3d2c13653e0828222a63fb832f98e9835b84443eeca00ce36ae39783c08",
+ "h1:hqoQJnKaTfzNge5oCELAs+jqiT0R0oygDYlG4pmy3yk=",
+ "zh:3f7e734abb9d647c851f5cb987837d7c073c9cbf1f520a031027d827f93d3b68",
+ "zh:5ca9400360a803a11cf432ca203be9f09da8fff9c96110a83c9029102b18c9d5",
+ "zh:5d421f475d467af182a527b7a61d50105dc63394316edf1c775ef736f84b941c",
+ "zh:68f2328e7f3e7666835d6815b39b46b08954a91204f82a6f648c928a0b09a744",
+ "zh:6a4170e7e2764df2968d1df65efebda55273dfc36dc6741207afb5e4b7e85448",
+ "zh:73f2a15bee21f7c92a071e2520216d0a40041aca52c0f6682e540da8ffcfada4",
+ "zh:9843d6973aedfd4cbaafd7110420d0c4c1d7ef4a2eeff508294c3adcc3613145",
+ "zh:9b12af85486a96aedd8d7984b0ff811a4b42e3d88dad1a3fb4c0b580d04fa425",
+ "zh:9d1abd6be717c42f2a6257ee227d3e9548c31f01c976ed7b32b2745a63659a67",
+ "zh:a70d642e323021d54a92f0daa81d096cb5067cb99ce116047a42eb1cb1d579a0",
+ "zh:b9a2b293208d5a0449275fae463319e0998c841e0bcd4014594a49ba54bb70d6",
+ "zh:ce0b0eb7ac24ff58c20efcb526c3f792a95be3617c795b45bbeea9f302903ae7",
+ "zh:dbbf98b3cd8003833c472bdb89321c17a9bbdc1b785e7e3d75f8af924ee5a0e4",
+ "zh:df86cf9311a4be8bb4a251196650653f97e01fbf5fe72deecc8f28a35a5352ae",
+ "zh:f92992881afd9339f3e539fcd90cfc1e9ed1356b5e760bbcc804314c3cd6837f",
]
}
provider "registry.terraform.io/hashicorp/null" {
- version = "3.1.0"
+ version = "3.2.4"
hashes = [
- "h1:xhbHC6in3nQryvTQBWKxebi3inG5OCgHgc4fRxL0ymc=",
- "zh:02a1675fd8de126a00460942aaae242e65ca3380b5bb192e8773ef3da9073fd2",
- "zh:53e30545ff8926a8e30ad30648991ca8b93b6fa496272cd23b26763c8ee84515",
- "zh:5f9200bf708913621d0f6514179d89700e9aa3097c77dac730e8ba6e5901d521",
- "zh:9ebf4d9704faba06b3ec7242c773c0fbfe12d62db7d00356d4f55385fc69bfb2",
- "zh:a6576c81adc70326e4e1c999c04ad9ca37113a6e925aefab4765e5a5198efa7e",
- "zh:a8a42d13346347aff6c63a37cda9b2c6aa5cc384a55b2fe6d6adfa390e609c53",
- "zh:c797744d08a5307d50210e0454f91ca4d1c7621c68740441cf4579390452321d",
- "zh:cecb6a304046df34c11229f20a80b24b1603960b794d68361a67c5efe58e62b8",
- "zh:e1371aa1e502000d9974cfaff5be4cfa02f47b17400005a16f14d2ef30dc2a70",
- "zh:fc39cc1fe71234a0b0369d5c5c7f876c71b956d23d7d6f518289737a001ba69b",
- "zh:fea4227271ebf7d9e2b61b89ce2328c7262acd9fd190e1fd6d15a591abfa848e",
+ "h1:hkf5w5B6q8e2A42ND2CjAvgvSN3puAosDmOJb3zCVQM=",
+ "zh:59f6b52ab4ff35739647f9509ee6d93d7c032985d9f8c6237d1f8a59471bbbe2",
+ "zh:78d5eefdd9e494defcb3c68d282b8f96630502cac21d1ea161f53cfe9bb483b3",
+ "zh:795c897119ff082133150121d39ff26cb5f89a730a2c8c26f3a9c1abf81a9c43",
+ "zh:7b9c7b16f118fbc2b05a983817b8ce2f86df125857966ad356353baf4bff5c0a",
+ "zh:85e33ab43e0e1726e5f97a874b8e24820b6565ff8076523cc2922ba671492991",
+ "zh:9d32ac3619cfc93eb3c4f423492a8e0f79db05fec58e449dee9b2d5873d5f69f",
+ "zh:9e15c3c9dd8e0d1e3731841d44c34571b6c97f5b95e8296a45318b94e5287a6e",
+ "zh:b4c2ab35d1b7696c30b64bf2c0f3a62329107bd1a9121ce70683dec58af19615",
+ "zh:c43723e8cc65bcdf5e0c92581dcbbdcbdcf18b8d2037406a5f2033b1e22de442",
+ "zh:ceb5495d9c31bfb299d246ab333f08c7fb0d67a4f82681fbf47f2a21c3e11ab5",
+ "zh:e171026b3659305c558d9804062762d168f50ba02b88b231d20ec99578a6233f",
+ "zh:ed0fe2acdb61330b01841fa790be00ec6beaac91d41f311fb8254f74eb6a711f",
]
}
provider "registry.terraform.io/hashicorp/random" {
- version = "3.1.0"
+ version = "3.7.2"
hashes = [
- "h1:rKYu5ZUbXwrLG1w81k7H3nce/Ys6yAxXhWcbtk36HjY=",
- "zh:2bbb3339f0643b5daa07480ef4397bd23a79963cc364cdfbb4e86354cb7725bc",
- "zh:3cd456047805bf639fbf2c761b1848880ea703a054f76db51852008b11008626",
- "zh:4f251b0eda5bb5e3dc26ea4400dba200018213654b69b4a5f96abee815b4f5ff",
- "zh:7011332745ea061e517fe1319bd6c75054a314155cb2c1199a5b01fe1889a7e2",
- "zh:738ed82858317ccc246691c8b85995bc125ac3b4143043219bd0437adc56c992",
- "zh:7dbe52fac7bb21227acd7529b487511c91f4107db9cc4414f50d04ffc3cab427",
- "zh:a3a9251fb15f93e4cfc1789800fc2d7414bbc18944ad4c5c98f466e6477c42bc",
- "zh:a543ec1a3a8c20635cf374110bd2f87c07374cf2c50617eee2c669b3ceeeaa9f",
- "zh:d9ab41d556a48bd7059f0810cf020500635bfc696c9fc3adab5ea8915c1d886b",
- "zh:d9e13427a7d011dbd654e591b0337e6074eef8c3b9bb11b2e39eaaf257044fd7",
- "zh:f7605bd1437752114baf601bdf6931debe6dc6bfe3006eb7e9bb9080931dca8a",
+ "h1:356j/3XnXEKr9nyicLUufzoF4Yr6hRy481KIxRVpK0c=",
+ "zh:14829603a32e4bc4d05062f059e545a91e27ff033756b48afbae6b3c835f508f",
+ "zh:1527fb07d9fea400d70e9e6eb4a2b918d5060d604749b6f1c361518e7da546dc",
+ "zh:1e86bcd7ebec85ba336b423ba1db046aeaa3c0e5f921039b3f1a6fc2f978feab",
+ "zh:24536dec8bde66753f4b4030b8f3ef43c196d69cccbea1c382d01b222478c7a3",
+ "zh:29f1786486759fad9b0ce4fdfbbfece9343ad47cd50119045075e05afe49d212",
+ "zh:4d701e978c2dd8604ba1ce962b047607701e65c078cb22e97171513e9e57491f",
+ "zh:78d5eefdd9e494defcb3c68d282b8f96630502cac21d1ea161f53cfe9bb483b3",
+ "zh:7b8434212eef0f8c83f5a90c6d76feaf850f6502b61b53c329e85b3b281cba34",
+ "zh:ac8a23c212258b7976e1621275e3af7099e7e4a3d4478cf8d5d2a27f3bc3e967",
+ "zh:b516ca74431f3df4c6cf90ddcdb4042c626e026317a33c53f0b445a3d93b720d",
+ "zh:dc76e4326aec2490c1600d6871a95e78f9050f9ce427c71707ea412a2f2f1a62",
+ "zh:eac7b63e86c749c7d48f527671c7aee5b4e26c10be6ad7232d6860167f99dbb0",
]
}
diff --git a/terraform/ecs_services.tf b/terraform/ecs_services.tf
index 58a6ed0..779d4c7 100644
--- a/terraform/ecs_services.tf
+++ b/terraform/ecs_services.tf
@@ -33,6 +33,7 @@ module "db_schema" {
module "arch_task_webapp" {
source = "./modules/arch_task"
+ db_pool_size = 5
container_config = local.container_config
cpu = 2048
memory = 4096
@@ -81,9 +82,9 @@ resource "aws_ecs_service" "arch_webapp" {
module "arch_task_worker" {
source = "./modules/arch_task"
container_config = local.container_config
- cpu = 2048
- db_pool_size = 20
- memory = 4096
+ cpu = 4096
+ memory = 8192
+ db_pool_size = 50
container_role = "worker"
role_arn = aws_iam_role.arch_role.arn
app_name = var.app_name
@@ -117,3 +118,50 @@ resource "aws_ecs_service" "arch_worker" {
tags = local.tags
}
+
+resource "aws_appautoscaling_target" "webapp_target" {
+ count = var.enable_autoscaling ? 1 : 0
+ max_capacity = var.service_count_max
+ min_capacity = var.service_count_min
+ resource_id = "service/${aws_ecs_cluster.arch.name}/${aws_ecs_service.arch_webapp.name}"
+ scalable_dimension = "ecs:service:DesiredCount"
+ service_namespace = "ecs"
+}
+
+resource "aws_appautoscaling_policy" "webapp_cpu_policy" {
+ count = var.enable_autoscaling ? 1 : 0
+ name = "scale-up-on-cpu"
+ policy_type = "TargetTrackingScaling"
+ resource_id = aws_appautoscaling_target.webapp_target[0].resource_id
+ scalable_dimension = aws_appautoscaling_target.webapp_target[0].scalable_dimension
+ service_namespace = aws_appautoscaling_target.webapp_target[0].service_namespace
+
+ target_tracking_scaling_policy_configuration {
+ predefined_metric_specification {
+ predefined_metric_type = "ECSServiceAverageCPUUtilization"
+ }
+ scale_in_cooldown = 300
+ scale_out_cooldown = 300
+
+ target_value = var.cpu_target
+ }
+}
+
+resource "aws_appautoscaling_policy" "webapp_memory_policy" {
+ count = var.enable_autoscaling ? 1 : 0
+ name = "auto-scale-on-mem"
+ policy_type = "TargetTrackingScaling"
+ resource_id = aws_appautoscaling_target.webapp_target[0].resource_id
+ scalable_dimension = aws_appautoscaling_target.webapp_target[0].scalable_dimension
+ service_namespace = aws_appautoscaling_target.webapp_target[0].service_namespace
+
+ target_tracking_scaling_policy_configuration {
+ predefined_metric_specification {
+ predefined_metric_type = "ECSServiceAverageMemoryUtilization"
+ }
+ scale_in_cooldown = 300
+ scale_out_cooldown = 300
+
+ target_value = var.cpu_target
+ }
+}
\ No newline at end of file
diff --git a/terraform/variables.tf b/terraform/variables.tf
index 3dbae1e..202bab1 100644
--- a/terraform/variables.tf
+++ b/terraform/variables.tf
@@ -72,3 +72,33 @@ variable "recaptcha_secret_key" {
variable "recaptcha_site_key" {
type = string
}
+
+variable "enable_autoscaling" {
+ type = bool
+ default = false
+}
+
+variable "service_count_min" {
+ type = number
+ default = 1
+}
+
+variable "service_count_max" {
+ type = number
+ default = 3
+}
+
+variable "service_count_desired" {
+ type = number
+ default = 1
+}
+
+variable "cpu_target" {
+ type = number
+ default = 70
+}
+
+variable "memory_target" {
+ type = number
+ default = 70
+}
\ No newline at end of file