在雲伺服器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管理