Merge branch 'feature/quollkey'

This commit is contained in:
Ozzy 2025-02-06 23:58:04 +10:30
commit 653f05c7b3
4 changed files with 343 additions and 81 deletions

View file

@ -5,14 +5,17 @@ Read - Quollkey-readme first.
welcome.entrance.a.vue welcome.entrance.a.vue
- shape 1 and shape 2 have been changed to act as a background for header and footer. - shape 1 and shape 2 have been changed to act as a background for header and footer.
- Optional footer links for the landing page have been added, set via the Admin/Branding settings. - optional footer links for the landing page have been added, set via the Admin/Branding settings.
api files changed to enable links. - removed emojis, timelines, federation ticker and featured timeline.
- Removed emojis, timelines and other fun. Some items remain in code files, cleanup to properly remove needed.
Timelines
- removed 'there are new notes' from home and antenna timelines.
MkVisitordashboard.vue MkVisitordashboard.vue
- changed some style elements and removed look for another instance button - it currently has no purpose. - changed some style elements and removed look for another instance button - it currently has no purpose.
base.pug - removed splash display, cleanup needed. base.pug
- removed splash screen.
I have reverted navbar changes for now and locked branch. Navbar
navbar.vue - I did change it so mouseover extended the bar instead of toggle switch for desktop but it works ok as is. Might have another look one day. - I have reverted navbar changes for now and locked branch.

View file

@ -0,0 +1,91 @@
**Install at own risk**
If you intend on having a long term instance, you should setup s3 storage\
adding s3 storage to Quollkey has many advantages.
Installing Quollkey using docker
`sudo apt update && sudo apt upgrade`
- You need to have Docker and Docker Compose installed
```
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
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
# Add the repository to Apt sources:
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
sudo apt-get update
```
- Install Docker packages\
`sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin`
- add current user to docker, if required\
`sudo usermod -aG docker ${USER}`
- switch user to register change\
`su - ${USER}`
- check status
`docker ps`
- Clone Quollkey and change to directory
```
git clone https://git.quollkey.org/Quollkey/Quollkey.git /Quollkey
cd Quollkey
git checkout main
```
- Setup config files
```
cp .config/docker_example.yml .config/default.yml
cp .config/docker_example.env .config/docker.env
cp ./compose_example.yml ./compose.yml
```
- Edit config files\
**edit the config files using your preferred editor**
```
.config/default.yml
.config/docker.env
./compose.yml
```
- Build Quollkey and build postgresql database
```
sudo docker compose build
sudo docker compose run --rm web pnpm run init
```
- Setup Nginx
Refer to Misskey instructions https://misskey-hub.net/en/docs/for-admin/install/resources/nginx/
- Start Quollkey
`sudo docker compose up -d`
Your instance should now be available at the url you provided in the config files
- Updating Quollkey
Check for any new update instructions, including any provided by Sharkey
```
git stash
git checkout master
git pull
git submodule update --init
git stash pop
sudo docker compose build
sudo docker compose stop && sudo docker compose up -d
```

170
QUOLLKEY-MANUAL-INSTALL.md Normal file
View file

