diff --git a/.gitignore b/.gitignore index 6dbfa00..3bbde9c 100644 --- a/.gitignore +++ b/.gitignore @@ -24,6 +24,8 @@ dist-ssr *.sw? # ENV +docker/.env +!docker/.env.example .env .env* !.env.example diff --git a/README.md b/README.md index ee50ddb..7510b8d 100644 --- a/README.md +++ b/README.md @@ -34,13 +34,13 @@ Theo solved this by doing all of the work client side. Once you've went to https ### How to self host -1. Clone the repo -2. Fill out the .env.example file & rename it to .env -3. Run `pnpm install` from the root of the repo -4. Run `pnpm build` from the root of the repo -5. Navigate to the docker folder & run `sudo docker-compose up -d` +1. Clone the repo. +2. Fill out the .env.example file in the root directory & rename it to .env. +3. Run `pnpm install && pnpm build` from the root of the repo. +4. Navigate to the docker folder & fill out the .env.example file & rename it to .env. +5. Run `sudo docker compose up -d` from within the docker directory. ### How to update the website -1. Run `pnpm build` from the root of the repo +1. Run `pnpm build` from the root of the repo. 2. Navigate to the docker folder & run `sudo docker compose down && sudo docker-compose up -d` diff --git a/docker/.env.example b/docker/.env.example new file mode 100644 index 0000000..3bc310e --- /dev/null +++ b/docker/.env.example @@ -0,0 +1,3 @@ +PORT=5000 +DOMAIN=bang.mydomain.com +NETWORK=bridge diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 347cb95..a933493 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -1,23 +1,23 @@ -version: '3.8' - services: bang-web-server: + env_file: + - .env build: - context: ../ # point to the parent directory where package.json and source code reside - dockerfile: docker/Dockerfile # specific path to the Dockerfile + context: ../ + dockerfile: docker/Dockerfile container_name: bang - domainname: bang.gbrown.org - hostname: bang + domainname: ${DOMAIN} networks: - - node_apps + - ${NETWORK} + hostname: bang ports: - - "5000:5000" + - ${PORT}:${PORT} tty: true restart: unless-stopped volumes: - - ../:/app # mount the parent directory to /app in the container + - ../:/app command: serve -s /app/dist -l 5000 networks: - node_apps: + ${NETWORK}: external: true diff --git a/docker/update-bang b/docker/update-bang new file mode 100755 index 0000000..54d5d33 --- /dev/null +++ b/docker/update-bang @@ -0,0 +1,52 @@ +#!/bin/bash + +# Function to check if we're in the correct directory +check_directory() { + if [ -d "docker" ] && [ -f "package.json" ]; then + return 0 # We're in the root directory + fi + return 1 +} + +# Initialize root_dir +root_dir="" + +# Check if argument is provided +if [ $# -eq 1 ]; then + # Use provided path + if [ -d "$1" ]; then + root_dir="$1" + cd "$root_dir" || exit 1 + else + echo "Error: Provided directory does not exist" + exit 1 + fi +else + # No argument provided, try to determine location + current_dir=$(basename "$(pwd)") + + if [ "$current_dir" = "docker" ]; then + cd .. || exit 1 + elif [ "$current_dir" != "Bang" ]; then + echo "Error: Not in the correct directory and no valid path provided" + echo "Please either:" + echo "1. Run this script from the Bang root directory" + echo "2. Run this script from the docker directory" + echo "3. Provide the path to the Bang root directory as an argument" + exit 1 + fi +fi + +# Verify we're in the correct directory +if ! check_directory; then + echo "Error: Not in the correct directory structure" + echo "Make sure you're in a directory with 'docker' folder and package.json" + exit 1 +fi + +git pull +pnpm build +cd docker || exit 1 +sudo docker compose down +sudo docker compose up -d +cd ..