目前分類:AWS (3)

瀏覽方式: 標題列表 簡短摘要

偶然發現 AWS 有提供教育版免費試用的服務,稱為:AWS Educate。剛好手邊有個之前申請的美國 edu email,來試著申請看看吧!

- 點選「加入 AWS Educate」

2020-09-08T15-16-44.422Z.png

- 選擇「Student」

2020-09-08T15-17-34.334Z.png

- 填寫一些關於學校的資料,比較重要的是第一個選項「學校名稱」,在自動完成列表中的學校有跟 AWS 合作,如果透過這些學校完成申請,會拿到 $100 美金的額度;當然這部分會對應到後面填寫的 email。如果不是,則是 $30 的額度。另外最後還有 Promo Code,也會影響申請完成後獲得的額度。這部分我在網路上沒找到,所以最後只拿到 $30...(囧)

- 畢業月份是 6 月,年份請用今年+4,生日年份則是今年-18

2020-09-08T15-17-34.335Z.png

- 合約要看完,右邊下拉列拉到底後,勾選「I Agree」後「SUBMIT」

2020-09-08T15-23-33.769Z.png

- 完成申請

2020-09-08T15-24-06.399Z.png

- edu 的信箱會馬上收到一封信,點選信中的連結完成 email 認證

FireShotCapture003.png

- 認證完成後會再收到一封通知信,大概是說明會需要等待一段時間審核,我的經驗是 2 天

FireShotCapture006.png

- 2 天後會收到審核通過的通知信,點選「Click」設定密碼,帳號就是這個 email 

FireShotCapture012.png

- 從 AWS Educate 登入系統

FireShotCapture015.png

- 點選「AWS Account」就可以看到你目前擁有的額度,以及有效時間;接著點選「AWS Educate Starter Account」

FireShotCapture018.png

- 這邊會有一個中介頁,左邊是一些常見的 FAQ,右邊有詳細的額度,點選「AWS Console」即可轉入熟悉的 AWS 管理控制台

FireShotCapture021.png

- 幾乎 AWS 所有的服務都可以用,但是僅限於美國東部 (維吉尼亞州北部) us-east-1 這個區域

FireShotCapture024.png

到這邊就算是整個完成申請與實際使用了。老實說 $30 額度其實不怎麼夠阿...以 EC2 最低配備每小時 0.0116 計算,也只能連續開 100 多天;整體來說開個免費帳號試用都比這個要划算很多~(囧)原本以為歪果仁對學生的很大方 der...失算了~又或許如果你的 email 有在 AWS 合作的學校中,獲得 $100 的額度,也可以勉強用到一年...吧?

文章標籤

danielhuang030 發表在 痞客邦 留言(0) 人氣()

- 安裝 node

# 可以先到 git 確認一下 node 最新版本
curl -sL https://deb.nodesource.com/setup_13.x | sudo -E bash -
sudo apt-get install -y nodejs

 

- 安裝 laravel-echo-server

sudo mkdir -p /usr/src/app
sudo chown ubuntu:ubuntu  /usr/src/app -R
sudo npm install -g laravel-echo-server
laravel-echo-server init
laravel-echo-server start

 

- 安裝 Redis

sudo apt update
sudo apt install redis-server

 

- 配置 Redis

sudo vi /etc/redis/redis.conf
# 開啟 supervised,把原本的 no 設定成 systemd(ubuntu)
supervised systemd

# 開放外部連線,修改原本的 bind 127.0.0.1 ::1
bind 0.0.0.0

# 設定 Redis 密碼,修改原本的 requirepass foobared 為指定的 password 字串
requirepass password
# 重新啟動 Redis 服務
sudo service redis restart

 

- 安裝 Supervisor

sudo apt-get install supervisor

 

- 配置 Supervisor

# 新增 log 檔案
mkdir /usr/src/app/logs
touch /usr/src/app/logs/laravel-echo-server.log

 

# 新增設定檔
sudo vi /etc/supervisor/conf.d/laravel-echo-server.conf

 

[program:laravel-echo-server]
process_name=%(program_name)s_%(process_num)02d
directory=/usr/src/app
command=laravel-echo-server start
autostart=true
autorestart=true
user=root
numprocs=1
redirect_stderr=true
stdout_logfile=/usr/src/app/logs/laravel-echo-server.log
stdout_logfile_maxbytes = 20MB
stdout_logfile_backups = 20

 

