jasharpe/taugame
Folders and files
| Name | Name | Last commit date | ||
|---|---|---|---|---|
Repository files navigation
*** Requirements Python 2.7 (for argparse module) http://www.python.org/ Tornado Web Server http://www.tornadoweb.org/ SQLAlchemy http://www.sqlalchemy.org/ **** Install requirements with MacPorts sudo port install python27 py27-tornado py27-sqlalchemy *** Running Before running the first time, to set up necessary files run: python2.7 setup.py Then edit secrets.py to add the missing fields. Then, to run locally for development: sudo python2.7 tau.py --debug --port=8000 --ssl_port=8001 To build and run with Docker (experimental): docker build -t websockettau . && docker run --rm -p 8000:8000 -p 8001:8001 websockettau To avoid having to rebuild the docker container on every change, you can run from your work directory: docker run --rm -p 8000:8000 -p 8001:8001 -v $PWD:/live -w /live websockettau To run against a test version of a mysql db: docker run --rm -p 8000:8000 -p 8001:8001 -v $PWD:/live -w /live -e db=mysql -e mysql_password=$MYSQL_PASSWORD -e mysql_addr=$LOCAL_IP_FROM_IFCONFIG:3306 -e db_name=tau_game_2 websockettau python ./tau.py --debug --port=8000 Connect to actual mysql for testing by running the proxy: curl -o cloud_sql_proxy https://dl.google.com/cloudsql/cloud_sql_proxy.darwin.amd64 ./cloud_sql_proxy -instances=tau-game:us-central1:tau-game-db=tcp:0.0.0.0:3306 Root access is required to bind to port 80 which is the default, so using ports 8000 and 8001 avoids this. The --debug flag allows the use of ^C to kill the server (very handy for restarting it during development). For other options, type: python2.7 tau.py --help *** Adding a new game type (as of July 15, 2012) - Implement the rules in game.py. - Add a name mapping to static/game_list.js. - Add a name mapping and URL mapping to tau.py. - Add a name mapping to constants.py. - Add a rules description and name mapping to templates/about.html. - (Sometimes applicable) Add changes to playing area in static/tau.js. - (If adding new cards) Make the following updates: static/tau.js: getImgClass(), get_card_number() static/styles.css: new class similar to .regularTau, .projectiveTau, etc. How to set up Fedora 16 server: $ ssh root@... $ passwd # to set password to something sane $ yum install git $ yum install python $ yum install gcc-c++ $ git clone https://github.com/jasharpe/websockettau.git # install tornado $ wget https://pypi.python.org/packages/source/t/tornado/tornado-4.0.2.tar.gz $ tar xvzf tornado-4.0.2.tar.gz $ cd tornado-4.0.2 $ python setup.py build $ sudo python setup.py install # install backports $ cd ~ && wget https://pypi.python.org/packages/source/b/backports.ssl_match_hostname/backports.ssl_match_hostname-3.4.0.2.tar.gz $ tar -zxvf backports.ssl_match_hostname-3.4.0.2.tar.gz $ cd backports.ssl_match_hostname-3.4.0.2 $ python setup.py install # install pip $ sudo yum install python-pip # install certifi $ pip-python install certifi # install sqlalchemy $ yum install python-sqlalchemy # create secrets.py # Get google client id and secret from https://console.developers.google.com/project/apps~tau-game/apiui/credential $ cd ~/websockettau && cat > secrets.py cookie_secret = "SOME STRING HERE" client_id = "GOOGLE CLIENT ID" client_secret = "GOOGLE CLIENT SECRET" # Set up certificates by creating localhost.crt certificate, and put in websockettau directory. # Open ports, add to /etc/sysconfig/iptables: # -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT # -A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT $ ./restart.sh # Set up ntp, so that time stays up to date (otherwise backups will fail when the clock skew gets too high!) $ yum install ntp $ ntpd # setup automatic backups to S3 $ yum install s3cmd $ s3cmd --configure # follow the prompts... # test that backups will work properly $ ./run_backup # verify that the backup appears in S3 # set up automatic backups. s3_crontab is a template. Modify it to suit you. $ crontab s3_crontab ### How to set up GCP instance 1. Create GCP project. 2. Upload Docker image to GCR (called `gcr.io/$PROJECT/websockettau`). Probably requires enabling the GCR API: ``` docker build -t gcr.io/tau-game/websockettau . docker push gcr.io/tau-game/websockettau ``` 3. Enable Stackdriver Logging API. 4. Create a GCP instance that runs the container uploaded (or do via the UI), and populates the environment variables needed by db.py.