diff --git a/db-docker/Dockerfile b/db-docker/Dockerfile new file mode 100644 index 000000000..0c0e4e512 --- /dev/null +++ b/db-docker/Dockerfile @@ -0,0 +1,10 @@ +FROM postgres:latest + +COPY schema.sql /docker-entrypoint-initdb.d/ + +VOLUME /var/lib/postgresql/data + +EXPOSE 5432 + +# Start the PostgreSQL server +CMD ["postgres"] diff --git a/db-docker/schema.sql b/db-docker/schema.sql new file mode 100644 index 000000000..7d2fe768d --- /dev/null +++ b/db-docker/schema.sql @@ -0,0 +1,220 @@ +-- +-- PostgreSQL database dump +-- + +-- Dumped from database version 12.12 (Ubuntu 12.12-0ubuntu0.20.04.1) +-- Dumped by pg_dump version 12.12 (Ubuntu 12.12-0ubuntu0.20.04.1) + +-- Started on 2022-09-24 20:18:09 IST + +SET statement_timeout = 0; +SET lock_timeout = 0; +SET idle_in_transaction_session_timeout = 0; +SET client_encoding = 'UTF8'; +SET standard_conforming_strings = on; +SELECT pg_catalog.set_config('search_path', '', false); +SET check_function_bodies = false; +SET xmloption = content; +SET client_min_messages = warning; +SET row_security = off; + +-- +-- TOC entry 626 (class 1247 OID 16424) +-- Name: transaction_status; Type: TYPE; Schema: public; Owner: - +-- + +CREATE TYPE public.transaction_status AS ENUM ( + 'PENDING', + 'SUCCESS', + 'FAILED' +); + + +-- +-- TOC entry 637 (class 1247 OID 16868) +-- Name: tx_status; Type: TYPE; Schema: public; Owner: - +-- + +CREATE TYPE public.tx_status AS ENUM ( + 'SUCCESS', + 'PENDING', + 'FAILED' +); + + +SET default_table_access_method = heap; + +-- +-- TOC entry 204 (class 1259 OID 16822) +-- Name: multisig_accounts; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.multisig_accounts ( + address character varying(50) NOT NULL, + threshold integer NOT NULL, + chain_id character varying(20) NOT NULL, + pubkey_type character varying(50) NOT NULL, + name character varying(100) NOT NULL, + created_by character varying(50) NOT NULL, + created_at timestamp with time zone DEFAULT '2022-09-23 22:26:53.911454+05:30'::timestamp with time zone NOT NULL +); + +-- +-- TOC entry 204 (class 1259 OID 16822) +-- Name: users; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.users ( + id SERIAL PRIMARY KEY, + address character varying(100) NOT NULL, + salt INTEGER CHECK (salt > 0), + signature character varying(250) NOT NULL, + pub_key jsonb DEFAULT '[]'::jsonb, + created_at timestamp with time zone DEFAULT '2022-09-23 22:26:53.911454+05:30'::timestamp with time zone NOT NULL +); + + +-- +-- TOC entry 205 (class 1259 OID 16840) +-- Name: pubkeys; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.pubkeys ( + address character varying(50) NOT NULL, + multisig_address character varying(50) NOT NULL, + pubkey jsonb NOT NULL +); + + +-- +-- TOC entry 207 (class 1259 OID 16877) +-- Name: transactions; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.transactions ( + id integer NOT NULL, + multisig_address character varying(50) NOT NULL, + fee jsonb, + status public.tx_status DEFAULT 'PENDING'::public.tx_status NOT NULL, + messages jsonb DEFAULT '[]'::jsonb, + hash text DEFAULT ''::text, + err_msg text DEFAULT ''::text, + memo text DEFAULT ''::text, + signatures jsonb DEFAULT '[]'::jsonb, + last_updated timestamp with time zone DEFAULT '2022-09-23 22:26:53.911454+05:30'::timestamp with time zone NOT NULL, + created_at timestamp with time zone DEFAULT '2022-09-23 22:27:24.815343+05:30'::timestamp with time zone NOT NULL +); + +-- +-- TOC entry 206 (class 1259 OID 16444) +-- Name: price_info; Type: TABLE; Schema: public; Owner: - +-- + +CREATE TABLE public.price_info ( + denom character varying(50) NOT NULL, + coingecko_name character varying(50) NOT NULL, + enabled boolean DEFAULT true NOT NULL, + last_updated timestamp with time zone, + info jsonb DEFAULT '{}'::jsonb +); + + +-- +-- TOC entry 2969 (class 0 OID 16444) +-- Dependencies: 206 +-- Data for Name: price_info; Type: TABLE DATA; Schema: public; Owner: - +-- + +COPY public.price_info (denom, coingecko_name, enabled, last_updated, info) FROM stdin; +uatom cosmos t 2022-10-04 09:10:29.043476+00 {} +uregen regen t 2022-10-04 09:10:29.043476+00 {} +uosmo osmosis t 2022-10-04 09:10:29.043476+00 {} +ujuno juno-network t 2022-10-04 09:10:29.043476+00 {} +ustars stargaze t 2022-10-04 09:10:29.043476+00 {} +uakt akash-network t 2022-10-04 09:10:29.043476+00 {} +\. + + + +-- +-- TOC entry 206 (class 1259 OID 16875) +-- Name: transactions_id_seq; Type: SEQUENCE; Schema: public; Owner: - +-- + +CREATE SEQUENCE public.transactions_id_seq + AS integer + START WITH 1 + INCREMENT BY 1 + NO MINVALUE + NO MAXVALUE + CACHE 1; + + +-- +-- TOC entry 3005 (class 0 OID 0) +-- Dependencies: 206 +-- Name: transactions_id_seq; Type: SEQUENCE OWNED BY; Schema: public; Owner: - +-- + +ALTER SEQUENCE public.transactions_id_seq OWNED BY public.transactions.id; + + +-- +-- TOC entry 2857 (class 2604 OID 16880) +-- Name: transactions id; Type: DEFAULT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.transactions ALTER COLUMN id SET DEFAULT nextval('public.transactions_id_seq'::regclass); + + +-- +-- TOC entry 2867 (class 2606 OID 16952) +-- Name: multisig_accounts multisig_accounts_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.multisig_accounts + ADD CONSTRAINT multisig_accounts_pkey PRIMARY KEY (address); + + +-- +-- TOC entry 2869 (class 2606 OID 17014) +-- Name: pubkeys pubkeys_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.pubkeys + ADD CONSTRAINT pubkeys_pkey PRIMARY KEY (address, multisig_address); + + +-- +-- TOC entry 2871 (class 2606 OID 16890) +-- Name: transactions transactions_pkey; Type: CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.transactions + ADD CONSTRAINT transactions_pkey PRIMARY KEY (id); + + +-- +-- TOC entry 2872 (class 2606 OID 17015) +-- Name: pubkeys pubkeys_multisig_address_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.pubkeys + ADD CONSTRAINT pubkeys_multisig_address_fkey FOREIGN KEY (multisig_address) REFERENCES public.multisig_accounts(address); + + +-- +-- TOC entry 2873 (class 2606 OID 17028) +-- Name: transactions transactions_multisig_address_fkey; Type: FK CONSTRAINT; Schema: public; Owner: - +-- + +ALTER TABLE ONLY public.transactions + ADD CONSTRAINT transactions_multisig_address_fkey FOREIGN KEY (multisig_address) REFERENCES public.multisig_accounts(address); + + +-- Completed on 2022-09-24 20:18:09 IST + +-- +-- PostgreSQL database dump complete +-- + diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 000000000..35606ff57 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,52 @@ +version: '3.8' + +services: + frontend: + build: + context: ./frontend + args: + NEXT_PUBLIC_APP_API_URI: http://${HOST_IP}:1323 + ports: + - "3000:3000" + depends_on: + backend: + condition: service_healthy + networks: + - my_network + + backend: + build: + context: ./server + ports: + - "1323:1323" + depends_on: + database: + condition: service_healthy + networks: + - my_network + healthcheck: + test: ["CMD", "curl", "-f", "http://backend:1323"] + interval: 30s + timeout: 10s + retries: 3 + + database: + build: + context: ./db-docker + ports: + - "5432:5432" + environment: + - POSTGRES_DB=multisig + - POSTGRES_USER=alice + - POSTGRES_PASSWORD=password + networks: + - my_network + healthcheck: + test: ["CMD", "pg_isready", "-U", "alice", "-d", "multisig", "-h", "localhost"] + interval: 30s + timeout: 10s + retries: 3 + +networks: + my_network: + driver: bridge diff --git a/docker_compose_README.md b/docker_compose_README.md new file mode 100644 index 000000000..bb27f181a --- /dev/null +++ b/docker_compose_README.md @@ -0,0 +1,56 @@ + +# Docker Compose Deployment Instructions + +This document provides the necessary steps to deploy the application using Docker Compose. + +## Prerequisites + +- Ensure Docker and Docker Compose are installed on your system. + +## Steps to Deploy the Application + +### 1. Export Host IP Address + +First, you need to export your host IP address as an environment variable. This will be used in the Docker Compose file. + +Open your terminal and run the following command: + +```sh +export HOST_IP=$(hostname -I | awk '{print $1}') +``` + +This command fetches the IP address of your host machine and stores it in the `HOST_IP` environment variable. + +### 2. Run Docker Compose + +After exporting the `HOST_IP` variable, you can start the application using Docker Compose. Run the following command: + +```sh +docker compose up -d +``` + +The `-d` flag tells Docker Compose to run the containers in detached mode, meaning they will run in the background. + +### 3. Verify the Deployment + +To verify that the containers are running, use the following command: + +```sh +docker ps +``` + +This will list all running containers. You should see the containers defined in your `docker-compose.yml` file listed here. + +### 4. Access the Application + +Once the containers are running, you can access the application through your web browser or any other client as per the service configuration in your `docker-compose.yml`. + +### 5. Stopping the Application + +To stop and remove the running containers, use the following command: + +```sh +docker compose down +``` + +This will stop the containers and remove them along with any networks created by Docker Compose. diff --git a/frontend/Dockerfile b/frontend/Dockerfile new file mode 100644 index 000000000..9e84fc364 --- /dev/null +++ b/frontend/Dockerfile @@ -0,0 +1,19 @@ +FROM node:lts AS build + +WORKDIR /app + +COPY package.json ./ + +RUN yarn install --frozen-lockfile + +COPY . . + +ARG NEXT_PUBLIC_APP_API_URI + +ENV NEXT_PUBLIC_APP_API_URI=${NEXT_PUBLIC_APP_API_URI} + +RUN yarn build + +EXPOSE 3000 + +CMD ["yarn", "start"] diff --git a/server/Dockerfile b/server/Dockerfile new file mode 100644 index 000000000..10f15032a --- /dev/null +++ b/server/Dockerfile @@ -0,0 +1,17 @@ +FROM golang:1.21 + +WORKDIR /app + +COPY go.mod . +COPY go.sum . +COPY . . + +RUN go mod tidy + +EXPOSE 1323 + +RUN ["cp", "example.yaml", "config.yaml"] + +RUN go build -o app + +CMD ["./app"] diff --git a/server/example.yaml b/server/example.yaml index 05760bfbe..d3913a147 100644 --- a/server/example.yaml +++ b/server/example.yaml @@ -14,7 +14,7 @@ production: dev: database: - host: "localhost" + host: "database" port: 5432 user: "alice" password: "password"