@ -0,0 +1,170 @@
**Install at own risk**
If you intend on having a long term instance, you should setup s3 storage\
adding s3 storage to Quollkey has many advantages.
Manual install instructions for Quollkey
Create a user to install Quollkey\
normal sudo adduser\
or\
`adduser --disabled-password --disabled-login quollkey`
`sudo -u quollkey bash`
- Update System
`sudo apt update && sudo apt upgrade`
First, install Dependencies.
- Install Node 22.11 or later https://github.com/nvm-sh/nvm
- Install PostgreSQL
```
sudo apt install curl ca-certificates
sudo install -d /usr/share/postgresql-common/pgdg
sudo curl -o /usr/share/postgresql-common/pgdg/apt.postgresql.org.asc --fail https://www.postgresql.org/media/keys/ACCC4CF8.asc
sudo sh -c 'echo "deb [signed-by=/usr/share/postgresql-common/pgdg/apt.postgresql.org.asc] https://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
sudo apt update
sudo apt -y install postgresql-17
```
- Install redis
```
sudo apt-get install lsb-release curl gpg
curl -fsSL https://packages.redis.io/gpg | sudo gpg --dearmor -o /usr/share/keyrings/redis-archive-keyring.gpg
sudo chmod 644 /usr/share/keyrings/redis-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/redis-archive-keyring.gpg] https://packages.redis.io/deb $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/redis.list
sudo apt-get update
sudo apt-get install redis
```
- Install FFmpeg
`sudo apt install ffmpeg -y`
- Build Essentials
`sudo apt install build-essential`
- Python
Python should already be installed.
- Re run system updates
`sudo apt update && sudo apt upgrade`
- Clone Branch
`git clone --recurse-submodules -b stable https://git.quollkey.org/Quollkey/Quollkey.git /Quollkey`
`cd Quollkey`
`corepack enable`
- Install
`pnpm install --frozen-lockfile`
- Create and edit default.yml
`cp .config/example.yml .config/default.yml`
Use an editor and change .config/default.yml
You will need to edit url, postgresql, admin password and other settings to suit your needs.
- Create Quollkey Database\
Change {YOUR_PASSWORD} to sameone you added to default.yml 'password'
```
sudo -u postgres psql
CREATE DATABASE quollkeydb WITH ENCODING = 'UTF8';
CREATE USER quollkey WITH ENCRYPTED PASSWORD '{YOUR_PASSWORD}';
GRANT ALL PRIVILEGES ON DATABASE quollkeydb TO quollkey;
ALTER DATABASE quollkeydb OWNER TO quollkey;
\q
```
- Build, Install and start Quollkey
`pnpm run build`
`pnpm run init`
- Nginx Setup - Refer to Misskey instructions\
https://misskey-hub.net/en/docs/for-admin/install/resources/nginx/
- To run via systemd
create quollkey.service file with your editor
/etc/systemd/system/quollkey.service
```
[Unit]
Description=Quollkey daemon
[Service]
Type=simple
User=quollkey
ExecStart=/usr/bin/pnpm start
WorkingDirectory=/home/quollkey/Quollkey
Environment="NODE_OPTIONS=--max-old-space-size=8192"
Environment="NODE_ENV=production"
TimeoutSec=60
StandardOutput=journal
StandardError=journal
SyslogIdentifier=quollkey
Restart=always
[Install]
WantedBy=multi-user.target
```
If not using global node change ExecStart to\
`ExecStart=/bin/bash -c 'source /home/quollkey/.nvm/nvm.sh && /home/quollkey/.nvm/versions/node/v22.11.0/bin/pnpm start'`\
Change directory and/or node version if different
- reload daemon, enable restart and start Quollkey
```
sudo systemctl daemon-reload
sudo systemctl enable quollkey
sudo systemctl start quollkey
```
Your Quollkey instance should now be available at your url
- Updating Quollkey\
Change to the quollkey install user
```
sudo systemctl stop quollkey
cd Quollkey
git checkout stable
git pull --recurse-submodules
pnpm install --frozen-lockfile
pnpm run build
pnpm run migrate
```

View file

