2023
ComputeHub
分散コンピューティング
ブラウザーでコンピューティングパワーを共有するプロジェクト。「PandoComputingコアモジュールを使用」
複雑な問題を解決ため、スマートホンやPCなど様々なデバイスを利用するリアルタイム分散コンピューティングシステムを開発しました。目的は、インターネットでタスクを配って解決時間を短縮することです。このプロジェクトはアイドルデバイスの計算リソースを利用する可能性を示します。そこから、コミュニティ主導の解決問題システムを開発できるようになります。
システムはワーカーに独立的に計算できる部分を配信します。デバイスによって、計算速度の違いがあるのに、いつも予想できる結果順序を受け取れます。 元々、PandoComputingはCLIでだけ実行でき、並列処理できないツールでしたが、AWSでデプロイし、Next.JSアプリと組み合わせるようにできました。
アクセス流量によって、自動的にEC2の仮想機械が増やすところ困っています。 さらに、かなり安定して動作できましたが、次の配信される値に影響を与えないようにエラー適用に処理することは必要です。
WSの代わりに、WSSを使用する予定です。データを二重暗号化されると、セキュリティが強化されます。 しかし、コンピューティングリソースももッとかかるので、プロジェクトの管理者によって暗号化されます。
このプロジェクトは、コミュニティ主導の問題解決システムを構築するもので、最新のWeb技術とクラウドインフラを組み合わせて実現可能性を示しています。
2024
Store management
私の店舗を管理するために、包括的なEコマース店舗管理システムを開発しました。
製品および在庫管理、注文処理、顧客関係管理、支払い処理を含む包括的なEコマースストア管理システムを開発しました。フロントエンドにはNext.js、バックエンドにはNest.js、インフラにはAWSを使用しています。ログインしてご自身で体験することができます。
開発言語 : JavaScriptに集中しているため、Node.jsとNext.jsを選びました。同じ言語を使用することで、開発時間を短縮することができています。
データベース (PostgreSQL) : 一番気に入って、機能豊富なRelationDatabaseデータベースを使うことをしました。 NoSQLを使ったら実装が簡単になるのに、誰がかNoSQLを一番学習法がSQLを学ぶことだとってた。
Amazon Web Services :
- RDS : 以前が使ったことがありますが、このプロジェクトのデータベースを作成した後、作成するところに自動的にEC2インスタンスを接続するセキュリティーグループを作成することができると気づきました。
const postgresSingleton = () => {
return new pg.Pool({
ssl:
config.ENV === "production"
? {
ca: fs.readFileSync("./cert/rds-combined-ca-bundle.pem"),
}
: false,
});
};
#!/bin/bash
PASSWORD=""
export PGPASSWORD=$PASSWORD
schema="database/schema"
for file in $schema/*.sql
do
echo "executing $file..."
psql -h $HOST -p $PORT -U $USER -d $DATABASE -f $file
done
unset PGPASSWORD
#2ステップビルド
FROM node:20-alpine AS development
ARG NODE_ENV=development
ENV NODE_ENV=${NODE_ENV} #環境値
WORKDIR /usr/src/app
COPY package*.json ./
RUN yarn install
COPY . .
RUN yarn run build
FROM node:20-alpine as production
ARG NODE_ENV=production
ENV NODE_ENV=${NODE_ENV}
WORKDIR /usr/src/app
COPY package*.json ./
RUN yarn install --only=prod
COPY --from=development /usr/src/app/dist ./dist
CMD ["node", "dist/index.js"]
stages:
- build
- release
.aws_config:
before_script:
- apk add --no-cache curl jq python3 py3-pip
- pip install awscli --break-system-packages
- aws configure set aws_access_key_id $AWS_ACCESS_KEY_ID
- aws configure set aws_secret_access_key $AWS_SECRET_ACCESS_KEY
- aws configure set region $AWS_DEFAULT_REGION
- aws ecr-public get-login-password --region us-east-1
docker login --username AWS --password-stdin public.ecr.aws/$AWS_REGISTRY_NAME
variables:
IMAGE_NAME: lychie-back-repo
build:
stage: build
extends:
- .aws_config
script:
# イメージをビルドする
- docker build -t $IMAGE_NAME .
- docker tag $IMAGE_NAME:latest public.ecr.aws/$AWS_REGISTRY_NAME/$IMAGE_NAME:latest
- docker push public.ecr.aws/$AWS_REGISTRY_NAME/$IMAGE_NAME:latest
release:
image: ubuntu
stage: release
before_script:
# Pythonをインストール
- apt update
- apt install -y curl jq python3 python3-pip wget
- pip3 install awscli --break-system-packages
- aws configure set aws_access_key_id $AWS_ACCESS_KEY_ID
- aws configure set aws_secret_access_key $AWS_SECRET_ACCESS_KEY
- aws configure set region $AWS_DEFAULT_REGION
script:
# SessionManagementをインストール
- wget https://s3.amazonaws.com/ec2-downloads-windows
/SSMAgent/latest/debian_amd64/amazon-ssm-agent.deb
- dpkg -i amazon-ssm-agent.deb
- aws ssm send-command --document-name "AWS-RunShellScript" --document-version "1"
--targets '[{"Key":"InstanceIds","Values":["i-02aef90967cd313eb"]}]'
--parameters '{"commands":[
#ECRからイメージをプール
"docker pull $(docker ps -a |grep back | awk '"'"'{print $2}'"'"')",
#コンテナーをシャットダウンして、新しいイメージを適用する
"docker-compose down -v","docker-compose up -d"],
#タイムアウト
"workingDirectory":["/home/ec2-user"],"executionTimeout":["3600"]}'
--timeout-seconds 600 --max-concurrency "50" --max-errors "0"
--region xxxxxx --output text
# LOG
- echo $(aws ecr-public describe-images --repository-name xxxx
--region xxx | grep imageDigest | head -n 1 | awk '{print $2}') > DEL_IMG
- cat DEL_IMG
services:
lychie-back:
image: xxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/lychie:latest
env_file:
- ./.env # Specify the environment file
volumes:
- ./cert:/usr/src/app/cert
ports:
- "5432:5432"
restart: unless-stopped # Optional: restart policy
networks:
- lychie-network # Optional: specify a custom network
nginx:
build:
context: ./nginx
dockerfile: Dockerfile
ports:
- "80:80"
- "443:443"
networks:
- lychie-networ。
FROM alpine:latest
RUN apk add --no-cache nginx openrc
RUN rm /etc/nginx/http.d/default.conf
COPY default.conf /etc/nginx/http.d/default.conf #Configをコピーする
COPY ./ssl/certificate.crt /etc/nginx/ssl/certificate.crt #証明書をコピーする
COPY ./ssl/private.key /etc/nginx/ssl/private.key #キーをコピーする
RUN mkdir -p /run/nginx
EXPOSE 80 443
CMD ["nginx", "-g", "daemon off;"]
#HTTPSにリダイレクト
server {
listen 80 default_server;
server_name www.lychie.online;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
#証明書を読み込む
ssl_certificate /etc/nginx/ssl/certificate.crt;
ssl_certificate_key /etc/nginx/ssl/private.key;
server_name www.lychie.online;
#アプリにリクエストをリダイレクト
location / {
proxy_set_header Host $host;
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 $scheme;
proxy_pass http://lychie-back:8080;
}
}
~
2024
Dreamhacker
若い者向け留学体験共有Forum。
応募体験、勉強方法、大学評判等。
ベトナムの専門職業人のため、国内的なオンラインおよびオフラインコンミュウにティプラットフォームを建築しており、個人的および職業上の目標を達成することを支援し、メンバー間の長期的な信頼を育てることをもく目的としています。 現在、留学体験に共有することに専念しています。
開発言語 : JavaScriptに集中しているため、Node.jsとNext.jsを選びました。同じ言語を使用することで、開発時間を短縮することができています。
データベース (PostgreSQL) : 一番気に入って、機能豊富なRelationDatabaseデータベースを使うことをしました。 NoSQLを使ったら実装が簡単になるのに、誰がかNoSQLを一番学習法がSQLを学ぶことだとってた。
const postgresSingleton = () => {
return new pg.Pool({
ssl:
config.ENV === "production"
? {
ca: fs.readFileSync("./cert/rds-combined-ca-bundle.pem"),
}
: false,
});
};
#!/bin/bash
PASSWORD=""
export PGPASSWORD=$PASSWORD
schema="database/schema"
for file in $schema/*.sql
do
echo "executing $file..."
psql -h $HOST -p $PORT -U $USER -d $DATABASE -f $file
done
unset PGPASSWORD
#2ステップビルド
FROM node:20-alpine AS development
ARG NODE_ENV=development
ENV NODE_ENV=${NODE_ENV} #環境値
WORKDIR /usr/src/app
COPY package*.json ./
RUN yarn install
COPY . .
RUN yarn run build
FROM node:20-alpine as production
ARG NODE_ENV=production
ENV NODE_ENV=${NODE_ENV}
WORKDIR /usr/src/app
COPY package*.json ./
RUN yarn install --only=prod
COPY --from=development /usr/src/app/dist ./dist
CMD ["node", "dist/index.js"]
name: Deploy to Amazon ECS
on:
push:
branches:
- main ビルドブランチを定義する
env:
AWS_REGION: # set this to your preferred AWS region, e.g. us-west-1
ECR_REPOSITORY: # set this to your Amazon ECR repository name
CONTAINER_NAME: # set this to the name of the container in the
jobs:
deploy:
name: Deploy
runs-on: ubuntu-latest
environment: production
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Configure AWS credentials #AWSをアクセス証明
uses: aws-actions/configure-aws-credentials@
with:
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
aws-region: ${{ env.AWS_REGION }}
- name: Login to Amazon ECR
id: login-ecr
uses: aws-actions/amazon-ecr-login@
- name: Build, tag, and push image to Amazon ECR
id: build-image
env:
ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }}
IMAGE_TAG: ${{ github.sha }}
run: #ビルドして、ECRにプッシュする
docker build -t .dkr.ecr.ap-northeast-1.amazonaws.com/dreamhacker:latest .
docker push .dkr.ecr.ap-northeast-1.amazonaws.com/dreamhacker:latest
echo "image=$ECR_REGISTRY:latest" >> $GITHUB_OUTPUTname: Deploy to Amazon ECS
services:
dreamhacker-back:
image: xxxxxxx.dkr.ecr.ap-northeast-1.amazonaws.com/dreamhacker:latest
env_file:
- ./.env # Specify the environment file
volumes:
- ./cert:/usr/src/app/cert
ports:
- "5432:5432"
restart: unless-stopped # Optional: restart policy
networks:
- dreamhacker-network # Optional: specify a custom network
nginx:
build:
context: ./nginx
dockerfile: Dockerfile
ports:
- "80:80"
- "443:443"
networks:
- dreamhacker-networ。
FROM alpine:latest
RUN apk add --no-cache nginx openrc
RUN rm /etc/nginx/http.d/default.conf
COPY default.conf /etc/nginx/http.d/default.conf #Configをコピーする
COPY ./ssl/certificate.crt /etc/nginx/ssl/certificate.crt #証明書をコピーする
COPY ./ssl/private.key /etc/nginx/ssl/private.key #キーをコピーする
RUN mkdir -p /run/nginx
EXPOSE 80 443
CMD ["nginx", "-g", "daemon off;"]
#HTTPSにリダイレクト
server {
listen 80 default_server;
server_name www.dreamhacker.online;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
#証明書を読み込む
ssl_certificate /etc/nginx/ssl/certificate.crt;
ssl_certificate_key /etc/nginx/ssl/private.key;
server_name www.dreamhacker.online;
#アプリにリクエストをリダイレクト
location / {
proxy_set_header Host $host;
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 $scheme;
proxy_pass http://dreamhacker-back:8080;
}
}
~