此文档主要简述在阿里云安装CentOS并配置相关运行环境:


服务器信息

系统:centos 7 (自带python 2.7.5)

服务器配置

1. 配置免密码登录

(1) 本机生成rsa密钥

在本机生成rsa加密的密钥,下面命令会在指定的目录生成一个私有和一个公有rsa密钥,将私有密钥保存好,等配置好免密码登录后,登录服务器时将需要此文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$ ssh-keygen -f ~/temp/ljflxxglpt.pem
Generating public/private rsa key pair.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/gmy/temp/ljflxxglpt.pem.
Your public key has been saved in /home/gmy/temp/ljflxxglpt.pub.
The key fingerprint is:
7a:9c:b2:9c:8e:4e:f4:af:de:70:77:b9:52:fd:44:97 personalid
The key's randomart image is:
+--[ RSA 2048]----+
| |
| |
| .|
| Eo|
| . S . ..|
| . . o . ... .|
| . = = ..o o |
| . o X ... . .|
| .ooB.o .. |
+-----------------+

(2) 登录服务器

第一次登录使用用户名密码的方式

1
$ ssh root@120.27.140.104

(3) 服务器生成rsa密钥

服务器生成rsa密钥,主要目的是为了生成ssh目录以及后面从代码仓库clone代码的权限问题。生成的ssh目录变更权限为所有者可读写(700),目的是为了配置免密码登录服务器

1
2
$ ssh-keygen
$ chmod 700 ~/.ssh

(4) 上传本机公有密钥到服务器

把刚刚在本机生成的公有密钥上传到服务器并添加到authorized_keys中

1
$ scp ~/temp/ljflxxglpt.pub root@120.27.140.230:~/.ssh/authorized_keys

(5) 使用密钥登录服务器

使用本机的私有密钥登录已经存储过本机公有密钥的服务器

1
$ ssh -i ~/temp/ljflxxglpt.pem root@120.27.140.230

(6) 关闭密码登录

关闭密码登录只使用密钥登录可以防止暴力破解,设置完成后重启服务器

1
2
$ vi /etc/ssh/sshd_config
#PasswordAuthentication yes > PasswordAuthentication no

2. 服务器安装部署

(1) 更新系统

1
sudo yum update -y

(2) 安装系统运行必备库

1
2
3
$ sudo yum install gcc git libtiff-devel libjpeg-devel libzip-devel freetype-devel
lcms2-devel libwebp-devel tcl-devel tk-devel mysql mysql-devel memcached libmemcacheddevel
nginx mysql-devel python-devel libffi-devel -y

(3) 克隆项目

添加服务器生成的公有密钥到代码仓库,然后运行git命令clone项目将不需要权限验证

1
$ cat ~/.ssh/id_rsa.pub
服务器公钥
服务器公钥
仓库添加公钥
仓库添加公钥
1
$ git clone git@bitbucket.org:mingyugu/ljflxxglpt-api.git

(4) 创建Python虚拟环境

1
2
3
$ sudo easy_install virtualenv
$ virtualenv env
$ source env/bin/activate

(5) 安装项目依赖库

克隆项目到服务器后需要安装项目依赖库

1
2
$ cd ~/ljflxxglpt-api/
$ pip install -r requirements.txt

(6) 安装数据库环境

MySQL是一个关系型数据库管理系统,安装可以参考以下链接

http://www.mysql.com/downloads/

PostgreSQL是以加州大学伯克利分校计算机系开发的POSTGRES,现在已经更名为PostgreSQL,版本4.2为基础的对象关系型数据库管理系统(ORDBMS)。PostgreSQL支持大部分SQL标准并且提供了许多其他现代特性:复杂查询、外键、触发器、视图、事务完整性、MVCC。同样,PostgreSQL可以用许多方法扩展,比如,通过增加新的数据类型、函数、操作符、聚集函数、索引。免费使用、修改、和分发 PostgreSQL,不管是私用、商用、还是学术研究使用。

http://www.postgresql.org/download/linux/redhat/

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$ yum install postgresql-server
$ yum install postgresql-devel
$ service postgresql initdb
$ chkconfig postgresql on
$ sudo -u postgres psql
postgres=# \password postgres
postgres=# CREATE USER lettoo_base_api WITH PASSWORD 'password';
postgres=# CREATE DATABASE lettoo_base_api OWNER lettoo_base_api;
postgres=# GRANT ALL PRIVILEGES ON DATABASE lettoo_base_api to lettoo_base_api;
postgres=# \du
postgres=# \q
$ exit
$ vi /var/lib/pgsql/data/pg_hba.conf
local all all peer > local all all md5
$ systemctl restart postgresql.service
$ psql -U lettoo_base_api -d lettoo_base_api