@ -4,89 +4,87 @@ SPDX-License-Identifier: AGPL-3.0-only
--> -->
<template> <template>
<div v-if="meta" class="rsqzvsbo"> <div v-if="meta" class="rsqzvsbo">
<!-- Background photos, etc. --> <!-- Background photos, etc. -->
<MkFeaturedPhotos class="bg" /> <MkFeaturedPhotos class="bg"/>
<!-- Shape1 bar at the top with instance name -->
<div v-if="instanceName" class="shape1">
<h1>{{ instanceName }}</h1>
</div>
<!-- Shape2 bar at the bottom with up to five dynamic links -->
<div class="shape2">
<!-- Link 1 -->
<a
v-if="link1Url"
:href="link1Url"
target="_blank"
rel="noopener noreferrer"
>
{{ link1Label || 'Link 1' }}
</a>
<!-- Link 2 -->
<a
v-if="link2Url"
:href="link2Url"
target="_blank"
rel="noopener noreferrer"
>
{{ link2Label || 'Link 2' }}
</a>
<!-- Link 3 -->
<a
v-if="link3Url"
:href="link3Url"
target="_blank"
rel="noopener noreferrer"
>
{{ link3Label || 'Link 3' }}
</a>
<!-- Link 4 -->
<a
v-if="link4Url"
:href="link4Url"
target="_blank"
rel="noopener noreferrer"
>
{{ link4Label || 'Link 4' }}
</a>
<!-- Link 5 -->
<a
v-if="link5Url"
:href="link5Url"
target="_blank"
rel="noopener noreferrer"
>
{{ link5Label || 'Link 5' }}
</a>
</div>
<!-- Logo / "Powered by" section -->
<div class="logo-wrapper">
<div class="powered-by">Powered by</div>
<img :src="misskeysvg" class="misskey" />
</div>
<!-- Main content area: visitor dashboard, etc. -->
<div class="contents">
<MkVisitorDashboard />
</div>
<!-- Shape1 bar at the top with instance name -->
<div v-if="instanceName" class="shape1">
<h1>{{ instanceName }}</h1>
</div> </div>
<!-- Shape2 bar at the bottom with up to five dynamic links -->
<div class="shape2">
<!-- Link 1 -->
<a
v-if="link1Url"
:href="link1Url"
target="_blank"
rel="noopener noreferrer"
>
{{ link1Label || 'Link 1' }}
</a>
<!-- Link 2 -->
<a
v-if="link2Url"
:href="link2Url"
target="_blank"
rel="noopener noreferrer"
>
{{ link2Label || 'Link 2' }}
</a>
<!-- Link 3 -->
<a
v-if="link3Url"
:href="link3Url"
target="_blank"
rel="noopener noreferrer"
>
{{ link3Label || 'Link 3' }}
</a>
<!-- Link 4 -->
<a
v-if="link4Url"
:href="link4Url"
target="_blank"
rel="noopener noreferrer"
>
{{ link4Label || 'Link 4' }}
</a>
<!-- Link 5 -->
<a
v-if="link5Url"
:href="link5Url"
target="_blank"
rel="noopener noreferrer"
>
{{ link5Label || 'Link 5' }}
</a>
</div>
<!-- Logo / "Powered by" section -->
<div class="logo-wrapper">
<div class="powered-by">Powered by</div>
<img :src="misskeysvg" class="misskey"/>
</div>
<!-- Main content area: visitor dashboard, etc. -->
<div class="contents">
<MkVisitorDashboard/>
</div>
</div>
</template> </template>
<script lang="ts" setup> <script lang="ts" setup>
import { instance } from '@/instance.js';
import { ref, onMounted } from 'vue'; import { ref, onMounted } from 'vue';
import { instanceName } from '@@/js/config.js'; import { instanceName } from '@@/js/config.js';
import * as Misskey from 'misskey-js'; import * as Misskey from 'misskey-js';
import { instance } from '@/instance.js';
import MarqueeText from '@/components/MkMarquee.vue'; import MarqueeText from '@/components/MkMarquee.vue';
import MkFeaturedPhotos from '@/components/MkFeaturedPhotos.vue'; import MkFeaturedPhotos from '@/components/MkFeaturedPhotos.vue';
import MkVisitorDashboard from '@/components/MkVisitorDashboard.vue'; import MkVisitorDashboard from '@/components/MkVisitorDashboard.vue';
@ -169,7 +167,7 @@ const link5Label = ref(instance.link5Label || 'Link 5');
text-decoration: none; text-decoration: none;
margin: auto 10px auto; margin: auto 10px auto;
font-size: 1.2rem; font-size: 1.2rem;
color: var(--MI_THEME-panel); color: var(--MI_THEME-fgOnAccent);
} }
> .logo-wrapper { > .logo-wrapper {