-
-
Save Gromph/5f4db73b0f38775bc2f0 to your computer and use it in GitHub Desktop.
The Cabot quick start instructions are for auto installing on ubuntu using fabric, gunicorn, postgres. | |
I wanted to install manually on CentOS 7 running with uwsgi, nginx, mysql, and use our own mail server for | |
alerts instead of Amazon SES | |
These are my notes on how I did that. | |
These notes aren't a complete walkthrough, and a few steps may be missing or wrong, but I thought they might | |
be helpful anyways. | |
Setup | |
1. adduser www | |
passwd www | |
mkdir /var/www/ | |
mkdir /var/www/logs/ | |
mkdir /var/www/run/ | |
mkdir /var/www/run/celery/ | |
chown -R www.www /var/www/ | |
2. download(or clone) Cabot from github: https://github.com/arachnys/cabot/archive/master.zip | |
3. unziped to /var/www/cabot/ | |
4. python setup.py install | |
I'm not sure if this was necessary | |
5. yum install pip gcc python-devel openssl-devel | |
6. pip install setuptools --upgrade | |
7. copied list of required packages from setup.py to requirements.txt | |
replaced psycopg2 with MySQL-python | |
8. pip install -r requirements.txt | |
9. If you want to use your own smtp server instead of amazon: | |
nano cabot/settings.py | |
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' | |
EMAIL_HOST = "mail.example.com" | |
10. cp conf/production.env.example cp conf/production.env | |
11. nano conf/production.env | |
DATABASE_URL=mysql://cabot:PASSWORD@db.lan2/Cabot | |
ADMIN_EMAIL=admin@example.com | |
GRAPHITE_API=http://graphite.lan2/ | |
GRAPHITE_USER=cabot | |
GRAPHITE_PASS=PASSWORD | |
WWW_HTTP_HOST=monitor.lan2 | |
12. Install node: | |
yum install gcc-c++ | |
wget http://nodejs.org/dist/v0.10.33/node-v0.10.33.tar.gz | |
./configure | |
make | |
make install | |
npm install -g coffee-script less@1.3 --registry http://registry.npmjs.org/ | |
13. sh -ac ' . ./conf/production.env; python manage.py syncdb' | |
14. sh -ac ' . ./conf/production.env; python manage.py migrate' | |
15. sh -ac ' . ./conf/production.env; python manage.py collectstatic --noinput' | |
16. sh -ac ' . ./conf/production.env; python manage.py compress' | |
17. Setup uwsgi | |
pip install uwsgi | |
nano /etc/systemd/system/uwsgi.service | |
[Unit] | |
Description=uWSGI Emperor | |
After=syslog.target | |
[Service] | |
ExecStart=/bin/uwsgi --ini /etc/uwsgi/emperor.ini | |
Restart=always | |
KillSignal=SIGQUIT | |
Type=notify | |
StandardError=syslog | |
NotifyAccess=main | |
[Install] | |
WantedBy=multi-user.target | |
nano /etc/uwsgi/vassals/cabot.ini | |
[uwsgi] | |
chdir=/var/www/cabot | |
module=cabot.wsgi | |
master=True | |
vacuum=True | |
max-requests=50000 | |
socket=localhost:5000 | |
processes=10 | |
logto=/var/www/logs/cabot_uwsgi.log | |
for-readline = /var/www/cabot/conf/production.env | |
env = %(_) | |
endfor = | |
systemctl start uwsgi | |
systemctl enable uwsgi | |
18. Setup Nginx | |
Install official Nginx rpm from repo: http://wiki.nginx.org/Install | |
nano /etc/nginx/conf.d/cabot.conf | |
upstream django { | |
server 127.0.0.1:5000; | |
} | |
server { | |
listen 10.1.0.74:80; | |
server_name monitor.lan2; | |
access_log /var/www/logs/cabot.access.log; | |
error_log /var/www/logs/cabot.error.log; | |
location / { | |
uwsgi_pass django; | |
include uwsgi_params; | |
} | |
location /static/ { | |
alias /var/www/cabot/static/; | |
} | |
} | |
systemctl start nginx | |
systemctl enable nginx | |
19. Setup systemd file to run celery workers | |
nano /etc/systemd/system/cabot-worker.service | |
# Copied and modified from https://github.com/celery/celery/blob/3.1/extra/systemd/celery.service | |
[Unit] | |
Description=CabotCelery workers | |
After=network.target | |
[Service] | |
Type=forking | |
User=www | |
Group=www | |
WorkingDirectory=/var/www/cabot/ | |
EnvironmentFile=/var/www/cabot/conf/production.env | |
ExecStart=/bin/celery multi start worker \ | |
-A cabot --pidfile=/var/www/run/celery/%n.pid \ | |
--logfile=/var/www/logs/celery_%n.log --loglevel="INFO" \ | |
-B | |
ExecStop=/bin/celery multi stopwait worker \ | |
--pidfile=/var/run/celery/%n.pid | |
ExecReload=/bin/celery multi restart worker \ | |
-A cabot --pidfile=/var/www/run/celery/%n.pid \ | |
--logfile=/var/www/logs/celery_%n.log --loglevel="INFO" | |
[Install] | |
WantedBy=multi-user.target | |
systemctl start cabot-worker | |
systemctl enable cabot-worker | |
20. Install redis | |
Install epel: rpm -Uvh http://mirror.symnds.com/distributions/fedora-epel/7/x86_64/e/epel-release-7-2.noarch.rpm | |
yum install redis | |
systemctl start redis | |
systemctl enable redis | |
21. goto http://monitor.lan2 and see if everything is successfully running | |
Run cabot without uwsgi and nginx for testing: | |
sh -ac ' . ./conf/production.env; python manage.py runserver' | |
To run uwsgi server for testing: | |
sh -ac ' . ./conf/production.env; uwsgi --socket localhost:5000 --module cabot.wsgi --chmod-socket=664' | |
Manually run celery workers: | |
sh -ac '. ./conf/production.env; celery worker -B -A cabot --loglevel=INFO --concurrency=16 -Ofair' |
- Do most of your yum installs in step 5; a few more are needed too. yum install pip gcc python-devel openssl-devel gcc-c++ openldap-devel should work.
- If you're still using PostgreSQL for this, use https://wiki.postgresql.org/wiki/YUM_Installation to locate the correct RPM repo package & install instructions. You'll need the following packages: postgresql94 postgresql94-libs postgresql94-server postgresql94.x86_64 postgresql94-contrib postgresql94-devel . Use the command PATH=$PATH:/usr/pgsql-9.4/bin/ to ensure the pip component for it installs correctly.
- Omit steps 7 & 8; do step 4 there. May need to edit the setup.py to change some packages to use ~= instead of == if dependency failures occur (Django itself needs to stay below 1.7 I think).
- Step 12, use http://nodejs.org/dist/v0.10.41/node-v0.10.41.tar.gz , or check https://nodejs.org/en/blog/ for the latest version.
- Step 20, the latest EPEL info is at https://fedoraproject.org/wiki/EPEL
I am good up to step 12 when I run step 13 I am getting
[root@ cabot]# sh -ac ' . ./conf/production.env; python manage.py syncdb'
Traceback (most recent call last):
File "manage.py", line 10, in
execute_from_command_line(sys.argv)
File "/usr/lib/python2.7/site-packages/django/core/management/init.py", line 350, in execute_from_command_line
utility.execute()
File "/usr/lib/python2.7/site-packages/django/core/management/init.py", line 324, in execute
django.setup()
File "/usr/lib/python2.7/site-packages/django/init.py", line 18, in setup
apps.populate(settings.INSTALLED_APPS)
File "/usr/lib/python2.7/site-packages/django/apps/registry.py", line 85, in populate
app_config = AppConfig.create(entry)
File "/usr/lib/python2.7/site-packages/django/apps/config.py", line 90, in create
module = import_module(entry)
File "/usr/lib64/python2.7/importlib/init.py", line 37, in import_module
import(name)
File "/usr/lib/python2.7/site-packages/polymorphic/init.py", line 11, in
from .polymorphic_model import PolymorphicModel
File "/usr/lib/python2.7/site-packages/polymorphic/polymorphic_model.py", line 19, in
from django.contrib.contenttypes.models import ContentType
File "/usr/lib/python2.7/site-packages/django/contrib/contenttypes/models.py", line 159, in
class ContentType(models.Model):
File "/usr/lib/python2.7/site-packages/django/db/models/base.py", line 94, in new
app_config = apps.get_containing_app_config(module)
File "/usr/lib/python2.7/site-packages/django/apps/registry.py", line 239, in get_containing_app_config
self.check_apps_ready()
File "/usr/lib/python2.7/site-packages/django/apps/registry.py", line 124, in check_apps_ready
raise AppRegistryNotReady("Apps aren't loaded yet.")
django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.
Here is my manage.py
#!/usr/bin/env python
import os
import sys
if name == "main":
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "cabot.settings")
from django.core.management import execute_from_command_line
execute_from_command_line(sys.argv)
Thanks bud. Although incomplete, this helped me get cabot somewhat running on RHEL 6.x