commit 8883568a29c6a041be4a1a1164cf6aae8fac5d64 Author: rrr-marble Date: Fri Jun 24 01:52:48 2022 +0300 initial commit diff --git a/README.md b/README.md new file mode 100644 index 0000000..9bc87c7 --- /dev/null +++ b/README.md @@ -0,0 +1,31 @@ +# PREPARE +## Base setup +- `mkdir letsencrypt nginx_conf.d postgres_data` +- put site repo into ./treeralker +- put treetalker.guideget.ru.conf nginx config into ./nginx_conf.d +- put `pg_dumpall --clean | gzip > db.out.gz` into ./init_db +- fix treetalker/nodejs/config/config.env `HOST=` db address +- `chmod 999:999 postgres_data` + +## Clean up +- delete ./node_modules dirs +- delete react release ./build dir +- remove `default_server` directive from treetalker.guideget.ru.conf + + +## Dev setup +- put options-ssl-nginx.conf into ./letsencrypt + +## Prod setup +- disable `USE_LOCAL_CA=1` +- put real certs in ./letsencrypt +- remove "1000:443" mapping +- uncomment 80, 443 port mappings +- put real password for postgres + +# RUN +`docker-compose build` + +(watch out for 'npm WARN tar ENOENT: no such file or directory' **intermitent** failure https://github.com/npm/cli/issues/2319 et al.) + +`docker-compose up` diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..675abe1 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,38 @@ +version: "3" + +services: + frontend: + build: + context: ./treetalker + dockerfile: ../docker/Dockerfile.frontend + environment: + - USE_LOCAL_CA=1 # TODO: disable and put real certs in ./letsencrypt + - CERTBOT_EMAIL="admin@treetalker.guideget.ru" + volumes: + - ./nginx_conf.d:/etc/nginx/user_conf.d + - ./letsencrypt:/etc/letsencrypt + ports: + #- "80:80" + #- "443:443" + - "1000:443" # TODO: delete + + backend: + build: + context: ./treetalker/nodejs + dockerfile: ../../docker/Dockerfile.backend + ports: + - "127.0.0.1:3010:3010" + + db: + build: + context: ./init_db + dockerfile: ../docker/Dockerfile.db + environment: + POSTGRES_PASSWORD: "toCHANGE" # TODO: change to real password + volumes: + - ./postgres_data:/var/lib/postgresql/data + ports: + - "5432:5432" + + + diff --git a/docker/Dockerfile.backend b/docker/Dockerfile.backend new file mode 100644 index 0000000..62fbd12 --- /dev/null +++ b/docker/Dockerfile.backend @@ -0,0 +1,17 @@ +FROM node:14.7 AS build-stage + +WORKDIR /app + + +ADD package.json package-lock.json /app/ +RUN npm install + + +COPY . /app + + +RUN npm install --global pm2 + +EXPOSE 3010 + +CMD ["pm2", "start", "server.js", "--attach"] diff --git a/docker/Dockerfile.db b/docker/Dockerfile.db new file mode 100644 index 0000000..06f57af --- /dev/null +++ b/docker/Dockerfile.db @@ -0,0 +1,11 @@ +FROM postgres:10.21-bullseye + +ADD . /docker-entrypoint-initdb.d + + +RUN chmod a+r /docker-entrypoint-initdb.d/* +RUN chmod a+x /docker-entrypoint-initdb.d/1_init.sh + +EXPOSE 5432 + +USER postgres diff --git a/docker/Dockerfile.frontend b/docker/Dockerfile.frontend new file mode 100644 index 0000000..8243dcb --- /dev/null +++ b/docker/Dockerfile.frontend @@ -0,0 +1,20 @@ +FROM node:14.7 AS build-stage + +WORKDIR /app + +COPY package.json package-lock.json /app/ +RUN npm install +RUN npm install apexcharts echarts + +COPY . /app + +RUN npm run build + + +FROM jonasal/nginx-certbot:2.4 +WORKDIR /var/tmp/www/treetalker/build/ + +# muti-stage build +COPY --from=build-stage /app/build ./ + +EXPOSE 80 443 diff --git a/init_db/1_init.sh b/init_db/1_init.sh new file mode 100644 index 0000000..12ed9b1 --- /dev/null +++ b/init_db/1_init.sh @@ -0,0 +1,5 @@ +#!/bin/bash +set -e + +gunzip -c '/docker-entrypoint-initdb.d/db.out.gz' | psql --set ON_ERROR_STOP=0 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" +