Upload
poh-chiat-koh
View
340
Download
0
Tags:
Embed Size (px)
Citation preview
Digital Ocean Meetup
What I do with my $5 (per month actually)
IntroductionAbout me? Or about Digital Ocean?
What I’m going to talk about
So why DO?
The Adverts
Price?
Easy?
Performance?• Sorry no picture.• Benchmarks gives some indication, but hard to
make it really objective and useful.• Location. DO has no Asia servers.. yet.
It depends.Cliché I know.
Experience with DO• I have a website: www.dilegno.sg
• Some parts of Shoppink use Digital Ocean
• Plus my random stuff I’m going to share with you
Alternatives?Many.
Setting up DO
One
Two
That’s it!
A website
Recipe• A personal website.• Simply get a web server running (apache or
nginx)• My website uses Sinatra. • We then need to get nginx talking to Sinatra.
Sinatra• Sinatra is a Ruby micro-framework
• require 'sinatra'
get '/hi' do "Hello World!"
end
Unicorn# set path to app that will be used to configure unicorn, # note the trailing slash in this example@dir = "/home/sockmister/personal-website/"
worker_processes 1working_directory @dir
timeout 30
# Specify path to socket unicorn listens to, # we will use this in our nginx.conf laterlisten "#{@dir}tmp/sockets/unicorn.sock", :backlog => 64
# Set process id pathpid "#{@dir}tmp/pids/unicorn.pid"
# Set log file pathsstderr_path "#{@dir}log/unicorn.stderr.log"stdout_path "#{@dir}log/unicorn.stdout.log"
Nginx• sudo apt-get install nginx• We can start, stop, restart by
o sudo service nginx restart|start|stop|status
• We then write the config files.
The Idea• The apps we are running today run behind nginx.
Nginx
App1
App2
App3
Incoming Requests
Outgoing Replies
Config Fileupstream pohchiat{ server unix:/home/sockmister/personal-website/tmp/sockets/unicorn.sock;}
server { listen 80; server_name www.pohchiat.com; root /home/sockmister/personal-website/public;
location / { proxy_pass http://pohchiat; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }}
Done!
Free GitHub reposUsing GitLab
Recipe• Setup GitLab
o Install dependencieso Setup new usero Clone and install GitLab shello Setup database (postgresql or mysql)o Setup GitLab itself
• Hook up with Nginx
Dependencies• Python 2
o Sudo apt-get install python
• Rubyo Ubuntu repositories are outdatedo I use rvm to handle ruby versions.
• Gemo gem install bundler
Adduser• We need to create a new user called ‘git’.
o sudo adduser --disabled-login --gecos 'GitLab' git
GitLab Shell• Clone
o sudo -u git -H git clone https://github.com/gitlabhq/gitlab-shell.git
• Git checkout the right versiono sudo -u git -H git checkout v1.7.1
• Edit config fileo sudo -u git -H editor config.yml
• Run a scripto sudo -u git -H ./bin/install
Database• Install postgresql
o sudo apt-get install -y postgresql-9.1 libpq-dev
• Logino sudo -u postgres psql -d template1
• Create user and databaseo CREATE USER git WITH PASSWORD '$password';o CREATE DATABASE gitlabhq_production OWNER git;
GitLab• Clone
o sudo -u git -H git clone https://github.com/gitlabhq/gitlabhq.git gitlab
• Git checkouto sudo -u git -H git checkout 6-1-stable
• Configureo Copy and change GitLab config fileo Mkdir for logs, tmp, publico Copy and change unicorn config file
• Install required Gemso gem install charlock_holmes --version '0.6.9.4'o bundle install --deployment --without development test mysql aws
• Initialize DBo sudo -u git -H chmod o-rwx config/database.ymlo bundle exec rake gitlab:setup RAILS_ENV=production
• Run as service
Nginx• This time GitLab has supplied the Nginx config
file.• The idea though, is really the same.
Done!
E-Book manager Calibre Library
Calibre LibraryThis needs a bit of intro.
Calibre Library
Recipe• Setup calibre app (this time it’s actually really
simple)• Setup dropbox daemon• Hook up to Nginx (same!)
Setup Calibre• sudo python -c "import sys; py3 = sys.version_info[0] > 2; u =
__import__('urllib.request' if py3 else 'urllib', fromlist=1); exec(u.urlopen('http://status.calibre-ebook.com/linux_installer').read()); main()
• To start calibre server, • Sudo /opt/calibre/calibre-server• Options:• --with-library• --username• --password• --daemonize
Dropbox• I run calibre on my laptop as well.• Need a simple way to sync the books both ways.• Trivia: NUS won Dropbox space race a while ago
and all NUS students have 25 GB extra space.
Dropbox• Download & install
o wget -O dropbox.tar.gz http://www.dropbox.com/download/?plat=lnx.x86
o tar –xzvf dropbox.tar.gz
• Runo ~/.dropbox-dist/dropboxd
• Link to your Dropbox accounto This client is not linked to any account…
• Control Dropboxo wget -O ~/.dropbox/dropbox.py "http://www.dropbox.com/download?
dl=packages/dropbox.py"
Done!
Caveats• It’s experimental.• Just because you can, doesn’t mean you should.• 512MB RAM• Erm. I cheated. I paid for domain too.
Takeaway• Tons of open source projects to try out.• It’s not a must to run this on DO.
Resources• Digital Ocean has a lot of guides. A lot a lot.
Otherwise…• Setup nginx
o http://ruby-journal.com/how-to-setup-rails-app-with-puma-and-nginx/o http://recipes.sinatrarb.com/p/deployment/nginx_proxied_to_unicorn
• GitLab o https://github.com/gitlabhq/gitlabhq/blob/6-1-stable/doc/install/
installation.md
• Calibre servero http://manual.calibre-ebook.com/cli/calibre-server.html
• Dropbox daemono http://ubuntuservergui.com/ubuntu-server-guide/install-dropbox-
ubuntu-server
Thank you!