# 重啟 Supervisor 並觀察狀態
sudo service supervisor restart
sudo service supervisor status

 

- 安裝 nginx

sudo apt-get update
sudo apt-get install nginx

 

- 安裝 certbot

sudo apt-get update
sudo apt-get install software-properties-common
# 載入 certbot 的 ppa
sudo add-apt-repository ppa:certbot/certbot
sudo apt-get update
# 安裝 python 的 certbot for nginx
sudo apt-get install python-certbot-nginx

 

# 只要產生憑證檔
sudo certbot certonly --nginx -d www.test.com

 

- 配置 laravel-echo-server

laravel-echo-server init
vi /usr/src/app/laravel-echo-server.json

 

{
        "authHost": "https://www.test.com", // 修改成專案的 domain
        "authEndpoint": "/broadcasting/auth",
        "clients": [
                {
                        "appId": "myAddId", // init 時自動產生
                        "key": "myKey" // init 時自動產生
                }
        ],
        "database": "redis",
        "databaseConfig": {
                "redis": {
                        "port": "6379",
                        "password": "password", // 修改成 redis 的 password
                        "host": "localhost",
                        "db": 9 // 指定 redis 使用的 db index
                },
                "publishPresence": true,
                "sqlite": {
                        "databasePath": "/database/laravel-echo-server.sqlite"
                }
        },
        "devMode": true,
        "host": null,
        "port": "6001",
        "protocol": "https",
        "socketio": {},
        "secureOptions": 67108864,
        "sslCertPath": "/etc/letsencrypt/live/www.test.com/fullchain.pem", // 設定剛剛 certbot 產生的檔案路徑
        "sslKeyPath": "/etc/letsencrypt/live/www.test.com/privkey.pem", // 設定剛剛 certbot 產生的檔案路徑
        "sslCertChainPath": "",
        "sslPassphrase": "",
        "subscribers": {
                "http": true,
                "redis": true
        },
        "apiOriginAllow": {
                "allowCors": false,
                "allowOrigin": "",
                "allowMethods": "",
                "allowHeaders": ""
        }
}

 

# 重啟 laravel-echo-server 並觀察狀態
sudo laravel-echo-server stop
sudo laravel-echo-server start

 

- 設定 certbot 自動更新

sudo crontab -l

 

# certbot renew at 00:00 on day-of-month 20 in every 2nd month
0 0 20 */2 * /usr/bin/certbot renew --quiet --no-self-upgrade

 

# 確認目前憑證期限
sudo certbot certificates

 

- certbot 更新憑證後需要重啟服務

# 新增 restart_services.sh 在更新後執行
sudo vi /etc/letsencrypt/renewal-hooks/post/restart_services.sh

 

#!/bin/sh
service nginx restart
cd /usr/src/app
laravel-echo-server restart

 

touch ~/last_run_certbot_renew_date_time.log

 

# 透過測試更新驗證 restart_services.sh 是不是真的被正確執行
sudo /usr/bin/certbot renew --dry-run

 

Saving debug log to /var/log/letsencrypt/letsencrypt.log

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing /etc/letsencrypt/renewal/www.test.com.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Cert not due for renewal, but simulating renewal for dry run
Plugins selected: Authenticator nginx, Installer nginx
Renewing an existing certificate

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
new certificate deployed with reload of nginx server; fullchain is
/etc/letsencrypt/live/www.test.com/fullchain.pem
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
** DRY RUN: simulating 'certbot renew' close to cert expiry
**          (The test certificates below have not been saved.)

Congratulations, all renewals succeeded. The following certs have been renewed:
  /etc/letsencrypt/live/www.test.com/fullchain.pem (success)
** DRY RUN: simulating 'certbot renew' close to cert expiry
**          (The test certificates above have not been saved.)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Running post-hook command: /etc/letsencrypt/renewal-hooks/post/restart_services.sh

 

- 設定 nginx 反向代理

sudo vi /etc/nginx/sites-enabled/default

 

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    
    root /var/www/html;
    
    index index.html index.htm index.nginx-debian.html
    
    server_name _;
    
    location /ws/ {
        # 反向代理到同一台主機的 6001 Port
        proxy_pass http://localhost:6001/;
        
        # 解決 wss 400 的問題
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;

        # 把 IP、Protocol 等 header 都一起送給反向代理的 server
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $http_x_forwarded_proto;
    }
}

 

