Merge branch 'master' into develop
This commit is contained in:
commit
a4436c9669
21
Makefile
21
Makefile
@ -1,16 +1,27 @@
|
||||
SHELL:=/bin/bash
|
||||
|
||||
all: mnml
|
||||
.PHONY: all deps build deploy install server client clean
|
||||
|
||||
all: install
|
||||
|
||||
deps:
|
||||
./bin/deps.sh
|
||||
|
||||
package:
|
||||
./bin/package.sh
|
||||
|
||||
mnml:
|
||||
build:
|
||||
./bin/build.sh
|
||||
|
||||
deploy:
|
||||
./bin/deploy.sh
|
||||
|
||||
install:
|
||||
./bin/install.sh
|
||||
|
||||
server:
|
||||
./bin/server.sh
|
||||
|
||||
client:
|
||||
./bin/client.sh
|
||||
|
||||
clean:
|
||||
./bin/clean.sh
|
||||
|
||||
|
||||
@ -27,6 +27,8 @@
|
||||
# WORK WORK
|
||||
## NOW
|
||||
|
||||
*OPS*
|
||||
|
||||
*$$$*
|
||||
* rename costs 1cr
|
||||
* invader set
|
||||
|
||||
68
bin/build.sh
68
bin/build.sh
@ -1,67 +1,11 @@
|
||||
#!/bin/bash
|
||||
|
||||
# bless you chris and andy <3
|
||||
|
||||
# DOES NOT WORK AT MOMENT
|
||||
|
||||
DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
|
||||
MNML_PATH=$(realpath "$DIR/../")
|
||||
VERSION=$(<"$MNML_PATH/VERSION")
|
||||
|
||||
if [ ! -f $MNML_PATH/etc/mnml.env ]; then
|
||||
echo "-----------------------------------------------"
|
||||
echo "creating an env file in $MNML_PATH/etc/mnml.env"
|
||||
echo "-----------------------------------------------"
|
||||
make server
|
||||
make client
|
||||
|
||||
echo "export MNML_USER=\"$(whoami)\"" >> $MNML_PATH/etc/mnml.env
|
||||
echo "export MNML_PG_PASSWORD=\"$(openssl rand -hex 16)\"" >> $MNML_PATH/etc/mnml.env
|
||||
echo "export MNML_PG_HOST=\"localhost\"" >> $MNML_PATH/etc/mnml.env
|
||||
fi
|
||||
|
||||
source $MNML_PATH/etc/mnml.env
|
||||
|
||||
# DIRECTORY SETUP
|
||||
sudo mkdir -p /opt/mnml
|
||||
sudo chown $MNML_USER: /opt/mnml
|
||||
|
||||
sudo mkdir -p /var/lib/mnml
|
||||
sudo chown $MNML_USER: /var/lib/mnml
|
||||
mkdir -p /var/lib/mnml/public
|
||||
mkdir -p /var/lib/mnml/public/imgs
|
||||
mkdir -p /var/lib/mnml/data
|
||||
|
||||
sudo mkdir -p /var/log/mnml
|
||||
sudo chown $MNML_USER: /var/log/mnml
|
||||
|
||||
sudo ln -nfs $MNML_PATH/current /opt/mnml
|
||||
|
||||
# SERVICES
|
||||
sudo cp $MNML_PATH/etc/systemd/system/mnml.service /etc/systemd/system
|
||||
|
||||
# POSTGRES SETUP
|
||||
sudo -u postgres dropdb mnml
|
||||
sudo -u postgres createdb mnml
|
||||
sudo -u postgres createuser --encrypted mnml
|
||||
|
||||
echo "DATABASE_URL=postgres://mnml:$MNML_PG_PASSWORD@$MNML_PG_HOST/mnml" > $MNML_PATH/server/.env
|
||||
|
||||
sudo -u postgres psql -c "alter user mnml with encrypted password '$MNML_PG_PASSWORD';"
|
||||
|
||||
cd $MNML_PATH/ops && npm run migrate
|
||||
|
||||
# RUST SETUP
|
||||
echo "DATABASE_URL=postgres://mnml:$MNML_PG_PASSWORD@$MNML_PG_HOST/mnml" > $MNML_PATH/server/.env
|
||||
# cargo build
|
||||
# cp -r $MNML_PATH/server/target/release /opt/mnml/bin
|
||||
|
||||
# NGINX
|
||||
if [ ! -f $MNML_PATH/etc/nginx/sites-available/mnml.gg.nginx.conf ]; then
|
||||
echo "-----------------------------------------------"
|
||||
echo "using development nginx config"
|
||||
echo "$MNML_PATH/etc/nginx/sites-available/mnml.gg.nginx.conf"
|
||||
echo "-----------------------------------------------"
|
||||
|
||||
cp $MNML_PATH/etc/nginx/sites-available/mnml.gg.DEV.nginx.conf $MNML_PATH/etc/nginx/sites-available/mnml.gg.nginx.conf
|
||||
fi
|
||||
|
||||
sudo cp $MNML_PATH/etc/nginx/sites-available/mnml.gg.nginx.conf /etc/nginx/sites-available
|
||||
sudo ln -nfs /etc/nginx/sites-available/mnml.gg.nginx.conf /etc/nginx/sites-enabled/mnml.gg.nginx.conf
|
||||
# cd $MNML_PATH/client && npm run build
|
||||
|
||||
sudo service nginx restart
|
||||
|
||||
10
bin/clean.sh
10
bin/clean.sh
@ -4,5 +4,11 @@
|
||||
DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
|
||||
MNML_PATH=$(realpath "$DIR/../")
|
||||
|
||||
rm $MNML_PATH/etc/mnml.env
|
||||
rm $MNML_PATH/server/.env
|
||||
sudo rm -Rf /usr/local/mnml/
|
||||
sudo rm -Rf /var/lib/mnml/client
|
||||
sudo rm -Rf /var/lib/mnml/public
|
||||
sudo rm -Rf /etc/mnml/
|
||||
sudo rm -Rf /var/log/mnml
|
||||
|
||||
sudo -u postgres dropdb mnml
|
||||
|
||||
|
||||
14
bin/client.sh
Executable file
14
bin/client.sh
Executable file
@ -0,0 +1,14 @@
|
||||
#!/bin/bash
|
||||
|
||||
# bless you chris and andy <3
|
||||
DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
|
||||
MNML_PATH=$(realpath "$DIR/../")
|
||||
|
||||
VERSION=$(<"$MNML_PATH/VERSION")
|
||||
|
||||
echo "Building client version $VERSION"
|
||||
|
||||
cd $MNML_PATH/client
|
||||
rm -rf dist
|
||||
npm i
|
||||
npm run build
|
||||
28
bin/deploy.sh
Executable file
28
bin/deploy.sh
Executable file
@ -0,0 +1,28 @@
|
||||
#!/bin/bash
|
||||
|
||||
# bless you chris and andy <3
|
||||
DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
|
||||
MNML_PATH=$(realpath "$DIR/../")
|
||||
VERSION=$(<"$MNML_PATH/VERSION")
|
||||
|
||||
SERVER_BIN_DIR="/usr/local/mnml/bin"
|
||||
CLIENT_DIST_DIR="/var/lib/mnml/client"
|
||||
CLIENT_PUBLIC_DIR="/var/lib/mnml/public/current"
|
||||
|
||||
# server updates
|
||||
echo "syncing server $VERSION "
|
||||
rsync -a --delete --delete-excluded "$MNML_PATH/server/target/release/mnml" mnml:"$SERVER_BIN_DIR/$VERSION"
|
||||
ssh -q mnml ln -nfs "$SERVER_BIN_DIR/$VERSION" "$SERVER_BIN_DIR/mnml"
|
||||
ssh -q mnml ls -lah "$SERVER_BIN_DIR"
|
||||
|
||||
# client updates
|
||||
echo "syncing client $VERSION"
|
||||
rsync -a --delete --delete-excluded "$MNML_PATH/client/dist" mnml:"$CLIENT_DIST_DIR/$VERSION"
|
||||
ssh -q mnml ln -nfs "$CLIENT_DIST_DIR/$VERSION" "$CLIENT_PUBLIC_DIR"
|
||||
ssh -q mnml ls -lah "/var/lib/mnml/public"
|
||||
|
||||
echo "restarting mnml service"
|
||||
ssh -q -t mnml sudo service mnml restart && sleep 1 && systemctl --no-pager status mnml
|
||||
|
||||
echo "restarting nginx service"
|
||||
ssh -q -t mnml sudo service nginx restart && sleep 1 && systemctl --no-pager status nginx
|
||||
63
bin/install.sh
Executable file
63
bin/install.sh
Executable file
@ -0,0 +1,63 @@
|
||||
#!/bin/bash
|
||||
|
||||
# bless you chris and andy <3
|
||||
DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
|
||||
MNML_PATH=$(realpath "$DIR/../")
|
||||
|
||||
MNML_CONF="/etc/mnml/mnml.conf"
|
||||
|
||||
if [ ! -f $MNML_CONF ]; then
|
||||
echo "-----------------------------------------------"
|
||||
echo "creating an env file in $MNML_CONF"
|
||||
echo "-----------------------------------------------"
|
||||
|
||||
sudo mkdir -p /etc/mnml/
|
||||
echo "export MNML_USER=$(whoami)" | sudo tee -a $MNML_CONF
|
||||
echo "export MNML_PG_PASSWORD=\"$(openssl rand -hex 16)\"" | sudo tee -a $MNML_CONF
|
||||
echo "export MNML_PG_HOST=\"localhost\"" | sudo tee -a $MNML_CONF
|
||||
fi
|
||||
|
||||
source $MNML_CONF
|
||||
|
||||
# /var/lib/mnml
|
||||
# contains img data, builds
|
||||
sudo mkdir -p /var/lib/mnml/client
|
||||
sudo mkdir -p /var/lib/mnml/data
|
||||
sudo mkdir -p /var/lib/mnml/public/imgs
|
||||
sudo chown -R $MNML_USER:$MNML_USER /var/lib/mnml
|
||||
|
||||
# /var/log/mnml
|
||||
# log files
|
||||
sudo mkdir -p /var/log/mnml
|
||||
sudo chown -R $MNML_USER:$MNML_USER /var/log/mnml
|
||||
|
||||
# /usr/local/mnml/bin
|
||||
# server bin location
|
||||
sudo mkdir -p /usr/local/mnml/bin
|
||||
sudo chown -R $MNML_USER:$MNML_USER /usr/local/mnml
|
||||
|
||||
# SERVICES
|
||||
sudo mkdir -p /usr/local/systemd/system/
|
||||
sudo cp $MNML_PATH/etc/systemd/system/mnml.service /usr/local/systemd/system/
|
||||
|
||||
# POSTGRES SETUP
|
||||
sudo -u postgres createdb mnml
|
||||
sudo -u postgres createuser --encrypted mnml
|
||||
|
||||
echo "DATABASE_URL=postgres://mnml:$MNML_PG_PASSWORD@$MNML_PG_HOST/mnml" | sudo tee -a /etc/mnml/server.conf
|
||||
sudo -u postgres psql -c "alter user mnml with encrypted password '$MNML_PG_PASSWORD';"
|
||||
|
||||
cd $MNML_PATH/ops && npm run migrate
|
||||
|
||||
# NGINX
|
||||
if [ ! -f $MNML_PATH/etc/nginx/sites-available/mnml.gg.nginx.conf ]; then
|
||||
echo "-----------------------------------------------"
|
||||
echo "using development nginx config"
|
||||
echo "$MNML_PATH/etc/nginx/sites-available/mnml.gg.nginx.conf"
|
||||
echo "-----------------------------------------------"
|
||||
|
||||
cp $MNML_PATH/etc/nginx/sites-available/mnml.gg.DEV.nginx.conf $MNML_PATH/etc/nginx/sites-available/mnml.gg.nginx.conf
|
||||
fi
|
||||
|
||||
sudo cp $MNML_PATH/etc/nginx/sites-available/mnml.gg.nginx.conf /etc/nginx/sites-available
|
||||
sudo ln -nfs /etc/nginx/sites-available/mnml.gg.nginx.conf /etc/nginx/sites-enabled/mnml.gg.nginx.conf
|
||||
@ -1,27 +0,0 @@
|
||||
# bless you chris and andy <3
|
||||
|
||||
# DOES NOT WORK AT MOMENT
|
||||
|
||||
DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
|
||||
MNML_PATH=$(realpath "$DIR/../")
|
||||
VERSION=$(<"$MNML_PATH/VERSION")
|
||||
|
||||
# copy this dir to the tmp build directory and build it
|
||||
[[ -n "$BUILD_DIR" ]] || BUILD_DIR="/tmp/mnml/$VERSION"
|
||||
[[ -n "$BUILD_PREFIX" ]] || BUILD_PREFIX="/opt/mnml"
|
||||
[[ -n "$REPO_DIR" ]] || REPO_DIR="$HOME/mnml"
|
||||
|
||||
rm -rf "$BUILD_DIR" && mkdir -p "$BUILD_DIR/$BUILD_PREFIX" && cd "$BUILD_DIR/$BUILD_PREFIX"
|
||||
|
||||
(
|
||||
rsync -a --delete --delete-excluded \
|
||||
--exclude=".git/" \
|
||||
--exclude=".gitignore" \
|
||||
--exclude="packaging" \
|
||||
"$REPO_DIR/" "$BUILD_DIR/$BUILD_PREFIX/"
|
||||
|
||||
rsync -a --delete --delete-excluded "$DIR/postinstall" "$BUILD_DIR/$BUILD_PREFIX/"
|
||||
|
||||
cd "$BUILD_DIR/$BUILD_PREFIX" &&
|
||||
make
|
||||
)
|
||||
10
bin/server.sh
Executable file
10
bin/server.sh
Executable file
@ -0,0 +1,10 @@
|
||||
#!/bin/bash
|
||||
|
||||
# bless you chris and andy <3
|
||||
DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
|
||||
MNML_PATH=$(realpath "$DIR/../")
|
||||
VERSION=$(<"$MNML_PATH/VERSION")
|
||||
|
||||
cd $MNML_PATH/server
|
||||
echo "building server $VERSION"
|
||||
cargo build --release
|
||||
@ -146,7 +146,7 @@ button, input {
|
||||
color: whitesmoke;
|
||||
height: auto;
|
||||
border-width: 2px;
|
||||
border-color: #444;
|
||||
border-color: #222;
|
||||
border-radius: 0;
|
||||
letter-spacing: 0.25em;
|
||||
box-sizing: border-box;
|
||||
@ -299,13 +299,13 @@ button[disabled] {
|
||||
}
|
||||
|
||||
#mnml input, #mnml select {
|
||||
border-color: #444;
|
||||
background-color: #333;
|
||||
border-color: #222;
|
||||
background-color: #222;
|
||||
border-radius: 0;
|
||||
}
|
||||
|
||||
#mnml input:focus, #mnml select:focus {
|
||||
border-color: whitesmoke;
|
||||
border-color: #888;
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@ -4,9 +4,9 @@
|
||||
"description": "",
|
||||
"main": "index.js",
|
||||
"scripts": {
|
||||
"start": "parcel watch index.html --out-dir /var/lib/mnml/public/dist",
|
||||
"start": "parcel watch index.html --out-dir /var/lib/mnml/public/current",
|
||||
"anims": "parcel animations.html --host 0.0.0.0 --port 40080 --no-source-maps",
|
||||
"build": "parcel build index.html --out-dir /var/lib/mnml/public/dist",
|
||||
"build": "parcel build index.html",
|
||||
"scss": "node-sass --watch assets/scss -o assets/styles",
|
||||
"lint": "eslint --fix --ext .jsx src/",
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
|
||||
@ -17,7 +17,7 @@ map $http_upgrade $connection_upgrade {
|
||||
# DEV
|
||||
server {
|
||||
location / {
|
||||
root /var/lib/mnml/public/dist;
|
||||
root /var/lib/mnml/public/current;
|
||||
index index.html;
|
||||
try_files $uri $uri/ index.html;
|
||||
}
|
||||
|
||||
@ -1,48 +1,51 @@
|
||||
error_log /var/log/mnml/nginx.error.log;
|
||||
access_log /var/log/mnml/nginx.access.log;
|
||||
error_log /var/log/mnml/nginx.log;
|
||||
|
||||
upstream mnml {
|
||||
upstream mnml_http {
|
||||
server 127.0.0.1:40000;
|
||||
}
|
||||
|
||||
upstream mnml_ws {
|
||||
server 127.0.0.1:40055;
|
||||
}
|
||||
|
||||
|
||||
map $http_upgrade $connection_upgrade {
|
||||
default upgrade;
|
||||
'' close;
|
||||
}
|
||||
|
||||
# PRODUCTION
|
||||
# DEV
|
||||
server {
|
||||
root /var/lib/mnml/public/;
|
||||
index index.html;
|
||||
|
||||
server_name mnml.gg; # managed by Certbot
|
||||
|
||||
if ($host = minimal.gg) {
|
||||
return 301 https://mnml.gg$request_uri;
|
||||
} # managed by Certbot
|
||||
|
||||
if ($host = cryps.gg) {
|
||||
return 301 https://mnml.gg$request_uri;
|
||||
} # managed by Certbot
|
||||
|
||||
location / {
|
||||
root /var/lib/mnml/public/current;
|
||||
index index.html;
|
||||
try_files $uri $uri/ index.html;
|
||||
}
|
||||
|
||||
location /imgs/ {
|
||||
root /var/lib/mnml/public/;
|
||||
try_files $uri $uri/ =404;
|
||||
}
|
||||
|
||||
location /api/ws {
|
||||
proxy_pass http://mnml_ws;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection $connection_upgrade;
|
||||
proxy_read_timeout 600s;
|
||||
}
|
||||
|
||||
location /api/ {
|
||||
proxy_pass http://mnml_http;
|
||||
proxy_read_timeout 600s;
|
||||
}
|
||||
|
||||
listen [::]:443 ssl ipv6only=on; # managed by Certbot
|
||||
listen 443 ssl; # managed by Certbot
|
||||
ssl_certificate /etc/letsencrypt/live/mnml.gg/fullchain.pem; # managed by Certbot
|
||||
ssl_certificate_key /etc/letsencrypt/live/mnml.gg/privkey.pem; # managed by Certbot
|
||||
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
|
||||
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
|
||||
|
||||
location /ws {
|
||||
proxy_pass http://mnml;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection $connection_upgrade;
|
||||
proxy_read_timeout 600s;
|
||||
}
|
||||
}
|
||||
|
||||
# http -> https
|
||||
|
||||
@ -1,14 +1,13 @@
|
||||
[Unit]
|
||||
Description=OpenBSD Secure Shell server
|
||||
After=network.target auditd.service
|
||||
ConditionPathExists=!/etc/ssh/sshd_not_to_be_run
|
||||
Description=mnml game server
|
||||
After=postgresql
|
||||
User=mnml
|
||||
|
||||
[Service]
|
||||
ExecStart=/opt/mnml/bin/mnml
|
||||
ExecStart=/usr/local/mnml/bin/mnml
|
||||
KillMode=process
|
||||
Restart=on-failure
|
||||
RestartPreventExitStatus=255
|
||||
Type=notify
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
|
||||
@ -3,6 +3,13 @@ name = "mnml"
|
||||
version = "0.1.0"
|
||||
authors = ["ntr <ntr@smokestack.io>"]
|
||||
|
||||
# makes sure to include openssl links in runtime path
|
||||
# [profile.release]
|
||||
# rpath = true
|
||||
|
||||
# [profile.dev]
|
||||
# rpath = true
|
||||
|
||||
[dependencies]
|
||||
rand = "0.6"
|
||||
uuid = { version = "0.5", features = ["serde", "v4"] }
|
||||
@ -39,4 +46,3 @@ stripe-rust = { version = "0.10.4", features = ["webhooks"] }
|
||||
[patch.crates-io]
|
||||
# stripe-rust = { git = "https://github.com/margh/stripe-rs.git" }
|
||||
|
||||
stripe-rust = { git = "https://github.com/margh/stripe-rs.git" }
|
||||
|
||||
@ -52,7 +52,7 @@ mod ws;
|
||||
|
||||
use std::thread::{sleep, spawn};
|
||||
use std::time::{Duration};
|
||||
use dotenv::dotenv;
|
||||
use std::path::{Path};
|
||||
|
||||
use pubsub::pg_listen;
|
||||
use warden::warden;
|
||||
@ -78,7 +78,7 @@ fn setup_logger() -> Result<(), fern::InitError> {
|
||||
}
|
||||
|
||||
fn main() {
|
||||
dotenv().ok();
|
||||
dotenv::from_path(Path::new("/etc/mnml/server.conf")).ok();
|
||||
setup_logger().unwrap();
|
||||
|
||||
let pool = pg::create_pool();
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user