快速裝機 ubuntu+ngnix+mysql+django;Jupyter;音頻處理librosa;...
我想要的是在服務器上放我的博客(django搭建)或者其它的網頁(80端口),然后另外幾個端口放一些自己用的東西(Jupyter讓我可以用手機/pad之類可以聯網的設備隨時通過網頁編程,phpmyadmin查看數據庫等)。
服務器環境為一臺全空的阿里云ubuntu 14.04。
ssh登陸免輸密碼
首先肯定是做這一步,不然每次都輸入密碼是非常麻煩的。首先ssh登陸到服務器上,然后在服務器上安裝ssh。
apt-get update
apt-get upgrade
apt-get install ssh
安裝好ssh后。
mkdir .ssh
好了,然后可以暫時退出服務器了。
回到本地,提前在本機上運行ssh-keygen生成你自己的rsa秘鑰(當然大部分人已經有了)并在本機裝好ssh-copy-id。
ssh-copy-id yourUserName@yourServerIp
完成。
python科學計算 + Jupyter
課題組研究方向是音頻處理,除了matlab(matlab很萌的,你們不要黑它),python的使用也是比較頻繁的,在windows上,python環境的搭建比起MATLAB稍微繁瑣一些,一個自然的想法就是在*nix服務器上搭好環境后通過網頁訪問它,Jupyter(前身是ipython notebook)就是這樣一個項目。
反正一口氣裝一下以下這些軟件(通過apt安裝的pandas/scipy等包版本會比較舊,但是省了編譯時間,想使用較新版本可以用pip安裝):
apt-get install python-matplotlib python-scipy python-pip software-properties-common python-sklearn python-pandas git
因為ipython有重大版本更新,為了獲得新版本的ipython,就不通過apt-get來安裝ipython了,我們使用pip,使用pip前我們更換一下pip源為國內源(服務器買在國外當然就略過這一步咯),需要創建或者更改pip配置文件(linux的文件在~/.pip/pip.conf,windows在%HOMEPATH%\pip\pip.ini),修改內容為:
[global]
index-url = http://pypi.douban.com/simple
trusted-host = pypi.douban.com
然后
pip install ipython jupyter
當然你也可以使用python3,apt-get install比pip安裝更快,所以能偷懶就偷懶了:
apt-get install python3-matplotlib python3-scipy python3-pandas python3-pip
pip3 install ipython jupyter
然后是把Jupyter作為服務器,直接移步:Running a notebook server,我這里記錄的簡要版本只供自己回憶:
先是在ipython生成秘鑰:
In [1]: from notebook.auth import passwd
In [2]: passwd()
Enter password:
Verify password:
Out[2]: 'sha1:67c9e60bb8b6:9ffede0825894254b2e042ea597d771089e11aed'
然后
openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout mykey.key -out mycert.pem
jupyter notebook --generate-config
vim .jupyter/jupyter_notebook_config.py
修改為
# Set options for certfile, ip, password, and toggle off
# browser auto-opening
c.NotebookApp.certfile = u'/absolute/path/to/your/certificate/mycert.pem'
c.NotebookApp.keyfile = u'/absolute/path/to/your/certificate/mykey.key'
# Set ip to '*' to bind on all interfaces (ips) for the public server
c.NotebookApp.ip = '*'
c.NotebookApp.password = u'sha1:bcd259ccf...<your hashed password here>'
c.NotebookApp.open_browser = False
# It is a good idea to set a known, fixed port for server access
c.NotebookApp.port = 9999
然后
nohup jupyter notebook &
就可以在后臺運行了(nohup的方式比較粗糙,更好的是用tmux/screen之類的,又或者寫到/etc/init/里作為一個service啟動),效果如下,記得是用 https 訪問:
音頻處理librosa
用python做音頻處理,最普遍的一個問題就是讀入各種格式的音頻了,當然,還有一些其它需求,推薦librosa庫。為了正常使用librosa,我們需要裝一系列東西。
apt-get install libsndfile-dev libsamplerate-dev
安裝ffmpeg作為音頻讀寫的backend:
apt-get install software-properties-common
apt-add-repository ppa:mc3man/trusty-media
apt-get update
apt-get install ffmpeg gstreamer0.10-ffmpeg
對于python2,很簡單:
pip install scikits.samplerate librosa
samplerate這個包年久失修,并不適配python3,librosa的作者fork了一個分支,并做了更新,我們安裝這個(git的使用我就不啰嗦了)。
pip3 install librosa
git clone git@github.com:bmcfee/samplerate.git
cd samplerate
python3 setup.py install
大概是這么個樣子:
uwsgi + ngnix + django + mysql部署博客系統
誒,把這些東西寫清楚也挺費勁,今天寫不動了,明天繼續。
我今天又回來寫了,這說明今兒心情不錯!
首先你得先用django寫好一個博客系統,當然開源博客方案也是一搜一大把,比如django-blog-zinnia,當然這也就少了自己折騰的樂趣。如果純粹只是想掛個博客,也沒必要自己寫,使用wordpress最簡單了。
安裝一下uwsgi,ngnix和python-virtualenv:
apt-get install ngnix
pip install uwsgi virtualenv
或者你用python3的項目的話就pip3 install uwsgi。
為博客項目創建一個文件夾,比如名為blog,然后在里面創建配置文件夾conf,日志文件夾logs和代碼文件夾src,src中放代碼。文件結構大致如下:
└── blog
├── conf
├── logs
└── src
└── blog
然后conf中放你的配置文件uwsgi.ini和blog_ngnix.conf,
uwsgi.ini是這樣的:
[uwsgi]
# variables
projectname = blog
projectdomain = 你的域名或者服務器ip地址
base = 項目路徑
# config
# plugin = python
# 如果你是通過pip/pip3 install uwsgi安裝的uwsgi,那么就不需要寫plugin = python
master = true
protocol = uwsgi
env = DJANGO_SETTINGS_MODULE=%(projectname).settings
pythonpath = %(base)/src/%(projectname)
module = %(projectname).wsgi:application
socket = 127.0.0.1:8889
# socket = /var/run/uwsgi/%(projectname).sock
logto = %(base)/logs/uwsgi.log
vacuum = True
home = 你創建的virtualenv路徑(這里就不啰嗦virtualenv的用法了)
# below line runs it as a daemon in background
daemonize = %(base)/logs/daemon.log
blog_ngnix.conf里寫這些:
server {
listen 80;
server_name 你的域名或者服務器ip地址;
access_log 項目路徑/logs/access.log;
error_log 項目路徑/logs/error.log;
# 記得在django里寫好STATIC_ROOT = '/var/www/blog/static/'
# 和MEDIA_ROOT = '/var/www/blog/media/',然后python manage collectstatic
location /static/ { # STATIC_URL
alias /var/www/blog/static/; # STATIC_ROOT
expires 30d;
}
location /media/ { # MEDIA_URL
alias /var/www/blog/media/; # MEDIA_ROOT
expires 30d;
}
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8889;
# uwsgi_pass unix:///var/run/uwsgi/mir_uwsgi.sock;
}
}
然后鏈接blog_ngnix.conf到ngnix的site-enabled文件夾里。
ln -s pathToYourProject/conf/blog_nginx.conf /etc/ngnix/site-enabled
然后
uwsgi --ini pathToYourProject/conf/uwsgi.ini
service ngnix restart
就行了(如果你用的是80端口,那么可能需要做些調整,因為這個端口一般是被占了的,把占了80端口的東西挪開,或者你把blog放在其它端口,或者把所有東西都放80端口然后調整一下ngnix的路由規則)。
開機自動啟動服務
ngnix自然是開機自啟動的,但是ipython notebook和uwsgi(單指博客項目而言)都是我們手動開啟的服務,如果不是以daemon的形式運行這些進程的話,ssh會話一退出,這些進程就被殺死了,這顯然不是我們想要的。比較dirty的解決方案是用nohup或者screen或者tmux來運行這些進程,這樣的話退出ssh會話后這些進程還會繼續運行。不過如果這些進程能開機自啟動,那么顯然更好一些。
可以創建/etc/init/jupyter.conf文件(jupyter這名字你可以隨便取):
exec sudo /usr/local/bin/jupyter notebook
start on filesystem and net-device-up IFACE!=lo
然后也可以使用service jupyter restart/stop/start了。
uwsgi與之類似,創建/etc/init/uwsgi.conf,
description "uWSGI application server in Emperor mode"
start on runlevel [2345]
stop on runlevel [!2345]
# setuid blog
# setgid www-data
respawn
exec /usr/local/bin/uwsgi --emperor /pathToYourProject/conf/uwsgi.ini
好了,終于寫完了。。。這些指令我記在備忘錄里才半頁,寫清楚竟然要這么久,感謝所有寫技術博客的人。。。他們是付出了汗水的 T T.