Appwrite 및 NextJS를 사용한 크리켓 득점 앱(계속)

여러분 👋, 이것은 appwrite-hackathon 브랜치에서 수행된 변경 사항을 다루는 , 주로 유지되고 해커톤을 위해 제출된 의 연속입니다.

끝났기 때문에 이 게시물은 의 일부가 아닙니다. main 브랜치에서 볼 수 있고 vercel 호스팅을 통해 미리보기를 사용할 수 있는 최근에 수행한 몇 가지 변경 사항을 공유해야겠다고 생각했습니다. 백엔드 Appwrite 서버가 켜져 있지 않은 경우 웹 앱이 제대로 작동하지 않을 수 있습니다. 설정을 위해 EC2를 사용했고 유휴 상태일 때 종료될 가능성이 있기 때문입니다.

자, 여기 몇 가지 백엔드, DB 구성 등을 보여주는 Appwrite의 몇 가지 스크린샷이 있습니다.

플랫폼 구성이 클라이언트 URL의 요청을 허용하는지 확인하십시오. 제 경우에는 다음과 같습니다.
이 플랫폼 항목에 대한 빠른 도움을 주셔서 감사합니다.

EC2 인스턴스의 탄력적 IP를 가리키는 하위 도메인에 대한 IPv4 A 레코드를 추가하여 사용자 지정 도메인으로 appwrite를 설정했습니다. 네임스페이스 변경 없이 도메인을 구입한 곳에서 DNS 구성을 수행할 수 있습니다. 도메인을 통해 Appwrite를 사용하고 있으므로 Appwrite 측에서 두 가지 추가 작업을 수행해야 합니다. 먼저 env 변수 _APP_DOMAIN_TARGET을 Appwrite를 사용하려는 도메인으로 설정한 다음 사용자 지정 도메인으로 이동해야 합니다. 섹션에 동일한 URL을 추가합니다.


그리고 .env 파일이 제대로 설정되면 docker-compose up 로 Appwrite를 다시 설치/설치할 수 있으므로 먼저 Appwrite 에서 제공한 최근 URL에서 docker-compose.yaml 및 .env를 모두 다운로드해야 합니다. 설치됨docker-compose .

$ cat .env | grep -i DOMAIN_TARGET
_APP_DOMAIN_TARGET=<domain-where-appwrite-would-run>


docker compose 파일은 많은 컨테이너를 생성해야 합니다 🔥.

$ docker container ls | grep appwrite | awk '{print $2}' | uniq                                                                                           
appwrite/appwrite:0.13.0
traefik:2.5
appwrite/appwrite:0.13.0
redis:6.0-alpine3.12
mariadb:10.7
appwrite/telegraf:1.2.0
appwrite/influxdb:1.0.0


위에서 본 것처럼 appwrite는 배후에서 mariadb도 사용합니다. 여기에서 0.13을 사용했지만 0.14은 이미 나왔습니다🆕. 하지만 원활한 업그레이드를 수행할 수 있는 방법을 확인하면서 업그레이드를 계획할 것입니다.

그 밖에 DB 필드를 보여주는 Appwrite의 일부 스크린샷입니다.

컬렉션은 다음과 같습니다.


그리고 모든 컬렉션은 문서 수준 권한으로 설정됩니다.


각 컬렉션의 속성과 인덱스는 다음과 같습니다.

플레이어:

    "attributes": [
        {
            "key": "username",
            "type": "string",
            "status": "available",
            "required": true,
            "array": false,
            "format": "email",
            "default": null
        },
        {
            "key": "players",
            "type": "string",
            "status": "available",
            "required": true,
            "array": true,
            "size": 255,
            "default": null
        }
    ]


성냥:

"attributes": [
        {
            "key": "matchName",
            "type": "string",
            "status": "available",
            "required": true,
            "array": false,
            "size": 255,
            "default": null
        },
        {
            "key": "matchNoOfPlayers",
            "type": "integer",
            "status": "available",
            "required": true,
            "array": false,
            "min": -9223372036854776000,
            "max": 9223372036854776000,
            "default": null
        },
        {
            "key": "matchNoOfOvers",
            "type": "integer",
            "status": "available",
            "required": true,
            "array": false,
            "min": -9223372036854776000,
            "max": 9223372036854776000,
            "default": null
        },
        {
            "key": "matchPlace",
            "type": "string",
            "status": "available",
            "required": true,
            "array": false,
            "size": 255,
            "default": null
        },
        {
            "key": "matchStatus",
            "type": "string",
            "status": "available",
            "required": true,
            "array": false,
            "size": 255,
            "default": null
        },
        {
            "key": "teamAName",
            "type": "string",
            "status": "available",
            "required": true,
            "array": false,
            "size": 255,
            "default": null
        },
        {
            "key": "teamAPlayers",
            "type": "string",
            "status": "available",
            "required": true,
            "array": true,
            "size": 255,
            "default": null
        },
        {
            "key": "teamBName",
            "type": "string",
            "status": "available",
            "required": true,
            "array": false,
            "size": 255,
            "default": null
        },
        {
            "key": "teamBPlayers",
            "type": "string",
            "status": "available",
            "required": true,
            "array": true,
            "size": 255,
            "default": null
        },
        {
            "key": "tossWinner",
            "type": "string",
            "status": "available",
            "required": true,
            "array": false,
            "size": 255,
            "default": null
        },
        {
            "key": "tossWinnerChoice",
            "type": "string",
            "status": "available",
            "required": true,
            "array": false,
            "size": 255,
            "default": null
        },
        {
            "key": "userID",
            "type": "string",
            "status": "available",
            "required": true,
            "array": false,
            "size": 255,
            "default": null
        },
        {
            "key": "winner",
            "type": "string",
            "status": "available",
            "required": false,
            "array": false,
            "size": 255,
            "default": null
        }
    ]


