98 lines
No EOL
2.9 KiB
Markdown
98 lines
No EOL
2.9 KiB
Markdown
# Home73k
|
|
|
|
Personal website with blog.
|
|
|
|
## Blog posts
|
|
|
|
Posts are markdown files stored under `priv/content` and parsed by [Earmark](https://hexdocs.pm/earmark/Earmark.html). This can be configured in `config.exs` under `config :home73k, :app_global_vars, blog_content: "path/to/content"`
|
|
|
|
### Syntax highlighting
|
|
|
|
For the challenge of it, and to keep user's browsers from having to run javascript just to highlight some code, I chose to do server-side syntax highlighting.
|
|
|
|
Due to the lexer limitations of elixir-native solutions, the highlighter uses [Pygments](https://pygments.org/) by calling [pygmentize](https://pygments.org/docs/cmdline/) via [System.cmd](https://hexdocs.pm/elixir/System.html#cmd/3)
|
|
|
|
However, this requires installing python3 & Pygments. Best way to do this is with a venv (virtual python environment), so you'll also want `python3-venv` installed on a debian system, for example.
|
|
|
|
By default, Home73k is configured to look for pygmentize in a venv at `priv/pygments/bin/pygmentize` -- here's a quick howto for how to set that up:
|
|
|
|
```shell
|
|
cd priv
|
|
python3 -m venv pygments
|
|
source pygments/bin/activate
|
|
pip3 install Pygments
|
|
```
|
|
|
|
The location of bin/pygmentize can be configured in `config.exs` under `config :home73k, :app_global_vars, pygmentize_bin: "path/to/bin/pygmentize"`
|
|
|
|
## Deploying
|
|
|
|
### New versions
|
|
|
|
When improvements are made, we can update the deployed version like so:
|
|
|
|
```shell
|
|
cd /opt/home73k
|
|
git pull
|
|
mix deps.get --only prod
|
|
MIX_ENV=prod mix compile
|
|
# update Pygments in venv
|
|
priv/pygments/bin/pip3 install -U Pygments
|
|
# rebuild static assets:
|
|
npm run deploy --prefix ./assets
|
|
MIX_ENV=prod mix phx.digest
|
|
MIX_ENV=prod mix release --overwrite
|
|
# test starting it:
|
|
MIX_ENV=prod _build/prod/rel/home73k/bin/home73k start
|
|
```
|
|
|
|
### systemd unit:
|
|
|
|
```ini
|
|
[Unit]
|
|
Description=Home73k service
|
|
After=local-fs.target network.target
|
|
|
|
[Service]
|
|
Type=simple
|
|
User=runuser
|
|
Group=runuser
|
|
WorkingDirectory=/opt/home73k/_build/prod/rel/home73k
|
|
ExecStart=/opt/home73k/_build/prod/rel/home73k/bin/home73k start
|
|
ExecStop=/opt/home73k/_build/prod/rel/home73k/bin/home73k stop
|
|
#EnvironmentFile=/etc/default/myApp.env
|
|
Environment=LANG=en_US.utf8
|
|
Environment=MIX_ENV=prod
|
|
#Environment=PORT=4000
|
|
LimitNOFILE=65535
|
|
UMask=0027
|
|
SyslogIdentifier=home73k
|
|
Restart=always
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|
|
```
|
|
|
|
### nginx config:
|
|
|
|
```conf
|
|
upstream phoenixhome {
|
|
server 127.0.0.1:4721 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://phoenixhome;
|
|
}
|
|
}
|
|
``` |