107 lines
3.8 KiB
Markdown
107 lines
3.8 KiB
Markdown
How to build the web site
|
|
=========================
|
|
|
|
Initial Setup
|
|
-------------
|
|
|
|
You need git and hugo to build the website. On Debian or similar
|
|
Linux Distributions, install them like this:
|
|
|
|
$ sudo apt install git hugo
|
|
|
|
Now you can clone the repository:
|
|
|
|
$ git clone ssh://git@gitlab.hamburg.ccc.de:4242/cryptoparty/website-content.git
|
|
|
|
If this doesn't work, you may need to add a ssh authentication key to
|
|
your gitlab profile on [this page]:
|
|
|
|
[this page]: https://gitlab.hamburg.ccc.de/profile/keys
|
|
|
|
Furthermore, you need to checkout the submodules:
|
|
|
|
$ cd website-content
|
|
website-content $ git submodule init
|
|
website-content $ git submodule update
|
|
|
|
Let's configure git:
|
|
|
|
$ git config user.name "Jane Doe"
|
|
$ git config user.email "jane@doe.org"
|
|
|
|
Building and making changes
|
|
---------------------------
|
|
|
|
Now you can build the site using `make`, it will be put into `public`.
|
|
`make server` will launch a local server that is useful while editing
|
|
the web site. To view the site while you are editing it, go to
|
|
[http://localhost:1313](http://localhost:1313).
|
|
|
|
Creating a new post
|
|
-------------------
|
|
|
|
First, make sure your checkout is up-to-date:
|
|
|
|
$ git pull
|
|
|
|
Then, create a new branch for you post:
|
|
|
|
$ git checkout -b my-new-post
|
|
|
|
Now, to create a new post for a meetup, do:
|
|
|
|
$ hugo new termine/2020-januar.md
|
|
$ editor content/termine/2020-januar.md
|
|
|
|
Fill out the scaffolded header on top. Add content below the `---`
|
|
marker. After the first paragraph, insert `<!--more-->` to mark the
|
|
first paragraph as the introduction to be used on the front page. Use
|
|
`make server` to view your changes.
|
|
|
|
If you are satisfied, add it to the branch, and push it to the server:
|
|
|
|
$ git add content/termine/2020-januar.md
|
|
$ git commit -m 'Added new post.'
|
|
$ git push
|
|
|
|
Then, [create a merge request] on gitlab. Press the blue button
|
|
labeled `Create merge request`. On the following site, press the
|
|
green `Submit merge request` button, then press the blue button
|
|
labeled `Merge once pipeline succeeds`. Your change will be published
|
|
once the continuous integration setup confirmed the validity of the
|
|
change.
|
|
|
|
[create a merge request]: https://gitlab.hamburg.ccc.de/cryptoparty/website-content/merge_requests
|
|
|
|
How this is set up on the server
|
|
================================
|
|
|
|
On the server, the website is built using gitlab's ci runner, see
|
|
`.gitlab-ci.yml`. To deploy the site, the ci job rsyncs it to the
|
|
host. For this purpose, a restricted user is created:
|
|
|
|
# adduser --system --home /var/www/www-data-rsync --shell /bin/sh --disabled-password --ingroup www-data www-data-rsync
|
|
|
|
Create a key and restrict it to invoke the restricted-rsync script:
|
|
|
|
# mkdir /var/www/www-data-rsync/.ssh
|
|
# chmod 700 /var/www/www-data-rsync/.ssh
|
|
# ssh-keygen -t ed25519 -C 'Used for website deployment.' -f www-data-rsync-id_ed25519
|
|
# echo 'command="/usr/local/bin/rrsync /var/www/html --safe-links",no-agent-forwarding,no-port-forwarding,no-pty,no-user-rc,no-X11-forwarding ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOBBpthbSQ3HgOkhoBwsrZCA9VMX7hRftB5t6LePqtr3 Used for website deployment.' > /var/www/www-data-rsync/.ssh/authorized_keys
|
|
# chmod 400 /var/www/www-data-rsync/.ssh/authorized_keys
|
|
# chown -R www-data-rsync:www-data /var/www/www-data-rsync/.ssh
|
|
|
|
Copy the restricted-rsync script from the docs and make it executable:
|
|
|
|
# cp /usr/share/doc/rsync/scripts/rrsync /usr/local/bin/
|
|
# chmod +x /usr/local/bin/rrsync
|
|
|
|
Finally, allow www-data-rsync to write to the document root:
|
|
|
|
# chown root:www-data /var/www/html
|
|
# chmod g+w /var/www/html
|
|
|
|
The last bit is to supply the generated secret to gitlab's ci runner
|
|
via RSYNC_TARGET_SECRET_KEY. Other information that needs to be
|
|
provided are RSYNC_TARGET_HOST, RSYNC_TARGET_PORT,
|
|
RSYNC_TARGET_HOST_KEY, and RSYNC_TARGET_USER.
|