diff --git a/README.md b/README.md index 71a6d30a..5491b582 100644 --- a/README.md +++ b/README.md @@ -90,27 +90,11 @@ It takes a while to build the image so please be patient :) ## Development: -See [DEVELOPMENT.md](./DEVELOPMENT.md) +See [HADCKING.md](./docs/HACKING.md) -## How to build +## Deployment: -- Install Cargo using [rustup](https://rustup.rs/) with: - -``` -$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -``` - -- Clone the repository with: - -``` -$ git clone https://github.com/mCaptcha/guard -``` - -- Build with Cargo: - -``` -$ cd guard && cargo build -``` +See [DEPLOYMENT.md](./docs/DEPLOYMET.md) ## Configuration: diff --git a/docker-compose.yml b/docker-compose.yml index 326ca149..9d230a59 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -6,18 +6,16 @@ services: ports: - 7000:7000 environment: - DATABASE_URL: postgres://postgres:password@postgres:5432/postgres + DATABASE_URL: postgres://postgres:@postgres:5432/postgres # set password at placeholder RUST_LOG: debug postgres: image: postgres:13.2 - #ports: 5432:5432 volumes: - mcaptcha-guard-data:/var/lib/postgresql/ environment: - POSTGRES_PASSWORD: password + POSTGRES_PASSWORD: # enter password PGDATA: /var/lib/postgresql/data/guard/ - volumes: mcaptcha-guard-data: diff --git a/docs/DEPLOYMENT.md b/docs/DEPLOYMENT.md new file mode 100644 index 00000000..cd398be8 --- /dev/null +++ b/docs/DEPLOYMENT.md @@ -0,0 +1,145 @@ +# Deployment instructions: + +There are three ways to deploy mCaptcha: + +1. Docker +2. Docker compose +3. Bare metal + +## Docker + +NOTE: We'll publish pre-built images once we reach `alpha`. + +1. Build image: + +```bash +$ cd guard && docker build -t mcaptcha/guard:latest . +``` + +2. Set configuration in [configuration file](../config/default.toml) + +3. Run image: + +If you have already have a Postgres instance running, then: + +```bash +docker run -p : \ + --add-host=database: \ + -e RUST_LOG=debug \ + -e DATABASE_URL="postgres://:@database:/" \ + mcaptcha/guard:latest +``` + +If you don't have a Postgres instance running, you can either install +one using a package manager or launch one with docker. A [docker-compose +configuration]('../docker-compose.yml) is available that will launch both +a database instance guard instance. + +## With docker-compose + +1. Follow steps above to build docker image. + +2. Set database password [docker-compose configuration]('../docker-compose.yml). + +3. Launch network: + +```bash +$ docker-compose up -d +``` + +## Bare metal: + +The process is tedious, most of this will be automated with a script in +the future. + +### 1. Install postgres if you don't have it already. + +### 2. Create new user for running `guard`: + +```bash +$ sudo useradd -b /srv -m -s /usr/bin/zsh mcaptcha +``` + +### 3. Create new user in Postgres + +```bash +$ sudo -iu postgres # switch to `postgres` user +$ psql +postgres=# CREATE USER mcaptcha WITH PASSWORD 'my super long password and yes you need single quote`; +$ createdb -O mcaptcha mcaptcha # create db 'mcaptcha' with 'mcaptcha' as owner +``` + +### 4. Build `guard`: + +To build `guard`, you need the following dependencies: + +1. rust +2. node(`v14.16.0`) +3. yarn(JavaScript package manager) +4. make + +## How to build + +1. Install Cargo using [rustup](https://rustup.rs/) with: + +```bash +$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh +``` + +2. Install node(`v14.16.0`) + +3. Install yarn(JavaScript package manager) + +4. Build with make: + +```bash +$ make dev-env && \ + make release +``` + +### 5. Install package: + +```bash +$ sudo cp ./target/release/guard /usr/bin/ && \ + mkdir sudo /etc/guard && \ + sudo cp config/default.toml /etc/guard/config.toml +``` + +### 6. Systemd service configuration: + +1. Copy the following to `/etc/systemd/system/guard.service`: + +```systemd +[Unit] +Description=mCaptcha: a CAPTCHA system that gives attackers a run for their money + +[Service] +Type=simple +User=mcaptcha +ExecStart=/usr/bin/guard +Restart=on-failure +RestartSec=1 +SuccessExitStatus=3 4 +RestartForceExitStatus=3 4 +SystemCallArchitectures=native +MemoryDenyWriteExecute=true +NoNewPrivileges=true +Environment="RUST_LOG=info" + +[Unit] +After=sound.target +Wants=network-online.target +Wants=network-online.target +Requires=postgresql.service +After=syslog.target + +[Install] +WantedBy=multi-user.target +``` + +2. Enable service: +```bash +$ sudo systemctl daemon-reload && \ + sudo systemctl enable guard && \ # Auto startup during boot + sudo systemctl start guard +`` diff --git a/DEVELOPMENT.md b/docs/HACKING.md similarity index 100% rename from DEVELOPMENT.md rename to docs/HACKING.md