sudo service nginx reload
文章標籤

danielhuang030 發表在 痞客邦 留言(0) 人氣()

Amazon CloudSearch

Info

Installation

  • Create a New Domain
  • NAME YOUR DOMAIN
    • Search Domain Name, 設定名稱
    • Desired Instance Type, 設定機器等級,預設 small
    • Desired Replication Count, 設定 Replication 數量,預設 1
  • CONFIGURE INDEX
    • Manual configuration, 手動設定
  • REVIEW INDEX CONFIGURATION
    • 這邊可以設定 index,除了 Name 以外,必須決定欄位的 Type
    • 一般文字設定 text 即可,如果有多個單詞時(ex. 分類名稱)可以設定 text-array
    • 另外 literal 也是一種文字類型,但是大小寫敏感,而且之後可以 group
    • 其他類型請參考文件
    • 之後可以透過程式建立,所以也可以略過不建立
  • SETUP ACCESS POLICIES
    • 設定權限,建議選擇 “Allow access to all services from specific IP(s)“,設定允許對外的 IP,多個 IP 時以逗號分隔
  • CONFIRM
    • 最後確認並完成建立,建立大概會需要 10 分鐘

Usage

Limit

  • 使用 Amazon CloudSearch 有一些限制,請參考說明文件
  • 參數 size, start 分頁時常使用,要注意的是 start 最多不可超過 10000;也就是透過這二個參數取得的資料最多只有前 10000 筆
  • 要取得 10000 筆以後的資料必須透過 cursor 取得

Laravel Package

Info

Settings

  • .env 設定參數
/project/.env
AWS_KEY=xxx
AWS_SECRET=xxx
 
# 之前建立的 Domain Name
CLOUDSEARCH_DOMAIN=xxx
# Dashboard 顯示的 Document Endpoint,必須包含 http
CLOUDSEARCH_ENDPOINT=http://doc-xxx-xxx-xxx.us-west-2.cloudsearch.amazonaws.com
# 不太清楚這個設定是什麼,我是填 AWS 區域
CLOUDSEARCH_REGION=us-west-2
  • config/cloud-search.php 設定
/project/config/cloud-search.php
// 修改從 .env 取得
'domain_name' => env('CLOUDSEARCH_DOMAIN'),
 
// 設定 index 欄位 Name 與 Type
'fields' => [
    'title' => 'text',
    'author' => 'text-array',
    'type' => 'literal',
],
 
// 設定 Eloquent 所在位置,ex. App/Models/Book.php
'model_namespace' => '\\App\\Models',
  • 透過 Command 建立 index
php artisan search:fields
  • 設定 Eloquent
/project/app/Models/Book.php
<?php
namespace App\Models;
 
use LaravelCloudSearch\Eloquent\Searchable;
 
class Book extends Model
{
    // 使用 Searchable
    use Searchable;
 
    // 必須實作這個方法,回傳 index 的值
    public function getSearchDocument()
    {
        return [
            'title' => $this->title,
            'author' => $this->authors->pluck('name')->toArray(),
            'type' => $this->type,
        ];
    }
}
  • 建立 index
php artisan search:index Book

Searching

  • 最基本的搜尋
// search "Kitten fluff"
$books = App\Models\Book::search('Kitten fluff')->get();
要留意的是基本搜尋只會找 Type 是 text, text-array 的欄位,如果需要尋找其他 Type 的欄位必須自建 searchBuilder
  • 新增額外設定,其他參數請參考文件
// search "Kitten fluff", default operator "or", add fields and weight
$books = App\Models\Book::searchBuilder()
    ->options('defaultOperator', 'or')
    ->options('fields', [
        'type^10',
        'title^5',
        'author',
    ])->term('Kitten fluff')->get();

Reference

文章標籤

danielhuang030 發表在 痞客邦 留言(0) 人氣()

Close

您尚未登入,將以訪客身份留言。亦可以上方服務帳號登入留言

請輸入暱稱 ( 最多顯示 6 個中文字元 )

請輸入標題 ( 最多顯示 9 個中文字元 )

請輸入內容 ( 最多 140 個中文字元 )

reload

請輸入左方認證碼:

看不懂,換張圖

請輸入驗證碼