hackspace/README.org

198 lines
8.1 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.
** Social
Test site sharing links / cards with twitter and facebook
https://cards-dev.twitter.com/validator
https://developers.facebook.com/tools/debug/
** 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
*** Then 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 -f local.yml build
#+END_SRC
*** Next start your new containers containing a database and django
#+BEGIN_SRC sh
docker-compose -f local.yml up
#+END_SRC
Once it's running, there's a few commands to run the first time before you can use it.
*** Run migrations to setup the database
To run django commands just prefix them with =docker-compose -f local.yml run django=
#+BEGIN_SRC sh
docker-compose -f local.yml run --rm django python manage.py migrate
#+END_SRC
*** Download static content
#+BEGIN_SRC sh
docker-compose -f local.yml run --rm django python manage.py collectstatic
#+END_SRC
*** Find the website address
Every time you start the website with the =docker-compose -f local.yml up= command the IPAddress of the website could change.
To find it you can run =docker ps=, but you may find the following command more handy.
#+BEGIN_SRC sh
docker ps -q | xargs docker inspect --format="{{printf \"%.40s\" .Name}} @ {{printf \"%.20s\" .Config.Image}} @ http://{{if ne \"\" .NetworkSettings.IPAddress}}{{ printf \"%.22s\" .NetworkSettings.IPAddress}}{{else}}{{range .NetworkSettings.Networks}}{{printf \"%.22s\" .IPAddress}}{{end}}{{end}} @ {{printf \"%.10s\" .State.Status}}" | column -t -s@ -c 80
#+END_SRC
This should return something like this:
#+BEGIN_SRC sh
/maidstonehackspacewebsite_nginx_1 olymk2/nginx http://172.18.0.12 running
/maidstonehackspacewebsite_celerybeat_1 maidstonehackspacewe http://172.18.0.10 running
/maidstonehackspacewebsite_celeryworker_ maidstonehackspacewe http://172.18.0.11 running
/maidstonehackspacewebsite_django_1 maidstonehackspacewe http://172.18.0.9 running
/maidstonehackspacewebsite_django_bjoren maidstonehackspacewe http://172.18.0.8 running
/maidstonehackspacewebsite_django_gunico maidstonehackspacewe http://172.18.0.7 running
/maidstonehackspacewebsite_postgres_1 maidstonehackspacewe http://172.18.0.6 running
/maidstonehackspacewebsite_bucket_1 minio/minio http://172.18.0.5 running
/maidstonehackspacewebsite_directory_1 osixia/openldap:1.2. http://172.18.0.4 running
/maidstonehackspacewebsite_mailhog_1 mailhog/mailhog http://172.18.0.3 running
/maidstonehackspacewebsite_redis_1 redis:latest http://172.18.0.2 running
#+END_SRC
Look for the =nginx= line, in this instance the IPAddress is 172.18.0.12.
This IPAddress will be used in the rest of the examples below, you will need to substitue with your IPAddress.
At this point the website should be up and running and you should be able to access it by going to the nginx IPAddress, e.g.,
http://172.18.0.12/
*** Create the admin user.
Once created you can login at http://172.18.0.12/trustee
#+BEGIN_SRC sh
docker-compose -f local.yml run --rm django python manage.py createsuperuser
#+END_SRC
*** Generate dummy data
#+BEGIN_SRC sh
docker-compose -f local.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 -f local.yml run --rm django python manage.py dumpdata feeds > mhackspace/feeds/fixtures/defaults.json
docker-compose -f local.yml run --rm django python manage.py loaddata mhackspace/feeds/fixtures/defaults.json
#+END_SRC
** Django Commands
#+BEGIN_SRC sh
docker-compose -f local.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 -f local.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")
(setq python-environment-directory "/docker:hackdev_django_1:/")
#+END_SRC
#+RESULTS:
: /docker:hackdev_django_1:/