在云服务器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
查看连接远程时报什么错,再决定如何处理
安装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;
安装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
安装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
(默认安装目录)中进行配置
- 虚拟服务器配置 图片、静态网页之类的静态文件,可以将nginx当做服务器,让nginx自己去处理请求,并返回指定目录下的静态资源
http{
...
server { //root为静态文件的绝对路径,需要确保nginx有访问权限!
listen 80;
server_name itoatest.example.com;
root /apps/oaapp;
}
...
}
- 反向代理配置 反向代理作为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;
}
}
- 项目中静态文件访问配置 像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管理