--- title: "Deploy bare metal" description: "Bare metal deployment is tedious, most of this will be automated with a script in the future." lead: "Bare metal deployment is tedious, most of this will be automated with a script in the future." date: 2021-07-21 14:49 lastmod: 2021-07-21 14:49 draft: false images: [] menu: docs: parent: "Self-Hosting" weight: 532 toc: true --- ### 2. Configure mcaptcha is highly configurable. Configuration is applied/merged in the following order: 1. path to configuration file passed in via `MCAPTCHA_CONFIG` 2. `./config/default.toml` 3. `/etc/mcaptcha/config.toml` 4. environment variables. ### 1. Install postgres if you don't have it already. For Debian based distributions: ```bash sudo apt install postgres ``` ### 2. Create new user for running `mcaptcha` ```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. Install and load [`mCaptcha/cache`](https://github.com/mCaptcha/cache) module: See [`mCaptcha/cache`](https://github.com/mCaptcha/cache) for more details. ### 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](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/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`: ```systemd [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 ``` 2. Enable service: ```bash $ sudo systemctl daemon-reload && \ sudo systemctl enable mcaptcha && \ # Auto startup during boot sudo systemctl start mcaptcha `` ```