快速装机 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.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,029评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,395评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,570评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,535评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,650评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,850评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,006评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,747评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,207评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,536评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,683评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,342评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,964评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,772评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,004评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,401评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,566评论 2 349

推荐阅读更多精彩内容