aws 之 python 和 go 环境简单搭建

1,344 阅读3分钟

在云服务器aws上安装python web运行环境和go web运行环境:不通过docker的手工配置

远程ssh配置

为方便远程访问,将key进行配置,不过关机后添加key就无效了,下次需要重新添加

// 下载 key.pem
// 建立存储 pem 文件的文件夹: 
mkdir -p ~/.ssh/pem

// 将文件移动到文件 
mv ~/Downloads/key.pem ~/.ssh/pem

// 指定文件权限(权限太大连接会被拒) 
chmod 400 ~/.ssh/pem/key.pem

// 创建配置文件 
vim ~/.ssh/config

// 修改配置:
Host test_abc
    HostName your remote net address
    User ec2-user
    ServerAliveInterval 1

// 将远程访问添加到 ssh: 
ssh-add -K ~/.ssh/pem/key.pem  // -K 可以省略

添加完成后可以直接通过ssh test_abc访问远程,如果远程访问不成功的,可以用 ssh -v test_abc 查看连接远程时报什么错,再决定如何处理

参考: 配置key 添加key aws官网


安装mysql

  • 用上面配置好的ssh登录主机后安装mysql
// 安装 wget
sudo yum install wget

// 获取mysql yum 安装程序
wget https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm

sudo yum localinstall mysql57-community-release-el7-9.noarch.rpm
sudo yum install mysql-community-server

// 查看状态 目前还是 disabled 状态
sudo mysqld status 

// 启动mysql
sudo mysqld start
  • mysql 启动或获取临时的密码并进行修改
// 获取临时密码:
sudo grep 'temprary password' /var/log/mysqld.log

// 使用获取到的临时密码登录mysql
mysql -uroot -pTMP_PWD

// 直接修改密码可能会报错,需要先修改 validate_password_policy
mysql> set global validate_password_policy=0;

// 设置新密码
mysql> SET PASSWORD = PASSWORD('your new password');
mysql> ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;
mysql> flush privileges;

// 登出mysql,使用新密码重新登录
quit;
mysql -uroot -pNEW_PWD
  • 使用mysql创建新用户
// 创建新用户
mysql> CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';

// 授权给新用户
mysql> GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';

// 刷新权限
mysql> FLUSH PRIVILEGES;

// 创建数据库
mysql> CREATE DATABASE db_xxx DEFAULT CHARACTER SET utf8;

参考: 安装mysql-1 安装mysql-2 设置密码长短 设置密码 创建新用户


安装git

  • 在主机上安装和配置git
// 安装 git
yum install git

// 生成秘钥
ssh-keygen -t rsa -C “your email address”

// 连续按3个回车(密码默认为空),得到 id_rsa 和 id_rsa.pub 文件,在/root/.ssh 下说明生成成功
  • 添加密钥到Github 打开 Github,登录自己的账号后点击自己的头像->settings->SSH And GPG Keys->New SSH key将本地 id_rsa.pub 中的内容粘贴到Key文本框中,随意输入一个 title(不要有中文),点击 Add Key 即可

  • 测试

ssh git@github.com
// 会出现如下询问:
Are you sure you want to continue connecting (yes/no)?
// 键入yes后回车,如果出现
Hi xxx! You’ve successfully authenticated, but GitHub does not provide shell accessConnection to github.com closed.
// 则说明验证成功,否则可能是上述步骤中的其中几步出错了,需重新来过

参考 安装和配置git


安装go环境

  • 下载并安装go运行环境
// 下载环境
sudo yum update -y
sudo yum install -y golang

// 配置环境变量
vim ~/.bashrc
// 加入如下设置
export GOROOT=/Users/cpx/go
export GOPATH=$HOME/GoWorkSpace
export PATH=$PATH:$GOROOT/bin
export PATH=$PATH:$GOPATH/bin
  • 项目中govender使用介绍
// 安装 govendor
go get -u github.com/kardianos/govendor

// 生成vendor 将生成一个vendor.json, 里面并没有依赖包信息.
govendor init

// 从本地添加依赖到vendor
govendor add +e

