Ghostboard pixel

Alles auf einem Server - heute ein Stikked Installation

Moin moin,
So langsam komme ich an mein Ziel alles auf meinem eigenen Server zu betreiben.
Gestern kam, eigentlich als Docker Variante geplant, ein neues Projekt dazu und es läuft. Diesmal ist es eine Stikked Installation.

Neu dabei ist ein eigenes Pastebin, so bin ich nicht mehr auf die Webseite (Pastebin.com) angewiesen. Unter https://paste.dasnetzundich.de ist diese Seite zukünftig zu finden und werde auch Content daraus in meine Beiträge einbinden. Kann gerne genutzt werden.
Beispielsweise Konfigurationen für Docker-compose.yml Dateien usw.
Mit Stikked kann man Codezeilen, mir anderen Teilen ohne auf Webdienste anderer Anbieter ausweichen zu müssen. Geht komplett anonym und ohne eingerichtetem Konto.
Nur einen Namen eintragen und schon kann es los gehen. Voreingestelllt ist eine Stunde Aufbewahrung, danach wird es gelöscht. Man kann es aber individuell anpassen für seinen Post.

Auf Stikked kam ich auf einen User in einem Nextcloud Chat bei Telegram. Dieser hatte das bereits. Stikked kann hier heruntergeladen werden. Github

Installation

MYSQL Datenbank erstellen

Damit wir Stikked auch nutzen können muss zuerst eine Datebank samt User angelegt werden. User und Passwort merken wir uns, diese Daten brauchen wir später.

sudo mysql -uroot -p
CREATE DATABASE stikked,
CREATE USER 'stikked'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON stikked. * TO 'stikked'@'localhost';
FLUSH PRIVILEGES;

Herunterladen von Stikked und einrichten

Nach dem herunterladen der Zip Datei, diese in /var/www entpacken. Nun die stikked.php anpassen.

sudo vi /var/www/stikked/htdocs/application/config/stikked.php
$config['site_name'] = 'meine Paste Seite';

/**
 * Base URL
 *
 * Set the base URL of Stikked. WITH trailing slash!
 *
*/
$config['base_url'] = 'https://paste.domain.tld/';

/**
 * Database connection
 *
 * Credentials for your database
 * The database structure will be created automatically
 *
*/
$config['db_hostname'] = '127.0.0.1';
$config['db_database'] = 'stikked';
$config['db_username'] = 'stikked';
$config['db_password'] = 'supersecret';

// If you are using sqlite:
// uncomment the configuration lines below.
//$config['db_database'] = 'db/stikked'; // you need to create a directory "db" and give the webserver write access. sqlite needs a writable folder to work properly!
//$config['db_driver'] = 'sqlite';

/**
 * Table prefix
 * Generate table prefix for stikked db, commonly used if the webhoster only has one db.
 * Use underscore as suffix to easily see the tables.
 * example: $config['db_prefix'] = 'stikked_';
 * use $config['db_prefix'] = ''; if you don't want to use table prefix.
*/
$config['db_prefix'] = '';

in dieser Datei werden der Seitenname, die URL sowie die Daten zur MYSQL Datenbank hinterlegt. Hier sind auch andere Einstellungen möglich wie Theme anpassen, die Standardsprache ändern. Aber dazu später mehr.

Nginx einrichten


Wenn diese Daten hinterlegt wurden, fehlt nur noch eine Nginx Konfiguration. Meine sieht folgendermaßen aus.

sudo vi /etc/nginx/sites-available/paste.domain.tld.conf
server {
        listen 443 ssl http2;
        listen [::]:443 ssl http2;

        server_name paste.domain.tld;
        set $base /var/www/stikked/htdocs;
        root $base/;

        # SSL
        ssl_certificate /etc/letsencrypt/live/paste.domain.tlde/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/paste.domain.tld/privkey.pem;
        ssl_trusted_certificate /etc/letsencrypt/live/paste.domain.tld/chain.pem;

        # security headers
        add_header X-Frame-Options "SAMEORIGIN" always;
        add_header X-XSS-Protection "1; mode=block" always;
        add_header X-Content-Type-Options "nosniff" always;
        add_header Referrer-Policy "no-referrer-when-downgrade" always;
        add_header Content-Security-Policy "default-src 'self' http: https: data: blob: 'unsafe-inline'" always;
        add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;

# . files
location ~ /.(?!well-known) {
	deny all;
}

        # index.php
        index index.php;

        # index.php fallback
        location / {
                try_files $uri $uri/ /index.php?$query_string;
        }



        # 404
        try_files $fastcgi_script_name =404;

        # default fastcgi_params
        include fastcgi_params;

        # fastcgi settings
        fastcgi_pass			unix:/var/run/php/php7.2-fpm.sock;
        fastcgi_index			index.php;
        fastcgi_buffers			8 16k;
        fastcgi_buffer_size		32k;

        # fastcgi params
        fastcgi_param DOCUMENT_ROOT		$realpath_root;
        fastcgi_param SCRIPT_FILENAME	$realpath_root$fastcgi_script_name;
        fastcgi_param PHP_ADMIN_VALUE	"open_basedir=$base/:/usr/lib/php/:/tmp/";

    }

# subdomains redirect
server {
        listen 443 ssl http2;
        listen [::]:443 ssl http2;

        server_name *.paste.domain.tld;

        # SSL
        ssl_certificate /etc/letsencrypt/live/paste.domain.tld/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/paste.domain.tld/privkey.pem;
        ssl_trusted_certificate /etc/letsencrypt/live/paste.domain.tld/chain.pem;

        return 301 https://paste.domain.tld$request_uri;
}

# HTTP redirect
server {
        listen 80;
        listen [::]:80;

        server_name .paste.domain.tld;


        # ACME-challenge
        location ^~ /.well-known/acme-challenge/ {
	         root /var/www/_letsencrypt;
        }


        location / {
                return 301 https://paste.domain.tld$request_uri;
        }
}

Anschliessend Nginx neu starten

sudo ln -s /etc/nginx/sites-available/paste.domain.tld.conf /etc/nginx/sites-enabled/paste.domain.tld.conf
sudo nginx -t
sudo service nginx restart

Subscribe to Dasnetzundich.de

Don’t miss out on the latest issues. Sign up now to get access to the library of members-only issues.
jamie@example.com
Subscribe