Calendaring app for shift-workers to enter their uneven work schedule more easily
assets | ||
config | ||
lib | ||
priv | ||
test | ||
.formatter.exs | ||
.gitignore | ||
.iex.exs | ||
mix.exs | ||
mix.lock | ||
README.md |
Shift73k
Calendaring app for shift-worker shift tracking, with support for CSV export and sharing work schedule with others.
Written in Elixir & Phoenix LiveView, with Bootstrap v5.
TODO
Proper modal to delete shifts?[2022-08-14]- Update tests, which are probably all way out of date. But I also don't care that much for this project...
Deploying
The below notes are old; I'm using a docker build to deploy this now. Will document when I have time.
New versions
When improvements are made, we can update the deployed version like so:
cd ${SHIFT73K_BASE_DIR}
# update from master
/usr/bin/git pull 73k master
# fetch prod deps & compile
/usr/bin/mix deps.get --only prod
MIX_ENV=prod /usr/bin/mix compile
# perform any migrations
MIX_ENV=prod /usr/bin/mix ecto.migrate
# update node packages via package-lock.json
/usr/bin/npm --prefix ./assets/ ci
# rebuild static assets:
rm -rf ./priv/static/*
/usr/bin/npm --prefix ./assets/ run build
MIX_ENV=prod /usr/bin/mix phx.digest
# rebuild release
MIX_ENV=prod /usr/bin/mix release --overwrite
# restart service
sudo /bin/systemctl restart shift73k.service
systemd unit:
[Unit]
Description=Shift73k service
After=local-fs.target network.target
[Service]
Type=simple
User=runuser
Group=runuser
WorkingDirectory=/opt/shift73k/_build/prod/rel/shift73k
ExecStart=/opt/shift73k/_build/prod/rel/shift73k/bin/shift73k start
ExecStop=/opt/shift73k/_build/prod/rel/shift73k/bin/shift73k stop
#EnvironmentFile=/etc/default/myApp.env
Environment=LANG=en_US.utf8
Environment=MIX_ENV=prod
#Environment=PORT=4000
LimitNOFILE=65535
UMask=0027
SyslogIdentifier=shift73k
Restart=always
[Install]
WantedBy=multi-user.target
nginx config:
upstream phoenix {
server 127.0.0.1:4000 max_fails=5 fail_timeout=60s;
}
server {
location / {
allow all;
# Proxy Headers
proxy_http_version 1.1;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_set_header X-Cluster-Client-Ip $remote_addr;
proxy_set_header X-Real-IP $remote_addr;
proxy_redirect off;
# WebSockets
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_pass http://phoenix;
}
}