Compare commits
No commits in common. "main" and "0.1.0" have entirely different histories.
2
.gitignore
vendored
2
.gitignore
vendored
@ -1,4 +1,2 @@
|
|||||||
.*.sw?
|
.*.sw?
|
||||||
toclerbe
|
toclerbe
|
||||||
data/
|
|
||||||
.terraform
|
|
||||||
|
@ -1 +0,0 @@
|
|||||||
opentofu 1.8.0
|
|
@ -8,8 +8,7 @@ RUN nimble build -y
|
|||||||
|
|
||||||
FROM alpine
|
FROM alpine
|
||||||
EXPOSE 80
|
EXPOSE 80
|
||||||
RUN apk -v --update add --no-cache pcre
|
|
||||||
|
|
||||||
RUN mkdir -p /data
|
|
||||||
COPY --from=build /toclerbe/toclerbe /
|
COPY --from=build /toclerbe/toclerbe /
|
||||||
CMD ["/toclerbe", "/data/urls.txt"]
|
COPY ministrysuite_api.config.docker.json /ministrysuite_api.config.json
|
||||||
|
CMD ["/toclerbe", "serve"]
|
||||||
|
20
Makefile
20
Makefile
@ -4,8 +4,6 @@ ECR_ACCOUNT_URL ?= 063932952339.dkr.ecr.us-west-2.amazonaws.com
|
|||||||
VERSION ?=`git describe`
|
VERSION ?=`git describe`
|
||||||
PORT ?= 8080
|
PORT ?= 8080
|
||||||
|
|
||||||
TARGET_SERVER ?= sobeck.jdb-software.com
|
|
||||||
|
|
||||||
default: serve-docker
|
default: serve-docker
|
||||||
|
|
||||||
build: $(SOURCES)
|
build: $(SOURCES)
|
||||||
@ -24,27 +22,13 @@ build-image: $(SOURCES)
|
|||||||
push-image: build-image
|
push-image: build-image
|
||||||
docker push $(ECR_ACCOUNT_URL)/toclerbe:$(VERSION)
|
docker push $(ECR_ACCOUNT_URL)/toclerbe:$(VERSION)
|
||||||
|
|
||||||
serve-docker: build-image
|
serve-docker: build-image start-postgres
|
||||||
docker run \
|
docker run \
|
||||||
-v "data:/data" \
|
|
||||||
-e TOCLERBE_PORT=80 \
|
-e TOCLERBE_PORT=80 \
|
||||||
-e TOCLERBE_API_KEYS=qwertyasdfgh \
|
-e TOCLERBE_API_KEYS=qwertyasdfgh
|
||||||
-e "ISSUER=$(ISSUER)" \
|
-e "ISSUER=$(ISSUER)" \
|
||||||
-p 127.0.0.1:$(PORT):80/tcp \
|
-p 127.0.0.1:$(PORT):80/tcp \
|
||||||
$(ECR_ACCOUNT_URL)/toclerbe:$(VERSION)
|
$(ECR_ACCOUNT_URL)/toclerbe:$(VERSION)
|
||||||
|
|
||||||
ecr-auth:
|
ecr-auth:
|
||||||
aws ecr get-login-password --region us-west-2 | docker login --username AWS --password-stdin $(ECR_ACCOUNT_URL)
|
aws ecr get-login-password --region us-west-2 | docker login --username AWS --password-stdin $(ECR_ACCOUNT_URL)
|
||||||
|
|
||||||
publish:
|
|
||||||
-mkdir deploy
|
|
||||||
m4 -D "TOCLERBE_VERSION=$(VERSION)" \
|
|
||||||
toclerbe.service \
|
|
||||||
> deploy/toclerbe.service
|
|
||||||
-ssh deployer@$(TARGET_SERVER) "docker stop toclerbe.service && sudo systemctl stop toclerbe"
|
|
||||||
ssh deployer@$(TARGET_SERVER) "aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin $(ECR_ACCOUNT_URL) && docker pull $(ECR_ACCOUNT_URL)/toclerbe:$(VERSION)"
|
|
||||||
scp \
|
|
||||||
deploy/toclerbe.service \
|
|
||||||
deployer@$(TARGET_SERVER):/etc/systemd/system/toclerbe.service
|
|
||||||
ssh deployer@$(TARGET_SERVER) "sudo systemctl daemon-reload"
|
|
||||||
ssh deployer@$(TARGET_SERVER) "sudo systemctl start toclerbe"
|
|
||||||
|
@ -1,52 +0,0 @@
|
|||||||
resource "aws_lb_target_group" "toclerbe" {
|
|
||||||
name = "${var.app_name}-${substr(uuid(), 0, 2)}"
|
|
||||||
port = 80
|
|
||||||
protocol = "HTTP"
|
|
||||||
target_type = "instance"
|
|
||||||
vpc_id = data.terraform_remote_state.jdbsoft.outputs.aws_vpc_jdbsoft.id
|
|
||||||
|
|
||||||
health_check {
|
|
||||||
enabled = true
|
|
||||||
matcher = "200"
|
|
||||||
path = "/version"
|
|
||||||
}
|
|
||||||
|
|
||||||
lifecycle {
|
|
||||||
create_before_destroy = true
|
|
||||||
ignore_changes = [name]
|
|
||||||
}
|
|
||||||
|
|
||||||
tags = {
|
|
||||||
Name = var.app_name
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
resource "aws_lb_listener_rule" "toclerbe" {
|
|
||||||
listener_arn = data.terraform_remote_state.jdbsoft.outputs.aws_lb_listener_https.arn
|
|
||||||
|
|
||||||
action {
|
|
||||||
type = "forward"
|
|
||||||
target_group_arn = aws_lb_target_group.toclerbe.arn
|
|
||||||
}
|
|
||||||
|
|
||||||
condition {
|
|
||||||
host_header {
|
|
||||||
values = [ var.app_domain ]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
tags = {
|
|
||||||
Name = "${var.app_domain} HTTPS"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
resource "aws_lb_listener_certificate" "toclerbe" {
|
|
||||||
listener_arn = data.terraform_remote_state.jdbsoft.outputs.aws_lb_listener_https.arn
|
|
||||||
certificate_arn = aws_acm_certificate.clerbe.arn
|
|
||||||
}
|
|
||||||
|
|
||||||
resource "aws_lb_target_group_attachment" "toclerbe" {
|
|
||||||
target_group_arn = aws_lb_target_group.toclerbe.arn
|
|
||||||
target_id = data.terraform_remote_state.jdbsoft.outputs.sobeck-instance-id
|
|
||||||
port = 6001
|
|
||||||
}
|
|
@ -1,53 +0,0 @@
|
|||||||
### Setup/Configuration
|
|
||||||
provider "aws" {
|
|
||||||
region = var.aws_region
|
|
||||||
}
|
|
||||||
|
|
||||||
terraform {
|
|
||||||
backend "s3" {
|
|
||||||
bucket = "operations.jdb-software.com"
|
|
||||||
region = "us-west-2"
|
|
||||||
key = "terraform/toclerbe.tfstate"
|
|
||||||
dynamodb_table = "terraform-state-lock.jdb-software.com"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
data "terraform_remote_state" "jdbsoft" {
|
|
||||||
backend = "s3"
|
|
||||||
|
|
||||||
config = {
|
|
||||||
bucket = "operations.jdb-software.com"
|
|
||||||
region = "us-west-2"
|
|
||||||
key = "terraform/operations.tfstate"
|
|
||||||
dynamodb_table = "terraform-state-lock.jdb-software.com"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
### Variables
|
|
||||||
|
|
||||||
variable "aws_region" {
|
|
||||||
description = "https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-regions-availability-zones.html"
|
|
||||||
default = "us-west-2" # Oregon
|
|
||||||
}
|
|
||||||
|
|
||||||
variable "app_domain" {
|
|
||||||
description = "Name of the app domain."
|
|
||||||
default = "to.cler.be"
|
|
||||||
}
|
|
||||||
|
|
||||||
variable "app_name" {
|
|
||||||
description = "Name of the app domain."
|
|
||||||
default = "toclerbe"
|
|
||||||
}
|
|
||||||
|
|
||||||
data "external" "git_describe" {
|
|
||||||
program = ["sh", "-c", "git describe | xargs printf '{\"version\": \"%s\"}'"]
|
|
||||||
}
|
|
||||||
|
|
||||||
resource "aws_ecr_repository" "toclerbe" {
|
|
||||||
name = "${var.app_name}"
|
|
||||||
image_tag_mutability = "IMMUTABLE"
|
|
||||||
|
|
||||||
image_scanning_configuration {
|
|
||||||
scan_on_push = true
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,52 +0,0 @@
|
|||||||
resource "aws_route53_zone" "clerbe" {
|
|
||||||
name = "cler.be"
|
|
||||||
comment = "Short domain for JDB Software services."
|
|
||||||
}
|
|
||||||
|
|
||||||
// ===========================================================================
|
|
||||||
// Routes and certificates defined on cler.be
|
|
||||||
// ===========================================================================
|
|
||||||
|
|
||||||
resource "aws_route53_record" "to_clerbe" {
|
|
||||||
name = "to.cler.be"
|
|
||||||
type = "A"
|
|
||||||
zone_id = aws_route53_zone.clerbe.id
|
|
||||||
|
|
||||||
alias {
|
|
||||||
evaluate_target_health = true
|
|
||||||
name = data.terraform_remote_state.jdbsoft.outputs.aws_lb_jdbsoft.dns_name
|
|
||||||
zone_id = data.terraform_remote_state.jdbsoft.outputs.aws_lb_jdbsoft.zone_id
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
resource "aws_acm_certificate" "clerbe" {
|
|
||||||
domain_name = "*.cler.be"
|
|
||||||
subject_alternative_names = [ "cler.be" ]
|
|
||||||
validation_method = "DNS"
|
|
||||||
|
|
||||||
lifecycle {
|
|
||||||
create_before_destroy = true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
resource "aws_route53_record" "clerbe_cert_validation" {
|
|
||||||
for_each = {
|
|
||||||
for dvo in aws_acm_certificate.clerbe.domain_validation_options: dvo.domain_name => {
|
|
||||||
name = dvo.resource_record_name
|
|
||||||
type = dvo.resource_record_type
|
|
||||||
record = dvo.resource_record_value
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
allow_overwrite = true
|
|
||||||
name = each.value.name
|
|
||||||
records = [ each.value.record ]
|
|
||||||
ttl = 300
|
|
||||||
type = each.value.type
|
|
||||||
zone_id = aws_route53_zone.clerbe.zone_id
|
|
||||||
}
|
|
||||||
|
|
||||||
resource "aws_acm_certificate_validation" "clerbe" {
|
|
||||||
certificate_arn = aws_acm_certificate.clerbe.arn
|
|
||||||
validation_record_fqdns = [for record in aws_route53_record.clerbe_cert_validation : record.fqdn]
|
|
||||||
}
|
|
@ -1,16 +0,0 @@
|
|||||||
# From dev machine
|
|
||||||
cd ~/projects/to.cler.be
|
|
||||||
scp prod.env sobeck.jdb-software.com:~/temp/to.cler.be.prod.env
|
|
||||||
scp to.cler.be.service sobeck.jdb-software.com:~/temp/to.cler.be.service
|
|
||||||
|
|
||||||
# SSH into sobeck
|
|
||||||
sudo mkdir /etc/to.cler.be
|
|
||||||
sudo mv temp/to.cler.be.prod.env /etc/to.cler.be/prod.env
|
|
||||||
sudo mv temp/toclerbe.service /etc/systemd/system/toclerbe.service
|
|
||||||
sudo chown root:root /etc/to.cler.be/*
|
|
||||||
|
|
||||||
sudo vim /etc/to.cler.be/prod.env # add value for API keys, etc.
|
|
||||||
|
|
||||||
sudo systemctl daemon-reload
|
|
||||||
sudo systemctl enable toclerbe
|
|
||||||
sudo systemctl start toclerbe
|
|
@ -1,4 +1,4 @@
|
|||||||
const TOCLERBE_VERSION* = "0.2.0"
|
const TOCLERBE_VERSION* = "0.1.0"
|
||||||
|
|
||||||
const USAGE* = """
|
const USAGE* = """
|
||||||
Usage:
|
Usage:
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
# Package
|
# Package
|
||||||
|
|
||||||
version = "0.2.0"
|
version = "0.1.0"
|
||||||
author = "Jonathan Bernard"
|
author = "Jonathan Bernard"
|
||||||
description = "Jonathan's custom URL shortener/bookmark service."
|
description = "Jonathan's custom URL shortener/bookmark service."
|
||||||
license = "MIT"
|
license = "MIT"
|
||||||
|
@ -1,18 +0,0 @@
|
|||||||
[Unit]
|
|
||||||
Description=to.cler.be URL shortener
|
|
||||||
After=network-online.target
|
|
||||||
Requires=docker.service
|
|
||||||
|
|
||||||
[Service]
|
|
||||||
TimeoutStartSec=0
|
|
||||||
Restart=always
|
|
||||||
ExecStartPre=-/usr/bin/docker exec %n stop
|
|
||||||
ExecStartPre=-/usr/bin/docker rm %n
|
|
||||||
ExecStart=/usr/bin/docker run --rm -p 6001:80 --name %n \
|
|
||||||
--env-file /etc/to.cler.be/prod.env \
|
|
||||||
-v /efs/toclerbe/data:/data \
|
|
||||||
063932952339.dkr.ecr.us-west-2.amazonaws.com/to.cler.be:TOCLERBE_VERSION
|
|
||||||
ExecStop=/usr/bin/docker stop --name %n
|
|
||||||
|
|
||||||
[Install]
|
|
||||||
WantedBy=default.target
|
|
Loading…
x
Reference in New Issue
Block a user