Diesmal ** Docker </ font> **, ** CircleCI </ font> **, ** AWS < Ich habe die wachsende Beliebtheit von Infrastrukturtechnologien wie / font> ** von Grund auf gelernt und versucht, eine Webanwendung zu erstellen. Das hintere Ende ist ** Laravel </ font> ** und das vordere Ende ist ** Vue.js </ font> **.
In diesem Artikel die Punkte, dass ich Schwierigkeiten hatte, die App zu entwickeln, Ich möchte die Artikel und Lehrmaterialien vorstellen, auf die ich mich bei der Implementierung der einzelnen Funktionen bezogen habe.
Es ist eine SNS-Anwendung zum Thema Morgenaktivitäten.
Basierend auf diesem Konzept haben wir einen Dienst namens ** "Asa Kotsu" ** mit dem Wort "Morgenaktivität" entwickelt. Die URL ist hier ↓. Wenn Sie möchten, können Sie es gerne bewegen ^^
App-URL: https://pf.asakotsu.com/ (* Da die Smartphone-Unterstützung noch nicht abgeschlossen ist, wird empfohlen, auf einem PC zu surfen ^^;)
GitHub-URL: https://github.com/ngsw877/asakotsu
Top-Seite (Post-Liste und Ranking usw.)
Post Liste nach Tag
Post Details und Kommentarliste
Besprechungsliste vergrößern
Bildschirm mit Benutzerdetails
Beim frühen Aufstehen
Unendliche Schriftrolle
Grundsätzlich ist es ein SNS mit Posts, Kommentaren, Likes und Follow-Funktionen wie Twitter, Darüber hinaus handelt es sich um eine Anwendung mit den folgenden Funktionen.
Vorderes Ende
Vue.js 2.6.11
jQuery 3.4.1
HTML / CSS / Sass / MDBootstrap
__ Backend __
PHP 7.4.9
Laravel 6.18.36
PHPUnit 8.5.8
ZoomAPI (guzzlehttp/guzzle 7.0.1)
infrastruktur
CircleCi
Docker 19.03.12 / docker-compose 1.26.2
nginx 1.18
mysql 5.7.31 / PHPMyAdmin
AWS ( EC2, ALB, ACM, S3, RDS, CodeDeploy, SNS, Chatbot, CloudFormation, Route53, VPC, EIP, IAM )
Die serverseitige Logik ist in PHP / Laravel programmiert Das detaillierte Design des Frontends wurde mit Sass arrangiert, und als ich Bewegung hinzufügen wollte, implementierte ich es mit Vue.js und jQuery. Verwenden Sie Docker / Docker-Compose für die Entwicklungsumgebung Für die CI / CD-Pipeline haben wir einen automatisierten Test mit CircleCI erstellt Ich versuche, die automatische Bereitstellung mit CodeDeploy von AWS zu realisieren.
Ich verwende "Docker / Docker-Compose" für die Entwicklungsumgebung und verwende Container für die folgenden vier Zwecke.
Referenzlink:
[Erstellen einer Laravel + Vue-Ausführungsumgebung (LEMP-Umgebung) mit Docker, die niemals fehlschlägt ~ Teil 1 ~](https://qiita.com/shimotaroo/items/29f7878b01ee4b99b951#8docker-composeyml%E3%82%B3 % E3% 83% B3% E3% 83% 86% E3% 83% 8A% E3% 81% AE% E8% A8% AD% E5% AE% 9A% E3% 83% 95% E3% 82% A1% E3 % 82% A4% E3% 83% AB% E3% 82% 92% E4% BD% 9C% E6% 88% 90% E3% 81% 99% E3% 82% 8B)
Ich wollte mit ECS auf AWS in der Produktionsumgebung bereitstellen. Wegen hoher Schwierigkeit aufgegeben ... Vorläufig habe ich mich an die Erfahrung mit der Bereitstellung auf EC2 gewöhnt, und diesmal habe ich eine Umgebung auf EC2 erstellt.
Ich verwende ACM (AWS Certificate Manager), weil ich ein SSL-Zertifikat ausstellen und eine HTTPS-Konvertierung durchführen wollte.
Zusätzlich zu EC2 sind für die Verwendung von ACM auch "ALB (ELB)" und "CloudFront" erforderlich. Daher habe ich mich entschlossen, dieses Mal ALB einzuführen. Obwohl ALB verwendet wird, ~~ um Geld zu sparen ~~ Derzeit wird nicht erwartet, dass genügend Zugriff vorhanden ist, um die Last zu verteilen oder zu skalieren, sodass nur eine EC2-Instanz vorbereitet wird. Selbst wenn in der Adressleiste eine Sperrmarkierung vorhanden ist, werden die CSS- und JS-Dateien nicht gelesen oder das Routing wird nicht in https konvertiert, es sei denn, die Proxy-Einstellungen auf der Laravel-Seite sind festgelegt. Seien Sie also vorsichtig. ..
Referenzlink:
S3 wird für die folgenden zwei Zwecke vorbereitet.
Speichern Sie die mit CircleCI erstellte Quelle
Speichern Sie die von der Anwendung hochgeladenen Bilddaten auf EC2
In Bezug auf 2 gab es etwas Unerwartetes zu tun, z. B. das Festlegen der Bucket-Richtlinie von S3 und das Installieren des Pakets für S3 auf der Laravel-Seite.
Referenzlink:
Durch Verknüpfen von "CodeDeploy" mit "SNS" und "Chatbot" werden Benachrichtigungen zu Beginn und am Ende der automatischen Bereitstellung an das Slack-Konto gesendet. Sehr angenehm.
__ Benutzerregistrierung bezogen __
Neue Registrierung, Profilbearbeitungsfunktion
An- und Abmeldefunktionen
Einfache Anmeldefunktion (Gastbenutzer-Login)
__ Zoom API Integration __
Morgenaktivität Zoom-Meeting-Funktion (CRUD)
Neue Funktion zum Treffen, Auflisten, Bearbeiten und Löschen
__ Beurteilungsfunktion zum Erreichen eines frühen Aufstiegs __
Die Ziel-Weckzeit kann für jeden Benutzer festgelegt werden (von 4:00 bis 10:00 Uhr).
Wenn Sie vor der gewünschten Weckzeit posten können, erhöht sich der Leistungsnachweis für das frühe Aufwachen um einen Tag.
__ Funktion zum Ranking der frühen Weckleistung des Benutzers (jeden Monat) __
__ Unendliche Bildlauffunktion __ (jQuery / inview.js / ajax)
__ User Post Related (CRUD) __
__ Kommentarfunktion __
__ Tag-Funktion __ (Eingabe von Vue.js / Vue-Tags)
__ Wie Funktion __ (Vue.js / ajax)
__ Funktion folgen __ --Folgende / Follower-Liste (Seitennation)
__ Flash-Nachrichtenanzeigefunktion __ (jQuery / Toastr)
Flash-Nachrichten beim Posten, Bearbeiten, Löschen, Anmelden und Abmelden anzeigen
__ Bild-Upload-Funktion __ (AWS S3-Bucket)
__PHPUnit Test __
Tabellenname | Erläuterung |
---|---|
users | Registrierte Benutzerinformationen |
follows | folgenden/Follower-Benutzerinformationen |
achievement_days | Verwalten Sie das Datum, an dem der Benutzer früh aufgestanden ist und es als Verlauf erreicht hat |
meetings | Vom Benutzer erstellte Zoom-Besprechungsinformationen |
articles | Von Benutzern gepostete Informationen |
tags | Benutzerpost-Tag-Informationen |
article_tags | Zwischentabelle zwischen Artikel und Tags |
likes | Gefällt mir Informationen für Beiträge |
comments | Kommentarinformationen für Benutzerbeiträge |
Die wake_up_time
in der ** Benutzertabelle ** bedeutet die ** Ziel-Weckzeit ** des Benutzers.
Wenn der Benutzer früher als zu dieser Zeit posten kann, wird das frühe Aufwachen des Tages erreicht.
Darüber hinaus sollte beachtet werden
"Die Ziel-Weckzeit ist 07:00 Uhr, und ich habe um 1:00 Uhr um Mitternacht gepostet."
Und so weiter, Benutzer hat zu früh gepostet
Selbst in einigen Fällen ist es so eingestellt, dass es nicht frühzeitig erreicht wird.
Als Mechanismus wird der Wert von "range_of_success" in der ** Benutzertabelle ** verwendet.
das ist,
"Wie viele Stunden vor der gewünschten Weckzeit sollte angegeben werden, um ein frühes Aufwachen zu erreichen, ein ganzzahliger Wert, der den Bereich darstellt."
ist.
Der Standardwert ist beispielsweise "3", wenn die Ziel-Weckzeit 3 Stunden zuvor auf ** 07: 00 ** eingestellt ist
Wenn Sie zwischen ** 04:00 und 07: 00 ** posten können, stehen Sie früh auf.
Wenn Sie auf diese Weise ein frühes Aufwachen erreichen können, wird das Datum des Erfolgsdatums als Verlauf im "Datum" der Tabelle "Leistungstage" ** aufgezeichnet.
Beispiel) 2020-11-22
Die folgenden Funktionen werden unter Verwendung dieser Datumsdaten realisiert.
** ① Berechnen Sie die Anzahl der Tage, an denen Sie jeden Monat früh aufstehen müssen ** ** ② Ranking-Funktion unter Verwendung der Anzahl der Tage in ① **
Zuerst dachte ich darüber nach, früh aufzustehen ** weiter ** in der Rangliste der Anzahl der Tage, aber Unter dem Gesichtspunkt der Aufrechterhaltung der Benutzermotivation haben wir uns entschlossen, ** monatliche ** Tage des frühen Aufwachens ** zu erreichen.
Ich hatte mit Fehlern in jedem Prozess von der Entwicklung bis zur Bereitstellung zu kämpfen, aber w, Hier sind einige der denkwürdigsten Punkte.
Ich hatte beim Einrichten von config.yml viele Fehler. .. Insbesondere bei der Angabe von Befehlen und Pfaden ist es wichtig zu verstehen, wo die Wurzel des Pfads beginnt. Als Gegenmaßnahme, als der Test fehlschlug, versuchte ich, die Ursache zu beheben, indem ich mich SSH in den erstellten Container anmeldete und das Fehlerprotokoll überprüfte.
Referenzlink: Debuggen mit SSH
Wie oben erwähnt, [SSL-Zertifikat ausstellen](#### SSL-Zertifikat ausstellen) [In S3-Bucket hochladen](#### In S3-Bucket hochladen) Ich neigte dazu, mich auf Fehler um mich herum einzulassen. Auch dieses Mal habe ich mich für die Bereitstellung mit EC2 anstelle von ECS entschieden, aber nach der SSH-Anmeldung bei EC2 Es mussten viele Dateien installiert und konfiguriert werden, und die Arbeit um sie herum war schwierig. In Anbetracht dieses Prozesses wollte ich immer mehr mit ECS umgehen können ^^;
Anfangs hatte ich Schwierigkeiten mit den Beziehungen. Welche Tabelle ist welcher Tabelle zugeordnet und wie erhält man die zugehörigen Informationen? Ebenfalls,
Ich hatte zum Beispiel das Gefühl, dass der Unterschied zwischen den beiden auch ein wichtiger Punkt ist.
In Bezug auf den PHPUnit-Testcode fiel es mir schwer, Informationen zu sammeln, da ich keine Informationen finden konnte, die systematisch gelernt werden konnten.
Ich habe beschlossen, eine Funktion zum Erstellen und Bearbeiten von Zoom-Besprechungen über die App hinzuzufügen. Da ich noch nie zuvor eine externe API verwendet hatte, fiel es mir schwer, die grammatikalischen Aspekte und den Mechanismus der API-Kommunikation zu verstehen.
Für die Implementierung ist es ein PHP-HTTP-Client, der mit der Zoom-API in Laravel kommuniziert. Ich habe ** Guzzle ** installiert.
Referenzlink:
Registrieren Sie als Nächstes die App auf Zoom App Marketplace und lesen Sie das offizielle Dokument. Welche Seite sollte ich zu Beginn des Englischen lesen? Ich hatte es schwer, ohne es zu wissen. .. ^^;
Laravel führt Beispielcode für die Verarbeitung ein, der mit der Zoom-API kommuniziert. Während ich mich auf Artikel aus Übersee bezog, fand ich nach und nach die notwendigen Informationen aus den offiziellen Dokumenten.
Referenzlink:
Da ich diesmal eine App für die Laravel 6-Serie entwickelte, hatte ich Schwierigkeiten, da ich den Guzzle-Wrapper, der normalerweise für die Laravel 7-Serie verwendet werden kann, nicht verwenden konnte und den Code ein wenig umschreiben musste.
Grundsätzlich habe ich mit ** Udemy ** und ** Techpit ** gelernt. Diese beiden sind sehr leicht zu verstehen. Persönlich war ich der Meinung, dass es besser wäre, die Grundlagen bei Udemy zu lernen und dann mit Techpit als fortgeschrittener Version die Hände zu bewegen.
Docker / docker-compose
PHPUnit / CircleCI / AWS
AWS
Laravel
Laravel / Vue.js
Sass
Es gibt noch viele Probleme, aber ich möchte sie einzeln verbessern und auffrischen.
Es war ein langer Artikel, aber danke, dass Sie so weit gelesen haben! ^^