302 lines
6.7 KiB
Markdown
302 lines
6.7 KiB
Markdown
# LasTres
|
|
|
|
## Contributing
|
|
|
|
Do you know Perl, Typescript, SCSS or React and want
|
|
to get the best of this program?
|
|
|
|
You can contribute and make your dreams for
|
|
this game real.
|
|
|
|
[Contributing guide](CONTRIBUTING.md).
|
|
|
|
## Installation instructions. (Prod)
|
|
|
|
This is an example, you can configure the server
|
|
as you please, use this guide as a reference.
|
|
|
|
This guide uses Debian stable 12, this server
|
|
requires at least a system compatible with
|
|
Redis such as Linux, Windows is not compatible
|
|
with Redis, but you can use it virtualized or
|
|
with WSL2.
|
|
|
|
We recommend Linux or at least something Unix-like
|
|
to deploy both in server and in development this
|
|
project.
|
|
|
|
That said features that improve OS compatibility
|
|
will always be appreciated.
|
|
|
|
### Postgresql notes.
|
|
|
|
We are going to use the peer authentication that
|
|
comes preconfigured in Debian, if you are using
|
|
other OS you should care of `pg_hba.conf` to
|
|
be configured as peer for empty address.
|
|
|
|
This is how it looks on the Debian I used.
|
|
|
|
You can also configure it with password if the database
|
|
server is not the same host that the webserver, it
|
|
is supported by the software.
|
|
|
|
```
|
|
local all postgres peer
|
|
|
|
# TYPE DATABASE USER ADDRESS METHOD
|
|
|
|
# "local" is for Unix domain socket connections only
|
|
local all all peer
|
|
# IPv4 local connections:
|
|
host all all 127.0.0.1/32 scram-sha-256
|
|
# IPv6 local connections:
|
|
host all all ::1/128 scram-sha-256
|
|
# Allow replication connections from localhost, by a user with the
|
|
# replication privilege.
|
|
local replication all peer
|
|
host replication all 127.0.0.1/32 scram-sha-256
|
|
host replication all ::1/128 scram-sha-256
|
|
```
|
|
|
|
### Creating user
|
|
|
|
```shell
|
|
sudo useradd -m las_tres -d /var/lib/las_tres
|
|
```
|
|
|
|
### Installing dependencies.
|
|
|
|
```shell
|
|
sudo apt update && \
|
|
sudo apt install git postgresql redis nginx pwgen liblocal-lib-perl libpq-dev
|
|
```
|
|
|
|
### Starting an enable dependency services
|
|
|
|
```shell
|
|
sudo systemctl daemon-reload && \
|
|
sudo systemctl enable redis-server && \
|
|
sudo systemctl start redis-server && \
|
|
sudo systemctl enable postgresql && \
|
|
sudo systemctl start postgresql && \
|
|
sudo systemctl enable nginx && \
|
|
sudo systemctl start nginx
|
|
```
|
|
|
|
### Configuring the database
|
|
|
|
```shell
|
|
( cat << 'EOF'
|
|
create user "las_tres";
|
|
create database "las_tres";
|
|
grant all privileges on database "las_tres" to "las_tres";
|
|
alter database "las_tres" owner to "las_tres";
|
|
EOF
|
|
) | sudo -u postgres psql
|
|
```
|
|
|
|
### Cloning project.
|
|
|
|
```shell
|
|
sudo -u las_tres bash -c "$(cat <<'EOF'
|
|
cd && \
|
|
git clone https://git.owlcode.tech/sergiotarxz/LasTres
|
|
EOF
|
|
)"
|
|
```
|
|
|
|
### If you are going to change the JS. (Only once.)
|
|
|
|
```shell
|
|
sudo apt update && sudo apt install nodejs npm && \
|
|
sudo -u las_tres bash -c "$(cat <<'EOF'
|
|
cd ~/LasTres && \
|
|
npm install
|
|
EOF
|
|
)"
|
|
```
|
|
|
|
### Deploying your js changes
|
|
|
|
```shell
|
|
sudo -u las_tres bash -c "$(cat <<'EOF'
|
|
cd ~/LasTres && \
|
|
npx webpack
|
|
EOF
|
|
)"
|
|
```
|
|
|
|
### If you are going to change the css (Only once.)
|
|
|
|
```shell
|
|
sudo apt update && sudo apt install sassc
|
|
```
|
|
|
|
### Deploying the css changes
|
|
|
|
```shell
|
|
sudo -u las_tres bash -c "$(cat <<'EOF'
|
|
cd ~/LasTres && \
|
|
bash build_styles.sh
|
|
EOF
|
|
)"
|
|
```
|
|
|
|
|
|
### Configuring NGINX.
|
|
|
|
#### (TLS is out of the scope of this tutorial, but you must do it if you want to deploy this server to the public world.)
|
|
|
|
```shell
|
|
( cat << 'EOF'
|
|
map $http_upgrade $connection_upgrade {
|
|
default upgrade;
|
|
'' close;
|
|
}
|
|
upstream backend_las_tres {
|
|
server 127.0.0.1:3000 fail_timeout=0;
|
|
}
|
|
|
|
server {
|
|
listen 80;
|
|
listen [::]:80;
|
|
server_name las_tres.example.com;
|
|
location /.well-known/acme-challenge/ { allow all; }
|
|
|
|
keepalive_timeout 70;
|
|
sendfile on;
|
|
client_max_body_size 80m;
|
|
|
|
gzip on;
|
|
gzip_disable "msie6";
|
|
gzip_vary on;
|
|
gzip_proxied any;
|
|
gzip_comp_level 6;
|
|
gzip_buffers 16 8k;
|
|
gzip_http_version 1.1;
|
|
gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript image/svg+xml image/x-icon;
|
|
|
|
location / {
|
|
add_header Strict-Transport-Security "max-age=31536000" always;
|
|
proxy_set_header Host $host;
|
|
proxy_set_header X-Real-IP $remote_addr;
|
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
proxy_set_header X-Forwarded-Proto $scheme;
|
|
proxy_set_header Proxy "";
|
|
proxy_pass_header Server;
|
|
|
|
proxy_pass http://backend_las_tres;
|
|
proxy_buffering on;
|
|
proxy_redirect off;
|
|
proxy_http_version 1.1;
|
|
proxy_set_header Upgrade $http_upgrade;
|
|
proxy_set_header Connection $connection_upgrade;
|
|
tcp_nodelay on;
|
|
}
|
|
|
|
}
|
|
EOF
|
|
) | sudo tee /etc/nginx/sites-enabled/las_tres.conf && \
|
|
sudo systemctl reload nginx
|
|
```
|
|
|
|
### Configuring the app
|
|
|
|
For non standard configurations you should peek the
|
|
config in `las_tres.example.yml` copy to `las_tres.yml`
|
|
and modify the copy until it suits your needs, patches
|
|
and issues are welcome if you need more options than
|
|
example allows you to do.
|
|
|
|
```shell
|
|
sudo -u las_tres bash -c "$( cat << 'EOF'
|
|
cd ~/LasTres && \
|
|
cat << EOF1 > las_tres.yml
|
|
secrets:
|
|
- $(pwgen -s 512 1)
|
|
database:
|
|
dbname: las_tres
|
|
hypnotoad:
|
|
listen:
|
|
# Here we have changed it to only listen localhost.
|
|
- http://127.0.0.1:3000
|
|
EOF1
|
|
EOF
|
|
)"
|
|
```
|
|
|
|
|
|
### Installing Perl deps
|
|
|
|
```shell
|
|
sudo -u las_tres bash -c "$( cat << EOF
|
|
if ! grep PERL5LIB ~/.profile; then
|
|
perl -Mlocal::lib 2>/dev/null >> ~/.profile ;
|
|
fi && \
|
|
source ~/.profile && \
|
|
rm -fr ~/.cpan && \
|
|
( echo y && echo reload cpan && echo o conf commit ) | perl -MCPAN -Mlocal::lib -e shell && \
|
|
cd ~/LasTres && \
|
|
perl Build.PL && \
|
|
./Build installdeps
|
|
EOF
|
|
)"
|
|
```
|
|
|
|
### Creating Systemd service
|
|
|
|
```shell
|
|
( cat << 'EOF'
|
|
[Unit]
|
|
Description=LasTres the web text game
|
|
After=network.target postgresql.service redis.service
|
|
|
|
[Service]
|
|
User=las_tres
|
|
Group=las_tres
|
|
WorkingDirectory=/var/lib/las_tres/LasTres/
|
|
ExecStart=/bin/bash -c "source /var/lib/las_tres/.profile && hypnotoad -f script/las_tres"
|
|
User=las_tres
|
|
Group=las_tres
|
|
Restart=on-failure
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|
|
Alias=las_tres.service
|
|
EOF
|
|
) | sudo tee /etc/systemd/system/las_tres.service
|
|
```
|
|
|
|
### Deploying the database
|
|
|
|
#### If you are installing for the first time.
|
|
|
|
```shell
|
|
sudo -u las_tres bash -c "$( cat << EOF
|
|
cd ~/LasTres && \
|
|
source ~/.profile && \
|
|
perl script/install.pl
|
|
EOF
|
|
)"
|
|
```
|
|
|
|
#### If you are migrating from a older version
|
|
|
|
```shell
|
|
sudo -u las_tres bash -c "$( cat << EOF
|
|
cd ~/LasTres && \
|
|
source ~/.profile && \
|
|
perl script/upgrade.pl
|
|
EOF
|
|
)"
|
|
```
|
|
|
|
### Enabling and starting service
|
|
|
|
```shell
|
|
sudo systemctl daemon-reload && \
|
|
sudo systemctl restart las_tres && \
|
|
sudo systemctl enable las_tres
|
|
```
|