(7) 创建mysql数据库

1
2
3
4
5
mysql> DROP DATABASE ljflxxglpt;
mysql> CREATE DATABASE ljflxxglpt CHARACTER SET utf8;
mysql> GRANT ALL PRIVILEGES ON ljflxxglpt.* TO "ljflxxglpt"@"%" IDENTIFIED BY "password";
mysql> FLUSH PRIVILEGES;
mysql> EXIT;

(8) 配置项目依赖的环境变量

1
$ vi ~/.bashrc

添加以下配置

export ALIYUN_OSS_ACCESS_KEY_ID=’mjpa3WKngENt5ijN’
export ALIYUN_OSS_ACCESS_KEY_SECRET=’0XdA1bgi3eAV5usbiWqaAtI7QlbtaJ’
export ALIYUN_OSS_BUCKET_NAME=’ljflxxglpt’
export ALIYUN_OSS_ACCESS_HOST=’ljflxxglpt.oss-cn-hangzhou-internal.aliyuncs.com’
export DATABASE_URL=’mysql://ljflxxglpt:password@rds68fqj481t1m274fg2.mysql.rds.aliyuncs.com:3306/ljflxxglpt’
export DJANGO_SECRET_KEY=’51c3184f-0168-4314-b707-352b48578eb7’
export EMAIL_USERNAME='ljflxxglpt@163.com
export EMAIL_PASSWORD=’ljflxxglpt123456’

让系统即刻刷新环境变量

1
$ source ~/.bashrc

(9) 同步数据库

1
2
$ python manage.py syncdb --settings=config.settings.production
$ python manage.py migrate --settings=config.settings.production

(10) 收集静态文件

1
$ python manage.py collectstatic --settings=config.settings.production

(11) 安装nginx

下载对应当前系统版本的nginx包(package)

1
$ wget  http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

建立nginx的yum仓库

1
$ rpm -ivh nginx-release-centos-7-0.el7.ngx.noarch.rpm

下载并安装nginx

1
$ yum install nginx

(12) 配置supervisor/nginx/uWSGI

1
2
3
$ mkdir ~/logs
$ sudo cp etc/nginx_ljflxxglpt_*.conf /etc/nginx/conf.d/
$ supervisord

检查supervisor service

1
$ supervisorctl

重启nginx

1
$ sudo service nginx restart

web服务器配置

(1) 安装node.js

参考官方教程:https://nodejs.org/en/download/package-manager/

1
2
3
4
$ curl --silent --location https://rpm.nodesource.com/setup | bash -
$ yum -y install nodejs
$ yum install gcc-c++ make
# or: yum groupinstall 'Development Tools'

(2) 安装npm

新版本的node.js已经自带了npm所以这步可以省略
https://nodejs.org/en/download/

1
$ sudo yum install npm

(3) 安装bower

1
$ sudo npm install -g bower

(4) 安装gulp

1
$ sudo npm install -g gulp

(5) 安装node modules

1
$ npm install

(6) 安装bower components

1
$ bower install --allow-root

(7) 编译

测试环境

1
$ gulp serve:dev

生产环境

1
$ gulp serve:prod

3. 服务器supervisord自启动

(1) 拷贝supervisord文件到/etc/rc.d/init.d/supervisord

1
$ sudo cp supervisord /etc/rc.d/init.d/supervisord

(2) 改变supervisord文件全选为可执行

1
$ sudo chmod +x /etc/rc.d/init.d/supervisord

(3) 添加自启动

1
$ sudo chkconfig supervisord on

(4) 手动启动supervisord

1
$ sudo service supervisord start

(5) centos 7 nginx自动启动

1
2
$ systemctl list-unit-files
$ systemctl enable nginx.service

4. 服务器常见问题

(1) nginx 403 Forbidden errors

通常显示403立马都会想到路径配置不对,但是如果检查后发现目录路径没问题那么就是权限问题。修改nginx.conf,头部修改’user root;’,然后重启nginx

1
2
$ vi /etc/nginx/nginx.conf
user root;