diff --git a/backend/deployment/README.md b/backend/deployment/README.md new file mode 100644 index 0000000..4e2c7d9 --- /dev/null +++ b/backend/deployment/README.md @@ -0,0 +1,14 @@ +# Setup a decla.red server on a fresh debian/ubuntu machine + +> The method was tested on Debian 10 DigitalOcean droplets. + +- Copy the files from this directory to the target machine. +- Execute the following commands. +- ```sh + chmod +x setup.sh + ./setup.sh serverX + ``` + + > Where `serverX` is the serverX.decla.red subdomain pointing to the server. + +- Optionally, change the arguments in [declared-servers.sh](declared-servers.sh). diff --git a/backend/deployment/declared-servers.service b/backend/deployment/declared-servers.service new file mode 100644 index 0000000..678942d --- /dev/null +++ b/backend/deployment/declared-servers.service @@ -0,0 +1,11 @@ +[Unit] +Description=declared-server + +Requires=basic.target network.target + +[Service] +Type=simple +ExecStart=/bin/sh /root/declared-servers.sh + +[Install] +WantedBy=multi-user.target diff --git a/backend/deployment/declared-servers.sh b/backend/deployment/declared-servers.sh new file mode 100644 index 0000000..166ef8b --- /dev/null +++ b/backend/deployment/declared-servers.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +set -e + +NODE_ENV=production declared-server --port=3000 --name="Simonyi" --playerLimit=256 --npcCount=48 --scoreLimit=20000 diff --git a/backend/deployment/nginx.conf b/backend/deployment/nginx.conf new file mode 100644 index 0000000..1fbf3b5 --- /dev/null +++ b/backend/deployment/nginx.conf @@ -0,0 +1,49 @@ +user www-data; +worker_processes auto; +pid /run/nginx.pid; + +events { + worker_connections 768; +} + +http { + sendfile on; + tcp_nopush on; + tcp_nodelay on; + keepalive_timeout 65; + types_hash_max_size 2048; + server_tokens off; + + include /etc/nginx/mime.types; + default_type application/octet-stream; + + ssl_protocols TLSv1 TLSv1.1 TLSv1.2; + ssl_prefer_server_ciphers on; + + access_log /var/log/nginx/access.log; + error_log /var/log/nginx/error.log; + + map $http_upgrade $connection_upgrade { + default upgrade; + '' close; + } + + server { + listen 443 ssl; + + include /etc/letsencrypt/options-ssl-nginx.conf; + ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; + ssl_certificate /etc/letsencrypt/live/serverName.decla.red/fullchain.pem; + ssl_certificate_key /etc/letsencrypt/live/serverName.decla.red/privkey.pem; + + server_name serverName.decla.red; + + location / { + proxy_pass http://127.0.0.1:3000/; + proxy_http_version 1.1; + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $connection_upgrade; + proxy_set_header Host $host; + } + } +} \ No newline at end of file diff --git a/backend/deployment/setup.sh b/backend/deployment/setup.sh new file mode 100644 index 0000000..017e599 --- /dev/null +++ b/backend/deployment/setup.sh @@ -0,0 +1,28 @@ +#!/bin/sh + +set -e + +if [ -z "$1" ]; then + echo "Please specify a domain" 1>&2 + exit 1 +fi + +domain="$1" + +apt install -y curl +curl -sL https://deb.nodesource.com/setup_15.x | bash - +apt update +apt install -y nodejs nginx certbot python3-certbot-nginx +npm i -g declared-server + +certbot certonly --nginx -m schmelczerandras@gmail.com -d "$domain".decla.red --agree-tos --non-interactive + +mv nginx.conf /etc/nginx/nginx.conf +sed -i "s/serverName/$domain/g" /etc/nginx/nginx.conf +nginx -s reload + +chmod +x /root/declared-servers.sh +chown root:root /root/declared-servers.sh +cp declared-servers.service /etc/systemd/system/declared-servers.service +systemctl enable declared-servers.service +systemctl start declared-servers