在云服务器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
// 安装 wgetsudo yum install wget// 获取mysql yum 安装程序wget https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpmsudo yum localinstall mysql57-community-release-el7-9.noarch.rpmsudo yum install mysql-community-server// 查看状态 目前还是 disabled 状态sudo mysqld status // 启动mysqlsudo mysqld start复制代码
- mysql 启动或获取临时的密码并进行修改
// 获取临时密码:sudo grep 'temprary password' /var/log/mysqld.log// 使用获取到的临时密码登录mysqlmysql -uroot -pTMP_PWD// 直接修改密码可能会报错,需要先修改 validate_password_policymysql> 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
// 安装 gityum 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.// 则说明验证成功,否则可能是上述步骤中的其中几步出错了,需重新来过复制代码
参考
安装go环境
- 下载并安装go运行环境
// 下载环境sudo yum update -ysudo yum install -y golang// 配置环境变量vim ~/.bashrc// 加入如下设置export GOROOT=/Users/cpx/goexport GOPATH=$HOME/GoWorkSpaceexport PATH=$PATH:$GOROOT/binexport PATH=$PATH:$GOPATH/bin复制代码
- 项目中govender使用介绍
// 安装 govendorgo get -u github.com/kardianos/govendor// 生成vendor 将生成一个vendor.json, 里面并没有依赖包信息.govendor init// 从本地添加依赖到vendorgovendor add +e// 在 .gitignore 忽略引用包,在 .gitignore 中加入:/vendor/*!/vendor/vendor.json// 拉取依赖到vendor,其他人可以使用vendor.json重新安装依赖包到vendorgovendor sync复制代码
参考
安装python环境
- 在aws上安装指定版本的python
sudo yum -y groupinstall developmentsudo yum -y install zlib-develsudo 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 errorswget https://github.com/openssl/openssl/archive/OpenSSL_1_0_2l.tar.gztar -zxvf OpenSSL_1_0_2l.tar.gz cd openssl-OpenSSL_1_0_2l/./config sharedmakesudo make installexport LD_LIBRARY_PATH=/usr/local/ssl/lib/cd ..rm OpenSSL_1_0_2l.tar.gzrm -rf openssl-OpenSSL_1_0_2l/# Install Python 3.6wget https://www.python.org/ftp/python/3.6.0/Python-3.6.0.tar.xztar xJf Python-3.6.0.tar.xzcd Python-3.6.0./configuremakesudo make install cd ..rm Python-3.6.0.tar.xzsudo rm -rf Python-3.6.0# 这里的版本没有任何数据库相关的依赖包,需要手动去安装:sudo yum install python-devel mysql-devel# Create virtualenv running Python 3.6yum install python-pipsudo pip install --upgrade virtualenvvirtualenv -p python3 MYVENVsource MYVENV/bin/activatepython --version复制代码
参考:
安装 gunicorn 和 supervisord
安装和使用gunicorn
pip install gunicorn 复制代码
安装完成后,如果是django web程序,可能出现静态文件无法访问的问题,需要在url.py中加入
from django.contrib.staticfiles.urls import staticfiles_urlpatternsurlpatterns += staticfiles_urlpatterns()复制代码
安装和配置supervisord
// aws自带了 easy_install,可以直接使用这个进行安装easy_install supervisor// 下载配置文件模板到目标目录echo_supervisord_conf > /xxx/supervisord.conf// 按各个项目自己的设置,单独写到各自的配置文件中,在主配置文件中引入[include]files = relative/directory/*.ini// 各个配置文件中重写 program[program:xxx]command=xxxprocess_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 AUTOstderr_logfile=/xxx/xxx.log ; stderr log path, NONE for none; default AUTO...// 运行时指定配置文件: supervisord -c supervisord.conf// 管理程序:进入交互模式后,对子进程进行管理supervisorctl -c supervisord.conf复制代码
参考:
安装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 // 查看状态复制代码
参考: