mCaptcha/docs/DEPLOYMENT.md
2021-06-01 17:33:47 +05:30

3.1 KiB

Deployment instructions:

See CONFIGURATION.md for configuration 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:
$ cd mcaptcha && docker build -t mcaptcha/mcaptcha:latest .
  1. Set configuration in configuration file

  2. Run image:

If you have already have a Postgres instance running, then:

docker run -p <host-machine-port>:<port-in-configuration-file> \
	--add-host=database:<database-ip-addrss> \
	-e RUST_LOG=debug \
	-e DATABASE_URL="postgres://<db-user>:<db-password>@database:<db-port>/<db-name>" \
	mcaptcha/mcaptcha: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 is available that will launch both a database instance mcaptcha instance.

With docker-compose

  1. Follow steps above to build docker image.

  2. Set database password docker-compose configuration.

  3. Launch network:

$ 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 mcaptcha:

$ sudo useradd -b /srv -m -s /usr/bin/zsh mcaptcha

3. Create new user in Postgres

$ 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 mcaptcha:

To build mcaptcha, 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 with:
$ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
  1. Install node(v14.16.0)

  2. Install yarn(JavaScript package manager)

  3. Build with make:

$ make dev-env && \
	make release

5. Install package:

$ sudo cp ./target/release/mcaptcha /usr/bin/ && \
	mkdir sudo /etc/mcaptcha && \
	sudo cp config/default.toml /etc/mcaptcha/config.toml

6. Systemd service configuration:

  1. Copy the following to /etc/systemd/system/mcaptcha.service:
[Unit]
Description=mCaptcha: a CAPTCHA system that gives attackers a run for their money

[Service]
Type=simple
User=mcaptcha
ExecStart=/usr/bin/mcaptcha
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
  1. Enable service:
$ sudo systemctl daemon-reload && \
	sudo systemctl enable mcaptcha && \ # Auto startup during boot
	sudo systemctl start mcaptcha
``