1* Codies
2
3This is a fork of [[https://github.com/eltmon/codies][eltmon/codies]] from GitHub. I run my own instance of it
4but, it's just for friends; the old one run by the original creator,
5[[https://codies.xyz][codies.xyz]], was taken down due to copyright issues and I would prefer to
6avoid the same thing happening to mine. If you would like to host this
7yourself, please follow the included instructions.
8
9*From the original README:*
10
11Yet another Codenames webapp. Featuring:
12
13- Custom word packs
14- Timed mode
15- Quick room joining
16- Dark/light mode
17- Responsiveness for mobile play
18- And more!
19
20This is entirely inspired by the wonderful [[https://github.com/Joooop/codenames.plus][codenames.plus]], which works
21very well, but hasn't been scaling too well recently. I wanted an
22opportunity to learn TypeScript and React, and figured I could make
23something that worked just as well with a few extra niceties (and a more
24stable backend).
25
26[[file:docs/screenshot1.png]]
27
28* Manual installation
29
30** Prerequisites
31
32First, you'll need Golang 1.15 and Node 14 for building codies. Take a
33look at golang's [[https://golang.org/dl/][download]] page and follow the related documentation for
34[[https://golang.org/doc/install][installing with the binary]] or [[https://golang.org/doc/install/source][from source]], then for Node, try
35[[https://github.com/nodesource/distributions][NodeSource]].
36
37** Creating users
38Running codies as root is not recommended. Please run the following
39commands to create a new unprivileged user and execute all of the
40commands in the following section as that user.
41
42#+BEGIN_SRC bash
43 useradd -Ums /bin/bash codies
44 su -c /bin/bash - codies
45 git clone https://git.nixnet.services/Misc-Mirrors/codies.git
46 cd codies
47#+END_SRC
48
49** Building the frontend
50#+BEGIN_SRC bash
51 cd frontend
52 yarn install --frozen-lockfile
53 yarn build
54#+END_SRC
55
56** Building the backend
57#+BEGIN_SRC bash
58 go mod download
59 go run github.com/markbates/pkger/cmd/pkger
60 go run github.com/markbates/pkger/cmd/pkger -o internal/pkger
61 go build -ldflags="-X github.com/zikaeroh/codies/internal/version.version=1.15" .
62#+END_SRC
63
64** Running
65Execute the binary to ensure it all works properly:
66#+BEGIN_SRC bash
67 ./codies --debug
68#+END_SRC
69
70** Daemonizing
71If you want it to start as soon as your machine boots and that it
72restarts on crash, you'll need to run it with a supervisor like OpenRC,
73runit, or systemd.
74
75Below is a service file for systemd. If you want to use it, paste the
76contents into ~/etc/systemd/system/codies.service~.
77
78#+BEGIN_SRC text
79 [Unit]
80 Description=Codies
81 After=network.target network-online.target
82 Requires=network-online.target
83
84 [Service]
85 Type=simple
86 User=codies
87 Group=codies
88 WorkingDirectory=/home/codies/codies
89 ExecStart=/home/codies/codies/codies --debug
90 TimeoutStopSec=5s
91 PrivateTmp=true
92 ProtectSystem=full
93
94 [Install]
95 WantedBy=multi-user.target
96#+END_SRC
97
98** Reverse proxy
99Runing codies behind a reverse proxy is recommended. With [[https://caddyserver.com/][Caddy]], this is
100as simple as
101
102#+BEGIN_SRC text
103 example.com {
104 encode zstd gzip
105 reverse_proxy localhost:5000
106 }
107#+END_SRC
108
109For NGINX, the vhost could look something like this
110#+BEGIN_SRC text
111 server {
112 listen 443 ssl http2;
113 listen [::]:443 ssl http2;
114
115 server_name example.com;
116
117 ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
118 ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
119
120 location /
121 proxy_pass http://localhost:5000;
122 proxy_http_version 1.1;
123 proxy_set_header Upgrade $http_upgrade;
124 proxy_set_header Connection "Upgrade";
125 proxy_set_header Host $host;
126 }
127 }
128#+END_SRC
129
130* Docker installation
131The Dockerfile will only be kept as long as it continues working. My
132goal in forking the app is to rip Docker out and package the entire
133thing up in a single statically-linked binary.
134
135I don't know whether this will actually succeed, but here you go!
136#+BEGIN_SRC bash
137 docker build -t codies .
138 docker run -p 5000:5000 codies
139#+END_SRC