오버:

"attributes": [
        {
            "key": "balls",
            "type": "integer",
            "status": "available",
            "required": true,
            "array": false,
            "min": -9223372036854776000,
            "max": 9223372036854776000,
            "default": null
        },
        {
            "key": "bowler",
            "type": "string",
            "status": "available",
            "required": true,
            "array": false,
            "size": 255,
            "default": null
        },
        {
            "key": "matchID",
            "type": "string",
            "status": "available",
            "required": true,
            "array": false,
            "size": 255,
            "default": null
        },
        {
            "key": "innings",
            "type": "integer",
            "status": "available",
            "required": true,
            "array": false,
            "min": -9223372036854776000,
            "max": 9223372036854776000,
            "default": null
        },
        {
            "key": "over",
            "type": "integer",
            "status": "available",
            "required": true,
            "array": false,
            "min": -9223372036854776000,
            "max": 9223372036854776000,
            "default": null
        },
        {
            "key": "runs",
            "type": "integer",
            "status": "available",
            "required": true,
            "array": false,
            "min": -9223372036854776000,
            "max": 9223372036854776000,
            "default": null
        },
        {
            "key": "wickets",
            "type": "integer",
            "status": "available",
            "required": true,
            "array": false,
            "min": -9223372036854776000,
            "max": 9223372036854776000,
            "default": null
        }
    ],
    "indexes": [
        {
            "key": "matchID",
            "type": "key",
            "status": "available",
            "attributes": [
                "matchID"
            ],
            "orders": [
                "ASC"
            ]
        }
    ]


배팅스코어카드:

"attributes": [
        {
            "key": "balls",
            "type": "integer",
            "status": "available",
            "required": true,
            "array": false,
            "min": -9223372036854776000,
            "max": 9223372036854776000,
            "default": null
        },
        {
            "key": "batsman",
            "type": "string",
            "status": "available",
            "required": true,
            "array": false,
            "size": 255,
            "default": null
        },
        {
            "key": "batsmanNo",
            "type": "integer",
            "status": "available",
            "required": true,
            "array": false,
            "min": -9223372036854776000,
            "max": 9223372036854776000,
            "default": null
        },
        {
            "key": "innings",
            "type": "integer",
            "status": "available",
            "required": true,
            "array": false,
            "min": -9223372036854776000,
            "max": 9223372036854776000,
            "default": null
        },
        {
            "key": "matchID",
            "type": "string",
            "status": "available",
            "required": true,
            "array": false,
            "size": 255,
            "default": null
        },
        {
            "key": "position",
            "type": "string",
            "status": "available",
            "required": true,
            "array": false,
            "size": 255,
            "default": null
        },
        {
            "key": "runs",
            "type": "integer",
            "status": "available",
            "required": true,
            "array": false,
            "min": -9223372036854776000,
            "max": 9223372036854776000,
            "default": null
        },
        {
            "key": "out",
            "type": "boolean",
            "status": "available",
            "required": false,
            "array": false,
            "default": false
        }
    ],
    "indexes": [
        {
            "key": "matchID",
            "type": "key",
            "status": "available",
            "attributes": [
                "matchID"
            ],
            "orders": [
                "ASC"
            ]
        }
    ]


데이터베이스는 정확한 min max 값으로 더 잘 조정할 수 있습니다. 즉석에서 생성할 수 있는 firestore 또는 HarperDB 과 달리 속성을 먼저 정의해야 합니다. 하지만 이 접근 방식은 괜찮습니다. 제 생각에는 우리가 더 많은 통제권을 가지고 있고 안전하다고 생각합니다.

알겠습니다. try 을 지정하고 괜찮거나 논리 또는 UI에 대한 개선이 필요한지 알려주십시오. 자유롭게 수정하여 code 개선하십시오.


고맙습니다 !!! 🙂

좋은 웹페이지 즐겨찾기