// 在 .gitignore 忽略引用包,在 .gitignore 中加入:
/vendor/*
!/vendor/vendor.json

// 拉取依赖到vendor,其他人可以使用vendor.json重新安装依赖包到vendor
govendor sync

参考 下载并安装go运行环境 github go vender go vender 的使用


安装python环境

  • 在aws上安装指定版本的python
sudo yum -y groupinstall development
sudo yum -y install zlib-devel
sudo yum -y install openssl-level

# Installing openssl-devel alone seems to result in SSL errors in pip (see https://medium.com/@moreless/pip-complains-there-is-no-ssl-support-in-python-edbdce548852)
# Need to install OpenSSL also to avoid these errors
wget https://github.com/openssl/openssl/archive/OpenSSL_1_0_2l.tar.gz
tar -zxvf OpenSSL_1_0_2l.tar.gz 
cd openssl-OpenSSL_1_0_2l/

./config shared
make
sudo make install
export LD_LIBRARY_PATH=/usr/local/ssl/lib/

cd ..
rm OpenSSL_1_0_2l.tar.gz
rm -rf openssl-OpenSSL_1_0_2l/

# Install Python 3.6
wget https://www.python.org/ftp/python/3.6.0/Python-3.6.0.tar.xz
tar xJf Python-3.6.0.tar.xz
cd Python-3.6.0

./configure
make
sudo make install
	
cd ..
rm Python-3.6.0.tar.xz
sudo rm -rf Python-3.6.0

# 这里的版本没有任何数据库相关的依赖包,需要手动去安装:
sudo yum install python-devel mysql-devel

# Create virtualenv running Python 3.6
yum install python-pip
# 安装虚拟环境下面命令不成功的试试: pip3 install virtualenv  --user
sudo pip install --upgrade virtualenv
virtualenv -p python3 MYVENV
source MYVENV/bin/activate

python --version

参考: aws安装指定版本python


安装 gunicorn 和 supervisord

安装和使用gunicorn

pip install gunicorn 

安装完成后,如果是django web程序,可能出现静态文件无法访问的问题,需要在url.py中加入

from django.contrib.staticfiles.urls import staticfiles_urlpatterns


urlpatterns += staticfiles_urlpatterns()

安装和配置supervisord

// aws自带了 easy_install,可以直接使用这个进行安装
easy_install supervisor

// 下载配置文件模板到目标目录
echo_supervisord_conf > /xxx/supervisord.conf

// 按各个项目自己的设置,单独写到各自的配置文件中,在主配置文件中引入
[include]
files = relative/directory/*.ini

// 各个配置文件中重写 program
[program:xxx]
command=xxx
process_name=%(program_name)s ; process_name expr (default %(program_name)s)
numprocs=1                    ; number of processes copies to start (def 1)
directory=/...
autostart=true                ; start at supervisord start (default: true)
startretries=3                ; max # of serial start failures when starting (default 3)
autorestart=unexpected        ; when to restart if exited after running (def: unexpected)
stdout_logfile=/xxx/xxx.log        ; stdout log path, NONE for none; default AUTO
stderr_logfile=/xxx/xxx.log        ; stderr log path, NONE for none; default AUTO
...

// 运行时指定配置文件:  
supervisord -c supervisord.conf

// 管理程序:进入交互模式后,对子进程进行管理
supervisorctl -c supervisord.conf

参考: gunicorn 文档 使用gunicore启动django程序 安装gunicorn后无法加载部分静态文件的解决 supervisord 文档 supervisord配置django启动


安装nginx

  • nginx的安装 aws系统安装列表中有nginx的选项,使用amazon-linux-extras list命令可查看有哪些是可以使用系统命令直接安装的,比如要安装nginx,可以使用sudo amazon-linux-extras install nginx1.12进行安装
  • nginx的配置 以下的配置均在/etc/nginx/nginx.conf(默认安装目录)中进行配置
  1. 虚拟服务器配置 图片、静态网页之类的静态文件,可以将nginx当做服务器,让nginx自己去处理请求,并返回指定目录下的静态资源
http{
    ...
    server { //root为静态文件的绝对路径,需要确保nginx有访问权限!
        listen       80;
        server_name  itoatest.example.com;
        root   /apps/oaapp;
        }
    ...
}
  1. 反向代理配置 反向代理作为nginx的一大核心功能,这里不多做介绍,反向代理可以保护真实的服务器不被外键直接访问。
server{
        listen 8000;
        # using web sub domain to access
        server_name your server name;

        location / {
            # root /home/web2_root;
            proxy_pass http://127.0.0.1:8080/;
            proxy_read_timeout 300;
            proxy_connect_timeout 300;
            proxy_redirect     off;

            proxy_set_header   X-Forwarded-Proto $scheme;
            proxy_set_header   Host              $http_host;
            proxy_set_header   X-Real-IP         $remote_addr;
        }
    }
  1. 项目中静态文件访问配置 像django这种,在生产环境中,无法直接访问静态文件的,可以将静态文件托管给nginx来访问管理
server{
    ...
	location /static/ {
	    alias /path/to/static/; // 绝对路径
    }
}
  • 使用systemd管理nginx进程 使用aws的命令安装好nginx后,aws已经将systemd管理nginx的server文件写入到指定的文件夹中,只需要输入命令就能操作nginx的启停,以及查看nginx的状态。
systemd start nginx.server // 启动
systemd stop nginx.server // 停止
systemd status nginx.server // 查看状态

参考: aws nginx安装 nginx配置 用nginx解决django生产环境中静态文件无法访问的配置 systemd 常用命令 将nginx配置到systemd管理