Hayden Guide: Difference between revisions
From Bibliotheca Anonoma
(Formatting and more sections) |
(Add info on dumping DB to file from docker mariadb) |
||
Line 62: | Line 62: | ||
==== Docker+Mariadb - Setup Container ==== | ==== Docker+Mariadb - Setup Container ==== | ||
* | #: Prepare container definition | ||
* Example docker-compose definition file: | |||
*: <syntaxhighlight lang="bash"> | |||
* | # mariadb.yml | ||
# https://hub.docker.com/_/mariadb/ | |||
version: '3.1' | |||
services: | |||
db: # SQL DB server | |||
image: mariadb | |||
restart: always | |||
environment: | |||
MYSQL_ROOT_PASSWORD: "root_super_secret_code" | |||
MYSQL_DATABASE: hayden_db | |||
MYSQL_USER: hayden_un | |||
MYSQL_PASSWORD: "hayden_super_secret_cod" | |||
ports: | |||
- "10306:3306" # HOST:CONTAINER | |||
volumes: | |||
- "/home/USER/hayden-2020/mariadb_docker:/var/lib/mysql" # HOST:CONTAINER | |||
- "/home/USER/hayden-2020/mariadb_docker_dump:/dump" # HOST:CONTAINER | |||
adminer: # WebGUI for SQL DB server | |||
image: adminer | |||
restart: always | |||
ports: | |||
- 10088:8080 | |||
</syntaxhighlight> | |||
#* Ports in the 10XXX range are used on the host side here in an attempt to avoid conflicting with other programs wanting specific ports. | |||
# Bring up defined containers: | |||
#: <syntaxhighlight lang="bash">sudo docker-compose -f "/home/USER/hayden-2020/mariadb.yml" up</syntaxhighlight> | |||
==== Docker+Mariadb - Usage ==== | ==== Docker+Mariadb - Usage ==== | ||
* TODO | * TODO | ||
* To connect to the DB through adminer: | |||
*: TODO | |||
* To make a DB dump: | |||
*# Find the name or ID of the DB container | |||
*#: | |||
*# Run the dump command targeting that container | |||
*#: <syntaxhighlight lang="bash">$ sudo docker exec hayden-2020_db_1 sh -c 'exec mysqldump --all-databases -u"root" -p"YOUR_PASSWORD_HERE"' > "/home/USER/hayden-2020/mariadb-container-all-databases.ts`date -u +%s`.sql" </syntaxhighlight> | |||
*#* Note that the dump command in the container outputs the DB dump SQL as text on its STDOUT; which is sent back from the container to the host; and that is redirected into a file on the host. | |||
*#* Explaination: | |||
*#** <code>$ sudo docker exec hayden-2020_db_1 sh -c</code> Runs a command inside a container. | |||
*#** <code>'exec mysqldump --all-databases -u"root" -p"YOUR_PASSWORD_HERE"'</code> Dumps a copy of the DB to STDOUT | |||
*#** <code> > "/home/USER/hayden-2020/mariadb-container-all-databases.ts`date -u +%s`.sql"</code> Redirects the output into a file with a timestamp in the name. | |||
*#** <code>date -u +%s</code> Produces a timestamp in seconds since the epoch. e.g. <code>1597472305</code>. | |||
*#* This is done using the DB root account as it always has full access to the entire database. | |||
== Download and Build == | == Download and Build Hayden == | ||
# Prepare location: | # Prepare location: | ||
#: <syntaxhighlight lang="bash"> | #: <syntaxhighlight lang="bash"> |
Revision as of 06:37, 15 August 2020
Guide on how to setup and run hayden on a linux machine.
Warnings
- Blame Ctrl-S for this document. (WIP)
- Hayden is not really reliably stable on linux right now and may decide to enter a state where it will reliably crash on startup.
- Hayden cares about the JSON config file syntax. If you missplace a comma it will probably reject the config file and crash.
Prerequisites
How to set up a system so hayden will download, build, and run.
- Prep system for updates
- Debian-based systems (ubuntu, debian, etc)
$ sudo apt update && sudo apt upgrade -y $ sudo apt install -y git curl wget
- RHEL-based systems (redhat, fedora, centos)
$ sudo yum update -y
- Install Microsoft dotnet runtime
https://docs.microsoft.com/en-us/dotnet/core/install/linux-centos
https://docs.microsoft.com/en-us/dotnet/core/install/linux-ubuntu
- RHEL-based systems (redhat, fedora, centos)
$ sudo dnf install dotnet-sdk-3.1
- Debian-based systems (ubuntu, debian, etc)
$ sudo apt-get install -y dotnet-sdk-3.1
Database install
Hayden works with MariaDB and I dont know if it works with others.
You could use any MariaDB installation if you wanted to, however that is left to advanced users who know how and is outside the scope of this guide.
Docker+Mariadb - Install Docker
https://docs.docker.com/engine/install/#server
https://docs.docker.com/engine/install/centos/
- Setup repository:
$ sudo yum install -y yum-utils $ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
- Install docker engine:
$ sudo yum install docker-ce docker-ce-cli containerd.io
- Start docker service:
$ sudo systemctl start docker
- Verify docker works
$ sudo docker run hello-world
Docker+Mariadb - Install docker-compose
https://docs.docker.com/compose/
- Install docker-compose:
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.26.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose $ sudo chmod +x /usr/local/bin/docker-compose
- Symlink into $PATH:
$ sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
- Test installation:
$ docker-compose --version
Docker+Mariadb - Setup Container
- Prepare container definition
- Example docker-compose definition file:
# mariadb.yml # https://hub.docker.com/_/mariadb/ version: '3.1' services: db: # SQL DB server image: mariadb restart: always environment: MYSQL_ROOT_PASSWORD: "root_super_secret_code" MYSQL_DATABASE: hayden_db MYSQL_USER: hayden_un MYSQL_PASSWORD: "hayden_super_secret_cod" ports: - "10306:3306" # HOST:CONTAINER volumes: - "/home/USER/hayden-2020/mariadb_docker:/var/lib/mysql" # HOST:CONTAINER - "/home/USER/hayden-2020/mariadb_docker_dump:/dump" # HOST:CONTAINER adminer: # WebGUI for SQL DB server image: adminer restart: always ports: - 10088:8080
- Ports in the 10XXX range are used on the host side here in an attempt to avoid conflicting with other programs wanting specific ports.
- Bring up defined containers:
sudo docker-compose -f "/home/USER/hayden-2020/mariadb.yml" up
Docker+Mariadb - Usage
- TODO
- To connect to the DB through adminer:
- TODO
- To make a DB dump:
- Find the name or ID of the DB container
- Run the dump command targeting that container
$ sudo docker exec hayden-2020_db_1 sh -c 'exec mysqldump --all-databases -u"root" -p"YOUR_PASSWORD_HERE"' > "/home/USER/hayden-2020/mariadb-container-all-databases.ts`date -u +%s`.sql"
- Note that the dump command in the container outputs the DB dump SQL as text on its STDOUT; which is sent back from the container to the host; and that is redirected into a file on the host.
- Explaination:
$ sudo docker exec hayden-2020_db_1 sh -c
Runs a command inside a container.'exec mysqldump --all-databases -u"root" -p"YOUR_PASSWORD_HERE"'
Dumps a copy of the DB to STDOUT> "/home/USER/hayden-2020/mariadb-container-all-databases.ts`date -u +%s`.sql"
Redirects the output into a file with a timestamp in the name.date -u +%s
Produces a timestamp in seconds since the epoch. e.g.1597472305
.
- This is done using the DB root account as it always has full access to the entire database.
- Find the name or ID of the DB container
Download and Build Hayden
- Prepare location:
$ mkdir -vp /home/USER/hayden_2020/ $ cd /home/USER/hayden_2020/
- Clone (download) Hayden source code from Github:
$ git clone https://github.com/bbepis/Hayden.git
- Build the Hayden solution file:
$ dotnet build "/home/USER/hayden_2020/Hayden/Hayden.sln"
- Run with config file:
$ "/home/USER/hayden_2020/Hayden/Hayden/bin/Debug/netcoreapp3.1/Hayden" "/home/USER/hayden_2020/hayden-config.json"
Configuration
- Configuration for Hayden is done through a JSON file that is specified as a command-line argument when starting Hayden.
$ "/home/USER/hayden_2020/Hayden/Hayden/bin/Debug/netcoreapp3.1/Hayden" "/home/USER/hayden_2020/hayden-config.json"
- Hayden is picy about the syntax of this JSON file.
- Commas only go between key:value pars. Trailing commas are not tolerated by Hayden.
- Some options are implimented but not shown in the example JSON file.
- The option to scan archive.json to save threads that have recently fallen off the board: <code"ReadArchive": true
- Some databses will not let you connect as the DB root account from a system user other than root.
- As a result of this, you should create a DB user specifically for Hayden to use.
- The database connection is defined by this string value:
"connectionString" : "Server=DB_NETWORK_ADDRESS;Port=DB_PORT;Database=DATABASE;Uid=DB_USERNAME;Pwd=DB_PASSWORD;CharSet=utf8mb4;IgnorePrepare=false",
e.g.
"connectionString" : "Server=localhost;Port=3306;Database=asagi;Uid=hayden;Pwd=some_secret_value;CharSet=utf8mb4;IgnorePrepare=false",
- Image downloading is controlled by two options:
"fullImagesEnabled" : true,
"thumbnailsEnabled" : false,
- These values must either be
false
ortrue
.
- These values must either be