快速裝機 ubuntu+ngnix+mysql+django;Jupyter;音頻處理librosa;...

快速裝機 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 訪問:

一臺運行著的Jupyter的服務器

音頻處理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

大概是這么個樣子:


讀入音頻并播放
畫出Mel倒譜

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.

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容