chrisluiz16

nginx+docker+certbot

Jun 22nd, 2023
1,347
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 4.01 KB | None | 0 0
  1.  
  2.  
  3.  
  4. --------------------------- Nginx+wordprss+mysql+certbot provisioned via terraform from userdata-------------------------
  5.  
  6.  
  7.  
  8. #### Userdata ####
  9.  
  10. #!/bin/bash
  11.  
  12. echo "ClientAliveInterval 60" >> /etc/ssh/sshd_config
  13. echo "LANG=en_US.utf-8" >> /etc/environment
  14. echo "LC_ALL=en_US.utf-8" >> /etc/environment
  15. service sshd restart
  16.  
  17. yum install docker -y
  18. systemctl restart docker.service
  19. systemctl enable docker.service
  20. usermod -aG docker ec2-user
  21. su - ec2-user
  22.  
  23.  
  24. docker network create wp-net
  25. docker volume create mysql-vol
  26. docker volume create wp-vol
  27.  
  28.  
  29. docker image pull mysql:8-debian
  30. docker image pull wordpress:latest
  31. docker image pull nginx:alpine
  32.  
  33.  
  34. docker container run \
  35. -d \
  36. --name mysql-server \
  37. --restart always \
  38. --network wp-net \
  39. -v mysql-vol:/var/lib/mysql/ \
  40. -e MYSQL_ROOT_PASSWORD="root@123" \
  41. -e MYSQL_DATABASE="wordpress" \
  42. -e MYSQL_USER="wpuser" \
  43. -e MYSQL_PASSWORD="wpuser@123" \
  44. mysql:8-debian
  45.  
  46. docker container run \
  47. --name wordpress \
  48. --restart always \
  49. --network wp-net \
  50. -d \
  51. -v wp-vol:/var/www/html/ \
  52. -e WORDPRESS_DB_HOST="mysql-server" \
  53. -e WORDPRESS_DB_USER="wpuser" \
  54. -e WORDPRESS_DB_PASSWORD="wpuser@123" \
  55. -e WORDPRESS_DB_NAME="wordpress" \
  56. wordpress:latest
  57.  
  58. cat <<'EOF' >> /home/ec2-user/default.conf
  59. server {
  60.     listen       80;
  61.     listen  [::]:80;
  62.     server_name  ${domain_name};
  63.     root   /var/www/html;
  64.     index index.php;
  65.     location / {
  66.         proxy_pass http://wordpress:80;
  67.         proxy_set_header X-Forwarded-For $remote_addr;
  68.         proxy_set_header X-Forwarded-Proto $scheme;
  69.         proxy_set_header Host $host;
  70.     }
  71.    location ~ .php$ {
  72.         proxy_pass http://wordpress:80;
  73.         proxy_set_header X-Forwarded-For $remote_addr;
  74.         proxy_set_header X-Forwarded-Proto $scheme;
  75.         proxy_set_header Host $host;
  76.     }
  77. }
  78. EOF
  79.  
  80.  
  81. docker container run \
  82. --name nginx \
  83. --network wp-net \
  84. -d \
  85. -p 80:80 -p 443:443 \
  86. -v /home/ec2-user/default.conf:/etc/nginx/conf.d/default.conf/ \
  87. nginx:alpine
  88.  
  89. docker container exec nginx sh -c "apk update && apk add certbot certbot-nginx --no-cache; certbot --nginx -d ${domain_name} --non-interactive --agree-tos -m admin@${hosted_zone}; exit"
  90. docker container restart nginx
  91.  
  92.  
  93.  
  94. #### main.tf from built-in templatefile function  ####
  95.  
  96. provider "aws" {
  97.   region     = var.region
  98.   access_key = var.access_key
  99.   secret_key = var.secret_key
  100.   default_tags {
  101.  
  102.     tags = {
  103.       Name         = "${var.project_name}-${var.project_env}"
  104.       project_name = var.project_name
  105.       project_env  = var.project_env
  106.  
  107.     }
  108.  
  109.  
  110.   }
  111. }
  112.  
  113.  
  114.  
  115. resource "aws_security_group" "sg" {
  116.   name_prefix = "${var.project_name}-${var.project_env}-"
  117.   description = "Allow ssh"
  118.  
  119.   ingress {
  120.     from_port        = 22
  121.     to_port          = 22
  122.     protocol         = "tcp"
  123.     cidr_blocks      = ["0.0.0.0/0"]
  124.     ipv6_cidr_blocks = ["::/0"]
  125.   }
  126.   ingress {
  127.     from_port        = 80
  128.     to_port          = 80
  129.     protocol         = "tcp"
  130.     cidr_blocks      = ["0.0.0.0/0"]
  131.     ipv6_cidr_blocks = ["::/0"]
  132.   }
  133.   ingress {
  134.     from_port        = 443
  135.     to_port          = 443
  136.     protocol         = "tcp"
  137.     cidr_blocks      = ["0.0.0.0/0"]
  138.     ipv6_cidr_blocks = ["::/0"]
  139.   }
  140.  
  141.   egress {
  142.     from_port        = 0
  143.     to_port          = 0
  144.     protocol         = "-1"
  145.     cidr_blocks      = ["0.0.0.0/0"]
  146.     ipv6_cidr_blocks = ["::/0"]
  147.   }
  148.   lifecycle {
  149.     create_before_destroy = true
  150.   }
  151.  
  152. }
  153.  
  154.  
  155. resource "aws_instance" "project" {
  156.   ami                    = var.ami_id
  157.   instance_type          = var.instance_type
  158.   key_name               = var.key_name
  159.   vpc_security_group_ids = [aws_security_group.sg.id]
  160.   user_data = templatefile("userdata.tmpl", { domain_name = var.domain_name, hosted_zone = var.hosted_zone })
  161. }
  162.  
  163. data "aws_route53_zone" "fetch" {
  164.   name = var.hosted_zone
  165. }
  166.  
  167. resource "aws_route53_record" "www" {
  168.   zone_id = data.aws_route53_zone.fetch.id
  169.   name    = var.domain_name
  170.   type    = "A"
  171.   ttl     = 5
  172.   records = [aws_instance.project.public_ip]
  173. }
  174.  
Advertisement
Add Comment
Please, Sign In to add comment