砍掉重練 ec2 和 nginx 部署


Posted by yunanpan on 2020-10-27

砍掉重練 ec2 的粗略筆記,launch 的 instance 是 ubuntu 18.04 ver。
在操作 nginx 和部署第十八週餐廳作業碰到的一些問題也記錄在此。

主機 PART

ssh 連進去後先更新 ubuntu:(也可以利用 puTTy 連)
apt 是 ubuntu 用來管理套件的管理工具,如果是用 amazon linus 就會是使用 yum

$ sudo apt update && sudo apt upgrade && sudo apt dist-upgrade

安裝 tasksel 用來安裝其他軟體:

$ sudo apt install tasksel

安裝 lamp 的 server:

$ sudo tasksel install lamp-server

測試看看有沒有裝好:

$ curl http://locahost // 有東西代表有裝好
$ telnet <ec2 IP> 80 // 有 connect 就是有開

資料庫 PART

安裝 phpmyadmin:

$ sudo apt install phpmyadmin

在網址列輸入 <ec2 IP>/phpmyadmin,如果有 phpmyadmin 的登入畫面就代表有裝成功。

用指令登入 mySQL:

$ sudo mysql -u root mysql

mysql> UPDATE user SET plugin='mysql_native_password' WHERE User='root';
mysql> FLUSH PRIVILEGES; // 更新權限
mysql> exit

設定 root 的密碼:

  1. disallow 遠端選 no,因為之後會要從遠端連
    (輸入密碼的時候不會顯示,不要懷疑其實是有輸入的)
    $ sudo mysql_secure_installation
    

資料庫 PART 2:從 mysql workbench 連

  1. 開 ec2 防火牆權限(3306 port)
  2. 改設定檔
    $ sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
    ># bind-address = 127.0.0.1 // 註解掉這行
    $ sudo service mysql restart // 重跑新的設定才會生效
    
  3. 確認資料庫帳號的權限,把本機改為 %。

nginx

安裝 nginx:

$ sudo apt update
$ sudo apt install nginx

看 nginx 的狀態:

$ sudo systemctl status nginx

啟動 nginx:

$ sudo systemctl start nginx

nginx 啟動錯誤解決方法:

$ sudo netstat -tulpn // 可以看 Active Internet connections
$ sudo fuser -k 80/tcp // 把佔領 80 port 的 connection 刪掉
$ sudo kill <PID> // 如果 sudo fuser 沒用的話可以試試看用 kill
$ sudo systemctl restart nginx

開啟要連接的防火牆:(也可以去 ec2 直接 security group 中改 inbounds rule)

sudo ufw allow 'Nginx HTTP'

在 site-available 下新增設定檔(子網域要連到哪個 port 去):
設定檔案內容:

server {
    listen 80;
    server_name <要導到其他 port 的網域>;

    location / {
        proxy_pass http://127.0.0.1:<指定的 port>;
    }
}

連接 sites-available 和 site-enabled:

$ sudo ln -s /etc/nginx/sites/available/example.com /etc/nginx/sites-enabled/

(nginx 設定檔當中引用的是 sites-enabled 下的檔案,當今天要暫時關閉其中一個子網域,就可以刪掉 sites-enabled 下的設定檔,但不影響 sites-available 下的檔案。要啟用的時候再將檔案連進 sites-enabled 即可)

都設定好之後重跑 nginx:

$ sudo systemctl reload nginx

去網址列輸入指定的子網域,如果有顯示即連結成功。

參考:

  1. How To Install Nginx on Ubuntu 18.04

部署餐廳

設定 config:
要改成在 sudo mysql_secure_installation 的帳密。

檔案上傳後再用 migrate 自動設置相關資料庫:

$ npx sequelize-cli db:migrate

如果沒有 npx,輸入以下指令安裝:

sudo npm i -g npx

在 npm install 時可能會碰到 node 或是 npm 版本不夠的錯誤:

$ sudo npm cache clean -f
$ sudo npm install -g n
$ sudo n stable

刪掉 node_modules 再重新跑 npm install

參考:

  1. Sequelize Migrations
  2. How can I update my nodeJS to the latest version

其他

查看權限

$ ls -al

設定 folder 權限,讓 ubuntu 可以操作指定 folder:

$ sudo chown ubuntu /var/www/html

全部都要靠 command line 真是件不容易的事~










Related Posts

實作簡單的REST API

實作簡單的REST API

認識資料庫的推薦閱讀

認識資料庫的推薦閱讀

ROS以控制空拍機

ROS以控制空拍機


Comments