164 lines
5.7 KiB
Org Mode
164 lines
5.7 KiB
Org Mode
[[https://cdn.rawgit.com/maidstone-hackspace/administration/2ede7cb1/images/hackspace-banner.png]]
|
|
|
|
* Maidstone Hackspace website
|
|
[[https://pyup.io/repos/github/maidstone-hackspace/maidstone-hackspace-website/][https://pyup.io/repos/github/maidstone-hackspace/maidstone-hackspace-website/shield.svg]]
|
|
|
|
Repository for the maidstone hackspace website, feel free to fork this site for your own Hackspace.
|
|
|
|
** Requirements
|
|
Before getting started make sure you have git, docker and docker-compose installed on your machine.
|
|
The simplest way to setup this site is to use docker-compose so please install that from this site
|
|
https://docs.docker.com/engine/installation/
|
|
and make sure the quick start guide works
|
|
https://docs.docker.com/machine/get-started/
|
|
then you can use the commands below to test and make changes.
|
|
|
|
** Setup
|
|
Steps to get the site running for the first time
|
|
|
|
*** First clone the project
|
|
To get started checkout the project to your machine, with the command below.
|
|
|
|
#+BEGIN_SRC sh
|
|
git clone https://github.com/maidstone-hackspace/maidstone-hackspace-website.git
|
|
#+END_SRC
|
|
|
|
*** Build your containers to install the sites requirements
|
|
Once checked out build your containers locally you only need to do this when first start or if requirements change.
|
|
|
|
#+BEGIN_SRC sh
|
|
docker-compose -fdev.yml build
|
|
#+END_SRC
|
|
|
|
*** Start your new containers containing a database and django
|
|
|
|
#+BEGIN_SRC sh
|
|
docker-compose -fdev up
|
|
#+END_SRC
|
|
|
|
Test django is serving pages
|
|
http://127.0.0.1:8180
|
|
|
|
*** Run migrations to setup the database
|
|
To run django commands just prefix them with =docker-compose -f dev.yml run django=
|
|
#+BEGIN_SRC sh
|
|
docker-compose -f dev.yml run --rm django python manage.py makemigrations
|
|
docker-compose -f dev.yml run --rm django python manage.py migrate
|
|
#+END_SRC
|
|
*** Create the admin user.
|
|
Once created you can login at http://127.0.0.1:8180/trustee
|
|
#+BEGIN_SRC sh
|
|
docker-compose -f dev.yml run --rm django python manage.py createsuperuser
|
|
#+END_SRC
|
|
|
|
*** Generate dummy data
|
|
#+BEGIN_SRC sh
|
|
docker-compose -f dev.yml run --rm django python manage.py generate_test_data
|
|
#+END_SRC
|
|
** Migrations / Managing default data
|
|
If you want to export some data you entered into the admin area you can use =dumpdata= and =loaddata= to export and import.
|
|
|
|
#+BEGIN_SRC sh
|
|
docker-compose -fdev.yml run --rm django python manage.py dumpdata feeds > mhackspace/feeds/fixtures/defaults.json
|
|
docker-compose -fdev.yml run --rm django python manage.py loaddata mhackspace/feeds/fixtures/defaults.json
|
|
#+END_SRC
|
|
|
|
** Django Commands
|
|
|
|
#+BEGIN_SRC sh
|
|
docker-compose -fdev.yml run --rm django python manage.py list_subscriptions
|
|
#+END_SRC
|
|
|
|
*** Render image variations, if you change the images sizes this will be needed
|
|
#+BEGIN_SRC sh
|
|
docker-compose -fdev.yml run --rm django python manage.py rendervariations 'blog.Post.image' --replace
|
|
#+END_SRC
|
|
** Api
|
|
#+BEGIN_SRC python
|
|
import requests
|
|
|
|
url = 'http://127.0.0.1:8180/api/v1/rfidAuth/'
|
|
data = {
|
|
'rfid': '4996',
|
|
'device': '7bff6053-77ef-4250-ac11-8a119fd05a0e'
|
|
}
|
|
|
|
# client = RequestsClient()
|
|
response = requests.post(
|
|
'http://127.0.0.1:8180/api/v1/rfidAuth/',
|
|
data={'rfid': '238e', 'device': 'e8f27231-8093-4477-8906-e5ae1b12dbd6'})
|
|
#requests.get(url)
|
|
return response.status_code
|
|
|
|
#+END_SRC
|
|
|
|
#+RESULTS:
|
|
: 200
|
|
** Server
|
|
Example service setup for website under docker, nginx in a container forwarding traffic to uwsgi.
|
|
*** nginx web server
|
|
#+BEGIN_SRC bash
|
|
docker volume create --name=sockets
|
|
docker run --name=nginx -d \
|
|
-v /etc/nginx/sites-enabled/:/etc/nginx/sites-enabled/ \
|
|
-v /etc/letsencrypt/:/etc/letsencrypt/ \
|
|
-v /var/www/:/var/www/ \
|
|
-v sockets:/data/sockets -p 80:80 -p 443:443 olymk2/nginx
|
|
#+END_SRC
|
|
*** letsencrypt cert setup
|
|
Setup / create new certs
|
|
#+BEGIN_SRC bash
|
|
letsencrypt certonly --renew --webroot -w /var/www/.well-known -d stage.maidstone-hackspace.org.uk
|
|
letsencrypt certonly --webroot -w /var/www/.well-known -d stage.maidstone-hackspace.org.uk
|
|
#+END_SRC
|
|
|
|
Automation of renewal process
|
|
create a file called =/etc/cron.monthly/letsencrypt-renew.sh= and make it executable with chmod +x, then place your above commands in the file like in the example below.
|
|
#+BEGIN_SRC bash
|
|
#!/bin/bash
|
|
letsencrypt certonly --webroot --renew-by-default --agree-tos -w /var/www/.well-known -d stage.maidstone-hackspace.org.uk
|
|
#+END_SRC
|
|
|
|
*** Postgres tips
|
|
Connect to the database inside container to run sql commands.
|
|
#+BEGIN_SRC bash
|
|
docker-compose -fstage.yml run --rm postgres psql -U postgres
|
|
#+END_SRC
|
|
|
|
*** Backups
|
|
Create a backup file with today's date
|
|
#+BEGIN_SRC bash
|
|
docker exec -t {CONTAINER_NAME} pg_dump -Fp -c -U postgresuser > dump_`date +%d-%m-%Y"_"%H_%M_%S`.sql
|
|
docker exec {CONTAINER_NAME} bash -lc 'pg_dump --format custom vmdb_production' > dump_`date +%d-%m-%Y"_"%H_%M_%S`.pgdata
|
|
#+END_SRC
|
|
|
|
Import previously made backup
|
|
#+BEGIN_SRC bash
|
|
docker exec -i -u {USER} {CONTAINER_NAME} pg_restore --verbose --no-acl --no-owner --clean --role=postgres -Upostgres --dbname={DATABASE_USER} < dump_31-01-2018_13_09_24.pgdata
|
|
docker exec -i -u {USER} {CONTAINER_NAME} pg_restore -C --clean -d {DATABASE_USER} < dump_31-01-2018_13_09_24.pgdata
|
|
cat dump_27-01-2018_14_26_09.sql | docker exec -i {CONTAINER_ID} psql -U postgres
|
|
#+END_SRC
|
|
|
|
letsencrypt config
|
|
#+BEGIN_SRC bash
|
|
letsencrypt certonly --renew --webroot -w /var/www/.well-known -d maidstone-hackspace.org.uk -d maidstone-hackspace.org.uk -d www.maidstone-hackspace.org.uk
|
|
#+END_SRC
|
|
|
|
|
|
CMD ["nginx", "-g", "daemon off;"]
|
|
sudo chmod -R a+rX static/
|
|
|
|
#+BEGIN_SRC emacs-lisp
|
|
(let ((default-directory "/docker:hackdev_django_1:/app"))
|
|
(python-shell-make-comint "python manage.py shell" "Python" 'show))
|
|
#+END_SRC
|
|
** Test
|
|
|
|
#+BEGIN_SRC emacs-lisp
|
|
(setq python-shell-interpreter "/docker:hackdev_django_1:/usr/local/bin/python")
|
|
#+END_SRC
|
|
|
|
#+RESULTS:
|
|
: /docker:hackdev_django_1:/usr/local/bin/python
|
|
|