🔧 Config/docs of various sort
This commit is contained in:
parent
133c09076a
commit
ee0f40d82c
6 changed files with 187 additions and 0 deletions
12
docker_configs/docker/postgres/docker-compose.yml
Normal file
12
docker_configs/docker/postgres/docker-compose.yml
Normal file
|
|
@ -0,0 +1,12 @@
|
||||||
|
version: "3.8"
|
||||||
|
services:
|
||||||
|
db:
|
||||||
|
image: postgres:16.1-alpine
|
||||||
|
restart: always
|
||||||
|
environment:
|
||||||
|
- POSTGRES_USER=postgros
|
||||||
|
- POSTGRES_PASSWORD=postgros
|
||||||
|
networks:
|
||||||
|
- app_backend
|
||||||
|
networks:
|
||||||
|
app_backend: {}
|
||||||
22
docker_configs/docker/postgres/readme.md
Normal file
22
docker_configs/docker/postgres/readme.md
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
## Setting up Redis With Docker
|
||||||
|
|
||||||
|
**NOTE:**
|
||||||
|
|
||||||
|
This is just a starting point for using redis within docker. Eventually we'll
|
||||||
|
need to set up an image that utilizes nodejs/npm to install our backend
|
||||||
|
dependencies, postgresql, and redis to all work within a single container. See
|
||||||
|
[this helpful tutorial](https://geshan.com.np/blog/2022/01/redis-docker/).
|
||||||
|
|
||||||
|
To run this simple container, simply invoke:
|
||||||
|
|
||||||
|
```
|
||||||
|
docker-compose -f docker-compose.yml up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
And if you want to interact with the redis instance via the cli:
|
||||||
|
|
||||||
|
// NOTE FOR POSTGRES, EDIT THIS:
|
||||||
|
|
||||||
|
```
|
||||||
|
docker exec -it <CONTAINER_ID> psql -U <USERNAME>
|
||||||
|
```
|
||||||
18
docker_configs/docker/redis/docker-compose.yml
Normal file
18
docker_configs/docker/redis/docker-compose.yml
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
version: "3.8"
|
||||||
|
|
||||||
|
services:
|
||||||
|
cache:
|
||||||
|
image: redis:7.2-alpine
|
||||||
|
restart: always
|
||||||
|
command: redis-server --save 20 1 --loglevel warning --requirepass redis
|
||||||
|
networks:
|
||||||
|
- postgres_app_backend
|
||||||
|
volumes:
|
||||||
|
- cache:/data
|
||||||
|
networks:
|
||||||
|
postgres_app_backend:
|
||||||
|
name: postgres_app_backend
|
||||||
|
external: true
|
||||||
|
volumes:
|
||||||
|
cache:
|
||||||
|
driver: local
|
||||||
20
docker_configs/docker/redis/readme.md
Normal file
20
docker_configs/docker/redis/readme.md
Normal file
|
|
@ -0,0 +1,20 @@
|
||||||
|
## Setting up Redis With Docker
|
||||||
|
|
||||||
|
**NOTE:**
|
||||||
|
|
||||||
|
This is just a starting point for using redis within docker. Eventually we'll
|
||||||
|
need to set up an image that utilizes nodejs/npm to install our backend
|
||||||
|
dependencies, postgresql, and redis to all work within a single container. See
|
||||||
|
[this helpful tutorial](https://geshan.com.np/blog/2022/01/redis-docker/).
|
||||||
|
|
||||||
|
To run this simple container, simply invoke:
|
||||||
|
|
||||||
|
```
|
||||||
|
docker-compose -f docker-compose.yml up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
And if you want to interact with the redis instance via the cli:
|
||||||
|
|
||||||
|
```
|
||||||
|
docker exec -it <CONTAINER_ID> redis-cli -a <REDIS_PASSWORD>
|
||||||
|
```
|
||||||
21
docker_configs/nginx/nginx_example.conf
Normal file
21
docker_configs/nginx/nginx_example.conf
Normal file
|
|
@ -0,0 +1,21 @@
|
||||||
|
worker_processes 1;
|
||||||
|
|
||||||
|
events {
|
||||||
|
worker_connections 1024;
|
||||||
|
}
|
||||||
|
|
||||||
|
http {
|
||||||
|
include mime.types;
|
||||||
|
default_type application/octet-stream;
|
||||||
|
sendfile on;
|
||||||
|
keepalive_timeout 65;
|
||||||
|
server {
|
||||||
|
listen 6969;
|
||||||
|
server_name localhost;
|
||||||
|
location / {
|
||||||
|
root /usr/share/nginx/html/;
|
||||||
|
index index.html index.htm;
|
||||||
|
try_files $uri $uri/ /index.html;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
94
ssl_setup.md
Normal file
94
ssl_setup.md
Normal file
|
|
@ -0,0 +1,94 @@
|
||||||
|
## Setting Up SSL
|
||||||
|
|
||||||
|
### Introduction
|
||||||
|
|
||||||
|
This document is meant to act as a short instruction on how to set up
|
||||||
|
SSL certificates for applications running via docker, and served up via NGINX.
|
||||||
|
It is also a short introduction to Domain Registration, and setting up your
|
||||||
|
first VPS. These topics are rarely covered in beginner web development topics as
|
||||||
|
they are usually relegated to the realm of DevOps and Systems Administrators,
|
||||||
|
but it is in my opinion this skill is worth having for any person wanting
|
||||||
|
to work in tech.
|
||||||
|
|
||||||
|
You'll need a beginner understanding of Docker, NGINX, Git, SSH, and the
|
||||||
|
Linux Command Line. In this short tutorial, we'll be covering purchasing and
|
||||||
|
setting up a Domain via the NameCheap Registrar. Additionally we'll assume you
|
||||||
|
have a Linode/Akamai instance running with basic firewall, ssh rules, and
|
||||||
|
fail2ban set up on a basic Linux VPS. Afterwards which we will be allocating A records so that
|
||||||
|
our VPS from Linode has DNS records, which allow LetsEncrypt via Certbot to "see" our domain.
|
||||||
|
|
||||||
|
We'll spin up our docker container(s), exposing at least one docker container's port to our Host VPS,
|
||||||
|
and then configure NGINX to reverse proxy this port out onto the live internet.
|
||||||
|
Lastly we'll utilize LetsEncrypt's certbot to establish ssl certificates which
|
||||||
|
we will then redirect our reverse proxy through, giving us HTTPS encryption.
|
||||||
|
|
||||||
|
### Purchasing a Domain
|
||||||
|
|
||||||
|
There are many businesses where one can purchase domains. Known as Domain
|
||||||
|
Registrars, these businesses negotiate the registration of domain names with the
|
||||||
|
[ICANN](https://www.icann.org/), otherwise known as The Internet Corporation for Assigned Names and Numbers.
|
||||||
|
I personally use [NameCheap](https://www.namecheap.com/), but other popular
|
||||||
|
Domain Registrars include [Google Domains](https://domains.google/) and [PorkBun](https://porkbun.com/).
|
||||||
|
Once you've thought of a good Domain Name where your planned website/application
|
||||||
|
will live on the website, search the registrar to see their pricing. Sign up if
|
||||||
|
the price is agreeable to you and purchase the domain. Signing up for a domain
|
||||||
|
is a yearly subscription, so you will want to look carefully to see how much you will
|
||||||
|
be charged per year as oftentimes the first year (at least on NamepCheap) is at
|
||||||
|
a discount, and the yearly renewal fee is more expensive. Keep in mind that
|
||||||
|
prices do occassionally go up with inflation, and that should you ever fail to
|
||||||
|
renew your Domain Name, the price of purchasing the same domain name later down
|
||||||
|
the line is likely to be significantly higher to repurchase.
|
||||||
|
|
||||||
|
### Purchasing a VPS
|
||||||
|
|
||||||
|
Like Domain Registrars, there are many options for Cloud Hosting via a
|
||||||
|
VPS(Virtual Private Server), the most popular being that of [AWS](https://aws.amazon.com/),
|
||||||
|
or Amazon Web Services. I have not, at the time of this writing, worked with AWS, as their
|
||||||
|
ecosystem is very specific and could be argued to be a skillset in its own right
|
||||||
|
which simply incorporates aspects of VPS hosting.
|
||||||
|
|
||||||
|
Other, more hands on, and more bare bones alternatives include services like
|
||||||
|
[Digital Ocean](https://www.digitalocean.com/), [Linode/Akamai](https://www.linode.com/), and [Vultr](https://www.vultr.com/). There are a multitude of others, but I am most familiar with Linode, so that is what we are going to cover.
|
||||||
|
|
||||||
|
Unfortunately, the setting up of a VPS is a subject of its own, so this document
|
||||||
|
will assume that you have a basic understanding of the Linux command line, and
|
||||||
|
can follow [Linode's basic setup](https://www.linode.com/docs/products/compute/compute-instances/guides/create/). I recommend getting the cheapest shared CPU option if you are just starting out, especially if you're just starting out and want to learn the basics of VPS Cloud administration.
|
||||||
|
|
||||||
|
Once set up, you'll be assigned an IP address which should be open to the
|
||||||
|
internet via ssh. If you are familiar with setting up a bare bones Linux
|
||||||
|
distribution like Gentoo, Debian, or Arch Linux, then this will be very familiar
|
||||||
|
to you. However, if you are simply very comfortable in the Linux command line,
|
||||||
|
then you should be fine to work in this environment as well.
|
||||||
|
|
||||||
|
I won't be covering how to set up basic security infrastructure on your VPS,
|
||||||
|
sufficient to say you should at least set up firewall rules (only necessary
|
||||||
|
ports should be open to the public), ssh rules (no root login), complex password
|
||||||
|
set up(no obviously easy to guess passwords), and fail2ban (maximum number of
|
||||||
|
login attempts should be set up). Once all is in place, you should store your
|
||||||
|
VPS's raw IP address securely like you would other sensitive credential
|
||||||
|
information. While this ip address is visible on the internet to anyone curious
|
||||||
|
via tools like dnslookup, it is not advisable to make it overly easy to find out by just leaving it
|
||||||
|
laying around (don't post it on social media, don't commit the ip address up to
|
||||||
|
github, etc).
|
||||||
|
|
||||||
|
### Setting up NGINX and Docker
|
||||||
|
|
||||||
|
For the sake of brevity, I'll simply point you to Linode's documentation on
|
||||||
|
[setting up NGINX](https://www.linode.com/docs/guides/getting-started-with-nginx-part-1-installation-and-basic-setup/).
|
||||||
|
|
||||||
|
You'll also need docker and docker-compose for this tutorial:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
sudo apt install docker docker-compose
|
||||||
|
```
|
||||||
|
|
||||||
|
It's likely you'll need to enable docker using systemd:
|
||||||
|
|
||||||
|
```
|
||||||
|
systemctl enable docker
|
||||||
|
```
|
||||||
|
|
||||||
|
01/24/2024
|
||||||
|
NOTE: This document is getting rather lengthy and I realize that this will need
|
||||||
|
extensive research, images, and command line tutorials to get truly right. Turn
|
||||||
|
this into a blog post (or 2), and put it there.
|
||||||
Loading…
Add table
Add a link
Reference in a new issue