Website Jail w/ Git Power-up
Website via git
You created a jail for gitea. Of course you now want to use it to track website changes via git version control. Every git push
is a push into production, and that's cool! Let's roll with it. The future is now.
Let's pretend you've done some basics. You've got gitea running, and you created a project in gitea called 'website'. You git
cloned it, and you have scp
'd the files from your website jail folder to your local computer. You copied them into the repo, and you commited your changes, and you're ready to push your changes, right? Perfect.
Let's get busy on the server...
As root in the host:
zfs create -o compress=lz4 -o atime=off zroot/data/prod-website
Now we need to create these directories in their /usr/local/data
, stop the gitea and website jails, update their fstab
files, and restart the jails. Then make sure to set permissions (owned by git, by readable by anyone).
First, with the gitea jail
bastille console git_jail
mkdir -p /usr/local/data/prod-website
exit
bastille git_jail stop
Edit fstab
/usr/local/data/prod-website /usr/local/bastille/jails/git_jail/root/usr/local/data/prod-website nullfs rw,late 0 0
bastille start git_jail
bastille console git_jail
cd /usr/local/data/prod-website && mkdir -p mydomain.tld && chown git:git mydomain.tld
Before moving along, let's add the git hook.
(This is the magic)
cd /usr/local/data/git/git_username/website.git/hooks
Edit post-receive to include
WEBSITE_FOLDER="/usr/local/data/prod-website/mydomain.tld"
git --work-tree=$WEBSITE_FOLDER --git-dir=$GIT_DIR checkout -f master
Now double check you added those files locally and push to remote.
And it worked.
Next, with the website jail
bastille console website_jail
Double check the location of the website. It's at /usr/local/www/mydomain.tld
... now...
bastille stop website_jail
Edit fstab
/usr/local/data/prod-website/mydomain.tld /usr/local/bastille/jails/website_jail/root/usr/local/www/mydomain.tld nullfs rw,late 0 0
bastille start website_jail
If I pop into the jail and run ll
in /usr/local/www
, I see that the git user owns the directory now, so it appears it's complete...
But it's not. Nginx is looking too high. Gotta adjust the nginx conf. It needs to dig in another dir (.../www/mydomain.tld/mydomain.tld
). Maybe I'll decide on a more elegant (less nested) approach later. For now, it works and is nice.
Then a final service nginx reload
(preceded by nginx -t
, if you wanna be extra careful), and we're good.
Mission Accomplished
That's right. As stated at the top, you can now do development at home, testing on your localhost webserver, and then commit and push your changes whenever you're happy with them.