diff --git a/Local_with_MINIO.MD b/Local_with_MINIO.MD new file mode 100644 index 0000000..f06de3a --- /dev/null +++ b/Local_with_MINIO.MD @@ -0,0 +1,176 @@ +```markdown +# Installing Trunk-Server Locally (no HTTPS) + +## Prerequisites: + +1. **Set static IP for trunk-server** +2. **Set DNS for admin account**: Point `api` to the trunk-server IP. +3. **Install Ubuntu Server 24.04** +4. **Update system:** + ```bash + sudo apt update + sudo apt upgrade + ``` +5. **Add subdomains to `/etc/hosts`:** + ```bash + 127.0.0.1 openmhz.test account.openmhz.test api.openmhz.test admin.openmhz.test media.openmhz.test + ``` +6. **Flush DNS cache:** + ```bash + sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder + ``` + +7. **Create a file in your user's home directory for AWS credentials:** + ```bash + mkdir ~/.aws + nano credentials + ``` + Add the following content to the file: + ```ini + [default] + aws_access_key_id = [..] + aws_secret_access_key = [..] + ``` + +## Install Docker (from Docker Docs) + +1. **Update and install prerequisites:** + ```bash + sudo apt update + sudo apt-get install ca-certificates curl + sudo install -m 0755 -d /etc/apt/keyrings + ``` + +2. **Add Docker's official GPG key:** + ```bash + sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc + sudo chmod a+r /etc/apt/keyrings/docker.asc + ``` + +3. **Add Docker repository to APT sources:** + ```bash + echo \ + "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \ + $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \ + sudo tee /etc/apt/sources.list.d/docker.list > /dev/null + ``` + +4. **Update system and install Docker:** + ```bash + sudo apt update + sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin + ``` + +## Setting up MINIO (on another machine/VM) + +- It is possible to run MinIO on the same machine (though not recommended). +- Follow the MinIO installation guide for Linux: [MinIO Installation Docs](https://min.io/docs/minio/linux/operations/installation.html) +- For a small home setup, use **Single-Node Single-Drive (SNSD)** or **Standalone** mode. + +### High-Level MinIO Crash Course: + +1. **Create a bucket** (this is where you will store audio from TrunkServer). +2. **Set Access Policy for the bucket to Public** (Reminder: This is for local, NON-Internet only). +3. **Create an Access Key and Secret**: + - Copy the secret as you can only view it once. If lost, create a new key and delete the old one. + +## Install Trunk Server + +1. **Clone the repository:** + ```bash + git clone https://github.com/openmhz/trunk-server + cd trunk-server + ``` + +2. **Copy example environment file:** + ```bash + cp test.env.example test.env + ``` + +3. **Edit the environment file:** + ```bash + nano test.env + ``` + Add the following: + ```bash + export S3_PROFILE='default' + export S3_REGION='us-east-1' + export S3_ENDPOINT='http://minio.domain.com:9000' + export S3_BUCKET='bucketname' + ``` + Save and exit. + +4. **Adjust `uploads.js` to work with MinIO path:** + ```bash + nano ~/trunk-server/backend/controllers/uploads.js + ``` + - In Nano, press `ALT+n` to show line numbers. + - Around line 50, add the following crucial line: + ```javascript + const client = new S3Client({ + requestHandler: new NodeHttpHandler({ + httpsAgent: agent, + }), + credentials: fromIni({ profile: s3_profile }), + endpoint: s3_endpoint, + region: s3_region, + maxAttempts: 2, + forcePathStyle: true, + }); + ``` + +5. **Build and start the server:** + ```bash + ./docker-test.sh build # This will take a while + ./docker-test.sh up -d # This starts the server as a daemon + ``` + +6. **Make sure you have the following commands available when running `./docker-test.sh`:** + ```bash + ./docker-test.sh build + ./docker-test.sh up -d + ./docker-test.sh down + ``` + +## Creating Accounts (without an email server) + +1. Go to `account.(yourtrunkservername).(yourdomain).com`. +2. Click **Register**. +3. Fill out the form and click **Register** (nothing will happen right away). +4. Connect to the right Docker container: + ```bash + docker exec -i -t $(docker ps -a | grep mongo | awk '{print $1}') /bin/bash + ``` + +5. **Access MongoDB shell:** + ```bash + mongosh + ``` + +6. **Select the `scanner` database:** + ```bash + use scanner + ``` + +7. **Find and update user to confirm email:** + ```bash + db.users.find() + db.users.updateOne( + { "_id" : ObjectId("63a620d0a63b087b005f6726") }, + { + $set: { "confirmEmail" : true }, + $currentDate: { lastModified: true } + } + ) + ``` + +## Useful Commands + +### TrunkServer Logs: +```bash +docker-compose logs --follow --tail 50 +``` + +### Build, Stop, and Start TrunkServer: +```bash +./docker-test.sh build